Client portal (one link, no password)

Every customer gets one durable URL that starts as their estimate and turns into their live project dashboard, with no account to create.

What it is

A token-gated web portal at /client/[id]. The same URL renders whichever stage the customer is actually at: sign-in, estimate, intake form, contract, a builder hold screen, or the live project dashboard. There are no passwords by default because the emailed link is the credential. The whole route subtree is wrapped in a tenant-branded theme provider.

Also called: customer portal · client login · estimate link · project portal · customer dashboard link

See it, piece by piece
04

You never sign in to a document you wrote

A builder or agency user opening their own customer link is admitted straight through, password or not. That preview is also excluded from the tracking, so a first-open alert and a read time on a quote always mean a real customer looked, not you checking your own work.

05

The customer can always see what is still ahead of them

A hairline rail across the top of every customer page names the four stages — Estimate, Your Details, Agreement, Live Project — and which one they are on. It is deliberately not clickable; nobody skips ahead. It exists because a customer who has just approved an estimate otherwise assumes the job is booked, and calls a week later to ask why nothing has happened.

Project progress
Four stages; earlier ones ticked, the current one filled in the brand colour. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
06

Nothing reaches the customer until you release it

After the contract is signed the customer sits on a branded your-build-is-being-planned screen — not a dashboard full of stages that may not apply to their job — until you click Start Project. The agreement works the same way: their details land with you first, and they wait on a screen that says so. Without that gate a customer signs and then watches an empty progress bar for two weeks, wondering what they paid for.

07

Fix a number and it reaches the tab they already have open

The estimate re-reads its live fields every ten seconds, so a corrected payment stage, an edited spec, a colour restriction or a cleared warning shows up on the customer's screen without a resend and without asking anyone to refresh. Hold screens poll too, which is why the page becomes the dashboard on its own the moment you start the project. Resending a whole quote to fix one number is how a customer ends up reading the wrong version.

How it works
  1. 1The builder sends an estimate; an estimate_links row is created and its unguessable id becomes the URL
  2. 2GET /api/client-portal?id= loads the link, its branding, and the two builder gate flags
  3. 3The page tries an automatic sign-in and lets the SERVER decide whether the visitor may skip the form
  4. 4A render switch picks the branch: login form, estimate view, hold screen, or ProjectDashboard
  5. 5Background polls refresh the gate flags so the page advances itself when the builder acts
Why we built it

Every customer who reached a quote was asked to type back the name and email the builder had already put on their row in order to send them the link in the first place. It was a wall in front of a document the buyer had been invited to read, and builders arriving from their own dashboard hit the same wall on their own estimate. The portal opens straight from the link — the link itself is the credential, and no customer ever gets a password to lose.

The problem
  • Customers lose emailed PDF estimates and ask for them again
  • Account creation kills conversion on a quote a customer wants to look at once
  • A separate link per stage means the customer holds four URLs and uses the wrong one
Sound familiar?
What you get
One bookmarkable URL survives from quote to keys
No support calls about logins because there are none
The page advances itself as the builder works, with no resend
What's inside

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 →