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
- 1Stages are assigned to a crew, upserted by project+task.
- 2Portals submit time and expenses with status 'submitted'.
- 3A manager approves or rejects in the approvals inbox.
- 4rollup() totals hours, units, all expenses and approved expenses for a project.
- 5The same rows feed the per-project P&L and the crew payout.
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.
- 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.
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 →