feat(card): link Money Account from Card Home and refresh linkage UX#30452
Conversation
|
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. |
🔍 Smart E2E Test Selection
click to see 🤖 AI reasoning detailsE2E Test Selection:
The Performance Test Selection: |
|



Description
Reason: Users with a MetaMask Card and a Money Account need clearer paths to link spending to their Money balance, copy that matches design (including mUSD cashback and flexible APY), and less noisy linkage feedback. Card Home previously lacked a dedicated entry point; the link confirmation sheet used generic art and older copy.
Solution:
useMoneyAccountCardLinkagereportscanLink, render aMoneyMetaMaskCardinlinkmode between dividers, withhideCardImageso the hero card image is not duplicated,apyfromuseMoneyAccountBalance, and metal vs virtual cashback viaCardType. Tapping the header, subtitle row, or Link card callsstartLinkFlow({ screen: Routes.CARD.HOME }). CTA stays visible whilecardHomeDataStatusisloading(stale-while-revalidate) when other conditions still allow linking.hideCardImage(vertical bullets only), and whenapyisundefined, uselink_subtitle_no_apyand omit the APY bullet instead of forcing0%.selectCardHomeData(mm_card_metalforCardType.METAL, elsemm_card_regular), Figma-aligned sizing, updated sheet description pluslink_card_sheet_description_no_apywhen vault APY is not yet available.IconDefault, and error iconErrorinstead ofDanger.SpendAndEarnPromoCard,ShimmerOverlay), and relateduseSpendingLimit/ view tests.main): Bridge insufficient-native reserve handling and tests; send confirmation alert modal and fee / percentage amount hook adjustments with tests.Changelog
CHANGELOG entry: Added a Link Money Account section on Card Home, redesigned the link-card bottom sheet (card art and copy), improved Money Account card-linkage toasts, extended Spending Limit with Spend and Earn / Money preselection, and tightened bridge and send confirmation edge cases.
Related issues
Fixes:
Refs: #30320
Manual testing steps
Screenshots/Recordings
Before
N/A
After
Simulator.Screen.Recording.-.iPhone.17.Pro.-.2026-05-20.at.11.58.13.mov
Pre-merge author checklist
Performance checks (if applicable)
trace()for usage andaddTokenfor an exampleFor performance guidelines and tooling, see the Performance Guide.
Pre-merge reviewer checklist
Note
Medium Risk
Moderate risk: introduces new Money Account linking CTA paths and conditional rendering on Card Home, plus updates toast/copy logic that could affect linkage UX and user navigation if conditions are wrong.
Overview
Adds a Money Account linking entry point on Card Home: when
useMoneyAccountCardLinkage().canLinkis true, Card Home renders aMoneyMetaMaskCard“link” section (with dividers), passes liveapyfromuseMoneyAccountBalance, detects metal vs virtual viaCardType, and routes all presses tostartLinkFlow({ screen: Routes.CARD.HOME }).Refines the linking UX and copy:
MoneyMetaMaskCardnow supportshideCardImage(Card Home variant) and switches to no-APY subtitle/bullets when APY is unavailable;MoneyLinkCardSheetswaps the illustration to card art based onselectCardHomeDataand uses no-APY description when needed. Updates linkage toasts inuseMoneyAccountCardLinkage(single-line pending/success, new error copy/icon/spinner color) and refreshes/enhances tests and i18n strings accordingly.Reviewed by Cursor Bugbot for commit 3128d05. Bugbot is set up for automated code reviews on this repo. Configure here.