The sign-in card tells a password-less visitor that anyone with the link can view the estimate, and offers to add password protection. Setting one hashes with bcrypt. Once set, the public route refuses to change it. Passworded links also stop the portal handing out contact details and force a token on the live project data feed.
Also called: password protect my quote · private estimate link
- 1Customer clicks 'Add password protection' and enters it twice
- 2POST /api/client-portal/set-password hashes with bcrypt and stores it
- 3The route refuses outright if a password_hash already exists
- 4Later loads see hasPassword true, and the project poll must carry the session token
Anyone holding or guessing a link id could overwrite an existing customer's portal password, locking the real buyer out of their own project and handing the link to a stranger. Customers who want a password can still set one, but an existing one is never silently overwritten. Accounts still on older, weaker password storage are upgraded quietly the next time they sign in, so nobody is locked out by the fix.
- Public links with no privacy option for price-sensitive buyers
- An unauthenticated endpoint that could hijack someone else's link
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 →