Skip to content

feat: MUSD-795 money home screen onboarding stepper#30226

Open
Matt561 wants to merge 11 commits into
mainfrom
feat/musd-795-money-home-screen-onboarding-stepper
Open

feat: MUSD-795 money home screen onboarding stepper#30226
Matt561 wants to merge 11 commits into
mainfrom
feat/musd-795-money-home-screen-onboarding-stepper

Conversation

@Matt561
Copy link
Copy Markdown
Contributor

@Matt561 Matt561 commented May 15, 2026

Description

Refactored the Money Home onboarding stepper to match latest designs and use generic <StepperCard/> component.

Changelog

CHANGELOG entry: refactored Money home onboarding stepper to match latest designs; added generic StepperCard component; added SegmentedProgressBar component

Related issues

Fixes: MUSD-795: [Mobile] Build the Money Account home screen onboarding stepper — all states

Manual testing steps

TBD - Will update tomorrow.

Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]

Screenshots/Recordings

Before

After

https://www.loom.com/share/cd5bb340ca3644e5b948e4f17d3a2bb3

Pre-merge author checklist

Performance checks (if applicable)

  • I've tested on Android
    • Ideally on a mid-range device; emulator is acceptable
  • I've tested with a power user scenario
    • Use these power-user SRPs to import wallets with many accounts and tokens
  • I've instrumented key operations with Sentry traces for production performance metrics

For performance guidelines and tooling, see the Performance Guide.

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Medium Risk
Introduces persisted onboarding-stepper state in the user reducer and rewires Money Home onboarding behavior (auto-advancing/auto-hiding and CTA navigation), which could affect user progression and UI visibility across sessions.

Overview
Refactors the Money Home onboarding into a new reusable StepperCard (backed by SegmentedProgressBar), replacing the bespoke MoneyProgressBar and simplifying MoneyHomeView to render MoneyOnboardingCard without passing step/variant props.

Adds persisted onboarding-stepper progress to Redux via onboardingStepperProgress, selectOnboardingStepperProgress, and a new setOnboardingStepperStep(stepperId, step) action, plus a Money-scoped hook useMoneyOnboardingStep and a developer option to reset the Money stepper.

Updates Money onboarding logic to dynamically vary step-1 copy/tooltips based on balances, support step-2 link/get-card flows (including skip), and auto-advance steps when balance becomes non-zero or when a cardholder already has a linked card; adjusts related layout padding (MoneyEarnings.compact, action row spacing) and refreshes/enlarges test coverage and i18n strings.

Reviewed by Cursor Bugbot for commit f3185ae. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions
Copy link
Copy Markdown
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@Matt561 Matt561 force-pushed the feat/musd-795-money-home-screen-onboarding-stepper branch from 0f9e1cc to df9dfc0 Compare May 15, 2026 17:18
@Matt561 Matt561 marked this pull request as ready for review May 15, 2026 19:20
@Matt561 Matt561 requested review from a team as code owners May 15, 2026 19:20
Comment thread app/component-library/components/StepperCard/StepperCard.tsx
Comment thread app/components/UI/Money/Views/MoneyHomeView/MoneyHomeView.tsx
Comment thread app/component-library/components/StepperCard/StepperCard.tsx Outdated
navigation.navigate(Routes.CARD.ROOT, {
screen: Routes.CARD.HOME,
});
}, [isCardholder, canLink, openLinkCardSheet, navigation]);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Link card CTA uses openLinkCardSheet instead of startLinkFlow

Medium Severity

The refactored handleLinkCardPress calls openLinkCardSheet directly, but the old code in MoneyHomeView explicitly used startLinkFlow with an origin parameter ({ screen: Routes.MONEY.ROOT, params: { screen: Routes.MONEY.HOME } }). The previous tests explicitly asserted that openLinkCardSheet was NOT called and startLinkFlow was preferred — the test was even named "still calls startLinkFlow (not openLinkCardSheet directly) when onboarding CTA is tapped." startLinkFlow likely records the calling screen so the user returns to Money Home after the linking flow completes; openLinkCardSheet lacks this origin context, potentially breaking return navigation after card linking.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 0250e8a. Configure here.

Copy link
Copy Markdown
Contributor Author

@Matt561 Matt561 May 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will update this when I'm back on Tuesday. startLinkFlow was added last night.

@Matt561 Matt561 force-pushed the feat/musd-795-money-home-screen-onboarding-stepper branch from 0250e8a to f3185ae Compare May 16, 2026 01:24
@github-actions
Copy link
Copy Markdown
Contributor

🔍 Smart E2E Test Selection

  • Selected E2E tags: SmokeMoney
  • Selected Performance tags: None (no tests recommended)
  • Risk Level: medium
  • AI Confidence: 90%
click to see 🤖 AI reasoning details

E2E Test Selection:
The changes are focused entirely on the MetaMask Card/Money feature area:

  1. Redux state changes (user reducer): Added onboardingStepperProgress field and SET_ONBOARDING_STEPPER_STEP action - additive changes that don't break existing state or actions.

  2. New reusable components: StepperCard and SegmentedProgressBar are new generic UI components used only by MoneyOnboardingCard currently.

  3. MoneyOnboardingCard refactor: Completely rewritten from a simple static card to a multi-step interactive onboarding flow with 2 steps (fund account, get/link card). Uses new StepperCard component and useMoneyOnboardingStep hook backed by Redux.

  4. MoneyBalanceCard update: Now auto-skips step 1 when balance is non-zero, using the new useMoneyOnboardingStep hook.

  5. MoneyHomeView update: Simplified MoneyOnboardingCard usage (no props), added compact prop to MoneyEarnings based on onboarding visibility.

  6. Deleted MoneyProgressBar: Replaced by the more generic SegmentedProgressBar.

  7. Localization: New string keys for the redesigned onboarding steps.

All changes are scoped to the Money/Card feature. The SmokeMoney tag covers Card home, Add Funds, and ramps flows which exercise the MoneyHomeView and MoneyBalanceCard components. No other feature areas (confirmations, accounts, network, browser, snaps, etc.) are affected. The user reducer changes are purely additive and won't break any existing tests.

Performance Test Selection:
The changes are UI/UX improvements to the Money onboarding card flow and new reusable components (StepperCard, SegmentedProgressBar). While there are new components being rendered, they are lightweight UI elements within the Money home view. The changes don't affect app startup, login, account list rendering, swap flows, or other performance-sensitive paths. No performance tests are warranted.

View GitHub Actions results

Copy link
Copy Markdown
Contributor

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit f3185ae. Configure here.

navigation.navigate(Routes.CARD.ROOT, {
screen: Routes.CARD.HOME,
});
}, [isCardholder, canLink, openLinkCardSheet, navigation]);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unreachable openLinkCardSheet branch in link card handler

Medium Severity

handleLinkCardPress checks isCardholder && canLink to call openLinkCardSheet(), but this branch is unreachable. It's only wired to the step 2 "unlinked card" CTA, which renders when isCardholder && !moneyAccountCardToken. Since canLink in useMoneyAccountCardLinkage requires moneyAccountCardToken to be truthy, canLink is always false when this handler runs. The "Link card" CTA therefore always falls through to navigating to Routes.CARD.ROOT, never opening the link sheet. The corresponding test masks this by mocking canLink: true alongside moneyAccountCardToken: null — a state impossible in production.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit f3185ae. Configure here.

@codecov-commenter
Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.92929% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.96%. Comparing base (b90a311) to head (f3185ae).
⚠️ Report is 3 commits behind head on main.

Files with missing lines Patch % Lines
...y/components/MoneyBalanceCard/MoneyBalanceCard.tsx 40.00% 1 Missing and 2 partials ⚠️
app/actions/user/index.ts 0.00% 1 Missing ⚠️
...I/Money/components/MoneyEarnings/MoneyEarnings.tsx 66.66% 0 Missing and 1 partial ⚠️
...onents/MoneyOnboardingCard/MoneyOnboardingCard.tsx 97.91% 0 Missing and 1 partial ⚠️
...oney/components/MoneyUiDeveloperOptionsSection.tsx 50.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #30226      +/-   ##
==========================================
+ Coverage   81.95%   81.96%   +0.01%     
==========================================
  Files        5446     5447       +1     
  Lines      145449   145528      +79     
  Branches    33223    33237      +14     
==========================================
+ Hits       119209   119289      +80     
  Misses      18107    18107              
+ Partials     8133     8132       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sonarqubecloud
Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants