Inflows attributed to this project, milestone link status, and the live AP/AR ledger from Brex.
Project timeline — milestones, two-way synced with the Schedule page
⚠️ priced item(s) couldn't be assigned to a sub. of scope is in the project total but not in any contract's addendum.
These items won't render into any sub's addendum until assigned. You can still generate contracts — the sub just won't see this scope on their PDF.
Project attachments
Construction drawings, surveys, finish schedules, specs.
These are linked from every sub-contract on this project (incorporated by reference) and viewable by anyone with the link.
After uploading or removing, regenerate any draft sub-contracts to refresh the contract text.
Scope routing
Who performs scope that another trade prices. Moves the cost and the contract scope together. Saved forecasts keep the routing they were priced with.
Cost forecast snapshots
Active version drives the rollup. History is informational.
Subcontractor agreements
Generate, track, and send contracts to subs for this project.
Add project attachment from Drive
Paste a Drive share link. We'll set the file to anyone-with-link can view so subs can open it from their contract without signing in.
In Drive: right-click the file → Get link → Copy link. Folder links not supported.
Field Set auto-populates {{cd_set_name}} + {{cd_set_date}} on every sub-contract for this project.
All types appear in the {{ancillary_documents}} reference list.
Optional. If blank, the upload date is used as a fallback.
Sort by:
Color by:
Contract signed
Design
Permitting
RTI
RTI (preliminary)
Mobilization
Construction (actual)
6-mo target window
Overdue (past 6-mo target)
Contract target end (10mo+)
Final passed
Punchlist
Warranty
Phase complete, dates not recorded
0 pins · auto-refresh 60s
Time machine — hover to preview pins on a date, click to pin it
⚠ 0 not on map
Address couldn't be geocoded. Re-spell or try again.
Tier reflects today's active phase. Yellow = 1-30d over baseline · Red = 30-60d · Stalled = 60d+. Click any chip to filter.
Phase baselines (admin)
A project hitting each baseline finishes on time. Total of all 5 baselines should fit under the 10mo contract target.
Payment milestone cadence (admin)
Days between each payment milestone, measured from construction start. Each is billed when its inspection passes, so these set the ahead/behind pace. The 5 should sum to within the Construction phase baseline.
Pre-construction (permit) cadence (admin)
Target days between each permit milestone along contract → construction start. Drives the projected ("~proj") dates on the Permits page. The 5 should sum to within the pre-construction baseline (presubmission + permitting + mobilization).
Key ▾
StageNeedIn progressCompletedN/A
FeesPendingIssuedPaid
Docs✓Attached — opens Drive✗Missing — click to attach
FlagsBehind / priorityMManual estimate (set by you)projAuto projection (cadence)
Pre-construction milestone cadence (admin)
Target weeks between each permit milestone (contract → construction start). These drive the projected estimate dates shown in empty milestone cells above.
How to read this page
What you're looking at
Each row is a project. Rows are grouped by stage: Under construction, Pre-construction, Leads, and a collapsed Permit Issued group at the bottom. Projects with an active follow-on permit pull up into a Supplemental Permits group.
The dot columns read left → right through the permit pipeline, split into phases by the faint gray vertical dividers: Pre-submission (Soils, Survey, Title, Arch, Eng) → Review (Planning, DWP, DBS, Fees, Client Update, Corrections) → Closeout (UA, Field set, Clearances, Resub, RTI) → Pre-construction (Precon, Verify, Issued). The date columns (Contract, Permit submitted, Corrections, Resub, RTI, Construction start) carry the real dates.
Dot colors
Need In progress Completed N/A not set
Planning / DWP use a review cycle: Submitted · PC Issued · Approved. Fees: Pending · Issued · Paid.
Hover any dot to see its label and current status.
Auto-flags & dependencies
A blank dot turns red Need on its own as soon as the step before it is done, so the next action is always visible. It never overwrites a status you set, and it clears the moment you pick any status. Hover an auto-flagged dot to see why it lit up.
Contract signed → Arch
Arch complete → Eng
Permit submitted → DBS
Corrections complete → UA, Field set, Clearances
RTI complete → Precon, Verify, Issued
3 weeks after permit submitted → Client Update
Auto-flags don't show on completed / in-warranty projects. The three closeout dots (Precon, Verify, Issued) keep flagging into early construction; the earlier dots stop once a project starts construction.
Indicators under a dot
✓ green = document attached (opens Drive). ✗ red = step done but no document yet (click to attach). Used on Soils, Survey, Field set, and Permit issued (stamped plans).
red ring = behind / priority (an overdue supplemental, or DWP needs powerline verification).
Dates & estimates
Empty date cells show an Est. line with a proj badge: a date auto-projected from the cadence (admin panel above) so you can see where a milestone is heading before it happens. Type into the Est. line to set your own estimate; the badge changes to M (manual). Clear it to fall back to the auto proj. Enter the real date in the cell above once it's known.
Priority list (top) & editing
The list at the top is your daily worklist: Overdue supplementals, Behind (past a cadence deadline), Due within 7 days, Needed / in progress (every red or amber dot, including auto-flags), Verify DWP, Missing documents, and Address # needed (the ADU's assigned address number, which turns red once RTI is set until you enter it). Click any item to jump to that project.
To work the board: click a dot to set its status, click a date cell to enter a date, and use + Add in the Supplemental column to log a follow-on permit. The Stage column shows the most recent milestone reached plus days left or over vs the cadence target.
How to read this table
What an AHJ is here
The Authority Having Jurisdiction is whoever reviews the permit. It is derived from the project address, not typed in: City of LA neighborhoods (Woodland Hills, Northridge, Westchester, Sherman Oaks…) all roll up to Los Angeles (LADBS), and unincorporated pockets like Altadena roll up to LA County. Click Set AHJ on any project row to override it; an override wins permanently.
Cycle time
Submitted → RTI is calendar days from permit_submitted_date to rti_date, over the projects that have reached RTI. That population is the n next to it, and it is small — read n before you read the average.
In review counts projects submitted but not yet RTI, with how long they have been waiting. Today that is where most of the signal is.
Permit fees — two sources, side by side
AR/AP is gross COGS - Permits & Fees from the ledger, from the same cost lines the project page shows (Brex, ad-hoc reimbursables, manual entries). Gross — what the jurisdiction charged, not what the customer was billed after the permit allowance.
sheet is the hand-kept Permit Fee Index tab of the Pricing & Pre-Con Database. It is reference, not truth: the ledger decides money. But it covers projects the ledger never got, and it is the only place the fee is broken down — hover a sheet figure for Fire / Planning / BOE / Plan check / Impact / School / Grading / Permit.
The two are never added together. Where both exist and disagree the row shows the variance; that is a flag to look at, not something the page reconciles for you.
Why the two figures differ, and it is not a bookkeeping gap. The sheet records what the jurisdiction charged. AR/AP holds what Buildoly paid. On 37 of 61 projects the contract sets the permit allowance to none, so the owner pays the city directly and that bill correctly never touches our ledger. Where Buildoly does cover the fees in full, coverage is 7 of 7. So the sheet is the right source for “what does a permit cost here” and AR/AP is the right source for “what did we spend” — they answer different questions and are never added together.
Which one the Permit fee column shows, and why. It shows the sheet figure when we have one. Measured against real data: across the 26 finished permits that appear in both sources, AR/AP holds $41,564 where the sheet records $279,370 — the ledger captures about 15% of what the jurisdictions actually charged, and six projects show $0 booked despite paying $6.8k–$15.3k. Leading with AR/AP printed “$283” as the cost of an LADBS permit. That is not a statement that the sheet outranks the ledger for money — it does not, and the financials use the ledger — but this column answers “what does a permit cost in this city”, and a 15%-complete number is the wrong answer to that. The Booked in AR/AP tile shows the accounting figure and the capture rate.
Only finished permits inform an average. Fees are billed in stages — plan check up front, then issuance, impact, school and grading at the counter when the permit is pulled. A permit still in review has paid a subtotal, so it is marked so far and left out of every average, median and range. It still counts in Fees total, which is cash out, and its share shows as “still in review” underneath. A project already in construction counts as finished even with no RTI date typed in — you cannot break ground without a pulled permit.
Blanks are the point
Every project is listed, including ones with no submission date and no fees booked. An AHJ can show n 0 on cycle time and still have projects in it.
Data gaps vs not-yet
Most blanks are normal: a lead or a freshly signed job has not submitted anything. The Gaps column counts only the blanks that should not exist — a project already in construction or later with no permit date, or no permit fee in AR/AP. You cannot build without a permit, so those are un-entered records, not un-done work. A pre-construction job whose contract is over 90 days old with nothing submitted counts too.
Tick Data gaps only to work that list. In an expanded group those rows read MISSING instead of a quiet dash.
Unit, and sorting
Model, sqft and beds/baths come from the project's model code (M2, M2C, M3+…) resolved against the model catalog; a custom build reads its own scope. Nothing is inferred — a project with no model set shows no model, and the size filters have an Unknown option so you can pull exactly those up.
Click any column header to sort the jurisdictions by it; click again to flip. Blanks always sort last, in both directions.
All milestone + ad-hoc payments across every project. Filter by status to triage. Schedule Payment buttons here behave the same as on the per-project tab.
Customer payments: requested, in process, or recently paid. Includes deposits, primary milestones, change orders (CO), and reimbursables (RE). Use the status filter for landed payments.
Cost that sits outside the contracted milestone plan: ad-hoc payments, change orders, work orders, and warranty work.
Milestones on an original contract are already carried in the project budget, so they never appear here.
Target: under 1% of annual project cost.
Legal scope-of-work text for every non-base-price line item the calculator can emit. Each row maps a pricing-engine line to the bullet that gets inserted into the trade exhibit when that item is on a contract. {{var}} placeholders (e.g. {{ft}}, {{qty}}) are filled in by the calculator at import time.
Admins can manage user accounts and roles. Deactivating or changing a password signs the user out everywhere.