Skip to content

feat(onboarding): one-time passphrase intro dialog on first dashboard#236

Merged
BitHighlander merged 2 commits into
developfrom
feat/passphrase-first-run-intro
Jun 9, 2026
Merged

feat(onboarding): one-time passphrase intro dialog on first dashboard#236
BitHighlander merged 2 commits into
developfrom
feat/passphrase-first-run-intro

Conversation

@BitHighlander

Copy link
Copy Markdown
Collaborator

What

Every new Vault install now sees a one-time, informational hidden-wallet / passphrase dialog the first time they reach the dashboard. This reaches the users PR #235 can't: people with an already-initialized device who never run the OOB setup flow — they still learn the feature exists and how to turn it on.

  • Info-only modal: reuses the "Hidden Wallets" explainer + "You can turn this on or off anytime in Settings." + a Got it button. No device interaction, so it works regardless of connection state.
  • Shown once, then persisted (passphrase_intro_shown setting) so it never reappears.
  • Suppressed for OOB users: completing the OOB passphrase tip card (PR feat(onboarding): make passphrase tip non-skippable with inline opt-in toggle #235) marks the intro as seen, so new-device users aren't educated twice.
  • Skipped in watch-only mode; renders below the device PIN/passphrase overlays (z-index dialog < overlay) so prompts always win.

How

  • types.ts / index.ts: AppSettings.passphraseIntroShown (from passphrase_intro_shown) + markPassphraseIntroShown RPC. rpc-schema.ts: method signature.
  • PassphraseIntroDialog.tsx: new modal (purple FaUserSecret, tutorial.cards.hiddenWallets.{title,body,settingsHint,gotIt}).
  • Dashboard.tsx: reads the flag in refreshFeatureFlags; renders the dialog once when false (starts true to avoid a pre-load flash); dismiss persists the flag.
  • OobSetupWizard.tsx: marks the intro shown on passphrase-card completion.
  • en/setup.json: adds gotIt. All new strings use defaultValue fallbacks for untranslated locales.

Dependency / ordering

Stacked on #235 (feat/passphrase-onboarding-optin), which is stacked on #234. Includes both commits. Merge order: #234#235 → this. Each PR's diff narrows as its parent lands.

Test plan

  1. Fresh install (or clear the passphrase_intro_shown setting) with an already-set-up device → connect → reach dashboard → ✅ intro dialog appears once. Got it → ✅ dismissed; reload/reconnect → ✅ never reappears.
  2. New-device OOB flow → complete the passphrase tip card → reach dashboard → ✅ intro dialog does not appear (suppressed).
  3. Watch-only view → ✅ no dialog.
  4. While the dialog is open, a device PIN/passphrase prompt → ✅ renders above the intro.

@BitHighlander
BitHighlander requested a review from pastaghost as a code owner June 9, 2026 18:21
Every new Vault install now sees a one-time, informational hidden-wallet /
passphrase dialog the first time they reach the dashboard — so users with an
already-initialized device (who never go through the OOB flow) still learn the
feature exists and how to enable it.

- New persisted setting passphrase_intro_shown, exposed via getAppSettings
  (AppSettings.passphraseIntroShown) + a markPassphraseIntroShown RPC.
- PassphraseIntroDialog: info-only modal (reuses the hidden-wallets explainer +
  'change anytime in Settings' hint, 'Got it' to dismiss). z-index below the
  device PIN/passphrase overlays so prompts always win.
- Dashboard shows it once when settings load with passphraseIntroShown=false
  (skipped in watch-only); dismiss persists the flag so it never reappears.
- OOB: completing the passphrase tip card marks the intro shown, so new-device
  users aren't educated twice.
Awaiting markPassphraseIntroShown before setStep('complete') closes a race
where the dashboard's on-mount getAppSettings read could beat the fire-and-
forget write and re-show the one-time passphrase intro to a user who just saw
it in the OOB flow. Best-effort: on RPC failure we still complete.
@BitHighlander
BitHighlander force-pushed the feat/passphrase-first-run-intro branch from 466885a to a299886 Compare June 9, 2026 18:38
@BitHighlander
BitHighlander merged commit 0d72fd1 into develop Jun 9, 2026
@BitHighlander
BitHighlander deleted the feat/passphrase-first-run-intro branch June 9, 2026 18:38
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