Skip to content
AspirecoStart
All systems

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

  1. 01 LeadKanban pipeline captures and qualifies work
  2. 02 EstimatePriced estimate, e-signature recorded on acceptance
  3. 03 ScheduleGantt plan and crew timesheets feed cost
  4. 04 CostPurchase orders, bills and expenses hit the job
  5. 05 BillChange orders and invoices raised from the job
  6. 06 PostEvery financial document posts a balanced journal entry
  • 45
    tables in the domain model
  • 100%
    of financial documents post a balanced entry
  • 0
    floating-point money values
  • 7
    organisation 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

  1. 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.

  2. 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.

  3. 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.

  4. 04

    Layered the operational surface on top — Kanban lead pipeline, Gantt schedules, crew timesheets feeding job cost, change orders, e-signature records.

  5. 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.

Disciplines involved

Next system

Room Visualizer

on-device room visualiser with embeddable catalogue SDK

Scope a build like this