Labour time and expenses

One data layer for who owns each stage, the hours or units logged against it, and the money spent on it — written by every portal and read by the office.

What it is

Three org-scoped concerns behind one library: project_stage_assignments (which labour source owns each stage), labor_time_entries (hours, units or crew-days per stage) and labor_expenses (card and reimbursable spend per stage). The crew portal, the in-app field view and the subcontractor portal all write through it; the cockpit and the P&L read it.

Also called: timesheets · job costing hours · log expenses to a job · labour tracking

See it
Labour time and expenses
🔒ridgelinepostframe.com/project/labour725
30×40 Garage
Framing · on schedule
The Labor & Costs section of a project: stage-to-crew assignment rows, the time/expense tabs, and the rollup figures. Sample data — no customer information appears here.
How it works
  1. 1Stages are assigned to a crew, upserted by project+task.
  2. 2Portals submit time and expenses with status 'submitted'.
  3. 3A manager approves or rejects in the approvals inbox.
  4. 4rollup() totals hours, units, all expenses and approved expenses for a project.
  5. 5The same rows feed the per-project P&L and the crew payout.
Why we built it

Hours arrived on paper and expenses arrived as a shoebox of receipts, and neither reached the job's costs until somebody typed them in weeks later — by which point the job was finished and the margin was whatever it turned out to be. Field workers, crew leads and subcontractors all write into one set of records, and the office reads those same records for the job's labour costs. There is no re-keying step between the field and the P&L because there is no second copy.

The problem
  • Time and spend captured in disconnected places.
  • No linkage between a cost and the stage it was incurred on.
  • Field submissions that never become office data.
Sound familiar?
What you get
Every hour and dollar carries a project and a stage.
One set of rows behind approvals, P&L and crew payouts.
Any new field surface can write through the same layer.
What's inside
Which crew owns which stage
Each stage of a job is assigned to a labour source, which decides whose portal shows the work and whose rate prices it.
Field worker logs their own time
An in-app field view where a signed-in worker picks a stage their crew is assigned to and logs hours, units or an expense — with identity taken from the session, never the client.
Approvals inbox
One manager screen holding every submitted timesheet and expense from every portal, where approving or rejecting flips the same rows the P&L rolls up.
Job expenses with receipts
Spend logged against a project and stage with a category, vendor, company-or-reimbursable card type and an uploaded receipt.
Labor & Costs on the project
The office-side panel inside a project for assigning stages to crews, logging hours or units and expenses, approving submissions and reading the rollup.
Job P&L — estimate versus actual
Quoted price and estimated costs from the estimate against actual labour, approved expenses and supplier material orders, with the margin computed.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →