{{ company }}
⌘K
🔔{{ notif.countLabel }}
💬
MS
{{ g.label }}
{{ r.label }}{{ r.meta }}
Nothing matches that search.
Create
{{ m.icon }}{{ m.label }}
Needs your attention · {{ notif.count }}
{{ n.icon }} {{ n.text }}{{ n.meta }}
Nothing needs your attention.
Mary Sanders
Project Manager · {{ company }}
{{ m.icon }}{{ m.label }}
Generate for {{ reportMenu.project }}
{{ r.label }}{{ r.src }}
Print / Save as PDF
{{ toast }}
{{ cmd.greeting }}
Operating
Executive
My Projects ▾
This Week ▾
Needs You
{{ n.icon }} {{ n.text }}
My Projects
{{ c.name }}
{{ c.job }}
{{ c.hlabel }} {{ c.asSold }} → {{ c.cur }} {{ c.delta }}
{{ c.compl }}%
Margin Watch
{{ w.name }} {{ w.delta }}
— all others on or above as-sold —
Today · Field
{{ s.time }} {{ s.text }}
My To-Do
Add
{{ t.mark }} {{ t.label }} {{ t.projectName }}
{{ k.label }}
{{ k.value }}
{{ k.sub }}{{ k.delta }}
Plan vs Actual · Billings
FY25 ▾
{{ m.m }}
ActualGoal
AR Aging
{{ a.b }}{{ a.v }}
AP Aging
{{ a.b }}{{ a.v }}
Pipeline · Weighted
{{ exec.pipe.proj }}
Projected Sales
{{ exec.pipe.dgm }}
Discounted GM
Top Jobs by GM
{{ t.name }} {{ t.gm }} {{ t.pct }}
{{ projTitle }}
Active ▾
PM ▾
Super ▾
Compact
Job #
Project
Stage
PM
Contract
GM
GM%
Health
{{ r.job }}
{{ r.name }}
{{ r.stage }}
{{ r.pm }}
{{ r.contract }}
{{ r.gm }}
{{ r.pct }}
‹ Projects {{ ws.header.name }} Job {{ ws.header.job }} {{ ws.header.stage }}
{{ ws.header.name }}
Job {{ ws.header.job }} {{ ws.header.stage }}
Client: {{ ws.header.client }}  ·  Super: {{ ws.header.super }}  ·  PM: {{ ws.header.pm }}  ·  Start {{ ws.header.start }}  ·  60-day target
{{ st.mark }} {{ st.label }}
As-Sold GM
{{ ws.header.asSoldPct }} {{ ws.header.asSoldGm }}
Current GM
{{ ws.header.curPct }} {{ ws.header.curGm }}
Δ GM
● {{ ws.header.deltaPct }}
Contract
{{ ws.header.contract }}
Billed
{{ ws.header.billed }}
% Cmplt
{{ ws.header.compl }}
Goals {{ g.label }}
{{ t.label }}
Key Contacts
{{ c.initials }}
{{ c.name }}
{{ c.role }}
5 Project Goals
{{ g.label }}
{{ g.note }}
Recent Activity
{{ a.when }}{{ a.text }}
{{ g.group }}
{{ it.0 }} {{ it.1 }}
Project-wide parameters. Square footage drives every $/SF figure across the estimate and reports.
Audit Log · every change, who & when
No recorded activity for this project yet.
{{ r.init }}
{{ r.who }} {{ r.action }}
{{ r.detail }}
{{ r.when }}
Initial Contract
{{ ws.sov.initial }}
Approved COs
{{ ws.sov.cos }}
Adjusted Contract Value
{{ ws.sov.adjusted }}
Original Schedule of Values · Cost-Code Spine
Division
Scheduled Value
% of Total
{{ r.n }}{{ r.name }}
{{ r.amount }}
{{ r.pct }}
Adjusted Contract Value
{{ ws.sov.adjusted }}
100.0%
Detailed Schedule of Values is seeded for SKY Goodlettsville — Site Plus Shell in this wireframe. Open that project to explore the live Cost-Code Spine.
Budget Detail
Budget vs Actual
Cost-to-Complete
Manual entry · margin recomputes live
As-Sold budget — cost-code detail captured & locked from the estimate. Read-only baseline; revisions flow through Change Orders. ● As-Sold · Locked Draft — lock the estimate to baseline
Division · Code · Description
Anticipated Vendor / Sub
Qty
Units
Unit Price
As-Sold Budget
{{ d.caret }}{{ d.n }}{{ d.name }}
{{ d.pct }} of total
{{ d.perSf }}/sf
{{ d.catTotal }}
{{ sg.code }} {{ sg.name }}
{{ sg.subtotal }}
{{ r.code }}{{ r.name }}
{{ r.vendor }}
{{ r.qtyVal }}
{{ r.unit }}
{{ r.unitVal }}
{{ r.ext }}
As-Sold Budget · Grand Total · {{ budgetDetail.grandSf }}/SF
{{ budgetDetail.grand }}
Subcontractor / Vendor
Actual to Date
Committed/Est
Antic. C.O.
Grand Total
{{ grp.label }}
{{ r.name }}
{{ r.actual }}
{{ r.committed }}
{{ r.co }}
{{ r.total }}
{{ grp.subLabel }}
{{ grp.subActual }}
{{ grp.subCommitted }}
{{ grp.subCo }}
{{ grp.subTotal }}
Grand Total Costs
{{ ws.ctc.gtActual }}
{{ ws.ctc.gtCommitted }}
{{ ws.ctc.gtCo }}
{{ ws.ctc.gtTotal }}
As-Sold GM
{{ ws.ctc.asSold }}
Anticipated GM
{{ ws.ctc.antic }}
Δ GM vs As-Sold
● {{ ws.ctc.delta }}
Since Last Report
▲ $0
Division
Budget · As-Sold
Actual to Date
Variance
{{ r.n }}{{ r.name }}
{{ r.budget }}
{{ r.variance }}
Total Cost
{{ bva.totalBudget }}
{{ bva.totalActual }}
{{ bva.totalVar }}
As-Sold GM
16.6% · {{ bva.asSoldGM }}
Current GM
{{ bva.curPct }} · {{ bva.curGM }}
Margin Health
● {{ bva.delta }}pt · {{ bva.hlabel }}
Type an actual cost against any division — the variance, total, and Current GM vs As-Sold margin recompute instantly. No commitments or job-cost tie-in required.
Detailed cost data is seeded for SKY Goodlettsville — Site Plus Shell in this wireframe. Open that project to explore the live Cost-to-Complete and Estimate-vs-Actuals views.
Takeoff / Detail
GM Calculator
Total SF {{ pest.sf }} Contract Type {{ pest.contractType }}
Grand Total · Cost/SF
{{ pest.grand }} {{ pest.grandSf }}
● As-Sold · Locked Draft · editable
Division · Code · Description
Notes
Anticipated Vendor / Sub
Qty
Units
Unit Price
Extended Price
{{ d.caret }}{{ d.n }}{{ d.name }}
{{ d.pct }} of total
{{ d.perSf }}/sf
{{ d.catTotal }}
{{ d.note }}
{{ sg.code }} {{ sg.name }} · {{ sg.scope }}
{{ sg.subtotal }}
{{ r.code }}{{ r.name }}plug
{{ r.vendor }}
{{ r.unit }}
{{ r.ext }}
Probable Cost · Grand Total · {{ pest.grandSf }}/SF
{{ pest.grand }}
Every column mirrors the Detail Estimate workbook — Notes, Anticipated Vendor/Sub, Qty, Units, Unit Price. Edit any Qty or Unit Price and Extended Price, the group sub-total, division category total, % of total and Cost/SF all recompute live. Contingency carries as a live % of the direct-cost subtotal. Locking freezes this as the As-Sold baseline and seeds the Budget & SOV.
Phase · Task · estimated hours by role
{{ rl }}
{{ p.name }}
{{ r.label }}
Sum hours by person
{{ h }}
× Burdened rate ($/hr)
{{ r }}
GM $ by person
{{ f }}
Total GM $ → Division 10 Fee
{{ est.fee }}
Overhead Recovery · 59%{{ est.overhead }}
Planned Profit · 41%{{ est.profit }}
Resulting Project GM%
{{ est.gmPct }}{{ est.gmLabel }}
Bump any role's hours and the fee, total and margin move — feeding Division 10 on this project's estimate.
The detailed As-Sold estimate is seeded for SKY Goodlettsville — Site Plus Shell in this wireframe. Open that project to build / view the live estimate.
Sub List
Bidders / Leveling
POs
Bid Invitation
Solicitation & buyout · executed POs land here
Subcontractor
Trade
Status
Subcontract
COI
No subcontracts committed on this project yet.
{{ r.name }}
{{ r.trade }}
{{ r.status }}
{{ r.value }}
{{ r.coi }}
The subcontractors committed to this project, with subcontract status and insurance-certificate (COI) compliance. Expired / missing COIs flagged in red.
Purchase Orders Total committed {{ pos.total }}
PO #
Vendor
Description
Division
Amount
Status
No purchase orders issued on this project yet.
{{ p.num }}
{{ p.vendor }}
{{ p.desc }}
{{ p.div }}
{{ p.amount }}
{{ p.status }}
Material & equipment purchase orders for this project, by cost-code division. Status flows Issued → Open → Received.
Bid Leveling Set up a scope package per trade, then enter bids as they come in.
New Bid Package
No bid packages yet. Click + New Bid Package to set up a trade scope, then enter bids as subs respond.
{{ b.div }} {{ b.trade }} {{ b.scope }} Estimate carry: {{ b.carry }} ✓ {{ b.awardName }} · {{ b.awardAmt }}
No bids entered yet for this package. Use + Enter Bid to add one.
Scope / Bidder
{{ s.name }}
{{ s.gapLabel }}
{{ row.name }}
{{ c.mark }}
Base Bid
{{ s.amt }}
Low Bid
vs Estimate carry
{{ s.deltaLabel }}
Notes / Award
{{ s.note }}
Enter Bid · {{ bidFormTrade }}
Scope included in this bid — uncheck what they excluded
{{ sc.check }}{{ sc.name }}
Side-by-side leveling by trade — the low bid is highlighted and compared to the estimate carry, with a scope-coverage grid so you catch what a low number leaves out. Awarding writes the commitment; scope gaps flag where a bid isn't apples-to-apples.
INVITATION TO BID WITH BUILDERS BY DESIGN
{{ bidInvite.project }}
{{ bidInvite.address }}
Bid Due to GC {{ bidInvite.dueDate }}
Project Description
{{ bidInvite.description }}
As part of our bid to the Owner & Architect, please include:
{{ rq }}
Sent {{ inviteSentOn }}
Direct Questions To
{{ c.name }}
{{ c.phone }}
{{ c.email }}
Trades Solicited
{{ t }}
Subs & POs are seeded for SKY Goodlettsville — Site Plus Shell.
To-Do List {{ wsTodoDone }} of {{ wsTodoTotal }} done
Add
{{ t.mark }} {{ t.label }} {{ t.due }}
The project to-do list is seeded for SKY Goodlettsville — Site Plus Shell in this wireframe.
Initial Contract
{{ cos.initial }}
Approved COs
{{ cos.approved }}
Adjusted Contract Value
{{ cos.adjusted }}
New Change Order {{ coDraft.nextId }} ×
Cost Line Items
Item
Cost
+ Add line
Cost
{{ coDraft.costTotal }}
GM
{{ coDraft.gm }} · {{ coDraft.gmPct }}
Owner Value
{{ coDraft.ownerValue }}
#
Description
Antic. Cost
Owner Value
Status
Action
No change orders on this project yet — start one with + New Change Order.
{{ c.id }}
{{ c.desc }}
{{ c.antCost }}
{{ c.ownerValue }}
{{ c.statusLabel }}
Approving a change order rolls its Owner Value into the Adjusted Contract Value and inserts a new SOV / billing line — no re-keying.
Change orders are seeded for SKY Goodlettsville — Site Plus Shell in this wireframe.
Scope of Work
{{ workScope.sf }} · {{ workScope.date }} · work generally includes & is limited to the following
{{ d.n }}{{ d.name }}
{{ d.intro }}
{{ it }}
Exclusions
×{{ ex }}
Organized on the Cost-Code Spine — the same divisions as the estimate, so scope and price line up. Feeds the proposal package.
Scope of Work is generated from the project estimate — none has been built for this project yet.
Generated from the As-Sold estimate & Scope of Work. Format is a placeholder — final proposal / cover form pending BBD's standard.
Submitted {{ proposalSentOn }}
K
BUILDERS BY DESIGN
Proposal Form
{{ proposal.name }}
{{ proposal.preamble }}
{{ f.k }} = {{ f.v }}
Proposed Contract Total = {{ proposal.total }}
{{ proposal.honored }}
Anticipated Schedule
{{ s.k }} = {{ s.v }}
Build a detailed estimate first — the proposal is generated from it.
📁 {{ f.name }} {{ f.count }}
{{ d.t }} {{ d.n }} {{ d.by }} · {{ d.dt }}
⬆ Drop files or click to upload
The document hub is seeded for SKY Goodlettsville — Site Plus Shell in this wireframe.
{{ g.role }} {{ g.count }}
{{ t.mark }} {{ t.label }}
The closeout checklist is seeded for SKY Goodlettsville — Site Plus Shell in this wireframe.
Retainage %
· this project only · 1st bill 7/25
Pay Application #{{ bill.payAppNo }} generated for {{ bill.payMonth }} — {{ bill.payNet }} net of retainage. Continuation sheet built, moved to AR.
Schedule of Values × Month · Draw Forecast
Division
Sched Value
{{ m }}
{{ r.n }}{{ r.name }}
{{ r.sched }}
{{ c.dollar }}
Gross monthly billing
{{ bill.schedTotal }}
{{ v }}
Less retainage
{{ v }}
Net monthly
{{ v }}
Cumulative billings
{{ bill.cumTotal }}
{{ v }}
Billing Distribution % — editable · shapes the draw curve
Division
{{ m }}
Σ
{{ r.name }}
{{ r.sumLabel }}
Contract Billed to Date
{{ ws.header.billed }}
of {{ ws.header.contract }} contract · {{ ws.header.compl }} complete
Retainage Held
$204,912
Released at closeout via final retainage billing.
This is the draw schedule for this project only. The company-wide Billing & Draws screen (Money group) rolls every project's draws together.
The billing schedule is seeded for SKY Goodlettsville — Site Plus Shell.
Duration
{{ psched.durLabel }}
Finish
{{ psched.finishDate }}
Complete
{{ psched.pctComplete }}%
On Critical Path
{{ psched.criticalCount }} tasks
Behind Schedule
{{ psched.behindCount }} tasks
{{ psched.hideEmptyLabel }} ↺ Reset
Schedule of Values · Tasks
{{ m.label }}
◆ Milestones & Draws
{{ m.short }} {{ m.drawAmt }}
{{ m.short }} {{ m.drawAmt }}
{{ g.caret }} {{ g.name }} {{ g.count }} +
{{ t.name }} critical {{ t.behindBadge }}
{{ t.startLabel }}  ·  {{ t.durLabel }}  ·  {{ t.depLabel }}  ·  {{ t.pctText }}  ·  {{ t.delayLabel }}
{{ t.pctLabel }}
Schedule Leeway Total float {{ t.floatWks }} wks Free float {{ t.freeFloatWks }} wks Early / late finish wk {{ t.earlyFinishWk }} / {{ t.lateFinishWk }} ● On critical path — zero float
Delete task
{{ t.delayCheck }}This task is delayed
The bar shifts off its baseline (dashed) to show the slip; dependents reschedule.
Shortest / longest = best- and worst-case duration. The gap shows on the bar as the finish-range whisker — how much the finish could swing.
Planned · fill = % complete Baseline (the original plan — stays put as your reference) Finish range (shortest–longest duration) Critical path Today Click any task to edit its duration, predecessor & progress — dependents reschedule on Apply.
Billing Milestones · draws scheduled from the timeline Contract {{ psched.milestones.contractLabel }}
Milestone
Date
Draw %
Draw $
Cumulative
Status
{{ m.label }}
{{ m.date }}
{{ m.drawPct }}
{{ m.drawAmt }}
{{ m.cumAmt }}
{{ m.statusLabel }}
Total Scheduled Draws
{{ psched.milestones.totalPct }}
{{ psched.milestones.total }}
Each draw is anchored to a schedule milestone, so when a task slips the draw date moves with it — the cash-in forecast always reflects the live schedule.
The schedule activates once this project is awarded and in pre-construction.
{{ ws.stubTitle }}
This tab is specified in the brief and slated for an upcoming build pass.
Tasks
{{ f.label }}
Add
{{ t.mark }} {{ t.label }} {{ t.projectName }} {{ t.due }}
Calendar of Work
Project
{{ m }}
{{ r.name }}
{{ r.job }} · {{ r.pm }}
{{ r.phase }}
Billing & Draws · All Projects
2410-114A
Retainage %
· 1st bill 7/25
Pay Application #{{ bill.payAppNo }} generated for {{ bill.payMonth }} — {{ bill.payNet }} net of retainage. Continuation sheet built, submission logged, moved to AR.
Schedule of Values × Month · Draw Forecast
Division
Sched Value
{{ m }}
{{ r.n }}{{ r.name }}
{{ r.sched }}
{{ c.dollar }}
Gross monthly billing
{{ bill.schedTotal }}
{{ v }}
Less retainage
{{ v }}
Net monthly
{{ v }}
Cumulative billings
{{ bill.cumTotal }}
{{ v }}
Billing Distribution % — editable · shapes the draw curve
Division
{{ m }}
Σ
{{ r.name }}
{{ r.sumLabel }}
A division whose months don't sum to 100% is flagged before a pay app can be generated.
AR Aging · Company
{{ a.b }}{{ a.v }}
Retainage Held
$204,912
Released at closeout via final retainage billing.
← Pipeline
{{ oppDetail.name }}
{{ oppDetail.customer }} · {{ oppDetail.type }} · {{ oppDetail.owner }}
{{ oppDetail.stage }}
Lead Details · rumor stage
Anticipated Start (Quarter / Year)
Revenue is spread across these months from the start date into the Sales Plan & 5-Year Plan. Decision expected {{ oppDetail.timeframe }}. Once it’s a project, the curve is driven by the billing / draw schedule.
LeadTracked rumor — not yet a project
{{ oppDetail.leadDesc }}
{{ oppDetail.flash }}
⚠ Attach a customer / account above before this lead can become a project.
Next step
Create a Project & link it to this lead
Everything past Lead is a project (won or lost). Creating the project moves it into Estimating and opens its Overview — the detailed estimate / takeoff starts there.
Opportunity Inputs
These feed the Operating Plan's Projected P&L. COGS uses the estimate when present, otherwise contract value × (1 − GM %).
Weighted @ {{ oppDetail.closePct }} close
{{ oppDetail.eGm }}
expected gross margin
{{ oppDetail.eRev }}
exp. revenue
{{ oppDetail.eCogs }}
exp. COGS
Unweighted (at 100%)
Contract value{{ oppDetail.valueStr }}
Gross margin $ · at GM %{{ oppDetail.gm$ }}
Cost basis · {{ oppDetail.costSource }}{{ oppDetail.fullCost }}
No locked estimate yet — COGS is derived from the projected GM %. Once an estimate is locked, enter its total cost above and the forecast will use real estimated cost.
CRM · Pipeline
Sales Stages
GM Forecast
Table
Committed Backlog · FY{{ pipe.planYear }} {{ pipe.backlogFy }}
Weighted Pipeline · FY{{ pipe.planYear }} {{ pipe.pipeFy }}
Pipeline GM · FY{{ pipe.planYear }} {{ pipe.pipeGmFy }}
{{ col.label }} {{ col.count }} {{ col.total }}
{{ c.name }} {{ c.owner }}
◷ {{ c.customerLabel }} {{ c.customerLabel }}
{{ c.valueAbbr }} GM {{ c.gmAbbr }}
Start{{ c.start }}LeadProjectLost
{{ c.flash }}
{{ c.typeLabel }} ✕ Lost ✓ Project
Click a Lead to open it and create a project from it (needs a customer) — that's the gate into Estimating. Click any Estimating+ card to open its project Overview. ▸ moves a project along the sales stages; Won runs the Award flow.
{{ col.label }} {{ col.count }} {{ col.weighted }}
{{ c.name }} {{ c.owner }}
{{ c.valueAbbr }} {{ c.type }}
Close
{{ c.closeLabel }} +
Proj {{ c.proj }} dGM {{ c.dgm }}
{{ c.award }}
Opportunity
Value
Close%
GM%
GM Pot.
Proj. Sales
Disc. GM
Award
Type
{{ r.name }}
{{ r.value }}
{{ r.close }}
{{ r.gmPctL }}
{{ r.gm }}
{{ r.proj }}
{{ r.dgm }}
{{ r.award }}
{{ r.type }}
Award {{ award.name }}?
Awarding creates a Project, copies the locked As-Sold estimate into the Budget and the Owner Contract Schedule of Values, and auto-generates the Pre-Construction task checklist. This locks the as-sold estimate.
⚠ No locked As-Sold estimate is linked to this opportunity. Lock an estimate before awarding so the Budget and SOV can be seeded.
Business Plan · FY25
The written strategic plan that frames the numbers — summary, risks, goals, and team expectations.
{{ t.label }}
{{ s.h }}
{{ s.p }}
{{ c.t }}
{{ c.d }}
{{ g.n }}
{{ g.t }}
{{ g.d }}
{{ e.t }}
{{ e.d }}
{{ newRec.title }}
×
Fields mirror the workbook intake. Saved records appear immediately in the app.
Submittals
{{ subm.total }} total · {{ subm.openCt }} open
{{ c.label }} {{ c.n }}
New Submittal
#
Submittal
Ball / Due
Files
Status
No submittals match this filter.
{{ s.num }}
{{ s.title }}
{{ s.projName }} · {{ s.trade }}
{{ s.ball }} · due {{ s.due }}
{{ s.attLabel }}
{{ s.status }}
#{{ subm.detail.num }} · {{ subm.detail.spec }}
{{ subm.detail.title }}
{{ subm.detail.projName }} · {{ subm.detail.trade }}
×
Status
{{ o.label }}
Ball in court
Date required
{{ subm.detail.due }}
Submitted
{{ subm.detail.submitted }}
Returned
{{ subm.detail.returned }}
Attachments
No files attached yet.
{{ a.name }}
{{ a.by }} · {{ a.dt }}
Attachments sync to this project's Documents → Submittals & Samples automatically.
Tracks every submittal across jobs — spec section, responsible party, ball-in-court, due date and review status (Draft → Submitted → Under Review → Approved / Revise). Click one to advance its status, reassign, and attach files that flow straight to the project's document set.
Customers
Customer
Type
Active Jobs
Contacts
{{ c.name }}
{{ c.type }}
{{ c.jobs }}
{{ c.contacts }}
Each customer holds its own contacts, active & past jobs, and proposals — the same way a subcontractor or vendor record does.
Contacts
Search every contact — employees, subs, vendors, owners…
Name
Title
Company
Type
Phone
{{ k.init }}{{ k.name }}
{{ k.title }}
{{ k.company }}
{{ k.type }}
{{ k.phone }}
Org Chart
Auto-generated from each employee's reporting structure — update an employee's manager and the chart redraws.
{{ t.tier }}
{{ n.init }}
{{ n.name }}
{{ n.role }}
Time Off
Employee
Accrued
Used
Remaining
Used
{{ r.init }}{{ r.name }}
{{ r.accruedL }}
{{ r.usedL }}
{{ r.remainingL }}
Requests
{{ q.name }}
{{ q.dates }} · {{ q.days }}
{{ q.status }}
Employees
Directory · Org · Rates · Time
Name
Role / Level
Annual Salary
Burdened Rate
Co.
Status
{{ p.init }}{{ p.name }}
{{ p.role }}
{{ p.salary }}
{{ p.rate }}
{{ p.co }}
{{ p.status }}
Click a person to open their detail screen — annual salary is owned there. Salary drives each role's share of the gross-margin pool on the Operating Plan's Roles, Rates & Goals tab, which produces the burdened rate the GM Calculator consumes.
← Employees
{{ emp.init }}
{{ emp.name }}
{{ emp.role }} · {{ emp.co }} · {{ emp.status }}
{{ emp.groupLabel }}
Annual Salary
$
Owned here. Rolls into the Operating Budget payroll lines and sets this role's share of the gross-margin pool.
Required Billing Rate
{{ emp.rate }}/hr
{{ emp.noteRate }}
% of total salaries{{ emp.share }}
Gross margin required{{ emp.gm }}
{{ emp.noteGM }}; {{ emp.noteShare }}.
Annualized Time Commitment Total {{ emp.totalHrs }} hrs · Job-only {{ emp.billHrs }} · {{ emp.pctBill }} billable
Activity
Bucket
Weeks/yr
Hrs/wk
Annual Hrs
{{ a.act }}
{{ a.bucketLabel }}
{{ a.hrs }}
Job-only hours are the billable divisor for this role's rate. Edit weeks/yr or hrs/wk and the rate, the Operating Plan matrix and the Projected P&L all recompute.
{{ subsTitle }}
Sub / Vendor
Trade
Active
Open Bids
Type
Capacity
{{ s.name }}
{{ s.trade }}
{{ s.active }}
{{ s.bids }}
{{ s.type }}
{{ s.capLabel }}
Account · no portal / bidding
Subs have self-service portals (invitations, quotes, subcontracts, lien waivers, pay requests). Big-box accounts are tagged Vendor — material-PO tracking only.
Resource Planning
Team labor allocation across active jobs · FY{{ res.planYear }}
{{ res.headline }}
Most stretched: {{ res.worstName }} at {{ res.worstUtil }}% — {{ res.worstConflict }}.
{{ res.overCount }}
Over
{{ res.loadedCount }}
Loaded
{{ res.coderCount }}
Team
Team Member · Peak Load
{{ m }}
{{ r.name }} {{ r.peakUtil }}%
{{ r.role }} · {{ r.capYr }} hrs/yr
⚠ {{ r.conflict }}
◔ {{ r.proNote }}
Hiring signal: {{ res.hireSignal }}
Within capacity 85–105% loaded Over capacity Proposed (pipeline, prob-weighted) Solid = committed load; hatched = added load if the pipeline lands. Click anyone to open their record.
Operating Plan
The single source the whole plan flows from — Budget → Overhead → Gross-Profit model → required revenue. Edit once, recompute everywhere.
{{ t.label }}
Line Item
2024 Plan
2024 Forecast
2025 Projected
% OpEx
{{ c.code }} {{ c.name }} {{ c.note }}
{{ c.subtotal }}
{{ l.name }}
{{ l.plan }}
{{ l.fc }} {{ l.fc }}
{{ l.pct }}
Total Operating Expenses
{{ op.budget.expenseSubtotal }}
+ Operating Contingency · 4.5%
{{ op.budget.contingency }}
− DSR (FBD) Reimbursement to Overhead
{{ op.budget.dsrReimb }}
Total Anticipated Overhead
{{ op.budget.netOverhead }}
Total Anticipated Overhead
{{ op.budget.netOverhead }}
This figure flows straight into the Mark-up · GP Model as the overhead to recover. Change any budget line and the required billing rate, GM and revenue all move.
Plan Inputs · GP Model
Asset Purchases{{ op.budget.assets }}
Depreciation{{ op.budget.depreciation }}
Est. Quarterly Tax{{ op.budget.estTax }}
Billing-Rate Build-Up · over {{ op.markup.hours }} direct hours
Component
$ / Hour
Annual
{{ b.l }}
{{ b.hr }}
{{ b.an }}
Overhead to Recover
{{ op.markup.overhead }}
{{ op.markup.overheadHr }}/hr · from Operating Budget
Profit Goal · % Return on Overhead
%
{{ op.markup.profit }}
{{ op.markup.profitHr }}/hr · the company-wide profitability goal
Per-Job GM Split · feeds Division 10
{{ op.markup.ovSharePct }}
Overhead Recovery
{{ op.markup.pfSharePct }}
Planned Profit
Overall Billing Rate
{{ op.markup.rate }}/hr
Total GM required {{ op.markup.totalGM }}
{{ op.markup.targetLabel }} blended GM → {{ op.markup.reqRev }} revenue to book
8% · most volume10% · FY plan18% · least
Break-even (overhead only, no profit) {{ op.markup.breakEvenRev }} FY plan baseline · 10% {{ op.markup.planBaseRev }}
This is the one lever that sizes the year: your fixed {{ op.markup.totalGM }} of required gross margin ÷ the margin you sell at = the revenue you must book. It flows straight into the Sales Plan (spread by month) and the Projected P&L.
Gross-Margin Reconciliation · target vs blended Combined {{ op.gmRecon.combGM }} · {{ op.gmRecon.variance }} vs target
Target {{ op.gmRecon.targetLabel }}
Backlog blended {{ op.gmRecon.backlogGM }} · {{ op.gmRecon.backlogVal }} GM Pipeline blended {{ op.gmRecon.pipeGM }} · {{ op.gmRecon.pipeVal }} wtd GM Won backlog runs above the 10% plan; thin pipeline GM is the margin discipline risk to watch.
Projected Profit / Loss Statement · FY · weighted pipeline @ {{ op.pnl.marginPct }} GM
{{ r.l }} {{ r.v }}
Projected Net Profit / (Loss)
{{ op.pnl.net }}
{{ op.pnl.netPct }} of revenue
Projected Revenue{{ op.pnl.revenue }}
Projected Earned GM{{ op.pnl.earned }} · {{ op.pnl.marginPct }}
Projected vs. Required GM
Projected GM · pipeline{{ op.pnl.earned }}
Required GM · profit goal{{ op.pnl.reqGMabbr }}
Gap to goal{{ op.pnl.gapAbbr }}
The weighted pipeline currently covers {{ op.pnl.coverPct }} of the gross margin needed to hit the profit goal. Raise Close % or GM % on opportunities, or add pipeline, to close the gap.
Monthly Profit / Loss Projection · earned-margin timing & cumulative
Month
%
Revenue
Earned GM
Op. Cost
Profit/(Loss)
Cumulative
{{ m.m }}
{{ m.pctL }}
{{ m.rev }}
{{ m.gm }}
{{ m.op }}
{{ m.pl }}
{{ m.cum }}
FY
100%
{{ op.pnl.moTot.rev }}
{{ op.pnl.moTot.gm }}
{{ op.pnl.moTot.op }}
{{ op.pnl.moTot.pl }}
{{ op.pnl.moTot.pl }}
Earned margin follows the sales curve (lumpy with big jobs) while operating cost is spread evenly across the year — so the cumulative line shows when the plan turns profitable, the same month-by-month view as the workbook's P&L tab.
Total Gross Margin Required
{{ op.roles.totalGM }}
from the Mark-up · GP Model — the pool allocated below
Billing-Staff Salaries · {{ op.roles.headcount }} roles
{{ op.roles.totalSal }}
salary sets each role's share of the GM pool
Job-Only Hours · blended rate
{{ op.roles.totalBill }} hrs · {{ op.roles.blended }}/hr
sum of job-only hours = Planned Direct Hours divisor
Billing Staff · salary-weighted GM allocation → required billing rate
Role / Employee
Salary
Total Hrs
Job-Only Hrs
% Bill.
% Salaries
GM Required
Rate $/hr
{{ r.caret }}
{{ r.name }}
{{ r.role }}
{{ r.salary }}
{{ r.totalHrs }}
{{ r.billHrs }}
{{ r.pctBill }}
{{ r.share }}
{{ r.gm }}
{{ r.rate }}
Annualized time commitment · weeks/yr × hrs/wk
Activity
Bucket
Weeks/yr
Hrs/wk
Annual Hrs
{{ a.act }}
{{ a.bucketLabel }}
{{ a.hrs }}
Total · blended
{{ op.roles.totalSal }}
{{ op.roles.totalAll }}
{{ op.roles.totalBill }}
100%
{{ op.roles.totalGM }}
{{ op.roles.blended }}
Click a role to edit its annualized time commitment; the job-only (billable) hours become the rate divisor. Each salary sets the role's share of the total GM pool — share × GM required ÷ job-only hours = the burdened billing rate the estimator's GM Calculator uses. Salaries are owned on each Employee's detail screen (click the salary). Adjust a salary or a time split and every rate, the blended rate and the Projected P&L recompute.
Overhead / G&A roles · recovered through overhead, not billed
{{ o.name }} · {{ o.role }}
{{ o.salary }}
{{ o.hrs }} hrs
GM Goals & Management Incentive · 70% ROO Profitability Goal = {{ op.goal }}
% of Goal
Post-Tax Net
% Earned
Mgmt Bonus
Net GM After
{{ r.pct }}PLAN TARGET
{{ r.net }}
{{ r.earn }}
{{ r.bonus }}
{{ r.after }}
Revenue Goal · FY{{ op.sales.planYear }}
{{ op.sales.revGoal }}
Committed Backlog · {{ op.sales.backlogPct }}
{{ op.sales.backlogRev }}
Weighted Pipeline · {{ op.sales.pipePct }}
{{ op.sales.pipeRev }}
Gap Still to Secure
{{ op.sales.gapRev }}
Backlog {{ op.sales.backlogRev }} Pipeline {{ op.sales.pipeRev }} Gap {{ op.sales.gapRev }} {{ op.sales.coverPct }} of goal covered
Bookings vs Plan · FY{{ op.sales.planYear }} new contract signings {{ op.bookings.pacePct }} of target booked · {{ op.bookings.behind }} behind pace
Bookings Target
{{ op.bookings.target }}
Booked YTD · {{ op.bookings.count }} jobs
{{ op.bookings.booked }}
+ Weighted Pipeline
{{ op.bookings.wtdPipe }}
Forecast · {{ op.bookings.forecastPct }}
{{ op.bookings.forecast }}
Pace to date
Booked {{ op.bookings.booked }} + Weighted pipeline Bookings feed future backlog — {{ op.bookings.gap }} of new work still to prospect to hit target.
Revenue Pacing by Month · backlog + pipeline vs goal
Month
Backlog
Pipeline
Expected
Goal
Gap
Cum. Gap
{{ s.m }}
{{ s.backlog }}
{{ s.pipeline }}
{{ s.expected }}
{{ s.goal }}
{{ s.gap }}
{{ s.cumGap }}
{{ s.m }}
{{ s.backlog }}
{{ s.pipeline }}
{{ s.expected }}
{{ s.goal }}
{{ s.gap }}
Backlog is contracted, won work; Pipeline is open opportunities weighted by close% — both placed in the month they actually bill, from each job's start & duration. Gap is what still must be sold to hit the seasonal goal. The pipeline + backlog covers {{ op.sales.coverPct }} of the FY{{ op.sales.planYear }} revenue goal.
Crew Capacity · labor-hour demand vs available {{ op.capacity.utilPct }} utilized · {{ op.capacity.headroom }}
{{ op.capacity.annualDemand }} hrs of demand against {{ op.capacity.annualCap }} hrs available · {{ op.capacity.capMo }} hrs/mo capacity line
Capacity
{{ c.m }}
Demand is driven by the backlog + weighted-pipeline revenue placed on each job's real schedule. Months whose bar crosses the capacity line are over-committed — flag for hiring, scheduling, or pushing a start. The dashed line sits at the {{ op.capacity.capMo }}-hour monthly capacity.
FY25 revenue is anchored to the 12%-GM volume; net profit deducts the fixed tax, asset-purchase and depreciation burden each year, matching the workbook.
Projected Growth Plan & Anticipated Profit / (Loss) · 12% GM held
FY
Revenue
Pipeline (wtd)
OpEx
GM%
Pre-Bonus Net
Margin%
Cumulative
{{ r.fy }}
{{ r.rev }}
{{ r.pipeRev }}
{{ r.opex }}
12%
{{ r.net }}
{{ r.margin }}
{{ r.cum }}
5-Yr
{{ op.fiveyr.totRev }}
{{ op.fiveyr.totOpex }}
{{ op.fiveyr.totNet }}
{{ op.fiveyr.aggMargin }}
Aggregate pre-tax profit margin across the 5-year horizon is {{ op.fiveyr.aggMargin }} of volume. Adjust the growth rates above and every year — and the cumulative — recompute.
Financials · CFO Vital Statistics
{{ k.l }}
{{ k.v }}
AR Aging
{{ a.b }}{{ a.v }}
AP Aging
{{ a.b }}{{ a.v }}
Cash & Non-P&L Disbursements
{{ fin.cash }}
Checking
{{ fin.loc }}
$500K LOC
{{ d.l }}{{ d.v }}
Job-Cost Roll-Up · Top Jobs by GM
{{ j.name }} {{ j.gm }} {{ j.pct }}
Report Center
One branded template system · BBD letterhead / FBD variant · generated from live data, never re-keyed. Project reports build from {{ reports.project }}.
{{ r.title }}
{{ r.desc }}
source · {{ r.src }}
{{ placeholderTitle }}
{{ placeholderIcon }}
{{ placeholderTitle }}
{{ placeholderDesc }}
Scheduled in the build roadmap