A single derivation — materials by category, plus labour, services, colour upgrades and every markup rule — that every surface calls. The value is derived from the building spec through the price book on demand rather than cached in a column, precisely so a second source of truth can't reappear.
Also called: price discrepancy · different totals on different screens · what is this job worth
The card, the list and the customer's page all read one figure
A lead showed $72,000 on the board and a different number the moment the card was opened, because the board was rendering a value typed in at capture while the estimate had moved on. Every surface now derives the job's value the same way — from the building, through your price book. Two numbers for one building is an argument with a customer who has seen both.
“Total” means materials, labour, services, colour upgrades and markup
Three screens showed the materials figure while the workspace showed the grand total, which under-states a job by roughly a third. The total now carries the labour lines, every service, priced colour upgrades and each markup rule, printed in groups that add up on screen. A quote a rep has to mentally top up before saying it out loud is a quote that gets said wrong.
The forecast is priced off the estimates, not off what someone guessed at intake
Column totals on the sales board add up values derived from real buildings, so what the pipeline says the month is worth is what the quotes say. Every design in the account is priced in one pass rather than one request per card. A forecast built on budget figures typed at first contact drifts all quarter and nobody notices until it misses.
The customer's page shows the same buildup you priced
Materials, labour, services itemised under their own subtotal, markup, one total — the same groups in the same order the builder sees. When a buyer asks what the $25,546 of services covers, the answer is already on the page in front of them. Sending a bare number and defending it over the phone is how a $3,700 door line turns into a discount.
Every line that moved the total has its own row
Base, markup and total sit on each row, so what a section costs and what it sells for are one glance apart. A total that cannot be taken apart is a total nobody can defend at a kitchen table.
Approved change orders count toward what the job is worth
A signed change order sits on the estimate with a switch of its own, and the value that leaves the screen includes it. Two overhead doors added in week three are worth what two quoted on day one are worth. A job value frozen at the original quote makes a busy month of upsells look flat.
- 1customerTotalFor() takes the material totals, the building spec and the stored pricing and returns grand, materials, labor, services, colors and markup.
- 2Geometry-derived labour inputs come from the SPEC, not the stored pricing, so a design that has never been opened in the pricing screen still gets correct labour instead of zero.
- 3designSellTotal() prices a whole design in one pass for board-level surfaces (37 designs measured at 76ms).
- 4The resulting total is pushed outward to the pipeline card, the linked contact and the customer portal, debounced.
- 5scripts/check-price-book-units.mjs asserts the pricing invariants.
One building could show three different prices depending on where you looked. The estimate list totalled the bill of materials, the pricing workspace totalled stock rows, and the pipeline card showed a figure somebody had typed by hand months earlier that stopped tracking the moment the building changed. A materials-only number also understates a real job by roughly a third, because the hours, the labour, the gutters and the concrete are all missing from it. Every surface — list, pipeline card, contact card, workspace and the customer's own portal — now derives the job's value the same way from everything that goes into it, so they cannot disagree.
- Three surfaces computing the job's value three different ways
- Cards showing materials only and understating the job by a third
- A hand-typed deal value that stops tracking the estimate
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 →