The portal renders a snapshot frozen at send time, which was fine while an estimate was written once and sent once. Now the content half of that snapshot follows the estimate: it is rebuilt and pushed to every unapproved link for the job, debounced, and only when something actually changed. Approval is a hard stop.
Also called: portal shows the old price · added services and they didn't show · quote out of date on their page
Fix the quote and the customer's page fixes itself
A builder added services to a sent estimate and the customer's page showed none of them — the buyer was reading $37,246 while the builder was looking at $48,814, because the page had been frozen at send time and nothing ever wrote to it again. Edits to services, notes, labour, markup, colours and payment terms now push into the customer's copy as you save. A quote that silently disagrees with itself is worse than no quote.
Correcting a quote no longer means sending a second link
The copy is refreshed where it stands, because sending again mints a different address and orphans the one already sitting in the buyer's inbox. The estimate they were sent is the estimate that updates. Two live links for one job is how a customer approves the wrong number.
It stops the moment they approve
An approved page is never rewritten. From that point the document is the record of what was agreed, and a price change is a change order rather than an edit nobody can see. The refusal lives where the write happens, not in each screen that might trigger one.
What you decided they can see survives every refresh
A content refresh updates prices, specs, services and colours, and deliberately leaves the visibility switches and the attached plans alone. Those are the builder's decisions, they belong to the link, and a refresh that quietly switched a hidden section back on would be a leak rather than an update.
When two copies exist, the right one wins by comparison
Pin a version and that one always wins. Otherwise the fresher of the two copies is served, compared by when each was actually rebuilt — and a customer opening their page doesn't count as a rebuild. A reader must never change which document is authoritative.
- 1A content signature covers everything a customer can see change — total, services, labour, markup, materials, colours, custom specs, payment stages, tax.
- 2When the signature moves, the refresh is debounced so editing a rate does one write, not one per keystroke.
- 3The server refuses to touch an approved link; at that point the snapshot is the record of what was agreed.
- 4The builder's visibility choices belong to the link and survive a content refresh.
- 5Each refresh stamps its own snapshot_refreshed_at.
A builder added $11,568 of services and two customer notes to an estimate that had already gone out, and the customer's portal showed none of it — a $37,246 quote sitting against a $48,814 estimate. Edits to a sent estimate now push into the customer's copy automatically, right up until they approve it. Having the customer's page recalculate services live was rejected on purpose: that page is public and its totals are stored figures rather than recomputed ones, so a live read would list line items that don't add up to the total printed under them. One snapshot, kept current, keeps the document internally consistent.
- A frozen customer document drifting away from the estimate behind it
- Line items on a public page that don't add up to the total printed under them
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 →