Sooner Forms — Flow, Data, Improvements

End-to-end visualization of the borrower funnel. Goal: get the spec to 80% so it can be handed to Mo Aziz for final UX polish + implementation.
Companion docs: forms-inventory.html · t3-question-map.html · implementation-notes.html

Forms in funnel
4
F1 · F2 · F2.5 · F3
Questions today
66
across all 4 surfaces
Questions after redesign
34
−48%; doc extraction + pre-fill
Time-to-quote
~3 min
F1 + F2 combined (was ~10)
Sections
  1. Design principles
  2. Trust-building curve
  3. Full funnel flow
  4. Form 1 — Lead qualification
  5. Form 2 — Pre-approval + price reveal
  6. Form 2.5 — Co-applicant (optional)
  7. Form 3 — Docs + verification
  8. Cross-form data pre-fill chain
  9. Pricing tier engine
  10. Industry research findings
  11. Improvement matrix
  12. Implementation status

1. Design principles

The funnel is shaped by three principles, in priority order:

  1. Trust before info, info before docs. Users provide information as they build trust in the brand and value. Documents come after they're committed (have seen their price, decided to proceed). This is the universal pattern across consumer fintech — SoFi, Better.com, Affirm, Klarna all engineer the funnel this way.
  2. Ask once, verify once. A question is asked in exactly one form. Downstream forms pre-fill from upstream; documents verify the self-reported value. Cross-form duplication is a bug, not a feature.
  3. Indicative now, precise later. Form 2 returns an indicative SCS tier + fee using self-reported data. Form 3 doc extraction finalizes the score. This lets us shrink Form 2 without losing the price-reveal moment.
The non-negotiable: every Sooner offer requires Closing Fee Financing as the spine. Home Discovery and Mortgage Brokerage are upsells that reduce the fee from 15% → 12% (with one) → 10% (with both).

2. Trust-building curve

Where the borrower's commitment sits at each step, and what we can ask at that level of trust:

%%{init: {'theme':'neutral','themeVariables':{'fontSize':'14px'}}}%% journey title Sooner borrower trust curve section Form 1 (anon, 2 min) Land on Sooner.com: 2: User Property budget Q: 3: User Found a property?: 4: User Area + type: 5: User Residency check: 4: User Income (1 field): 4: User See cost breakdown: 7: User See Sooner offer: 8: User Contact details: 6: User section Form 2 (identified, 4 min) Name pre-filled: 7: User Confirm property: 7: User Service selection: 8: User See fee tier (live): 9: User Employment + income split: 6: User Debts (4 yes/no): 6: User Indicative SCS revealed: 9: User section Form 2.5 (joint, 2 min) Co-app contact: 7: User Co-app employment: 6: User Co-app income: 6: User section Form 3 (committed, 5 min) OTP auth: 8: User Upload Emirates ID: 8: User Upload passport+visa: 8: User Upload salary cert: 7: User Upload bank stmts: 7: User Upload AECB: 8: User Final SCS locked: 10: User

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.

3. Full funnel flow

%%{init: {'theme':'neutral','themeVariables':{'fontSize':'13px'}}}%% flowchart TB Start([Marketing / partner / direct]) --> F1[Form 1
Lead qualification
~2 min, 9 Qs] F1 -->|residency=non-resident| Decline1[Decline screen 1
'Resident-only product'] F1 -->|income < AED 25K| Decline2[Decline screen 2
'Min income AED 25K'] F1 -->|area not eligible| Decline3[Decline screen 3
'Area not yet covered'] F1 -->|passes G1+G6+G10| F1Cost[F1 step 5
Cost breakdown reveal
uses canonical formula] F1Cost --> F1Offer[F1 step 6
Sooner offer reveal
AED X/month with Sooner] F1Offer --> F1Contact[F1 step 7
Contact capture
name + email + phone] F1Contact --> F1End{Has property?} F1End -->|Yes| F2[Form 2
Pre-approval
~4 min, 17 Qs + 2 new] F1End -->|No| F2WithDiscoveryPrompt[Form 2
+ Home Discovery default] F2WithDiscoveryPrompt --> F2 F2 -->|has_co_applicant=yes| F25[Form 2.5
Co-applicant
~2 min, 7 Qs] F2 -->|has_co_applicant=no| F2Decision F25 --> F2Decision[Indicative SCS
+ fee tier reveal] F2Decision -->|SCS < 55| Decline4[Decline w/ improvement plan
retarget queue] F2Decision -->|SCS 55-69| Committee[Committee review
manual underwriting] F2Decision -->|SCS 70+| F3[Form 3
Docs + verification
~5 min, 3 Qs + 9 doc tiles] Committee --> F3 F3 --> Reliable[Submit to Reliable
bank introductions begin] classDef form1 fill:#d9ead8,stroke:#0b6b2b,color:#000 classDef form2 fill:#e1e8f5,stroke:#1f3a7a,color:#000 classDef form25 fill:#f5e9c8,stroke:#5a4500,color:#000 classDef form3 fill:#e8defc,stroke:#4a1f7a,color:#000 classDef decline fill:#fad4d4,stroke:#a40e0e,color:#000 classDef end_ok fill:#d9ead8,stroke:#0b6b2b,color:#000 class F1,F1Cost,F1Offer,F1Contact,F1End form1 class F2,F2WithDiscoveryPrompt,F2Decision form2 class F25 form25 class F3 form3 class Decline1,Decline2,Decline3,Decline4 decline class Reliable end_ok class Committee form2

Decline screens at every gate boundary mean we never waste applicant time. Each decline is a retarget surface (Form 4, deferred).

Form 1 Lead qualification

Audience: partner / broker / anonymous web visitor. Goal: quick filter + reveal Sooner's price to create the "I want this" commitment moment. Time: ~2 minutes.

Step-by-step flow

%%{init: {'theme':'neutral','themeVariables':{'fontSize':'13px'}}}%% flowchart TB S1[Step 1
Contact: name + email + phone
moved from step 8] --> S2[Step 2
Property budget AED] S2 --> S3[Step 3
Found a property?] S3 -->|Yes| S4Y[Step 4
Area + property type + bedrooms] S3 -->|No| S4N[Step 4
Preferred area + type + bedrooms] S4Y --> S5 S4N --> S5 S5[Step 5
Residency status] S5 -->|Non-resident| DCL[Decline screen] S5 -->|Resident or National| S6[Step 6
Monthly take-home
collapsed from 4 fields to 1] S6 -->|< AED 25K| DCL S6 -->|≥ AED 25K| S7[Step 7
NEW: Cost breakdown reveal
Dubai closing costs table] S7 --> S8[Step 8
NEW: Sooner offer reveal
'You pay X upfront with us vs Y without'] S8 --> S9[Step 9
Purchase timeline] S9 --> S10([→ Form 2]) classDef step fill:#d9ead8,stroke:#0b6b2b classDef decline fill:#fad4d4,stroke:#a40e0e classDef new fill:#fff8ec,stroke:#b35900 class S1,S2,S3,S4Y,S4N,S5,S6,S9 step class S7,S8 new class DCL decline

Question inventory

#Q IDLabelTypeMaps toStatus
1fullNameFull nametextidentitymove to step 1
2emailInputEmailemailcontactmove to step 1
3phoneInputPhonetelcontactmove to step 1
4heroValueProperty budget (AED)numberG10/G8keep
5found_propertyHave you found a property?chiproutingkeep
6areaMultiArea (1–3)chip multiG10 Hkeep
7propertyTypeProperty typechipG10keep
8bedroomsBedroomschipG10keep
9residencyResidency statuschipG1keep
10monthly_take_homeMonthly take-home (HH if joint)numberG6 DNEW — collapsed from 4 fields
commissionInputAvg commissionnumberDDROP — folded into #10
householdIncomeInputPartner fixed incomenumberG6/DDROP — folded into #10
partnerCommInputPartner commissionnumberDDROP — folded into #10
11cost_breakdownNEW: Cost Breakdown displaydisplayconversionADD — GTM-69
12sooner_offerNEW: Sooner Offer revealdisplayconversionADD — GTM-69
13partner_full_nameNEW: Partner full name (if joint toggle)textF2.5 prefillADD — GTM-72
14timelinePurchase timelinechiplead prioritykeep

Form 2 Pre-approval + price reveal

Audience: identified borrower (came through Form 1). Goal: indicative SCS + fee tier reveal. Time: ~4 minutes after redesign (was 7-9).

Section structure

%%{init: {'theme':'neutral','themeVariables':{'fontSize':'13px'}}}%% flowchart TB Pre[Pre-fill from F1
name/email/phone/budget/area/type/found/timeline] --> Confirm[Confirm: 'Still budgeting at X in Y? Edit if changed'] Confirm --> Service[NEW: Service selection
CFF + Discovery? + Brokerage?] Service --> Tier[NEW: Live fee tier display
10% / 12% / 15%] Tier --> Emp[Employment section
type / employer / tenure / business years] Emp --> CoApp{has_co_applicant?} CoApp -->|Yes| F25Branch[→ Form 2.5 inline panel] CoApp -->|No| Income[Monthly income + variable] F25Branch --> Income Income --> Debts[Debt section: 4 yes/no
mortgage? rent? loans? credit cards?] Debts --> RentVal[If rent=yes: monthly rent AED] Debts --> Property[Property usage + down payment source] RentVal --> Property Property --> Savings[Savings band] Savings --> AECB[AECB band Q
'Excellent / Good / Fair / Don't know'] AECB --> Submit[Submit → Indicative SCS + Fee tier locked] classDef pre fill:#fff8ec,stroke:#b35900 classDef new fill:#fff8ec,stroke:#b35900 classDef keep fill:#e1e8f5,stroke:#1f3a7a classDef branch fill:#f5e9c8,stroke:#5a4500 classDef end_node fill:#d9ead8,stroke:#0b6b2b class Pre,Confirm pre class Service,Tier new class Emp,Income,Debts,RentVal,Property,Savings,AECB keep class CoApp,F25Branch branch class Submit end_node

Question inventory (after redesign)

#Q IDLabelMaps toNotes
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
1cost_breakdownCost breakdown (re-displayed)conversioncomputed
2sooner_revealSooner offer (re-displayed)conversioncomputed
3service_selectionWhich Sooner services?fee tier driverNEW — multi-select CFF (required) / Discovery / Brokerage
4fee_tier_badgeYour fee tier (live)conversionNEW — display only, reflects #3 in real-time
5employment_typeEmployment typeG7 Cbranches business_years
6employer_nameEmployer nameCautocomplete vs 370-employer taxonomy
7employer_tenureTenure bucketG7<6mo salaried → decline
8business_yearsYears in business (self-emp only)G7<2y self-emp → decline
9has_co_applicantWill a co-applicant be on the mortgage?routingNEW — GTM-62 (done, uncommitted). Gates Form 2.5.
10household_income_totalMonthly income (toggle solo/combined)G6 D, Afixed portion
11variable_incomeVariable pay (commission/bonus)Dauto-computes commission %
12has_existing_mortgageExisting mortgage?G9yes/no only — amount via AECB
13has_rentPay rent?Iroutes #14
14rent_paymentMonthly rent (AED)Iwas annual — bug fixed GTM-61
15has_personal_loanPersonal loans?G9yes/no only
16has_car_loanCar loans?G9yes/no only
17has_credit_cardCredit cards?G9yes/no only
18savingsLiquid savings bandBbands: <50k / 50–150k / 150–300k / 300k+
19property_usage_rawPrimary / secondary / investmentG10investment → different LTV
20down_payment_sourceDown payment sourceKYCfamily gift → SoW doc required
21aecb_bandAECB credit band (self-est)G3 GSIMPLIFIED 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_phonepre-fill from F1
property_budget_aed, property_timeline, has_found_property, property_area, property_typepre-fill from F1
mortgage_payment, personal_loan_payment, car_loan_payment, credit_card_payment, credit_card_outstanding, other_monthly_commitmentsdoc-extract from AECB + bank stmts
uae_residency durationdoc-extract from visa page
aecb_score precise numbersimplified to band

Net change: 33 Qs → 21 Qs (kept) + 2 new + 1 simplified. Customer time drops from 7–9 min to ~4 min.

Form 2.5 Co-applicant (optional branch)

Triggered when: has_co_applicant === yes. Audience: primary applicant on behalf of partner (typically spouse). Time: ~2 minutes additional.

%%{init: {'theme':'neutral','themeVariables':{'fontSize':'13px'}}}%% flowchart LR Trig[has_co_applicant=yes
from Form 2] --> Pre[Pre-fill from F1
partner_full_name if captured] Pre --> Contact[Co-app contact
email + phone] Contact --> Emp[Co-app employment
type + employer] Emp --> Inc[Co-app income
fixed + variable] Inc --> Back[Return to Form 2 main flow
joint SCS computation] classDef coapp fill:#f5e9c8,stroke:#5a4500 class Trig,Pre,Contact,Emp,Inc,Back coapp

Question inventory (7 Qs, all kept)

#Q IDLabelMaps toPre-filled?
1co_applicant_full_nameCo-applicant full nameidentityYes, from F1 partner_full_name
2co_applicant_emailEmailcontactNo
3co_applicant_phonePhonecontactNo
4co_applicant_employment_typeEmployment typeG7 CNo
5co_applicant_employer_nameEmployerCNo
6co_applicant_monthly_incomeMonthly income (fixed)G6 DYes if F1's partner_income captured
7co_applicant_variable_incomeVariable payDYes 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.

Form 3 Documents + verification

Audience: committed borrower who has seen their indicative SCS + fee tier. Goal: document collection + final SCS lock. Time: ~5 min upload + automated extraction.

%%{init: {'theme':'neutral','themeVariables':{'fontSize':'13px'}}}%% flowchart TB Start([From Form 2 decision page]) --> OTP[OTP login
phone verification] OTP --> Confirm[Pre-fill confirmation panel
'Here's what you told us. Edit if wrong.'] Confirm --> Owner[Ownership/contribution split
only F3-unique Q] Owner --> BizLic{self-employed?} BizLic -->|Yes| TLNum[Trade license number
text input] BizLic -->|No| DocTiles TLNum --> DocTiles[Document tiles] DocTiles --> EID[Emirates ID
front + back] DocTiles --> Pass[Passport copy] DocTiles --> Visa[Visa page] DocTiles --> BS[Bank statements
6 slots] DocTiles --> AECB[AECB report or consent] DocTiles -->|if salaried| SC[Salary certificate] DocTiles -->|if salaried| EL[Employment letter] DocTiles -->|if self-employed| TL[Trade license PDF] DocTiles -->|if self-emp ≥ 2y| AF[Audited financials] DocTiles -->|if has_co_applicant| CoApp[Co-applicant docs
5 tiles parallel] EID --> Extract[Automated extraction:
DoB · nationality · visa type · employer ·
salary · tenure · AECB score · debts · savings] Pass --> Extract Visa --> Extract BS --> Extract AECB --> Extract SC --> Extract EL --> Extract TL --> Extract AF --> Extract CoApp --> Extract Extract --> Final[Final SCS computed
tier locked · offer issued] Final --> Reliable[Bank introductions begin] classDef form3 fill:#e8defc,stroke:#4a1f7a classDef doc fill:#fff8ec,stroke:#b35900 classDef extract fill:#d9ead8,stroke:#0b6b2b class OTP,Confirm,Owner,BizLic,TLNum form3 class EID,Pass,Visa,BS,AECB,SC,EL,TL,AF,CoApp doc class Extract,Final,Reliable extract

F3 question inventory — 3 Qs only

#Q IDLabelWhy F3-unique
1screen-otp.phoneOTP login (auth)Auth gate; verifies phone
2po-ownershipOwnership / contribution splitJoint-savings allocation only — not in F2
3po-biz-licenseTrade license number (self-emp only)Conditional; trade-license PDF verifies
F3 questions REMOVED (all duplicated F2)
po-emp-type, po-emp-name, po-biz-namedup of F2 employmentpre-fill + doc verify
po-emp-titleMOVE to F2 (new Q for Cat-C precision)
po-cc-limit, po-cc-balance, po-no-cc, po-ob-category, po-ob-amountdup of F2 debt yes/nosAECB extracts amounts
po-savingsdup of F2 savings bandbank stmts verify
po-creditdup of F2 aecb_bandAECB doc verifies

F3 document tiles — 9 (vs 5 today)

TileRequired ifExtractsVerifiesStatus
Emirates ID (front + back)alwaysname, DoB, nationality, EID #G1, G2, identityexisting
Passport copyalwaysname romanized, nationality, expiryidentityexisting
Visa pagealwaysvisa type, residency duration, sponsorG1, Cat-Eexisting
Bank statements (6)alwaysincome, rent, recurring debits, balanceG5, Cat-B, Cat-Iexisting
AECB report or consentalwaysscore, history, all debtsG3, G4, Cat-F, Cat-Gexisting
Salary certificatesalariedemployer, salary, tenure, allowancesG5, G7, Cat-C, Cat-DNEW — GTM-63 done
Employment lettersalariedemployment status, roleG7, Cat-CNEW — GTM-63 done
Trade license PDFself-employedbusiness name, license #, yearsG7NEW — GTM-63 done
Audited financialsself-emp, recommended ≥ 2yrevenue, profitG7, Cat-BNEW — GTM-63 done
Co-applicant docs (×5)has_co_applicantparallel set: EID, passport, visa, salary cert, bank stmtsjoint G1/G7/G5QUEUED — GTM-73

8. Cross-form data pre-fill chain

The redesigned funnel runs on a "ask once, pre-fill downstream" discipline. URL params and Supabase row carry data forward:

%%{init: {'theme':'neutral','themeVariables':{'fontSize':'12px'}}}%% flowchart LR F1[Form 1 captures
contact, property, residency,
income, timeline] F1 -->|URL params + buyer_lead row| F2[Form 2 reads
and confirms] F2 -->|saves all + service selection| F25{has_co_app?} F25 -->|yes| F25S[Form 2.5 reads partner_*] F25 -->|no| F3 F25S --> F3[Form 3 reads
employment_type to branch docs;
shows all answered Qs as
'confirmed via doc'] classDef src fill:#d9ead8,stroke:#0b6b2b classDef dst fill:#e1e8f5,stroke:#1f3a7a classDef opt fill:#f5e9c8,stroke:#5a4500 classDef ver fill:#e8defc,stroke:#4a1f7a class F1 src class F2 dst class F25,F25S opt class F3 ver

Specific URL prefill aliases (Form 1 → Form 2)

F1 fieldURL param emittedF2 field consumed
fullName?namefull_name
emailInput?emailcontact_email
phoneInput?phonecontact_phone
heroValue?property_budget_aedproperty_budget_aed
areaMulti?property_areaproperty_area
propertyType?property_typeproperty_type
bedrooms?bedroomsbedrooms
found_property?has_found_propertyhas_found_property
residency?residencyuae_residency_status
monthly_take_home?household_incomehousehold_income_total
timeline?timelineproperty_timeline
partner_full_name (if joint)?partner_nameF2.5 co_applicant_full_name + sets has_co_applicant=yes

9. Pricing tier engine

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.

%%{init: {'theme':'neutral','themeVariables':{'fontSize':'13px'}}}%% flowchart TD Start[Service selection on Form 2] --> R1{Any services
selected?} R1 -->|No| NoOffer[no_offer
'Select at least CFF'] R1 -->|Yes| R2{CFF in selection?} R2 -->|No| Inel[ineligible
'CFF is required'] R2 -->|Yes| T{What's selected?} T -->|CFF only| T15[Tier: cff_only
Fee: 15%] T -->|CFF + Home Discovery| T12a[Tier: cff_plus_discovery
Fee: 12%] T -->|CFF + Mortgage Brokerage| T12b[Tier: cff_plus_brokerage
Fee: 12%] T -->|CFF + Discovery + Brokerage| T10[Tier: all_three
Fee: 10%] classDef rule fill:#f5e9c8,stroke:#5a4500 classDef tier fill:#d9ead8,stroke:#0b6b2b classDef bad fill:#fad4d4,stroke:#a40e0e class R1,R2,T rule class T15,T12a,T12b,T10 tier class NoOffer,Inel bad

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.

Consequences messaging

Each transition between tiers triggers an advisory message in T3 forms (declarative rules in consequences-rules.json, NOT in T1 contract):

10. Industry research findings

Research baseline: 14 consumer lenders studied (US, UAE, MENA, UK, Brazil). The universal pattern: property/loan amount → contact basics → identity → stated income → soft credit pull → indicative offer reveal → docs. Documents are deliberately deferred until after the rate reveal moment, because the psychological cost of uploading a paystub is far higher than answering "what's your income?"

Trust-building progression — the universal pattern

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.

Per-company breakdown

CompanyFirst 3 QsEmail atSoft pull atDocs atSource
SoFi (US PL)Loan amount, purpose, ZIPstep 2 (after amount)after basic info + stated incomepost-approval, pre-fundingSoFi prequal
Better.com (US mortgage)Buying/refi, property price, ZIPmid-flow (after property)after stated incomepost-conditional approvalBetter preapproval
Rocket Mortgage (US)Property type, purchase/refi, est. valueafter property Qs~1 min in, after propertyafter 5-min preapprovalRocket 8-min
Affirm (US BNPL)Cart amount, name, emailstep 1immediately after name+DOB+SSN-last4rarely (flagged only)Affirm docs
Upstart (US PL)Amount, purpose, educationmid-flowafter employment + income + expensespost-stated info, pre-decisionUpstart steps
Tabby/Tamara (UAE BNPL)Cart amount, phone, Emirates ID #phone firstafter EID verificationnone (EID is the doc)Tabby flow
Wio Bank (UAE PL)Resident? Salary band? Age?mid-flowafter salary stated + AECB consentpost-quote (EID, salary cert)Wio KFS
Mashreq NEO (UAE PL)Salary band, employer (list), EIDsalary-transfer gateAECB after consentafter quote (5–10 docs)Mashreq NEO
Nubank (BR consumer credit)Phone, CPF, nameafter CPFSerasa bureau earlyselfie + ID early; income only for upgradeNubank UX
Zopa (UK PL)Amount, purpose, employment statusmid-flowbefore rate revealpost-decision (often open-banking)Zopa loans
LendingClub (US)Amount, purpose, DOBmid-flow w/ personal infoafter income + addresspost-prequalWalletHub LC
Prosper (US)Amount, purpose, basic IDwith basic IDearlypost-decision (sometimes call)Bankrate Prosper
Klarna (BNPL)Cart amount, phone/email, DOBstep 1at payment-method selectionalmost neverKlarna check

Patterns ranked by Sooner applicability

(a) Adopt now — high impact, low effort, UAE-native

#PatternSource examplesSooner application
A1Soft-pull-before-anything-else rate revealSoFi, Better, Rocket, Zopa, UpstartEnd Form 1 with AECB-informed indicative max (not just a calculator number). The reveal IS the conversion engine. New: GTM-77
A2Property-first, identity-second sequencingBetter.com, Rocket MortgageREVERSES my prior GTM-64 recommendation. Keep contact LATE in Form 1. Property feels neutral; personal info feels invasive. Demote GTM-64.
A3Defer all doc upload to post-offerEvery lender studiedOur current Form 3 design is correct. Strengthen by gating Form 3 entry on Form 2 SCS reveal.
A4Salary-band + employer-list gating as positive signalMashreq 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.
A5Phone OTP as first identity gate (Form 2 entry)Affirm, Klarna, TabbyCheaper than email confirmation; UAE phone is already tied to Emirates ID. Currently in F3; move to F2 entry.

(b) Consider for v2 — medium effort

#PatternSource examplesSooner application
B1Open-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
B2Named-step progress meter ("Step 2 of 4: Your property")Capital One, Nubank, Corporate Insight patternUsers tolerate longer flows when they see the end. Show step name + count, not a %.
B3Conditional flow shape by employment typeUpstartWe already plan branching for self-emp vs salaried in F2. Extend to F1 (salary cert vs trade license messaging).
B4Save-and-resume via magic-link emailBetter, RocketUAE mortgage applications cross multiple sessions. Send magic-link email after Q3 — also captures email earlier. New: GTM-78
B5Reward-moment celebratory design post-uploadNubankRight 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.

(c) Skip — don't fit Sooner

#PatternWhy skip
C1US credit bureau "Boost"-style data sharingNo UAE analog; AECB doesn't expose borrower-controlled boosts.
C2Cart-amount-first BNPL patternMortgage isn't impulse — starting with "how much do you want?" before context is intimidating.
C3SSN-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 marketingUAE mortgage timelines are bank-DLD-MOI bound. Promising 24h sets up disappointment.

Sooner-specific funnel suggestions (from research)

Form 1 — "Do I qualify?" (no commitment, no auth)
Form 2 — Soft eligibility + price reveal (phone-gated)
Form 2.5 — Co-applicant or skip
Form 3 — Docs (post-offer)

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.

11. Improvement matrix

#ImprovementPriLinearTouchesStatus
1Fix rent annual→monthly semanticsP1GTM-61F2Codex done, uncommitted
2Add has_co_applicant gate before Form 2.5P1GTM-62F2 → F2.5Codex done, uncommitted
3Add 4 missing F3 doc tiles (salary cert, employment letter, trade license PDF, audited financials)P1GTM-63F3Codex done, uncommitted
4Collapse F1 4 income fields → 1 take-homeP1GTM-67F1Queued
5~~Move F1 contact to step 1~~ — REVERSED per research. Property-first, identity-second (Better/Rocket pattern). Keep contact LATE.P3GTM-64 → close as won't-doF1Reverse
6Insert F1 cost-breakdown + Sooner-offer reveal stepsP1GTM-69F1Queued
7F1 → F2 prefill discipline (all fields)P1GTM-66F1, F2Queued
8F2 simplification: drop 9 debt amounts, drop precise AECB, drop UAE residency duration, drop credit_card_outstandingP1GTM-65F2Queued
9F3 vs F2 dedupe: drop 11 profile-overlay QsP1GTM-68F3Queued
10Add F2 service-selection multi-select + live fee tier displayP2GTM-70F2Queued (T1 v0.1.1 unblocked)
11Declarative consequences-messaging rules engineP2GTM-71F1, F2Queued
12Add F1 partner full-name field + F2.5 pre-fillP2GTM-72F1, F2.5Queued
13Add F3 co-applicant document tilesP2GTM-73F3Queued (blocked on GTM-62)
14Move po-emp-title from F3 to F2 (job title for Cat-C)P2GTM-74F2, F3Queued
15Build field-map.json + test harnessP2GTM-75cross-formQueued
16Confirm Reliable doc-list required vs optionalP3GTM-76F3Mo/Vlad ask
17Rename form/form25/form/candidate-intake-adapter/P3repo hygieneQueued
18NEW from research: AECB soft-pull consent + indicative max reveal at end of F1 (the "see your rate" conversion engine — SoFi/Better/Zopa)P1GTM-77 (new)F1File + queue
19NEW from research: Save-and-resume via magic-link email after F1 Q3 (Better/Rocket pattern)P2GTM-78 (new)F1, F2File + queue
20NEW from research: Lean open-banking integration in F3 as primary income proof; bank-stmt upload as fallback (Zopa pattern, CBUAE Open Finance enabled)P2GTM-79 (new)F3File + queue
21NEW from research: Named-step progress meter across all forms ("Step 2 of 4: Your property")P2GTM-80 (new)F1, F2, F2.5, F3File + queue
22NEW from research: Employer-list autocomplete shown as positive signal ("FAB — qualifies for best rate") not as fail screen (Mashreq pattern)P2GTM-81 (new)F1, F2File + queue
23NEW from research: Move phone OTP gate from F3 to F2 entry (Affirm/Tabby pattern)P2GTM-82 (new)F2, F3File + queue
24NEW from research: Reward-moment / confetti UI after EID upload in F3 (Nubank pattern)P3GTM-83 (new)F3File + queue
Reversal: GTM-64. Earlier I recommended moving Form 1 contact info to step 1. The research overturns this — Better.com / Rocket Mortgage / Upstart all sequence property-first, identity-second. Property feels neutral; personal info feels invasive. Keep contact LATE in Form 1 (steps 7–8) as it is today. Close GTM-64 as won't-do.
Research-driven priority shift: the single highest-leverage addition is the AECB soft-pull + indicative max reveal at end of Form 1 (new GTM-77). Every lender studied uses this as the conversion engine. We currently end Form 1 with a "Sooner offer" computed from self-reported income only — moving to an AECB-informed number is a non-trivial PR but the research consensus says it's worth the engineering investment.

12. Implementation status — hand-to-Mo readiness

Spec completeness
~80%
forms + Qs + flow + research
Codex P1 work done
3 / 9
61, 62, 63 in working tree
Linear sub-issues
16+7
filed + research-driven queued
Canonical T1 fees
✅ v0.1.1
SHA 7ebcb8e2…

Ready-to-hand-to-Mo checklist

↑ status