Skip to content

A truck repair shop's whole job, from inspection to invoice, in one system

An Odoo Community and OCA system built to run a truck repair shop end to end, from inspections and e-signed estimates to parts, scheduling, a technician iPad app, and billing.

Auto & heavy-truck repairOdoo · NixOS
Industry

Auto & heavy-truck repair

Platform

Odoo 18 Community (OCB) · NixOS

Stack

Odoo 18 Community (OCB), OCA modules, Python, PostgreSQL, Vue, Nix, odoo-nix, NHTSA vPIC, and 3 more

Status
Built · deploying

The challenge

A repair shop runs on handoffs. A technician inspects the truck and finds more than the customer reported. The front office prices the work, waits for a yes, orders parts, and books a bay. The office then bills what the customer approved. When each step lives in a different place, details slip through the gaps and good people spend their day re-keying.

This shop services both passenger vehicles and Class 6–8 heavy trucks. Before Odoo, schedules were tracked on paper, and parts availability and appointments were coordinated by hand throughout the shop. The result was fragmentation, overwhelm, inefficiency, and downtime. The shop wanted one system for intake, inspections, estimates, parts, scheduling, technician time, and accounting, and a way off QuickBooks without per-seat licensing.

Odoo Community was the right foundation, but its repair app doesn't cover the whole job out of the box. A repair order can't invoice on its own, doesn't know what a vehicle is, and has a single scheduled date with no model of technician capacity. The work was closing those gaps without forking Odoo.

What we built

The repair order anchors every job:

Approval on the customer's phone

Findings become priced lines through canned service jobs. Customers add what they want, sign, and pay a deposit if the shop asks for one.

Openings from real schedules

Slots come from every qualified technician's shift, time off, and calendar at once, and double-booking is blocked.

An iPad app for the bay

Each technician sees their jobs, runs a timer, scans parts with the camera, and records inspections where the work happens.

Intake

The service writer finds the vehicle by plate or VIN, records the odometer and the customer's concern in their own words, and books an appointment.

Digital vehicle inspection

Technicians grade each checklist item by severity and record conditions, measurements, and photos; out-of-spec values flag themselves. One click emails the customer a branded report with a portal link to the photos.

Estimate from findings

A wizard prices each finding through the shop's canned service jobs. Must-do items become firm lines; the rest become optional services.

Customer approval

On the portal, the customer adds the jobs they want, watches the total update, signs, and pays a deposit if the shop asks for one. Approved jobs land on the repair order as parts and labor, flagged so nothing bills twice, and the order records what was approved and declined.

Parts

Confirming a repair reserves stocked parts and raises purchase orders for the rest. Vendor documents that arrive by email are imported automatically, and an AI matcher suggests which repair order an incoming purchase order belongs to, for one-click confirmation.

Scheduling

Openings are drawn from every qualified technician's shift, time off, and calendar at once. Taking a slot assigns whoever is free. Move the appointment, the job, or the date, and the other two follow.

Technician time and the iPad app

Technicians run a timer on the job, feeding estimated-versus-actual reporting while the customer pays the flat rate they approved. An iPad-first app shows each technician their jobs, the timer, parts with camera barcode scanning, and inspections.

Vehicles

A catalog of 2,387 models across 87 makes, including Class 6–8 trucks, plus a Decode VIN button backed by NHTSA's public VIN service.

Accounting

A US GAAP chart of accounts, automated FIFO inventory valuation, and a rehearsed QuickBooks cutover plan for accounts, customers, vendors, active products, and open receivables and payables, gated on a trial-balance match.

Results

Built · deploying

The system is built, tested, and ready for deployment at the shop. It gives the shop one record per job, from the first call to the paid invoice, and each vehicle's history stays with it for every future visit. Estimates require a signature automatically, so "no work without a signed estimate" is how the system works, not a rule to remember. Declined recommendations are on record. Parts ordering starts itself, and an availability signal tells the office when a truck can go in the bay.

  • Every job follows one path in one system, from repair order and inspection through estimate, signed approval, parts, technician time, and invoice
  • Customers see inspection photos, choose the recommended jobs they want on the portal, and sign online
  • Approved jobs put their parts and labor on the repair order automatically, with a recorded trail of declined work
  • Parts the shop doesn't stock turn into purchase orders the moment a job is confirmed
  • Appointment openings come from every technician's real schedule, and the system blocks double-booking
  • Built on Odoo Community and OCA modules, with no per-seat license and the whole install declared in code

Technicians log time where the work happens, and owners can compare actual hours with the hours they sold. Because it's Odoo Community and OCA, the shop owns all of it: no per-user license fees, and any qualified Odoo partner can support it.

Under the hood

  • Odoo 18 Community (OCB)
  • OCA modules
  • Python
  • PostgreSQL
  • Vue
  • Nix
  • odoo-nix
  • NHTSA vPIC
  • Twilio
  • Cloudflare Email
  • QuickBooks (migration source)

Platform

Odoo 18 Community (OCB) with roughly 180 core and OCA modules listed in one file and pinned as git submodules, including OCA repair, fleet, resource_booking, queue_job, l10n_us_gaap, MIS Builder, EDI, and the shopfloor app framework.

Declarative environment

odoo-nix builds the Python environment, runs PostgreSQL and Odoo in development, and applies module migrations at deploy time.

Small, tested custom modules, one concern each (vehicles, inspections, estimates, scheduling, VIN decode, the technician app), with tests run by Odoo's own test runner.

Notable engineering

Dragging an appointment changes the calendar event, not the booking, so a targeted override keeps the repair order in sync. OCA's capacity checks run at every level, so double-booking is impossible rather than discouraged.

Demo shop

A demo module seeds a full shop with 18 repair orders across every stage, so we can show the whole flow on a fresh database.

Open source it's built on

All open-source projects
NixOS

odoo-nix

Reproducible Nix infrastructure for Odoo Community (OCB) and OCA projects, from scaffolding and development to containers and NixOS.

Odoo

Odoo Email and Messaging

Odoo 18 modules that send and receive email through Cloudflare and run two-way Twilio SMS and MMS conversations inside Discuss.

Odoo

Odoo Document Import

Odoo 18 modules that turn vendor emails, PDFs, and printed documents into Odoo records, with templates, structured extraction, previews, and routing.

Odoo

Odoo UI and Shop Floor

Odoo 18 modules for a Carbon-styled backend, a live timesheet timer in the navbar, and camera scanning and social sign-in for the OCA Shopfloor app.

“”

Have a challenge like this one?

Tell us how your work flows today and where it hurts. We'll tell you honestly whether ERPNext, Odoo, or something custom fits, and what a first phase could look like.