02Operations platform
Contractor OS
lead-to-ledger operations platform for contractors
The CRM, the estimate, the job cost and the books as one system, so March holds no surprises.
- Status
- Live demo
- Period
- 2026
- Relationship
- In-house venture
- Site
- Private
- Available as
- Build for you
The pipeline
- 01 LeadKanban pipeline captures and qualifies work
- 02 EstimatePriced estimate, e-signature recorded on acceptance
- 03 ScheduleGantt plan and crew timesheets feed cost
- 04 CostPurchase orders, bills and expenses hit the job
- 05 BillChange orders and invoices raised from the job
- 06 PostEvery financial document posts a balanced journal entry
- 45tables in the domain model
- 100%of financial documents post a balanced entry
- 0floating-point money values
- 7organisation roles in the schema
The problem
General contractors run their money across four tools that disagree: a CRM for leads, a spreadsheet for estimates, a job folder for costs, and an accountant who finds out in March. We built the version where those four are one schema, and every financial document posts a balanced journal entry to a real general ledger.
What we built
- 01
Modelled the whole operation — leads, estimates, jobs, change orders, purchase orders, bills, expenses, timesheets, invoices — as one schema where every financial document posts a balanced journal entry to a real general ledger.
- 02
Kept money out of floating point end to end — numeric(14,2) in Postgres, a decimal string in JavaScript, and every calculation done in integer cents via BigInt, with quantity and percentage multipliers carried at six decimals in memory so job costing and gross-margin figures land on one rounding step instead of drifting a cent at a time.
- 03
Defined seven organisation roles — owner, admin, project manager, estimator, accountant, field and viewer — as a first-class enum in the schema rather than a string on the user record.
- 04
Layered the operational surface on top — Kanban lead pipeline, Gantt schedules, crew timesheets feeding job cost, change orders, e-signature records.
- 05
Made the demo dataset deterministic, so the same figures come out byte-identical on the embedded WebAssembly Postgres used locally and the managed Postgres in production — same revenue, same margin, balance sheet out by exactly 0.00 on both.
Stack
- Next.js
- React 19
- TypeScript
- Drizzle ORM
- PostgreSQL
- PGlite
- Tailwind
- Railway
Ideal for
General contractors and trades running four disagreeing tools who want job-level gross margin they can trust to the cent.