Skip to content

feat(wallet): onboarding funnel + empty state - #561

Merged
bmc08gt merged 2 commits into
feat/v2-ui-token-cardsfrom
feat/v2-ui-onboarding-funnel
Aug 12, 2026
Merged

bmc08gt merged 2 commits into
feat/v2-ui-token-cardsfrom
feat/v2-ui-onboarding-funnel

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

What

Phase 3 of the v2 UI port (Android #1209, Figma 8966:1486): the "Send Your First Tip" onboarding funnel, which doubles as the wallet empty state.

Stacked on #560 (token cards) — review/merge that first; this targets it.

Changes

  • OnboardingFunnelView — title + completed-count, then a card of steps (Add Money / Scan a Tip Card) with icon, title, subtitle, and chevron; completed steps show a green check, dim to 38%, and stop responding to taps. Ported from Android's OnboardingFunnel.
  • Milestones from durable history (Session.hasEverAddedMoney() / hasEverTipped(), Database+Onboarding): derived from event history, not current balance, so a milestone stays complete after the balance is spent —
    • added money = a completed deposit/buy activity exists;
    • tipped = a self-sent TIPPED conversation message exists (received tips don't count).
  • Funnel doubles as the empty state — the old "No Balance Yet" screen is gone. A new user sees the $0 header + funnel; once funded the funnel sits above the card stack, and it disappears when both milestones are complete. "Add Money" opens deposit options; "Scan a Tip Card" switches to the Scan tab.
  • The collapse threshold now measures the header+funnel block, so the card deck still tightens once it reaches the top.

Testing

  • xcodebuild build: SUCCEEDED.
  • Verified the funnel/empty state on the simulator (Maestro full-res): $0 header, "Send Your First Tip" 0/2, both steps with correct icons/copy/chevrons — matches Figma 8966:1486. The test account currently has no balance/history, which naturally exercises the empty state (both milestones false → funnel shown). The funnel-above-cards and hidden-when-complete states follow from the same conditionals.

@bmc08gt
bmc08gt force-pushed the feat/v2-ui-onboarding-funnel branch from 7e66b4d to c4bc01d Compare August 12, 2026 14:33
@bmc08gt
bmc08gt force-pushed the feat/v2-ui-onboarding-funnel branch from c4bc01d to 4e758bd Compare August 12, 2026 14:44
Add the 'added money' and 'tipped' milestones backing the funnel, derived from
event history (not current balance) so they stay complete after a spend:
- hasEverAddedMoney: a completed deposit/buy activity exists.
- hasEverTipped: a self-sent TIPPED conversation message exists.
Exposed on Session as hasEverAddedMoney()/hasEverTipped().
Add the 'Send Your First Tip' funnel (Add Money / Scan a Tip Card steps, a
completed-count, green checks + dimming when done) and show it on the v2 Wallet
whenever onboarding is incomplete. It doubles as the empty state — a new user
sees the $0 header + funnel (no more 'No Balance Yet' screen), matching Figma —
and sits above the card stack once funded. Add Money opens deposit options; Scan
a Tip Card switches to the Scan tab. The collapse threshold now measures the
header+funnel block so the deck still tightens once it reaches the top.
@bmc08gt
bmc08gt force-pushed the feat/v2-ui-onboarding-funnel branch from 4e758bd to 0267658 Compare August 12, 2026 14:53
@bmc08gt
bmc08gt merged commit 0fc3b1f into main Aug 12, 2026
@bmc08gt
bmc08gt deleted the feat/v2-ui-onboarding-funnel branch August 12, 2026 14:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant