Skip to content

feat(onboarding): collect display name in place of phone verification - #547

Merged
bmc08gt merged 1 commit into
mainfrom
feat/onboarding-display-name
Aug 5, 2026
Merged

feat(onboarding): collect display name in place of phone verification#547
bmc08gt merged 1 commit into
mainfrom
feat/onboarding-display-name

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

What

Ports the Android onboarding change (code-android-app#1183) to iOS: replaces the phone-verification step in onboarding with a mandatory display-name step. Onboarding is now ordered:

create account → access key → name → permissions (push)

Why

We want onboarding to capture a display name (used for tip cards, chat, etc.). The iOS phone step existed solely to power phone-number Send, which was removed in #546 — so the step was vestigial. Replacing it with display-name collection is the natural follow-through now that Tips is the default.

How

  • Drop phone verification from onboarding. EnterPhoneScreen / ConfirmPhoneScreen / PhoneVerificationViewModel are untouched — they're still used by the post-login Send sheet and the Onramp flow. Only onboarding's entry point changes: the .phoneVerification / .confirmPhoneNumberCode OnboardingPath cases and the enablePhoneNumberSend gate are gone.
  • Add the name step. New OnboardingNameViewModel + OnboardingNameScreen collect the name pre-login, reusing DisplayNameValidator and SetDisplayName against the in-flight owner keypair. The tip-card ProfileNameScreen can't be reused as-is (it's session-scoped: SessionContainer / AppRouter), so this mirrors how the onboarding phone step wrapped its own view model.
  • Mandatory step. The navigationDestination hides the back button, so a new account always has a name before reaching the app.
  • Behavioral note. Because the name is captured during onboarding, the tip-card setup's name prompt is now redundant for new accounts (they land in tips already named). Existing users who onboarded before this change still get the tip-setup name path — that screen is unchanged.

Testing

  • App builds clean; build-for-testing compiles all test targets.
  • New OnboardingNameViewModelTests (validation-state coverage) — 3 passing.
  • Updated the create-account UI smoke helpers (enterDisplayNameIfNeeded replaces allowPhoneVerificationIfNeeded on the onboarding path) across CreateAccount, CurrencySelection, DiscoverCurrencies, Give, and createFreshAccount.

Replace the onboarding phone-verification step with a mandatory
display-name step, mirroring the Android change (code-android-app#1183).
Onboarding is now: create account → access key → name → permissions.

- Drop phone verification from onboarding. The phone screens and
  PhoneVerificationViewModel stay intact (still used by the post-login
  Send sheet and the Onramp flow); only the onboarding entry point
  changes. This also retires the vestigial `enablePhoneNumberSend`
  gate — phone verification existed to power phone-number Send, which
  was removed in #546.
- Add OnboardingNameViewModel + OnboardingNameScreen: a pre-login name
  step that reuses DisplayNameValidator and SetDisplayName against the
  in-flight owner. The tip-card ProfileNameScreen can't be reused as-is
  because it is session-scoped (SessionContainer / AppRouter); this
  mirrors how the onboarding phone step wrapped its own view model.
- The name step is mandatory: the navigationDestination hides the back
  button, so a new account always has a name for tips and chat.
- Update the create-account UI smoke helpers (enterDisplayNameIfNeeded)
  and add OnboardingNameViewModel unit tests.
@bmc08gt
bmc08gt force-pushed the feat/onboarding-display-name branch from 925de9a to 3ed0d0b Compare August 5, 2026 19:33
@bmc08gt bmc08gt self-assigned this Aug 5, 2026
@bmc08gt
bmc08gt merged commit 4999ab4 into main Aug 5, 2026
@bmc08gt
bmc08gt deleted the feat/onboarding-display-name branch August 5, 2026 19:34
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