Walkthrough — Squires Construction · cold startwarm start

One real test customer, run end-to-end across Perch's actual application surfaces — now with two journeys. Cold = a stranger we learn about only after they hand over an email. Warm = a PLG lead we already know, fully customized from the first pixel. Toggle below; the steps, asks, and numbering change with it.

Perch · CRO cockpit · Jun 25 2026 · mock-ups are schematic · sibling to journey-map

Squires Construction
Type
Small commercial GC · Salt Lake City · ~10–20 emp · <$25M
Does
Commercial TI / remodel — restaurant, retail, office
Lands as
Owner-operator (Darin — runs estimating + the company)
Cold: we know nothing. The email is the trigger — everything is gathered after. ~2 asks before value. Warm (PLG): we already have email + name — like McDonald's, the usual is ready. Enrichment pre-ran before they arrived. Zero asks — at most one role tap, depending how warm.
surface real app surface built exists today to build greenfield customize tailor to customer
Arrive — a strangerMarketing landerbuilt
perch.pro/general-contractor
Try it on your jobs
Log in

An anonymous visitor hits a GC-framed lander. We know nothing yet — at most a channel hint (search vs ad). The page can't be personalized; it has to earn the email.

Customization here Best we can do is segment by channel / landing URL. Real personalization is impossible until step 2.
Arrive — already knownPersonalized entryto build
app.perch.pro/i/squires · invited
Welcome, Darin 👋
Squires Construction's workspace is ready.
Commercial TISLC
Open my board →

Squires came in through PLG — a bid invite, a shared plan link, a teammate, or outbound we already had their email for. The very first screen is personalized to them by name and company. No form, no generic lander.

Customization here Identity is passed in on the PLG link (email + name + company), and enrichment pre-ran before they ever clicked. This is the McDonald's move — the order's already up.
Ask — email onlySignupcustomize
app.perch.pro/start
Work email darin@squiresgc.com
See my workspace →

The only ask. No org, no type picker, no password wall. The email domain is the single seed everything downstream grows from.

Customization here Collapse today's 6-step form to one field. This step is the entire reason cold is slower than warm — it's the ask warm doesn't need.
✓ Skipped Ask email — already have it (PLG)  ·  Ask name — already have it  ·  no signup form at all
Enrich — swarm fires on emailbackgroundto build
⚙ researching squiresgc.com…
⌖ Domain → site
Squires Construction
⌖ Classifier
GC · commercial TI
⌖ Size
<$25M · small
⌖ Role
Owner (Darin)
⌖ Project finder
4 SLC TI bids
⌖ Network seeder
9 subs

The instant the email lands, six sub-agents go learn the company — while the email confirms. This is the moment a cold lead becomes known.

Customization here Entire swarm is greenfield. In cold it runs on the critical path — the customer is waiting, so speed + the ~100% accuracy bar both matter.
Pre-enriched — ready from the ripran aheadto build
✓ cached before arrival
✓ Domain → site
Squires Construction
✓ Classifier
GC · commercial TI
✓ Size
<$25M · small
✓ Role
maybe known
✓ Project finder
4 SLC TI bids
✓ Network seeder
9 subs

Because we had the email ahead of time, the swarm already ran — off the critical path, before Squires showed up. Nothing to wait for; it's all cached and loaded.

Customization here Pre-enrichment is triggered at PLG capture, not at their click. Same swarm as cold — but it gets more time and can go deeper, and the only soft spot is whether role came with the lead.
Confirm — don't askOnboardingcustomize
app.perch.pro/confirm
"Squires Construction — SLC commercial GC, mostly restaurant + retail TI. You run it. Right?"
GCCommercial TIRestaurant · RetailOwner
Yes, that's usFix something

One screen, one tap. Pre-filled chips replace three old form steps (type, sectors, profile). Wrong? "Fix something" degrades gracefully to a question. Role is captured here.

Customization here Confirm copy + chips generated from the enrichment. Needed in cold because the data is freshly-guessed and the customer hasn't vouched for it yet.
Maybe one tap — depends how warmOnboardingcustomize
app.perch.pro/ · warm
🔥🔥 Role known
No ask at all. Straight to the board.
"Welcome back, Darin — here's Squires."
🔥 Role unknown
Exactly one micro-tap:
"You're at Squires — estimating, or running it?"
estimatingrunning the company

"How warm" decides everything here. The warmest leads (role came with them) skip even the confirm and land straight on their board. Slightly cooler leads get one question — their role — and nothing else, ever.

Customization here The only possible ask in the warm journey is role, and only when it's unknown. Everything else is already true and pre-filled. Role still must be captured (today's gap) — here it's at most a single tap.
▼ From here, both journeys converge — same surfaces, same value
Reveal value — a pre-filled workspaceJobs · Tomto build
app.perch.pro/dashboard
⚑ A restaurant TI in Sugar House bids in 3 days — want to scope it?
Bidding
Sugar House café TI
$420k · due Fri
Retail shell — Draper
$1.1M · due 6/30
Watching
Office TI — Murray
$680k
Subs
9 subs you use
pre-loaded

Squires lands in a workspace that's already populated — a pipeline of TI jobs they're likely bidding, the subs they use, and a Tom alert on a bid closing this week. Not an empty workspace + a notes box. (In warm, this is the first thing they see.)

Customization here Pipeline seeded from public bids / permits (project-finder); subs from the network seeder. The stickiness lever — real data in during onboarding.
The next question — the conversion leverChat / Copilotcustomize
app.perch.pro/c
Perch
Darin — you've got 4 live bids on the board. Which one's most worth winning? Drop the plans and I'll scope it right now.
The Sugar House café — here's the set 📎

The single most-motivating ask, tuned to an owner-operator: not "what are you bidding this week?" (the estimator's line) but "which is worth winning — I'll scope it." The payoff is their real, live bid.

Customization here The question is role + size conditioned. This exact line per cell is the lever the team signs off on.
Value proof — Sarah scopes the real planJobs · Sarahbuilt
app.perch.pro/jobs/sugar-house-cafe
Scope · Sugar House café TI · 47 pages read
Demo + partitions1,240 SF
Kitchen rough-in (MEP)flagged
Storefront / glazing2 ea
Finishes schedule12 rooms
⚠ Spec calls for grease-duct rated assembly — not in the base drawings. Possible change order.

Sarah reads the actual plan set and returns a scope summary in seconds — with a money flag (a spec/drawing conflict = likely change order). The wow is on their own job, not a canned demo.

Customization here Recipe tuned to GC TI work (scope + buyout summary), not a single-trade takeoff. Sarah exists — the GC recipe is the work.
Activate teamTeamcustomize
app.perch.pro/team
Pull your crew into the board
estimator@squiresgc.comRole: Estimator ▾
super@squiresgc.comRole: Field → Field Ops ▾
Send invites

Squires invites an estimator and a superintendent into the already-built pipeline. Roles are set at invite — and the field role routes somewhere different.

Customization here Capture role at invite (today hardcoded "member"). The super routes to Field Ops / mobile, not chat. Role-aware invite is a build. Each invite is also a fresh warm lead for the next person.
Check — close in-flowPlan · Stripebuilt
app.perch.pro/plan
You scoped a live bid and built your board. Keep it running —
21-day trial active
Add a card to keep your pipeline after the trial
•••• •••• •••• 4242
Start Squires on Perch

The card ask comes after the value, triggered when Squires scopes a real bid and moves a job. Agent-closed, one session, no salesperson.

Customization here The trigger moment is the customization — earn the card after the first real wow. Stripe + trial exist; the in-flow trigger is the change.

Cold vs warm — what actually differs

 ❄ Cold start🔥 Warm start (PLG)
First touchAnonymous visitor on a generic landerPersonalized entry — greeted by name + company
Email + nameThe one thing we ask forAlready have it — never asked
EnrichmentFires after email, on the critical pathPre-ran before arrival — cached, deeper
Confirm stepNeeded — data is freshly guessedUsually skipped — only a role tap if role is unknown
Asks before value~2 (email → confirm)0–1 (maybe role)
Feels likeA fast, smart intakeMcDonald's — "the usual," already up
From value onIdentical — both converge on the same surfaces (Jobs · Chat · Sarah · Team · Plan)

Customization ledger — what each journey demands

The diagram collapsed into a build list — the seed for Brock's decision tree + technical mapping. Warm front-loads the work onto the PLG capture; cold front-loads it onto post-email enrichment.

StageSurfaceCustomization requiredApplies to
Warm capturePLG touchpointPass identity (email+name+role-if-any) on the link; pre-run enrichment before arrivalwarm to build
ArriveLander / entryCold: channel-segmented lander · Warm: personalized, name+companyboth
AskSignupCold only: collapse 6-step form → email. Warm: removedcold
EnrichSwarm6-agent research; ~100% bar. Cold = on critical path, warm = pre-cachedboth to build
Confirm / roleOnboardingCold: full confirm + role capture · Warm: skip, or one role tap if unknownboth customize
Reveal valueJobs · TomSeed pipeline from public bids + subs from network seederboth to build
Next questionChatRole + size–conditioned question (the conversion lever)both customize
Value proofJobs · SarahGC-TI scope recipe + spec-vs-drawing change-order flagboth Sarah built
ActivateTeamRole-at-invite; field → Field Ops; each invite = a new warm leadboth customize
CheckPlan · StripeValue-triggered in-flow close (after the wow)both Stripe built

Next: run a white-glove customer (Kier / Zwick-class) the same way · then turn this ledger + the cold/warm fork into the decision tree.