Funnel v2
The whole HomeZero funnel, end to end — one canonical design after a week of live iteration.
HomeZero · 2026-06-23 · market under build: North Fork Valley (Paonia · Hotchkiss · Crawford · Somerset) · only Paonia 81428 in Convex today · siblings: launchpad-redesign · onboarding-smoke-test
The funnel in one breath. A stranger lands anonymously → fills two short forms (one for their
advisor, one for the market) → a tiny resolver picks their market in milliseconds → the market agent reflects its
read back as a live dashboard → they create an account → they land on an activation-first launchpad → they open a
board of homes that lead with the read, not a budget slider → they zero a home → a full briefing blooms.
Every household gets exactly one advisor and one market agent. The market under build is the
North Fork Valley. Every number on every surface is real, computed live from Convex.
01
Landing
Anonymous. Search like you do today.
02
Two forms
Advisor context · market context.
03
Resolver
Tiny fast workflow → your market.
04
Reflection
"We read North Fork Valley" + numbers.
05
Create account
Births advisor + market agent.
06
Launchpad
Install extension · connect WhatsApp.
07
Board
Cards lead with the read.
08
Zero → bloom
A full briefing authors itself.
02 Two-form onboarding
Onboarding asks for two different things and keeps them apart on purpose. One form feeds your advisor — a
relationship of one-to-one. The other feeds the market agent — which reads every user's answer in
aggregate. The split is the design: your advisor reads yours alone; the market pools everyone's, and that
pool is a demand signal.
Locked
- Two distinct forms, two distinct consumers. Advisor = private read; market = aggregate read.
- Form B's pooled answers are the market's demand signal — what people want here, in what band, on what clock. Same data that drives launch order (see the waitlist below).
03 The resolver — a tiny, fast agentic workflow
The place a user types has to become a market in the time it takes to tab to the next field. So the
resolver is deterministic-first and only reaches for an agent when it has to.
The path
- Deterministic match (the hot path). Compare the typed place against the known
markets table — names, aliases, ZIPs, town lists. A hit resolves instantly. No LLM in the onboarding hot path.
- Agent on miss (only). No deterministic hit → a tiny Flue workflow runs: classify the place, decide near-miss vs. out-of-bounds. This is exactly the "run a tiny fast workflow" slot in the Flue framework.
Out-of-bounds policy — "Waitlist + adjacent pull"
- Near-miss → adjacent pull. A place just outside a live market gets pulled to the nearest warm market. The user still wakes into real data.
- True out-of-bounds → warm waitlist. No nearby warm market → a friendly demand-capture waitlist. That list is the launch-order signal: we light up markets where demand already pooled.
Births stay gated. No market is born on the fly during onboarding. Cold-start is the enemy — the advisor must
wake into a market that already has data. We never hand a user an empty market and call it personalization.
04 Reflection — the market billboard
Step 1 of onboarding doesn't just accept the place — it reflects the market agent's read back. Type
"Paonia," and the screen answers "We read North Fork Valley" and unfurls a mini dashboard of real numbers.
This is the keystone moment: the entire resolver-plus-market pipeline firing in one screen, before the user has
spent a dime or made an account.
Reflection · "We read North Fork Valley" — computed live from Convex
North Fork Valley, at a glance
The sharp proof — why we lead with the read
- 72% of homes here are caution-or-overpriced (13 overpriced + 18 caution of 43). Only
2 are "good."
- That is the entire argument for HomeZero in one statistic. A budget slider tells you what you can afford. The
read tells you that almost nothing on this market is honestly priced — which is the thing a buyer
actually needs to know. Lead with the read.
05 The daily-alarm metric skill
Those numbers don't come from a hand-edit. The market agent owns them — because market-wide
numbers are shared, they belong to the shared agent, not the private advisor. The agent has a skill that runs on
the Flue cron alarm and rewrites the billboard once a day.
// Flue DO — billing-safe scheduled work, never `claude -p`
cron: "0 9 * * *" // daily 09:00
→ scheduled handler fires
→ self-dispatch: { kind: 'metrics' }
→ skill: recompute key numbers from Convex listings
(on market · typical asking · median DOM · over-the-record · honest deals)
→ write to the billboard / board
Locked
- The board is a billboard the agent writes to once a day. Keep it data-light — numbers, not prose.
- Seed a starter metric set (the five tiles above). Later, the market agent can decide which metrics matter for its market.
- Billing-safe by construction: cron alarm → scheduled handler → self-dispatch. No
claude -p, ever.
06 The launchpad /home — activation-first
After Finish, /home is an activation surface, not a dashboard. Two goals, in order:
(1) install the Chrome extension, (2) connect WhatsApp. Everything else is
secondary. The built visual lives in
launchpad-redesign.html.
- Install hero, claude.ai/downloads styling. Dark Install button on the left; on the right, a live Zillow+HomeZero preview of a real listing — 318 3rd St, $615,000 — so the value is obvious before the click.
- WhatsApp subcard. A typeable number field + Connect. Moved here out of onboarding.
- Market Report widget. A teaser of the daily billboard — white tiles, centered, big bold Fraunces numbers (the §4 mock).
- Board as the entry. The board is introduced here; opening it is the next step.
- Workbenches are placeholders ("Run your numbers," "Compare homes," "Your shortlist") — marked Soon.
The greeting — agent talking, no costume
- The greeting at the top is the agent simply talking to you. The app shows no "advisor:" label, no quotes, no "written by" line. It just is your agent.
- (Spec-only intent: it's authored by the advisor into the same conversation session as WhatsApp. The app never says so — captured here, not shown there.)
Fixed now → agent-fluid later. Today the layout is deterministic: activation first, board second, placeholders
last. The target state is an advisor-curated launchpad that decides which widgets to surface by where you are in the
journey. We ship the fixed version and earn our way to fluid.
07 The board — read-led
Killed: the money slider. One data point was hijacking every card — a parlor trick. Affordability is one input,
not the headline. It comes off the cards.
Cards now lead with the read: the verdict's category chip and headline, first. Budget becomes a
quiet filter, not a hero element. The carry/footing math moves off the cards into a
"Run your numbers" workbench, where someone goes when they want it — not in their face on every
tile.
Board · cards lead with the verdict — real listings, real verdicts
overpricedA genuine cabin, an optimistic price
41014 Beaver Trail
$509k
cautionWalkable, chasing the market down
57 Cedar Drive
$625k
fairAn honest price, finally
613 3rd Street
$306k
goodHonest price, heart of town
229 Colorado Ave
$425k
Locked
- Verdict (category + headline) leads every card. The number is not the story; the read is.
- Budget = a quiet filter on the board, not a per-card hero.
- Carry/footing → a "Run your numbers" workbench, off the cards.
08 One advisor, many windows
There is one relationship, surfaced in three places. The launchpad greeting, the WhatsApp thread, and the
questions on a board card are the same conversation session. The user never re-introduces
themselves; the agent always has a way to reach them.
🏠
Launchpad
The greeting up top — the agent talking to you on arrival.
💬
WhatsApp
Morning briefing + live alerts, same thread.
🗂️
Board
Questions on a card — answered into the same session.
09 Real data everywhere
Every number on every user-facing surface is computed live from Convex listings — 46 listings, 43 active in
Paonia. No invented content on anything public-facing. No individual people's names (institutional names
are fine).
- Reflection tiles — computed now: 43 on the market · $599k typical · 58d median DOM · 13 over the record · 2 honest deals.
- Board cards — bound to real
listings rows and their cell-authored verdict (category + headline). The "scores" you saw in v1 were UI-derived and are gone with the slider.
- Launchpad preview — a real listing (318 3rd St, $615,000).
10 The mechanical cutover (building now)
Three changes are being implemented in parallel with this spec. None need more design — they're plumbing.
| # | Change | What |
| a | Label fix | "Delta County market agent" → "North Fork Valley market agent", everywhere it surfaces. |
| b | WhatsApp out of onboarding | Remove the WhatsApp field from the onboarding flow; it lives on the launchpad now. |
| c | Wire star→ringMarket | Zeroing a home rings the Flue market agent's drain sweep (marketDoorbell.ringMarket), retiring the old cells doorbell ring. Makes Act 3 of the smoke test click-only. |
Acceptance gate: the onboarding smoke test runs at the end of
every build. Green there = the funnel is alive.
11 Status — per surface
| Surface | State | Notes |
| Resolver — deterministic match | live | markets table + resolveMarket in production (NFV seeded). |
| Resolver — agent-on-miss | to build | Tiny Flue workflow for near-miss / out-of-bounds classification. |
| Reflection billboard | live numbers via skill | Step-1 reflection ships; the daily metric skill that writes the tiles is to build. |
| Two-form onboarding | to build | Split advisor (private) / market (aggregate) forms. WhatsApp removed (§10b). |
| Daily-alarm metric skill | to build | Flue cron "0 9 * * *" → recompute → write billboard. |
| Launchpad (activation-first) | mocked | Design locked in launchpad-redesign.html; build pending. |
| Board — read-led cards | live slider removal | Typed boardCards table live; remove the footing slider, lead with verdict. |
| Star → ringMarket | to build | §10c — the wire-up that makes the bloom click-only. |
| One-session advisor | live | Per-session models live; launchpad greeting writes into the WhatsApp thread. |
The two siblings