Audience: GC staff — office / PM. This is the operator's playbook for taking one
Job from won to closed. It follows the Job through its whole life: set it up,
plan the money and the schedule, run it from the field, control cost as it spends,
bill the Client, and close it out cleanly.
Each step lists its required setup — the thing that has to be in place first, or the
step silently does nothing. Skip those and you get the classic "half-built Job" that
nobody can invoice or cost.
House terms: the unit of work is a Job (never "project"); the person you build
for is a Client (never "customer"). A Sub is field labor; a Vendor supplies
materials.
Most of the work happens inside a Job's Command Center —
/portal/jobs/{job}?view=command — organised into folders: Overview, Schedule, Tasks,
Billing, Cost Center, Purchase Orders, Labour, Permits, People, and more. Open a Job from
the Portfolio at /portal/jobs.
These are org-level, not per-Job — do them once and every Job inherits them.
/portal/cost-codes and hit SeedIf the work came through the pipeline, the Job may already exist — don't make a second
one. An accepted proposal auto-creates the Job; a won Lead converts into one.
/portal/jobs) for the Client name. If a draft or JobRequired setup: a Client must be linked. Express-lane (photo/plan) Jobs start as
drafts with no Client and auto-delete after 7 days — click Save to Jobs to
promote, and attach the Client, or nothing downstream (invoices, portal access) works.
Confirm before moving on: the Job has a name, an address, and a Client.
The budget is the plan you'll measure every dollar against, coded so it rolls up.
Required setup: cost codes must be seeded (see one-time setup) and an estimate must
exist before Seed from estimate does anything. Re-seeding appends — don't click it
twice or you'll double your budget.
⚠️ Honest caveat. For a proposal-originated Job the seeded budget = the as-sold
cost basis, so planned margin out of the box ≈ your proposal markup. Real cost truth
arrives as bills and labor land. See Job Costing.
Open the Schedule folder — a per-Job Gantt.
/portal/schedule) shows this Job alongside allRequired setup: dates matter downstream. Payment draws release when a dated task
or phase completes (Step 8), and the cashflow forecast projects off schedule dates — an
undated schedule means draws never trigger and the money calendar is blind.
The schedule mirrors to OpenProject in the background if it's wired, but Job and
schedule creation never block on it.
Two different things live here — don't confuse them:
/portal/tasks.To assign crew:
Required setup: Subs must exist in your directory to assign and notify them. A Sub with
no email/phone on file can be assigned but won't get the notification.
Daily logs are the field-ops ritual — the record of what happened on site each day. They
are captured in the field app, not the office portal.
/field/live) showsRequired setup: field users need the field app and a login scoped to your org. Photos
attach to the Job's document store automatically.
Daily-log discipline is the wedge of the whole system — a Job with a gap in its logs has
a gap in its story when a dispute, a delay claim, or a warranty question comes up later.
A PO is cost you've committed to a Vendor or Sub but haven't been billed for yet. It
counts as committed cost in the numbers. POs live on the Purchase Orders folder.
The lifecycle: draft → released → sub-approved → received → billed → closed.
Required setup: the procurement feature must be enabled for your org (it's
entitlement-gated). E-signature needs Documenso configured; without it, use the guarded
manual-approval path. Put a cost code on every PO or its commitment lands in "(Uncoded)".
A Bill is an actual cost — a supplier or Sub invoice. Bills flow through the Cost
Inbox (/portal/cost-inbox).
Required setup — critical: only approved and paid bills count as actual cost.
Bills sitting in the inbox are invisible to costing — an inbox backlog understates your
real spend and inflates projected margin. Clear the inbox regularly.
A change order (CO) is scope change that moves both sides — added cost (your budget/PO
side) and an added Client price (the contract/billing side), plus schedule impact.
Create COs on the Billing or Purchase Orders folder.
Required setup: a draft/pending CO does nothing to the numbers — costing and
schedule move only when the CO is approved. Bill for real change work through a CO, not
by quietly editing the estimate, or the paper trail and the Client's approval are missing.
Billing closes the loop against the schedule. Three ways to raise an invoice:
Then:
Required setup: for draw-based billing you need a payment schedule with draws bound
to dated schedule items (Step 3). Online payment needs Stripe; without it the invoice
still shows on the portal, just with no Pay button. Set the Client's Billing contact so
invoices reach the right inbox.
Watch the money the whole way — don't wait for the final invoice to find out you faded.
/portal/jobs/{job}/costing. One row per cost code: original/portal/job-costing. Every Job ranked worst-fade first, so/portal/reports/wip. % complete, earned revenue, over/under-billing/portal/jobs/{job}/evm. CPI/SPI and forecast final cost, fromRequired setup: the numbers are only as honest as the inputs — cost codes on every
row (Steps 2, 6, 7), approved bills (Step 7), and change work run through COs (Step 8). A
Forecast adjustment lets you nudge a code's projected cost when you know an overrun is
coming but no bill/CO has landed yet.
Closing is a discipline, not a button — it's finishing the open threads so the Job
can't come back to haunt you. Work the checklist:
/portal/jobs/{job}/pay-app), collect payment, and release holdback when its lien periodRequired setup: holdback release and pay-app math need the holdback % and
substantial-completion date set. A Job with an inbox backlog or an unapproved CO will
show wrong final margin — reconcile first.
| Step | Where | Required first |
|---|---|---|
| 1 · Create/confirm Job | /portal/jobs |
Client linked (promote drafts) |
| 2 · Cost codes + budget | Cost Center | Codes seeded + Estimate exists |
| 3 · Schedule | Schedule folder | Dated items (drives draws + cashflow) |
| 4 · Tasks + crew | Tasks / Labour | Subs in directory |
| 5 · Daily logs | Field app | Field login |
| 6 · Purchase orders | Purchase Orders | Procurement enabled + cost code |
| 7 · Bills | /portal/cost-inbox |
Approve them (inbox ≠ cost) |
| 8 · Change orders | Billing / PO | Must be approved to count |
| 9 · Invoice Client | Billing | Payment schedule + Billing contact |
| 10 · Cost vs budget | …/costing, /job-costing |
Codes + approved actuals |
| 11 · Close out | Command Center + WIP | Holdback % + completion date |
Related: Start a new Job · Jobs Command Center ·
Job Costing & the Financial Loop