UI rev 5: native onboarding/restore/empty-states + receive-moment redesign #32

Merged
swedishfrenchpress merged 4 commits from fix/ui-rev-5 into main 2026-05-31 20:33:12 +00:00
swedishfrenchpress commented 2026-05-31 15:51:20 +00:00 (Migrated from github.com)

Summary

A UI-revision round that moves the onboarding, restore, empty-state, and receive surfaces onto the app's native design-system vocabulary (Liquid Glass, system materials, AmountFormatter, the one sanctioned celebration motion) and away from stock SwiftUI chrome. Four commits:

What's in here

1. Onboarding: acknowledge-to-continue seed backup (2b9c5c9)

Drops the "Verify Seed Phrase" quiz. The seed grid is hidden behind a tap-to-reveal blur with a plain copy control; the primary CTA is gated behind a required acknowledgement before advancing to the first-mint step.

2. Native empty states (aeb8e06)

Adds a shared NativeEmptyState component (animated SF Symbol + title/description, reduce-motion aware) and adopts it across History, the wallet home, onboarding, and Mint Discovery.

3. Native Restore flow + design-system polish (79f9400)

  • Adds the Settings → Restore navigation flow (RestoreWalletView: seed entry → mint recovery) and brings its "Restore Ecash" step to DESIGN.md compliance: glass Add/Paste capsules (replacing stock .borderedProminent/.bordered), a .thinMaterial mint-URL field (replacing .roundedBorder), an iconless "Restore from N mints" CTA, and a demoted plain-text "Skip" so the loudest control on a recovery screen is no longer the exit.
  • Adds a shared SuggestedMintsSection (one-tap known-mint quick-add) that turns the empty-state recall task into recognition, and mirrors the treatment into the onboarding twin so the two restore screens match.

4. Receive moment: balance beat replaces the toast (815d230)

  • The "Received" toast rendered inside the masked ScrollView, so the scroll-fade gradient dissolved it. Replaced with a transient green ✓ +2,500 beat that takes over the balance's fiat sub-amount slot for 2.5s, reusing the sanctioned payment-received celebration (spring + scale/opacity + checkmark bounce; reduce-motion → opacity; VoiceOver-hidden).
  • Unifies amount formatting: formatAmountShort now routes through AmountFormatter, so balance / history / beat all group as "2,500" (fixing the "2,500 / 2 500 / +2500" split).
  • Deletes the orphaned NotificationBadgeView (the app's last .shadow) and updates DESIGN.md: retire the Floating-Toast Exception → No-Shadow Absolute, and document the received-delta beat under Notifications + Motion §6.

Testing

  • xcodebuild -scheme CashuWallet -destination 'generic/platform=iOS Simulator'BUILD SUCCEEDED at each step.
  • Suggested manual checks: onboarding seed acknowledge gate; Settings → Restore (add via type / paste / suggestion, run restore, skip); receive across ecash / Cashu Request / Lightning / npub.cash (watch the balance beat, not a toast), including a rapid double-receive and Reduce Motion on/off; confirm grouped amounts ("2,500") everywhere and Bitcoin-symbol mode.

🤖 Generated with Claude Code

## Summary A UI-revision round that moves the onboarding, restore, empty-state, and receive surfaces onto the app's native design-system vocabulary (Liquid Glass, system materials, `AmountFormatter`, the one sanctioned celebration motion) and away from stock SwiftUI chrome. Four commits: ## What's in here ### 1. Onboarding: acknowledge-to-continue seed backup (`2b9c5c9`) Drops the "Verify Seed Phrase" quiz. The seed grid is hidden behind a tap-to-reveal blur with a plain copy control; the primary CTA is gated behind a required acknowledgement before advancing to the first-mint step. ### 2. Native empty states (`aeb8e06`) Adds a shared `NativeEmptyState` component (animated SF Symbol + title/description, reduce-motion aware) and adopts it across History, the wallet home, onboarding, and Mint Discovery. ### 3. Native Restore flow + design-system polish (`79f9400`) - Adds the Settings → Restore navigation flow (`RestoreWalletView`: seed entry → mint recovery) and brings its "Restore Ecash" step to DESIGN.md compliance: glass Add/Paste capsules (replacing stock `.borderedProminent`/`.bordered`), a `.thinMaterial` mint-URL field (replacing `.roundedBorder`), an iconless "Restore from N mints" CTA, and a demoted plain-text "Skip" so the loudest control on a recovery screen is no longer the exit. - Adds a shared `SuggestedMintsSection` (one-tap known-mint quick-add) that turns the empty-state recall task into recognition, and mirrors the treatment into the onboarding twin so the two restore screens match. ### 4. Receive moment: balance beat replaces the toast (`815d230`) - The "Received" toast rendered *inside* the masked ScrollView, so the scroll-fade gradient dissolved it. Replaced with a transient green `✓ +2,500` beat that takes over the balance's fiat sub-amount slot for 2.5s, reusing the sanctioned payment-received celebration (spring + scale/opacity + checkmark bounce; reduce-motion → opacity; VoiceOver-hidden). - Unifies amount formatting: `formatAmountShort` now routes through `AmountFormatter`, so balance / history / beat all group as "2,500" (fixing the "2,500 / 2 500 / +2500" split). - Deletes the orphaned `NotificationBadgeView` (the app's last `.shadow`) and updates DESIGN.md: retire the Floating-Toast Exception → **No-Shadow Absolute**, and document the received-delta beat under Notifications + Motion §6. ## Testing - `xcodebuild -scheme CashuWallet -destination 'generic/platform=iOS Simulator'` → **BUILD SUCCEEDED** at each step. - Suggested manual checks: onboarding seed acknowledge gate; Settings → Restore (add via type / paste / suggestion, run restore, skip); receive across ecash / Cashu Request / Lightning / npub.cash (watch the balance beat, not a toast), including a rapid double-receive and Reduce Motion on/off; confirm grouped amounts ("2,500") everywhere and Bitcoin-symbol mode. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
swedishfrenchpress commented 2026-05-31 15:53:08 +00:00 (Migrated from github.com)

@asmogo can you review and merge?

@asmogo can you review and merge?
Sign in to join this conversation.
No description provided.