The funnel is shaped by three principles, in priority order:
Where the borrower's commitment sits at each step, and what we can ask at that level of trust:
Y-axis = user commitment / willingness (1 = abandoning, 10 = will provide anything). The score-reveal in Form 1 and Form 2 are the conversion peaks; trust dips on tax-/income-style asks; recovers as the offer firms up.
Decline screens at every gate boundary mean we never waste applicant time. Each decline is a retarget surface (Form 4, deferred).
Audience: partner / broker / anonymous web visitor. Goal: quick filter + reveal Sooner's price to create the "I want this" commitment moment. Time: ~2 minutes.
| # | Q ID | Label | Type | Maps to | Status |
|---|---|---|---|---|---|
| 1 | fullName | Full name | text | identity | move to step 1 |
| 2 | emailInput | contact | move to step 1 | ||
| 3 | phoneInput | Phone | tel | contact | move to step 1 |
| 4 | heroValue | Property budget (AED) | number | G10/G8 | keep |
| 5 | found_property | Have you found a property? | chip | routing | keep |
| 6 | areaMulti | Area (1–3) | chip multi | G10 H | keep |
| 7 | propertyType | Property type | chip | G10 | keep |
| 8 | bedrooms | Bedrooms | chip | G10 | keep |
| 9 | residency | Residency status | chip | G1 | keep |
| 10 | monthly_take_home | Monthly take-home (HH if joint) | number | G6 D | NEW — collapsed from 4 fields |
| — | commissionInput | Avg commission | number | D | DROP — folded into #10 |
| — | householdIncomeInput | Partner fixed income | number | G6/D | DROP — folded into #10 |
| — | partnerCommInput | Partner commission | number | D | DROP — folded into #10 |
| 11 | cost_breakdown | NEW: Cost Breakdown display | display | conversion | ADD — GTM-69 |
| 12 | sooner_offer | NEW: Sooner Offer reveal | display | conversion | ADD — GTM-69 |
| 13 | partner_full_name | NEW: Partner full name (if joint toggle) | text | F2.5 prefill | ADD — GTM-72 |
| 14 | timeline | Purchase timeline | chip | lead priority | keep |
Audience: identified borrower (came through Form 1). Goal: indicative SCS + fee tier reveal. Time: ~4 minutes after redesign (was 7-9).
| # | Q ID | Label | Maps to | Notes |
|---|---|---|---|---|
| — | Pre-filled from Form 1 — confirm only, not re-asked | |||
| — | full_name, contact_email, contact_phone, property_budget_aed, property_timeline, has_found_property, property_area, property_type | |||
| 1 | cost_breakdown | Cost breakdown (re-displayed) | conversion | computed |
| 2 | sooner_reveal | Sooner offer (re-displayed) | conversion | computed |
| 3 | service_selection | Which Sooner services? | fee tier driver | NEW — multi-select CFF (required) / Discovery / Brokerage |
| 4 | fee_tier_badge | Your fee tier (live) | conversion | NEW — display only, reflects #3 in real-time |
| 5 | employment_type | Employment type | G7 C | branches business_years |
| 6 | employer_name | Employer name | C | autocomplete vs 370-employer taxonomy |
| 7 | employer_tenure | Tenure bucket | G7 | <6mo salaried → decline |
| 8 | business_years | Years in business (self-emp only) | G7 | <2y self-emp → decline |
| 9 | has_co_applicant | Will a co-applicant be on the mortgage? | routing | NEW — GTM-62 (done, uncommitted). Gates Form 2.5. |
| 10 | household_income_total | Monthly income (toggle solo/combined) | G6 D, A | fixed portion |
| 11 | variable_income | Variable pay (commission/bonus) | D | auto-computes commission % |
| 12 | has_existing_mortgage | Existing mortgage? | G9 | yes/no only — amount via AECB |
| 13 | has_rent | Pay rent? | I | routes #14 |
| 14 | rent_payment | Monthly rent (AED) | I | was annual — bug fixed GTM-61 |
| 15 | has_personal_loan | Personal loans? | G9 | yes/no only |
| 16 | has_car_loan | Car loans? | G9 | yes/no only |
| 17 | has_credit_card | Credit cards? | G9 | yes/no only |
| 18 | savings | Liquid savings band | B | bands: <50k / 50–150k / 150–300k / 300k+ |
| 19 | property_usage_raw | Primary / secondary / investment | G10 | investment → different LTV |
| 20 | down_payment_source | Down payment source | KYC | family gift → SoW doc required |
| 21 | aecb_band | AECB credit band (self-est) | G3 G | SIMPLIFIED from precise number — Excellent / Good / Fair / Don't know |
| Questions REMOVED from F2 (compared to current 33-Q v5.html) | ||
|---|---|---|
full_name, contact_email, contact_phone | pre-fill from F1 | — |
property_budget_aed, property_timeline, has_found_property, property_area, property_type | pre-fill from F1 | — |
mortgage_payment, personal_loan_payment, car_loan_payment, credit_card_payment, credit_card_outstanding, other_monthly_commitments | doc-extract from AECB + bank stmts | — |
uae_residency duration | doc-extract from visa page | — |
aecb_score precise number | simplified to band | — |
Net change: 33 Qs → 21 Qs (kept) + 2 new + 1 simplified. Customer time drops from 7–9 min to ~4 min.
Triggered when: has_co_applicant === yes. Audience: primary applicant on behalf of partner (typically spouse). Time: ~2 minutes additional.
| # | Q ID | Label | Maps to | Pre-filled? |
|---|---|---|---|---|
| 1 | co_applicant_full_name | Co-applicant full name | identity | Yes, from F1 partner_full_name |
| 2 | co_applicant_email | contact | No | |
| 3 | co_applicant_phone | Phone | contact | No |
| 4 | co_applicant_employment_type | Employment type | G7 C | No |
| 5 | co_applicant_employer_name | Employer | C | No |
| 6 | co_applicant_monthly_income | Monthly income (fixed) | G6 D | Yes if F1's partner_income captured |
| 7 | co_applicant_variable_income | Variable pay | D | Yes if F1's partner_commission captured |
Joint scoring: primary + co-applicant income summed for G6/D; debts summed for G9/A; tenures averaged for G7/C.
Audience: committed borrower who has seen their indicative SCS + fee tier. Goal: document collection + final SCS lock. Time: ~5 min upload + automated extraction.
| # | Q ID | Label | Why F3-unique |
|---|---|---|---|
| 1 | screen-otp.phone | OTP login (auth) | Auth gate; verifies phone |
| 2 | po-ownership | Ownership / contribution split | Joint-savings allocation only — not in F2 |
| 3 | po-biz-license | Trade license number (self-emp only) | Conditional; trade-license PDF verifies |
| F3 questions REMOVED (all duplicated F2) | ||
|---|---|---|
po-emp-type, po-emp-name, po-biz-name | dup of F2 employment | pre-fill + doc verify |
po-emp-title | MOVE to F2 (new Q for Cat-C precision) | — |
po-cc-limit, po-cc-balance, po-no-cc, po-ob-category, po-ob-amount | dup of F2 debt yes/nos | AECB extracts amounts |
po-savings | dup of F2 savings band | bank stmts verify |
po-credit | dup of F2 aecb_band | AECB doc verifies |
| Tile | Required if | Extracts | Verifies | Status |
|---|---|---|---|---|
| Emirates ID (front + back) | always | name, DoB, nationality, EID # | G1, G2, identity | existing |
| Passport copy | always | name romanized, nationality, expiry | identity | existing |
| Visa page | always | visa type, residency duration, sponsor | G1, Cat-E | existing |
| Bank statements (6) | always | income, rent, recurring debits, balance | G5, Cat-B, Cat-I | existing |
| AECB report or consent | always | score, history, all debts | G3, G4, Cat-F, Cat-G | existing |
| Salary certificate | salaried | employer, salary, tenure, allowances | G5, G7, Cat-C, Cat-D | NEW — GTM-63 done |
| Employment letter | salaried | employment status, role | G7, Cat-C | NEW — GTM-63 done |
| Trade license PDF | self-employed | business name, license #, years | G7 | NEW — GTM-63 done |
| Audited financials | self-emp, recommended ≥ 2y | revenue, profit | G7, Cat-B | NEW — GTM-63 done |
| Co-applicant docs (×5) | has_co_applicant | parallel set: EID, passport, visa, salary cert, bank stmts | joint G1/G7/G5 | QUEUED — GTM-73 |
The redesigned funnel runs on a "ask once, pre-fill downstream" discipline. URL params and Supabase row carry data forward:
| F1 field | URL param emitted | F2 field consumed |
|---|---|---|
fullName | ?name | full_name |
emailInput | ?email | contact_email |
phoneInput | ?phone | contact_phone |
heroValue | ?property_budget_aed | property_budget_aed |
areaMulti | ?property_area | property_area |
propertyType | ?property_type | property_type |
bedrooms | ?bedrooms | bedrooms |
found_property | ?has_found_property | has_found_property |
residency | ?residency | uae_residency_status |
monthly_take_home | ?household_income | household_income_total |
timeline | ?timeline | property_timeline |
partner_full_name (if joint) | ?partner_name | F2.5 co_applicant_full_name + sets has_co_applicant=yes |
The fee tier is service-driven, not SCS-tier-driven. The customer's service selection on Form 2 determines the rate; SCS tier determines approval, not pricing.
Source: contracts/source-snapshots/fees.json in sooner-underwriting-sandbox (v0.1.1, SHA 7ebcb8e2...). Resolved via resolveFeesTier(selectedIds, snapshot) in src/fees/fees-resolution.ts.
Each transition between tiers triggers an advisory message in T3 forms (declarative rules in consequences-rules.json, NOT in T1 contract):
The "moment of commitment" is engineered around a rate/amount reveal that follows the soft pull. SoFi, Upstart, Zopa, Better, and Rocket all market "see your rate without affecting your credit score" as the headline. That single screen — the personalized number — is what converts curiosity to commitment. UAE banks (Mashreq NEO, Wio) compress this further because of salary-transfer constraints. BNPL (Affirm, Klarna, Tabby, Tamara) collapses the whole flow to seconds using soft-pull + identity-verification only, zero docs unless flagged.
| Company | First 3 Qs | Email at | Soft pull at | Docs at | Source |
|---|---|---|---|---|---|
| SoFi (US PL) | Loan amount, purpose, ZIP | step 2 (after amount) | after basic info + stated income | post-approval, pre-funding | SoFi prequal |
| Better.com (US mortgage) | Buying/refi, property price, ZIP | mid-flow (after property) | after stated income | post-conditional approval | Better preapproval |
| Rocket Mortgage (US) | Property type, purchase/refi, est. value | after property Qs | ~1 min in, after property | after 5-min preapproval | Rocket 8-min |
| Affirm (US BNPL) | Cart amount, name, email | step 1 | immediately after name+DOB+SSN-last4 | rarely (flagged only) | Affirm docs |
| Upstart (US PL) | Amount, purpose, education | mid-flow | after employment + income + expenses | post-stated info, pre-decision | Upstart steps |
| Tabby/Tamara (UAE BNPL) | Cart amount, phone, Emirates ID # | phone first | after EID verification | none (EID is the doc) | Tabby flow |
| Wio Bank (UAE PL) | Resident? Salary band? Age? | mid-flow | after salary stated + AECB consent | post-quote (EID, salary cert) | Wio KFS |
| Mashreq NEO (UAE PL) | Salary band, employer (list), EID | salary-transfer gate | AECB after consent | after quote (5–10 docs) | Mashreq NEO |
| Nubank (BR consumer credit) | Phone, CPF, name | after CPF | Serasa bureau early | selfie + ID early; income only for upgrade | Nubank UX |
| Zopa (UK PL) | Amount, purpose, employment status | mid-flow | before rate reveal | post-decision (often open-banking) | Zopa loans |
| LendingClub (US) | Amount, purpose, DOB | mid-flow w/ personal info | after income + address | post-prequal | WalletHub LC |
| Prosper (US) | Amount, purpose, basic ID | with basic ID | early | post-decision (sometimes call) | Bankrate Prosper |
| Klarna (BNPL) | Cart amount, phone/email, DOB | step 1 | at payment-method selection | almost never | Klarna check |
| # | Pattern | Source examples | Sooner application |
|---|---|---|---|
| A1 | Soft-pull-before-anything-else rate reveal | SoFi, Better, Rocket, Zopa, Upstart | End Form 1 with AECB-informed indicative max (not just a calculator number). The reveal IS the conversion engine. New: GTM-77 |
| A2 | Property-first, identity-second sequencing | Better.com, Rocket Mortgage | REVERSES my prior GTM-64 recommendation. Keep contact LATE in Form 1. Property feels neutral; personal info feels invasive. Demote GTM-64. |
| A3 | Defer all doc upload to post-offer | Every lender studied | Our current Form 3 design is correct. Strengthen by gating Form 3 entry on Form 2 SCS reveal. |
| A4 | Salary-band + employer-list gating as positive signal | Mashreq NEO, Wio | "You work at FAB — congrats, you qualify for our best rate" instead of a fail screen. We have the 370-employer taxonomy already in T1. |
| A5 | Phone OTP as first identity gate (Form 2 entry) | Affirm, Klarna, Tabby | Cheaper than email confirmation; UAE phone is already tied to Emirates ID. Currently in F3; move to F2 entry. |
| # | Pattern | Source examples | Sooner application |
|---|---|---|---|
| B1 | Open-banking income verification (replaces bank-statement upload) | Zopa (UK) | UAE has Lean Technologies + CBUAE Open Finance Regulation. Replacing 6-statement upload with 30-sec Lean consent is a major Form 3 reduction. New: GTM-79 |
| B2 | Named-step progress meter ("Step 2 of 4: Your property") | Capital One, Nubank, Corporate Insight pattern | Users tolerate longer flows when they see the end. Show step name + count, not a %. |
| B3 | Conditional flow shape by employment type | Upstart | We already plan branching for self-emp vs salaried in F2. Extend to F1 (salary cert vs trade license messaging). |
| B4 | Save-and-resume via magic-link email | Better, Rocket | UAE mortgage applications cross multiple sessions. Send magic-link email after Q3 — also captures email earlier. New: GTM-78 |
| B5 | Reward-moment celebratory design post-upload | Nubank | Right after EID upload, show a confetti moment with "You're approved for AED X — let's find your home." Compliance feels heavy; reward inverts the affect. |
| # | Pattern | Why skip |
|---|---|---|
| C1 | US credit bureau "Boost"-style data sharing | No UAE analog; AECB doesn't expose borrower-controlled boosts. |
| C2 | Cart-amount-first BNPL pattern | Mortgage isn't impulse — starting with "how much do you want?" before context is intimidating. |
| C3 | SSN-last-4 as early identity gate (Affirm) | Emirates ID is the equivalent but functions differently. Defer to after soft-pull moment. |
| C4 | "One Day Mortgage" pressure marketing | UAE mortgage timelines are bank-DLD-MOI bound. Promising 24h sets up disappointment. |
Full sources: SoFi, Better, Better/Bankrate, Rocket, Affirm, Klarna, Upstart, Upstart docs, LendingClub, Prosper, Tabby, Wio KFS, Mashreq NEO, Nubank, Zopa NerdWallet, Zopa OB, Corporate Insight, CBUAE Open Finance.
| # | Improvement | Pri | Linear | Touches | Status |
|---|---|---|---|---|---|
| 1 | Fix rent annual→monthly semantics | P1 | GTM-61 | F2 | Codex done, uncommitted |
| 2 | Add has_co_applicant gate before Form 2.5 | P1 | GTM-62 | F2 → F2.5 | Codex done, uncommitted |
| 3 | Add 4 missing F3 doc tiles (salary cert, employment letter, trade license PDF, audited financials) | P1 | GTM-63 | F3 | Codex done, uncommitted |
| 4 | Collapse F1 4 income fields → 1 take-home | P1 | GTM-67 | F1 | Queued |
| 5 | ~~Move F1 contact to step 1~~ — REVERSED per research. Property-first, identity-second (Better/Rocket pattern). Keep contact LATE. | P3 | GTM-64 → close as won't-do | F1 | Reverse |
| 6 | Insert F1 cost-breakdown + Sooner-offer reveal steps | P1 | GTM-69 | F1 | Queued |
| 7 | F1 → F2 prefill discipline (all fields) | P1 | GTM-66 | F1, F2 | Queued |
| 8 | F2 simplification: drop 9 debt amounts, drop precise AECB, drop UAE residency duration, drop credit_card_outstanding | P1 | GTM-65 | F2 | Queued |
| 9 | F3 vs F2 dedupe: drop 11 profile-overlay Qs | P1 | GTM-68 | F3 | Queued |
| 10 | Add F2 service-selection multi-select + live fee tier display | P2 | GTM-70 | F2 | Queued (T1 v0.1.1 unblocked) |
| 11 | Declarative consequences-messaging rules engine | P2 | GTM-71 | F1, F2 | Queued |
| 12 | Add F1 partner full-name field + F2.5 pre-fill | P2 | GTM-72 | F1, F2.5 | Queued |
| 13 | Add F3 co-applicant document tiles | P2 | GTM-73 | F3 | Queued (blocked on GTM-62) |
| 14 | Move po-emp-title from F3 to F2 (job title for Cat-C) | P2 | GTM-74 | F2, F3 | Queued |
| 15 | Build field-map.json + test harness | P2 | GTM-75 | cross-form | Queued |
| 16 | Confirm Reliable doc-list required vs optional | P3 | GTM-76 | F3 | Mo/Vlad ask |
| 17 | Rename form/form25/ → form/candidate-intake-adapter/ | P3 | — | repo hygiene | Queued |
| 18 | NEW from research: AECB soft-pull consent + indicative max reveal at end of F1 (the "see your rate" conversion engine — SoFi/Better/Zopa) | P1 | GTM-77 (new) | F1 | File + queue |
| 19 | NEW from research: Save-and-resume via magic-link email after F1 Q3 (Better/Rocket pattern) | P2 | GTM-78 (new) | F1, F2 | File + queue |
| 20 | NEW from research: Lean open-banking integration in F3 as primary income proof; bank-stmt upload as fallback (Zopa pattern, CBUAE Open Finance enabled) | P2 | GTM-79 (new) | F3 | File + queue |
| 21 | NEW from research: Named-step progress meter across all forms ("Step 2 of 4: Your property") | P2 | GTM-80 (new) | F1, F2, F2.5, F3 | File + queue |
| 22 | NEW from research: Employer-list autocomplete shown as positive signal ("FAB — qualifies for best rate") not as fail screen (Mashreq pattern) | P2 | GTM-81 (new) | F1, F2 | File + queue |
| 23 | NEW from research: Move phone OTP gate from F3 to F2 entry (Affirm/Tabby pattern) | P2 | GTM-82 (new) | F2, F3 | File + queue |
| 24 | NEW from research: Reward-moment / confetti UI after EID upload in F3 (Nubank pattern) | P3 | GTM-83 (new) | F3 | File + queue |
7ebcb8e2…