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 = willingness (1 = abandoning, 10 = will provide anything). Score-reveals in F1 and F2 are conversion peaks; trust dips on income asks; recovers as the offer firms up.
| Phase | Form | Length | Steps | Trust range | What we may ask |
|---|---|---|---|---|---|
| 1 · Anon discovery | F1 | ~2 min | 9 | 2 → 8 | Property + residency + income (1 field). No identity until after offer reveal. |
| 2 · Identified eligibility | F2 | ~4 min | 7 | 7 → 9 | Confirm prefill, employment, service selection, debts (yes/no), AECB band. Indicative SCS revealed. |
| 3 · Joint (optional) | F2.5 | ~2 min | 3 | 6 → 7 | Co-applicant identity + employment + income. Joint scoring runs. |
| 4 · Committed verification | F3 | ~5 min | 7 | 7 → 10 | OTP + document uploads + final SCS locked. Highest trust — they've seen the offer. |
Goal: filter, reveal the price, capture contact only after the aha moment.
Phone OTP at entry. Service selection drives the live fee tier. Indicative SCS reveals at the end.
Only when has_co_applicant=yes. Joint score runs after this branch.
Highest trust. They've seen the offer and made the decision. Documents are easy to give now.
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…