The portal funnel registry defines three contract-stage sections: contract:estimateRecap, contract:plans (which only appears when plans exist) and contract:download. They live in the same sections_enabled map as the estimate page's toggles, with org defaults and per-estimate overrides merged for the customer.
Also called: what they see · portal toggles · hide the price recap · customer portal settings
- 1Org defaults live in portal_defaults.sections_enabled; per-estimate overrides in estimate_portal_overrides.sections_enabled.
- 2The customer page reads the merged map and treats anything not explicitly false as on, so an unconfigured estimate looks exactly as it did.
- 3Stage 2-4 keys are namespaced ('contract:') so a section id can never collide across surfaces.
- 4Rows can declare what they `needs`, so the plans toggle is hidden for an estimate with no plans.
The registry draws a deliberate line: 'The agreement's CLAUSES come from the contract template, not from toggles — editing legal text with a checkbox would be a trap. What is genuinely per-customer is the material that rides ALONGSIDE the agreement.' The broader change is : the builder 'must be able to add or remove things from ANY of them, at ANY time — including days after the estimate went out.'
- One fixed customer-facing layout for every job
- No way to adjust the customer's view after sending
- Toggles offered for content an estimate doesn't have
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 →