Internal concept · not linked from any public page · noindex

The 3-Tap Estimate

A proposal for radically simplifying the consumer estimate page — from a 15-decision form to photos → vehicle → one tap → estimate — and restructuring lead capture so contact info is asked at the moment of intent instead of up front. Every recommendation below is grounded in a product that already proved it works, and in what our own backend actually needs.

1 · The problem

Today's form asks for 15 decisions before showing any value

Counted from the live /consumer page. The person filling this out is usually standing next to a damaged car, on a phone, possibly rattled from an accident. Every decision below is a place to give up.

15+
decisions before the estimate: up to 6 photos, VIN or 3 dropdowns, a 20-zone damage diagram, special-condition chips, severity, description, drivable, injured, at-fault, ZIP, email, phone, consent
~2 MB
page weight on cellular — the interactive vehicle diagram alone ships a 1.4 MB PNG before the customer does anything
3
decisions the AI actually needs from the customer (photos, vehicle, severity/drivability) — see why below
The buried insight — from our own backend

Our estimate prompt already instructs the AI: "If photos and the reported damage zone conflict, FOLLOW THE PHOTOS" and "The reported damage zone is a customer reference only." In other words: the 20-zone diagram, the chips, and the free-text description are collected, then largely overridden by the photo analysis. We are charging the customer effort for inputs our own system treats as a hint. The severity picker is the one non-photo input that genuinely calibrates the estimate — so it stays (as one tap).

2 · Design principles, each borrowed from a product that proved it

Four rules the new flow follows

① Value before ask

Deliver the estimate before requesting contact info. A person who has seen their number is far more motivated to leave a phone number to act on it.

Zillow

The Zestimate is shown instantly from an address — no signup. Contact capture happens when the visitor clicks "contact agent," at peak intent. That ordering is the core of how Zillow became the top real-estate lead engine in the US.

② One decision per screen

Sequential single questions feel effortless; a long page of parallel questions feels like homework. Completion research (Baymard Institute, and every A/B study Typeform publishes) consistently shows fewer visible fields → higher completion.

Lemonade · TurboTax

Lemonade sells insurance — a far heavier product than a repair estimate — through a ~90-second, one-question-at-a-time flow, and built a multi-billion-dollar book on it. TurboTax turned the most hated form in America into single-question screens for the same reason.

③ Let the photos do the work

Anything the AI can infer from a photo should never be a form field. We already send all photos to the model; it already identifies panels, sides, and damage type.

CarMax · Carvana

Their instant-offer flows collapsed "describe your car's condition" from dozens of questions into a plate/VIN plus a handful of taps — because their pricing models fill the gaps. Offer volume exploded. Same physics here: our model fills the gaps from photos.

④ Capture the lead progressively, at intent moments

Don't ask for name + phone + email + consent as a wall. Offer actions the customer wants — "text me this estimate," "have 3 local shops call me" — each of which naturally carries the contact fields with it.

Thumbtack · Angi

Home-services marketplaces capture contact details inside the "get quotes from pros" action, not on the landing form. The contact ask is reframed as the customer's benefit ("so shops can reach you"), which is also exactly the TCPA-clean way to collect a phone number.

3 · Recommended concept — interactive mockup

Concept A: "Snap → Car → Tap → Number"

Click through the phone. Three screens before the estimate; every lead-capture ask comes after the customer has their number, attached to an action they want.

⚡ ShopCaliper
Snap the damage
2–3 photos is plenty. Get the whole panel in frame.
📷
Take photos
or tap to choose from your library
+
📍 Los Angeles, 90012 · edit
⚡ ShopCaliper
Which car?
Fastest: point your camera at the VIN (door jamb or windshield corner).
🔍
Scan VIN
reads it automatically — no typing
⚡ ShopCaliper
Two quick taps
This calibrates your estimate.
How bad does it look?
Scratch
Dent
Major
Can you drive it?
Yes
No
Not sure
⚡ ShopCaliper
🔎
Reading your photos…
Identifying panels, parts, and labor · ~30s
⚡ ShopCaliper
Estimated repair cost
$1,840
typical range $1,550 – $2,200 · 2021 Honda CR-V · right front
📱 Text me this estimate
Keep the link — compare it against shop quotes.
(555) 555-0123
🔧 Have 3 local shops contact me
Vetted, near 90012 · free · they'll confirm the price in person
💬 "Should I go through insurance?"
Ask Alex — deductible math, claim guidance, total-loss risk.

What changed, screen by screen

  1. Photos + location first. The camera is the hero. ZIP auto-fills from geolocation with one-tap edit (falls back to a single field). The 1.4 MB damage-diagram PNG is gone from this flow entirely — the page gets dramatically lighter for free.
  2. Vehicle in one gesture. VIN photo-scan already exists in our backend — it becomes the default path instead of a power-user feature. Dropdowns remain one tap away. (License-plate lookup would be even faster — see open questions.)
  3. Two taps we genuinely need. Severity calibrates the AI's line-item budget (it's a real input to the prompt), and drivability is both an estimate signal and a tow-referral signal. Everything else the diagram/chips/description used to ask is inferred from photos.
  4. The wait is honest. Same async pattern the backend already uses (202 + poll) — countdown, progress, no frozen screen.
  5. Leads are captured as favors to the customer. "Text me this" = phone + TCPA consent. "Have shops contact me" = name + phone → the full referral flow that already exists. "Ask Alex" collects insurance context conversationally. Injured/at-fault move into Alex's script (attorney routing preserved) — they were awkward as form fields and are natural as chat.
4 · Every current field, accounted for

Nothing shops need is lost — it's captured smarter

"Simple" must not mean "worse leads." This is the disposition of every input on today's form, and where the new flow gets the same signal.

Input on today's formDispositionWhere the signal comes from now
Photos (up to 6)KEEP — promotedScreen 1, the hero action. Backend requires ≥1 photo already.
ZIP codeKEEP — auto-filledGeolocation prefill + one-tap edit. Needed for shop matching & labor rates.
VIN / Year+Make+ModelKEEP — one gestureVIN photo-scan (already built) becomes the default; dropdowns one tap away.
Severity pickerKEEP — one tapScreen 3. It genuinely calibrates the AI prompt's line-item budget.
Drivable?KEEP — one tapScreen 3. Estimate signal + tow-referral trigger.
20-zone damage diagram + chipsCUTAI infers panels/sides from photos; backend already treats zone input as reference-only and follows the photos on conflict. Saves 1.4 MB + the whole diagram bug class.
Issue type + free-text descriptionCUT (optional later)Inferred from photos. An optional "anything we should know?" one-liner can live on the result page for edge cases.
Shop type preferenceCUTBarely differentiates the estimate; shops themselves are matched by ZIP + category.
Email (required-ish)MOVED to intent moment"Text me this estimate" makes phone primary; email offered as alternative delivery. Result-page permalink already exists for no-contact users.
Phone + SMS consentMOVED to intent momentCaptured inside "text me" / "get connected" — with the consent checkbox attached at exactly the point the number is given (TCPA-clean by construction).
Injured? / At fault?MOVED to AlexAsked conversationally after the estimate, where they feel natural. Attorney-referral routing preserved.
Damage zones for the shop's benefitAUTOThe AI's own line items name the panels — shops see "R front fender Repl, bumper cover Rfn," which is more precise than customer-tapped zones.

What a "decent lead" means to a shop — and where each piece comes from

Shops needMinimum viable leadGreat leadCaptured at
Contactable customerPhone + consent+ name, preferred time"Text me" / "Get connected" cards
LocalZIP+ neighborhoodScreen 1 (auto)
Real, scoped damagePhotos + AI line items+ severity, drivabilityScreens 1 & 3
Identified vehicleYear/Make/Model+ VIN (exact parts)Screen 2
IntentRequested contact+ insurance status, timeline"Get connected" tap; Alex asks insurance/timeline
5 · Alternatives considered (and why A wins)

Two other credible shapes for this flow

Concept B — plate-first (CarMax-style)

"Enter your license plate" as step 1; a plate-to-VIN API resolves the exact vehicle. Fastest possible vehicle entry — plates are on the car, memorized, and photographable.

Why not now: plate decoding requires a paid third-party API (typically ~$0.03–0.10/lookup; NHTSA's free decoder is VIN-only, which our scan already uses). Worth piloting inside Concept A later as a fourth tab on the vehicle screen — it's an enhancement, not a different architecture. Decision needed (open question #2).

Concept C — full chat intake (Lemonade-style)

Alex runs the entire intake conversationally: "Send me a pic — ouch, that's the right fender. What year is the CR-V?" Warm, differentiated, on-brand.

Why not as the primary path: it roughly doubles per-lead AI cost (every turn is a model call on top of the estimate call), adds latency at each step, is harder to skim/go-back, and is the hardest variant to A/B against the current page. Alex stays where he adds unique value: post-estimate insurance guidance and the injured/at-fault conversation. Lemonade itself has been moving its highest-volume steps from chat back to tap-buttons — the chat is the brand, the buttons are the conversion.

6 · Bugs & issues anticipated — designed out in advance

What could go wrong, and what the design already does about it

⚖️
TCPA: phone capture and the consent checkbox are welded together in one card — a number can never enter the system without contemporaneous consent language. (The consent-storage columns are already prepared in PENDING_MIGRATIONS.sql; backend wiring is a tracked follow-up.)
💸
Abuse/cost: one AI call per estimate is preserved (no per-step model calls), and the estimate/scan/SMS endpoints are already rate-limited per-IP from the hardening PR. Simplifying the form does not widen the spend surface.
📉
"Fewer upfront fields = fewer captured emails": true by design — we trade low-intent emails for higher-intent phone leads captured post-estimate. Mitigations built in: the permalink/QR "save this estimate" path already exists for customers who leave nothing, and the "text me" card converts at the moment of peak motivation (the Zillow ordering). This is the key metric the A/B must watch (see rollout).
📵
Geolocation denied / wrong: ZIP chip falls back to a single manual field, prefilled from IP country the way the current page already does. Never a blocker.
🌙
No-photo situations (car towed away, night, photos on someone else's phone): backend requires ≥1 photo today. Keep that requirement (photo-less estimates are junk leads for shops), but add "email me a link to finish later" on screen 1 — turns a dead end into a re-engagement lead instead of a lost visitor.
🔄
Mid-flow abandonment: the current page already saves a local draft and restores it; the step flow keeps that (each step writes the same draft object), so a customer who bails at step 3 resumes at step 3.
📱
HEIC / rotated / dark photos: already solved in the existing uploader (EXIF orientation fix, downscale, dim-photo enhancement) — the new flow reuses that code path untouched.
🧪
Regression safety: ship as a parallel page (/consumer-v2), unlinked, hitting the exact same backend endpoints with the same payload shape (diagram fields simply sent empty — the API already treats them as optional hints). Zero changes to the existing page until the A/B says so. Rollback = flip a link.
📊
We currently can't measure any of this: there is no funnel analytics today. The A/B needs four counters (step views, estimate views, text-me conversions, get-connected conversions) — a tiny server-side event log or a privacy-light script (e.g. Plausible). This is a prerequisite, not a nice-to-have.
7 · Rollout & open questions

How this ships without risk

Phase 1 — build /consumer-v2 (parallel, unlinked, same backend), add the 4 funnel counters.
Phase 2 — split traffic from the landing-page CTA 50/50; watch estimate-completion rate and lead-per-visitor (not just lead-per-form-start — that's the metric the old page wins by juicing low-intent emails).
Phase 3 — promote the winner to /consumer; keep the loser reachable for 30 days; delete after.
Q1 — Replace or A/B?

Recommendation: A/B via parallel page (Phase 2 above). But if you'd rather move fast and skip measurement, a straight replace is buildable — say which.

Q2 — License-plate lookup: is a paid API (~$0.03–0.10/lookup) on the table?

It's the single biggest remaining friction-cut after this redesign. Not required for v2 — VIN-scan covers most of the gap free.

Q3 — Is insurance status a must-have before a shop accepts a lead?

Today's referral flow doesn't require it and shops still reply. The new flow gets it via Alex (post-estimate) rather than a form field. If pilot shops say it's a dealbreaker field, it becomes a one-tap chip on the result page instead ("Going through insurance? · Yes / No / Not sure").

Q4 — Keep email anywhere in the pre-estimate flow?

Recommendation: no — phone-first with the permalink as the no-contact fallback. If you want an email capture kept, the natural spot is the "email me a link to finish later" rescue on screen 1 and an "email me this estimate" option next to "text me."