Customer funnel checklist

A popover on the selected estimate listing all five customer stages with a checkmark on each one cleared and a link that opens what the customer is actually looking at.

What it is

The admin-side view of the customer's journey: Estimate, Project Info, Contract Out, Countersign, Dashboard. Cleared stages carry a green check, the current stage is highlighted, upcoming stages are dotted placeholders, and each row has a 'View' that opens the corresponding customer surface in a new tab.

Also called: where is the customer · funnel stages popover · customer journey checklist

See it
Customer funnel checklist
CustomerBuildingAmountStatus
Delia Yoder40×64 Shop$7,280Sent
Gideon AltEquipment Storage$8,040Approved
Ronan Petsch40×64 Shop$9,180Draft
Ivy Brubaker40×64 Shop$3,480Sent
Sutter KlineBarndominium$5,570Sent
The funnel popover open (EstimateFunnelChecklist.tsx) with checks on stages 1–3, stage 4 highlighted as current, and the external-link icon on the Contract row. Sample data — no customer information appears here.
How it works
  1. 1Timestamps come from estimate_links and contracts — approved_at, customer_form_completed_at, customer_signed_at, counter_signed_at, project_started_at.
  2. 2Funnel monotonicity is enforced: if any later stage has a timestamp, every earlier stage counts as complete, even when its own timestamp is missing.
  3. 3The current stage number comes from the same estimateStageOf() the list uses, so the pill and the list can't disagree.
  4. 4The Contract row offers 'Review & Send Contract' while the contract is still pending, and both an admin read-only view and the customer's own view.
Why we built it

A builder filtering the list down to stage 2 kept seeing stage 3 on the estimates that came back, and the same disagreement showed up at the other end of the list. Both numbers were arithmetically right: the list was saying which stage a deal is in, while the pill was counting how many stages were complete — two different quantities, both labelled 'stage', on one screen. They now come from a single derivation rather than two that happen to agree today, and the checklist can no longer show an impossible state like a current stage sitting above one already ticked. Each row links to what the customer is actually looking at, because the internal view answers what the contract says and only the customer's own page answers what they are seeing.

The problem
  • Two controls on one screen reporting different 'stage' numbers
  • Checklists showing an impossible state (current stage behind a completed one)
  • No way to see the customer's own screen without asking them for a screenshot
Sound familiar?
What you get
See the customer's exact screen in one click
Never guess which step they're stuck on
The checklist and the list always agree

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 →