Skip to content
Open

Qa #1505

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
299 commits
Select commit Hold shift + click to select a range
d2e256e
Merge pull request #1911 from Solid-Money/cursor/restore-rain-helpers…
MusabShakeel576 Apr 12, 2026
3f766cd
feat: gate card country access behind test feature allowlist
cursoragent Apr 12, 2026
469885d
fix: redirect to /card/activate when Rain KYC is not approved after D…
claude Apr 13, 2026
16d6c13
Use platform-specific height overrides for toast close button
claude Apr 13, 2026
9229457
fix: migrate from deprecated Stargate API to LayerZero VT API for bri…
claude Apr 13, 2026
3b12529
Merge pull request #1914 from Solid-Money/claude/fix-kyc-redirect-log…
MusabShakeel576 Apr 13, 2026
e5fc30f
Merge pull request #1913 from Solid-Money/cursor/restore-rain-helpers…
MusabShakeel576 Apr 13, 2026
97f13f7
Merge pull request #1917 from Solid-Money/claude/fix-mobile-toast-h-f…
MusabShakeel576 Apr 13, 2026
b309f0c
Merge pull request #1918 from Solid-Money/claude/fix-deposit-card-err…
MusabShakeel576 Apr 13, 2026
ea01f34
Add mul53 to test features whitelist for Rain card testing
claude Apr 13, 2026
3ce42d9
Merge pull request #1920 from Solid-Money/claude/add-test-user-whitel…
MusabShakeel576 Apr 13, 2026
8a71e36
Remove whitelist gate from Rain card flows so all users can test
claude Apr 13, 2026
081a5aa
fix: use direct contract quoteSend call instead of deprecated Stargat…
claude Apr 13, 2026
20ee69c
fix: use config-driven destination chain for Rain card deposits inste…
claude Apr 13, 2026
dcf8e6e
refactor: move getStargateQuote from api.ts to stargate.ts and ABI to…
claude Apr 13, 2026
6df1e00
Merge pull request #1925 from Solid-Money/claude/enable-rain-card-tes…
MusabShakeel576 Apr 13, 2026
54e40f7
Remove unused useCardWithdrawAllowed hook
claude Apr 13, 2026
c36b682
Merge pull request #1924 from Solid-Money/claude/cherrypick-deposit-f…
MusabShakeel576 Apr 13, 2026
7e0bcf3
Merge pull request #1926 from Solid-Money/claude/enable-rain-card-tes…
MusabShakeel576 Apr 13, 2026
81e80f2
fix: use correct Stargate USDC pool address on Fuse for quoteSend
claude Apr 13, 2026
e7b3d77
fix: show KYC rejection message when Didit verification is declined
claude Apr 13, 2026
1bca188
fix: handle all Didit KYC states in card step display
claude Apr 13, 2026
fe5566b
Merge pull request #1929 from Solid-Money/claude/fix-kyc-error-messag…
MusabShakeel576 Apr 13, 2026
f271499
feat: display dynamic Didit KYC rejection reasons in card step
claude Apr 14, 2026
1456d1d
fix: remove undefined isWithdrawAllowed prop causing runtime error
claude Apr 14, 2026
da966bf
feat: add Order Physical Card button and modal to card details page
claude Apr 14, 2026
d88eefa
Merge pull request #1933 from Solid-Money/claude/remove-unused-iswith…
MusabShakeel576 Apr 14, 2026
585aff8
fix: handle unrecognized Rain status (didit_forward_failed) in step d…
claude Apr 14, 2026
adc3770
Merge pull request #1936 from Solid-Money/claude/fix-kyc-error-messag…
MusabShakeel576 Apr 14, 2026
ec89989
feat: update physical card modal to eligibility check flow
claude Apr 14, 2026
e3b968e
feat: add shipping form modal with KYC pre-fill and cancel flow
claude Apr 14, 2026
12a7e23
refactor: use TanStack Query, react-hook-form, zod, and TextInput
claude Apr 14, 2026
26192af
fix: remove unused isOrderPhysicalCardModalOpen prop from DesktopHeader
claude Apr 14, 2026
2259480
refactor: replace Alert.alert with Dialog for cancel confirmation
claude Apr 14, 2026
13edd52
refactor: split order and cancel physical card into separate modals
claude Apr 14, 2026
13e4cc9
Merge pull request #1939 from Solid-Money/claude/add-order-physical-c…
MusabShakeel576 Apr 14, 2026
e232614
fix: deploy Safe on card chain before Rain collateral withdrawal
claude Apr 14, 2026
11d3a33
Merge pull request #1941 from Solid-Money/claude/cherrypick-deposit-f…
MusabShakeel576 Apr 14, 2026
3871102
fix: recreate smart account client after Safe deployment
claude Apr 14, 2026
56c130c
Fix AES-GCM decryption: authTagLength should be in bytes, not bits
claude Apr 15, 2026
385b977
Merge pull request #1943 from Solid-Money/claude/cherrypick-deposit-f…
MusabShakeel576 Apr 15, 2026
1ce5e42
Merge pull request #1947 from Solid-Money/claude/fix-card-details-mob…
MusabShakeel576 Apr 15, 2026
a4447f2
Fix Didit widget blank screen when KYC completed on mobile
claude Apr 15, 2026
97e52c0
fix: remove Rain-specific cents-to-dollars division for card transact…
claude Apr 15, 2026
fcb1baa
Merge pull request #1948 from Solid-Money/claude/fix-rain-card-curren…
MusabShakeel576 Apr 15, 2026
2ed3530
Merge pull request #1950 from Solid-Money/claude/fix-didit-widget-bla…
MusabShakeel576 Apr 15, 2026
5b33890
fix: add missing return in getCardBalance API function
claude Apr 15, 2026
f1829c8
feat: display merchant city and country under merchant name in card a…
claude Apr 15, 2026
c8b5229
Merge pull request #1953 from Solid-Money/claude/override-mul53-rain-…
MusabShakeel576 Apr 15, 2026
73639bf
Merge pull request #1952 from Solid-Money/claude/rain-transaction-sou…
MusabShakeel576 Apr 15, 2026
8139fa9
fix: savings chart, redirect to strategy on click
MayankMittal1 Apr 16, 2026
60644c0
Merge branch 'qa' into mayank/fix/savings-analytics
MayankMittal1 Apr 16, 2026
f0f2a2c
Merge pull request #1957 from Solid-Money/mayank/fix/savings-analytics
MayankMittal1 Apr 16, 2026
1140c4b
feat: show cashback escrow status and time left in card activity
claude Apr 19, 2026
e814b01
fix: center merchant name/location and trim whitespace
claude Apr 19, 2026
4a9749b
Merge pull request #1958 from Solid-Money/claude/cashback-escrow-stat…
MusabShakeel576 Apr 19, 2026
9dcdf6e
Merge pull request #1959 from Solid-Money/claude/fix-merchant-card-di…
MusabShakeel576 Apr 19, 2026
9998a59
feat(card-deposit): wire CARD deposit category into connect-wallet wo…
claude Apr 20, 2026
8e88106
fix(card-deposit): use EXPO_PUBLIC_MINIMUM_SPONSOR_AMOUNT for minimum…
claude Apr 20, 2026
fe1f9ab
refactor(card-deposit): source card deposits from Solid Safe AA
claude Apr 20, 2026
0e9eaee
refactor(card-deposit): replace 'SAVINGS'|'CARD' literal with Deposit…
claude Apr 20, 2026
5b499da
Merge pull request #1962 from Solid-Money/claude/deposit-card-all-cha…
MusabShakeel576 Apr 20, 2026
78cf00b
fix(card-deposit): prevent silent no-op and add minimum-amount UI
claude Apr 20, 2026
c4b857d
Merge pull request #1964 from Solid-Money/claude/deposit-card-all-cha…
MusabShakeel576 Apr 20, 2026
4fed919
refactor(card-deposit): reuse savings wallet token selector screen
claude Apr 20, 2026
b13fe6d
Merge pull request #1966 from Solid-Money/claude/deposit-card-all-cha…
MusabShakeel576 Apr 20, 2026
1ee1e62
fix(card-deposit): render WalletTokenButton inline inside amount input
claude Apr 20, 2026
adb3f3f
fix(card-deposit): route token selection back to card modal, preserve…
claude Apr 20, 2026
d6b5d83
Merge pull request #1968 from Solid-Money/claude/deposit-card-all-cha…
MusabShakeel576 Apr 20, 2026
d733cc1
feat(card-deposit): add external wallet option to internal form dropdown
claude Apr 21, 2026
c3dd834
Merge pull request #1970 from Solid-Money/claude/add-external-wallet-…
MusabShakeel576 Apr 21, 2026
19ff621
fix(card-deposit): balance + symbol track the selected wallet chain
claude Apr 21, 2026
6ca6334
Merge pull request #1973 from Solid-Money/claude/deposit-card-all-cha…
MusabShakeel576 Apr 21, 2026
2d94ebb
fix(card-deposit): hide flex spacer when external wallet is selected
claude Apr 21, 2026
6d4ae90
Merge pull request #1974 from Solid-Money/claude/add-external-wallet-…
MusabShakeel576 Apr 21, 2026
34a2230
fix(modal): keyboard no longer covers OTP input on native
claude Apr 22, 2026
b5a7292
feat(settings): use rounded BackButton component in mobile header
claude Apr 22, 2026
5a13773
revert(back-button): keep ArrowLeft icon in shared BackButton
claude Apr 22, 2026
e7814b1
Merge pull request #1976 from Solid-Money/claude/update-back-button-c…
MusabShakeel576 Apr 22, 2026
8f7106b
fix(welcome): filter passkey prompt to selected user's credential
claude Apr 22, 2026
227b8ba
Merge pull request #1978 from Solid-Money/claude/fix-keyboard-otp-inp…
MusabShakeel576 Apr 22, 2026
98c3263
feat(welcome): pre-select user so passkey prompt filters to that cred…
claude Apr 22, 2026
6fe3256
style(toast): add info type matching success and error style
claude Apr 22, 2026
bab4de2
style(toast): default info badgeText to empty
claude Apr 22, 2026
e0a75ad
Merge pull request #1981 from Solid-Money/claude/style-info-toast-ERGr4
MusabShakeel576 Apr 22, 2026
93d8ace
Merge pull request #1980 from Solid-Money/claude/fix-passkey-selectio…
MusabShakeel576 Apr 22, 2026
a6e3caf
Reduce card desktop image file size
MusabShakeel576 Apr 22, 2026
ddad0e1
Update asset registry hash for cards-desktop.png
claude Apr 22, 2026
9b4ac2c
Merge pull request #1985 from Solid-Money/claude/update-cards-desktop…
MusabShakeel576 Apr 22, 2026
46dd139
fix(activity): show Declined status and reason on card transaction de…
claude Apr 23, 2026
0480cfd
feat(data-source): use Alchemy as primary on-chain data source
claude Apr 23, 2026
88bcf93
fix(activity): color declined card amounts red in activity list
claude Apr 23, 2026
d9fed80
Merge pull request #1987 from Solid-Money/claude/fix-declined-transac…
MusabShakeel576 Apr 23, 2026
7262a1b
fix(alchemy): paginate alchemy_getTokenBalances via pageKey
claude Apr 23, 2026
e3ba972
Merge pull request #1988 from Solid-Money/claude/alchemy-primary-data…
MusabShakeel576 Apr 23, 2026
d8ee20f
feat(card): move consents to /card/ready page
claude Apr 26, 2026
2f7760d
feat(settings): use rounded BackButton in desktop header
claude Apr 26, 2026
6eba11a
feat(card-ready): show consents based on US vs international
claude Apr 26, 2026
f3c2436
Merge pull request #1991 from Solid-Money/claude/update-back-button-c…
MusabShakeel576 Apr 26, 2026
2d05324
Merge pull request #1992 from Solid-Money/claude/move-consent-checkbo…
MusabShakeel576 Apr 26, 2026
910f78d
feat(settings/security): use rounded BackButton in headers
claude Apr 26, 2026
6aa6d4e
fix(kyc,card-activate): redirect to /card/pending after questionnaire…
claude Apr 26, 2026
6ae5e3d
Merge pull request #1994 from Solid-Money/claude/move-consent-checkbo…
MusabShakeel576 Apr 26, 2026
bc0a349
fix(kyc): also redirect on didit:status_updated for manual review
claude Apr 26, 2026
cb59826
fix(kyc): handle full Didit status_updated status set
claude Apr 26, 2026
015f185
Merge pull request #1996 from Solid-Money/claude/move-consent-checkbo…
MusabShakeel576 Apr 26, 2026
48ab7a9
fix(kyc): attach Didit handlers after reset, not before
claude Apr 26, 2026
e632f60
Merge pull request #1997 from Solid-Money/claude/move-consent-checkbo…
MusabShakeel576 Apr 26, 2026
ee345cc
fix(kyc): only redirect on didit:status_updated, not verification_sub…
claude Apr 26, 2026
77e73c4
Merge pull request #1999 from Solid-Money/claude/move-consent-checkbo…
MusabShakeel576 Apr 26, 2026
28d2d96
feat(card-pending): poll KYC status and redirect on transition
claude Apr 26, 2026
965a4f9
Merge pull request #2000 from Solid-Money/claude/move-consent-checkbo…
MusabShakeel576 Apr 27, 2026
a7b8ae8
fix: redirect to /card/pending when Rain KYC is in manual review
MusabShakeel576 Apr 27, 2026
720f9e6
Merge pull request #2003 from Solid-Money/claude/fix-kyc-redirect-56a…
MusabShakeel576 Apr 27, 2026
dfe7287
fix(card-pending): update title to reflect ID verification review
claude Apr 28, 2026
693628e
Merge pull request #2004 from Solid-Money/claude/update-card-pending-…
MusabShakeel576 Apr 28, 2026
2ab4142
feat: standardize back buttons via shared BackButton component
claude Apr 28, 2026
3e73cb7
Merge pull request #2006 from Solid-Money/claude/update-back-button-c…
MusabShakeel576 Apr 28, 2026
d574c9c
feat(card): remove order physical card button from details page
claude Apr 28, 2026
04cd7da
Merge pull request #2009 from Solid-Money/claude/remove-order-card-bu…
MusabShakeel576 Apr 28, 2026
99639c8
feat(agent): add Agent Wallet page, useAgent hooks, and API key integ…
claude Apr 28, 2026
32aed6b
feat(agent): track simplified MVP — drop caps and allowlist, fetch on…
claude Apr 28, 2026
2c09d65
chore(agent): match useBalances polling cadence (5s + skip when backg…
claude Apr 28, 2026
16a1e8e
fix(agent): escape JSX apostrophes for react/no-unescaped-entities
claude Apr 29, 2026
0f17a9b
fix(agent): act on UI code review
claude Apr 29, 2026
2c615ed
Merge pull request #2010 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 29, 2026
73f4f31
fix(agent): hide expo-router 'agent/index' header, restyle setup card
claude Apr 29, 2026
e2b3f86
style(agent): use brand-variant button on setup card to match /card/r…
claude Apr 29, 2026
df27724
Merge pull request #2011 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 29, 2026
c417daf
style(agent): match /card/pending layout for empty state
claude Apr 29, 2026
5c4a5d2
Merge pull request #2012 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 29, 2026
fb2f4e5
feat(agent): add ?status= debug override to force render-state
claude Apr 29, 2026
e969ebf
Merge pull request #2013 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 29, 2026
94bb265
feat(agent): restructure provisioned page to /card/details layout
claude Apr 29, 2026
e1b4f35
Merge pull request #2014 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 29, 2026
838d335
feat(agent): wire borrow-against-savings deposit, header actions + ba…
claude Apr 29, 2026
e22f4f5
Merge pull request #2015 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 29, 2026
69e69a4
feat(agent): ResponsiveModal deposit flow + centered header + blue ba…
claude Apr 29, 2026
b7b6fcd
Merge pull request #2016 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 29, 2026
fb607ef
style(agent): restore flex-row justify-between in desktop header
claude Apr 29, 2026
13ce51d
Merge pull request #2017 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 29, 2026
913b92d
style(agent): bump balance gradient first stop to rgb(0,117,255)
claude Apr 29, 2026
9a0440b
Merge pull request #2018 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 30, 2026
2fbc21d
feat(agent): clone CardDepositInternalForm BORROW source for agent de…
claude Apr 30, 2026
119c137
Merge pull request #2019 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 30, 2026
97a4901
refactor(agent): session-stamped provisioning flow
claude Apr 30, 2026
7111e38
refactor(agent): hoist provisioning types out of api.ts into types.ts
claude Apr 30, 2026
8212032
Merge pull request #2020 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 30, 2026
952e0f4
fix(agent): scope session to sub-org, skip step 2 on orphan adoption
claude Apr 30, 2026
f5c0787
Merge pull request #2021 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 Apr 30, 2026
467be61
style(agent): use ResponsiveModal + brand button for API key reveal
claude Apr 30, 2026
9c3c60d
feat(agent): rewrite prompt template + add external-wallet deposit
claude Apr 30, 2026
981c61c
Merge pull request #2022 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 May 3, 2026
500ee5e
feat(agent): QR-only external deposit, non-prod borrow warning, ask-f…
claude May 3, 2026
825d054
Merge pull request #2023 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 May 3, 2026
d2f9d2d
fix(card): prevent QR crash when external deposit address is empty
claude May 3, 2026
af637f4
fix(card): use max-uint repay when fully repaying card debt
claude May 3, 2026
ed05e86
fix(card-deposit): block bogus Arbitrum fallback for Rain cards
claude May 3, 2026
c79b4c1
Merge pull request #2026 from Solid-Money/claude/fix-card-repayment-m…
MusabShakeel576 May 3, 2026
3886252
Merge pull request #2027 from Solid-Money/claude/fix-borrow-savings-e…
MusabShakeel576 May 3, 2026
46c5072
feat(card): make Rain the only card provider
claude May 3, 2026
1b518ae
Merge pull request #2028 from Solid-Money/claude/fix-wallet-dropdown-…
MusabShakeel576 May 3, 2026
bb013c2
fix(card-deposit): keep deposit button enabled below gasless minimum
claude May 3, 2026
106e1ca
feat(agent): inline source dropdown in deposit modal, drop options sc…
claude May 3, 2026
68dcdcb
Merge pull request #2030 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 May 3, 2026
a4dcd98
chore(agent): drop 'See supported networks' link from external deposit
claude May 3, 2026
450d883
Merge pull request #2031 from Solid-Money/claude/deposit-card-minimum…
MusabShakeel576 May 3, 2026
335f71b
Merge pull request #2033 from Solid-Money/claude/agent-yield-payments…
MusabShakeel576 May 3, 2026
45c5b22
fix(card-deposit): keep gasless hint icon and text color in sync
claude May 3, 2026
7bd30de
Merge pull request #2034 from Solid-Money/claude/deposit-card-minimum…
MusabShakeel576 May 3, 2026
856cc4e
fix(card-deposit): surface zod v4 validation errors in deposit form
claude May 3, 2026
0c5f21b
Merge pull request #2036 from Solid-Money/claude/deposit-card-minimum…
MusabShakeel576 May 3, 2026
0c7e5b7
fix(card-deposit): drop Onchain badge from card-deposit error toasts
claude May 4, 2026
cc041bd
Merge pull request #2041 from Solid-Money/claude/fix-borrow-savings-e…
MusabShakeel576 May 4, 2026
c5db4ec
fix(card-deposit): remove gasless minimum deposit requirement
claude May 4, 2026
05be1a1
Merge pull request #2042 from Solid-Money/claude/remove-deposit-minim…
MusabShakeel576 May 4, 2026
f67df7f
fix(card/kyc): redirect to /card/activate on Didit Declined and rende…
claude May 4, 2026
2a1b5e3
Merge pull request #2044 from Solid-Money/claude/fix-rain-api-token-r…
MusabShakeel576 May 4, 2026
0099e51
fix(card): show cashback to two decimals on details
claude May 5, 2026
cc6974a
Merge pull request #2046 from Solid-Money/claude/fix-cashback-display…
MusabShakeel576 May 5, 2026
0a9ef5e
feat(card-onboard): redesign content and add fees and charges popup
claude May 6, 2026
0cccae6
Merge pull request #2048 from Solid-Money/claude/card-onboard-fees-po…
MusabShakeel576 May 6, 2026
3102c5b
fix(card-onboard): correct "Card" and "against" typos
claude May 6, 2026
c086b76
Merge pull request #2049 from Solid-Money/claude/card-onboard-fees-po…
MusabShakeel576 May 6, 2026
46eb625
refactor(card-onboard): adjust icon sizing and gradient height
claude May 6, 2026
6e925dc
Merge pull request #2050 from Solid-Money/claude/card-onboard-fees-po…
MusabShakeel576 May 6, 2026
3de84ab
style(card-fees-modal): enlarge card image and shift it ~50% off the …
claude May 6, 2026
6338191
Merge pull request #2051 from Solid-Money/claude/card-onboard-fees-po…
MusabShakeel576 May 6, 2026
40dad88
Update card fee modal icons
MusabShakeel576 May 6, 2026
b67d4ca
feat(card-onboard): split mobile and desktop into separate components
claude May 6, 2026
b159da8
Merge pull request #2053 from Solid-Money/claude/card-onboard-fees-po…
MusabShakeel576 May 7, 2026
0bfb2c3
fix(card-onboard): mobile bottom inset and close fees modal on Get-yo…
claude May 7, 2026
71d192b
Merge pull request #2054 from Solid-Money/claude/card-onboard-fees-po…
MusabShakeel576 May 7, 2026
6d6c4c9
fix(add-funds): mark reverted on-chain transfers as FAILED
claude May 7, 2026
67618de
Merge pull request #2055 from Solid-Money/claude/wallet-pending-activ…
MusabShakeel576 May 7, 2026
a466973
Update international card terms link to new consumer program article
claude May 7, 2026
3d84f57
Merge pull request #2057 from Solid-Money/claude/update-rain-card-doc…
MusabShakeel576 May 7, 2026
eb5c68b
fix(card-activate): show Rain KYC reasons on first step
claude May 10, 2026
efba7e9
Merge pull request #2059 from Solid-Money/claude/fallback-error-messa…
MusabShakeel576 May 10, 2026
03ca5f1
Update card onboarding description text color
MusabShakeel576 May 12, 2026
b525d1c
Increase card summary feature label font size
MusabShakeel576 May 12, 2026
71a1e44
refactor(card-waitlist): split gradient into sibling element
claude May 12, 2026
86e69ab
Increase card summary feature icon size
MusabShakeel576 May 12, 2026
530b79e
Add padding top in card summary feature label
MusabShakeel576 May 12, 2026
68cb178
Increase gap in card fees modal
MusabShakeel576 May 12, 2026
df52db8
Remove borrow against savings from card fees modal
MusabShakeel576 May 12, 2026
c1e684e
Merge pull request #2061 from Solid-Money/claude/refactor-card-gradie…
MusabShakeel576 May 12, 2026
a9c4dd3
Add space between card waitlist page mobile
MusabShakeel576 May 12, 2026
b2ee8a5
Increase cards image size in fees modal
MusabShakeel576 May 12, 2026
19e37d3
Merge pull request #2062 from Solid-Money/musab/feat/card-onboarding-fee
MusabShakeel576 May 12, 2026
9bc07ae
Align items start in top up card summary feature
MusabShakeel576 May 12, 2026
bb0ff81
Merge pull request #2063 from Solid-Money/musab/feat/card-onboarding-fee
MusabShakeel576 May 12, 2026
c752bec
Add card welcome popup on first /card/details visit after activation
claude May 17, 2026
77e2da8
Merge pull request #2064 from Solid-Money/claude/card-welcome-popup-O…
MusabShakeel576 May 17, 2026
79cf74d
Allow ?state=welcome to force-open card welcome popup in non-prod
claude May 17, 2026
18bcd48
Merge pull request #2065 from Solid-Money/claude/card-welcome-popup-O…
MusabShakeel576 May 17, 2026
8c8b62b
Add welcome card image
MusabShakeel576 May 17, 2026
57d0d9f
Allow ?state=welcome to force-open card welcome popup in non-prod
claude May 17, 2026
8f6ad65
Register welcome-card.png in asset registry
claude May 17, 2026
f839d0c
Merge pull request #2066 from Solid-Money/claude/card-welcome-popup-O…
MusabShakeel576 May 17, 2026
c5bcb08
Make welcome card image cover full upper section of popup
claude May 17, 2026
00cf63c
Merge pull request #2067 from Solid-Money/claude/card-welcome-popup-O…
MusabShakeel576 May 17, 2026
9e0dc51
chore(balances): add Sentry diagnostic for Arbitrum visibility on native
claude May 18, 2026
35db136
fix(react-query): wire focus and online managers to AppState and NetI…
claude May 18, 2026
2948561
Merge pull request #2069 from Solid-Money/claude/fix-mobile-wallet-di…
MusabShakeel576 May 18, 2026
5ab3183
fix(activity): send 'USDC' symbol so borrow/bridge/repay activities p…
claude May 18, 2026
afe0e1c
Revert "fix(activity): send 'USDC' symbol so borrow/bridge/repay acti…
claude May 18, 2026
8f38a4e
fix(balances): isolate Alchemy axios from global JWT interceptor
claude May 18, 2026
6c22dd5
chore(balances): remove Arbitrum diagnostic logs
claude May 18, 2026
09b7953
Merge pull request #2076 from Solid-Money/claude/fix-mobile-wallet-di…
MusabShakeel576 May 19, 2026
fab291a
Remove physical card reference from welcome popup
claude May 19, 2026
65f7d93
Merge pull request #2077 from Solid-Money/claude/fix-card-welcome-pop…
MusabShakeel576 May 19, 2026
d2d2bb6
fix(activity): write typed BORROW_AND_DEPOSIT_TO_CARD / BRIDGE_DEPOSI…
claude May 19, 2026
e43d547
Merge pull request #2071 from Solid-Money/claude/check-borrow-deposit…
MusabShakeel576 May 19, 2026
838f1be
fix(activity): send hash and url to backend on update so they actuall…
claude May 19, 2026
63b0af4
Merge pull request #2080 from Solid-Money/claude/fix-activity-update-…
MusabShakeel576 May 19, 2026
86f328e
fix(savings): keep page mounted on vault switch, show inline skeletons
claude May 20, 2026
99c8e36
Merge pull request #2085 from Solid-Money/claude/fix-vault-switch-pre…
MusabShakeel576 May 20, 2026
7fac820
fix(card): drop Latin-only name validation from Rain KYC and align ph…
claude May 21, 2026
7b71a6e
Merge pull request #2086 from Solid-Money/claude/remove-latin-restric…
MusabShakeel576 May 24, 2026
dec9d5a
feat(balances): show native ETH on Arbitrum
claude May 24, 2026
48231ad
Merge pull request #2087 from Solid-Money/claude/serene-noether-osU2b
MusabShakeel576 May 24, 2026
b9a0924
fix(ios): pin DiditSDK pod to 3.2.13 instead of tracking main
claude May 26, 2026
f09899d
Bump app version to 1.0.7
MusabShakeel576 May 26, 2026
46faab6
fix(ios): repin DiditSDK pod to 3.2.9 to match wrapper's switch state…
claude May 26, 2026
82cf3c7
Merge pull request #2094 from Solid-Money/claude/hopeful-allen-GDDOC-qa
MusabShakeel576 May 26, 2026
ecbc1f9
fix(send): use live token balance and preserve precision on Max
claude May 26, 2026
d511a25
Merge pull request #2097 from Solid-Money/claude/inspiring-hamilton-Z…
MusabShakeel576 May 26, 2026
7ed3c0e
fix(send): trigger validation on Max so Review enables immediately
claude May 26, 2026
f21a5bd
Merge pull request #2100 from Solid-Money/claude/send-max-validate-GD…
MusabShakeel576 May 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export default ({ config }: ConfigContext): ExpoConfig => ({
...config,
name: 'Solid',
slug: 'flash-frontend',
version: '1.0.6',
version: '1.0.7',
orientation: 'portrait',
icon: './assets/images/adaptive-icon.png',
scheme: 'solid',
Expand Down
96 changes: 78 additions & 18 deletions app/(protected)/(tabs)/activity/[clientTxId].tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import { Linking, Pressable, View } from 'react-native';
import { useLocalSearchParams, useRouter } from 'expo-router';
import * as Sentry from '@sentry/react-native';
import { useQuery } from '@tanstack/react-query';
import { format, minutesToSeconds } from 'date-fns';
import { ArrowUpRight, ChevronLeft, X } from 'lucide-react-native';
import { format, formatDistanceStrict, minutesToSeconds } from 'date-fns';
import { ArrowUpRight, X } from 'lucide-react-native';
import { mainnet } from 'viem/chains';

import Diamond from '@/assets/images/diamond';
Expand All @@ -13,6 +13,7 @@ import CopyToClipboard from '@/components/CopyToClipboard';
import EstimatedTime from '@/components/EstimatedTime';
import PageLayout from '@/components/PageLayout';
import RenderTokenIcon from '@/components/RenderTokenIcon';
import { BackButton } from '@/components/ui/back-button';
import { Button } from '@/components/ui/button';
import { Text } from '@/components/ui/text';
import { Underline } from '@/components/ui/underline';
Expand Down Expand Up @@ -92,6 +93,21 @@ const Value = memo(function Value({ children, className }: ValueProps) {
return <Text className={cn('text-lg font-bold', className)}>{children}</Text>;
});

const EscrowTimeLeft = memo(function EscrowTimeLeft({ payoutAt }: { payoutAt: string }) {
const [now, setNow] = useState(() => Date.now());

useEffect(() => {
const interval = setInterval(() => setNow(Date.now()), 60_000);
return () => clearInterval(interval);
}, []);

const target = useMemo(() => new Date(payoutAt).getTime(), [payoutAt]);

if (target - now <= 0) return <Value>Releasing soon</Value>;

return <Value>{formatDistanceStrict(target, now)}</Value>;
});

const Back = memo(function Back({ title, className }: BackProps) {
const router = useRouter();
const params = useLocalSearchParams<{ tab?: string; from?: string }>();
Expand All @@ -106,12 +122,11 @@ const Back = memo(function Back({ title, className }: BackProps) {
}, [params.from, params.tab, router]);

return (
<View className="flex-row items-center justify-between">
<Pressable onPress={handleBackPress} className="web:hover:opacity-70">
<ChevronLeft color="white" />
</Pressable>
<View className="relative flex-row items-center justify-center">
<View className="absolute left-0">
<BackButton onPress={handleBackPress} />
</View>
<Text className={cn('text-center text-lg font-semibold text-white', className)}>{title}</Text>
<View className="w-10" />
</View>
);
});
Expand Down Expand Up @@ -162,7 +177,11 @@ const CardTransactionDetail = memo(function CardTransactionDetail({
activity,
cardProvider,
}: CardTransactionDetailProps) {
const merchantName = transaction.merchant_name || transaction.description || 'Unknown';
const merchantName = (
transaction.merchant_name?.trim() ||
transaction.description?.trim() ||
'Unknown'
);
const merchantLocation = [transaction.merchant_city, transaction.merchant_country]
.filter(Boolean)
.join(' ') || undefined;
Expand All @@ -171,6 +190,8 @@ const CardTransactionDetail = memo(function CardTransactionDetail({

const txHash = transaction.crypto_transaction_details?.tx_hash;
const isApproved = transaction.status === 'approved';
const isDeclined = transaction.status === 'declined';
const isReversed = transaction.status === 'reversed';
const postedDate = useMemo(() => {
const dateStr = isApproved
? transaction.authorized_at || transaction.posted_at
Expand All @@ -193,18 +214,37 @@ const CardTransactionDetail = memo(function CardTransactionDetail({

const cashbackInfo = getCashbackAmount(transaction.id, cashbacks);

const statusLabel = isApproved
? 'Pending'
: isDeclined
? 'Declined'
: isReversed
? 'Reversed'
: 'Confirmed';
const statusColor = isApproved
? 'text-yellow-500'
: isDeclined
? 'text-red-400'
: '';

const rows = useMemo(() => {
const allRows = [
{ key: 'from', label: <Label>Sent from</Label>, value: <Value>Card</Value> },
{
key: 'status',
label: <Label>Status</Label>,
value: (
<Value className={isApproved ? 'text-yellow-500' : ''}>
{isApproved ? 'Pending' : 'Confirmed'}
</Value>
),
value: <Value className={statusColor}>{statusLabel}</Value>,
},
isDeclined &&
transaction.declined_reason && {
key: 'reason',
label: <Label>Reason</Label>,
value: (
<Value className="max-w-[60%] text-right text-base">
{toTitleCase(transaction.declined_reason)}
</Value>
),
},
cashbackInfo && {
key: 'cashback',
label: (
Expand All @@ -217,12 +257,24 @@ const CardTransactionDetail = memo(function CardTransactionDetail({
<Value
className={cashbackInfo.amount === 'Pending' ? 'text-yellow-500' : 'text-[#34C759]'}
>
{cashbackInfo.isPending && cashbackInfo.amount !== 'Pending'
? `${cashbackInfo.amount} (Pending)`
: cashbackInfo.amount}
{cashbackInfo.amount === 'Pending'
? cashbackInfo.isEscrowed
? 'Escrowed'
: 'Pending'
: cashbackInfo.isEscrowed
? `${cashbackInfo.amount} (Escrowed)`
: cashbackInfo.isPending
? `${cashbackInfo.amount} (Pending)`
: cashbackInfo.amount}
</Value>
),
},
cashbackInfo?.isEscrowed &&
cashbackInfo.payoutAt && {
key: 'cashback-escrow-time-left',
label: <Label>Releases in</Label>,
value: <EscrowTimeLeft payoutAt={cashbackInfo.payoutAt} />,
},
txHash && {
key: 'explorer',
label: <Label>Explorer</Label>,
Expand All @@ -240,7 +292,15 @@ const CardTransactionDetail = memo(function CardTransactionDetail({
].filter(Boolean) as { key: string; label: React.ReactNode; value: React.ReactNode }[];

return allRows;
}, [cashbackInfo, txHash, handleExplorerPress, isApproved]);
}, [
cashbackInfo,
txHash,
handleExplorerPress,
statusLabel,
statusColor,
isDeclined,
transaction.declined_reason,
]);

const tokenIcon = useMemo(
() => getTokenIcon({ tokenSymbol: transaction.currency?.toUpperCase(), size: 75 }),
Expand All @@ -253,7 +313,7 @@ const CardTransactionDetail = memo(function CardTransactionDetail({
<View>
<Back title={merchantName} className="text-xl md:text-3xl" />
{merchantLocation && (
<Text className="ml-10 text-sm text-muted-foreground">{merchantLocation}</Text>
<Text className="text-center text-sm text-muted-foreground">{merchantLocation}</Text>
)}
</View>

Expand Down
8 changes: 3 additions & 5 deletions app/(protected)/(tabs)/add-referrer.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import React, { useEffect, useState } from 'react';
import { ActivityIndicator, Pressable, TextInput, View } from 'react-native';
import { ActivityIndicator, TextInput, View } from 'react-native';
import { router } from 'expo-router';
import { ArrowLeft } from 'lucide-react-native';

import InfoError from '@/assets/images/info-error';
import PageLayout from '@/components/PageLayout';
import { BackButton } from '@/components/ui/back-button';
import { Button } from '@/components/ui/button';
import { Text } from '@/components/ui/text';
import { path } from '@/constants/path';
Expand Down Expand Up @@ -68,9 +68,7 @@ export default function AddReferrer() {
<View className="mx-auto w-full max-w-lg flex-1 justify-center gap-10 px-4 py-8">
<View className="mx-auto w-full gap-5 md:gap-5">
<View className="flex-row items-center justify-between">
<Pressable onPress={() => router.back()} className="web:hover:opacity-70">
<ArrowLeft color="white" />
</Pressable>
<BackButton />
<Text className="text-center text-lg font-semibold text-white md:text-xl">
Enter your friend&apos;s referral code
</Text>
Expand Down
11 changes: 3 additions & 8 deletions app/(protected)/(tabs)/bridge-kyc.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import React, { useEffect, useRef, useState } from 'react';
import { Pressable, StyleSheet, View } from 'react-native';
import { StyleSheet, View } from 'react-native';
import { useLocalSearchParams, useRouter } from 'expo-router';
import { ArrowLeft } from 'lucide-react-native';

import PageLayout from '@/components/PageLayout';
import { BackButton } from '@/components/ui/back-button';
import { Text } from '@/components/ui/text';
import { TRACKING_EVENTS } from '@/constants/tracking-events';
import { track } from '@/lib/analytics';
Expand Down Expand Up @@ -246,12 +246,7 @@ export default function BridgeKyc({ onSuccess }: BridgeKycParams = {}) {
<PageLayout desktopOnly>
<View className="mx-auto w-full max-w-lg flex-1 pt-8">
<View className="flex-row items-center justify-between">
<Pressable
onPress={() => (router.canGoBack() ? router.back() : router.replace('/'))}
className="web:hover:opacity-70"
>
<ArrowLeft color="white" />
</Pressable>
<BackButton />
<Text className="text-center text-xl font-semibold text-white md:text-2xl">
Verify identity
</Text>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import React from 'react';
import { Pressable, View } from 'react-native';
import { View } from 'react-native';
import { useRouter } from 'expo-router';
import { ArrowLeft, ShieldAlert } from 'lucide-react-native';
import { ShieldAlert } from 'lucide-react-native';

import PageLayout from '@/components/PageLayout';
import { BackButton } from '@/components/ui/back-button';
import { Button } from '@/components/ui/button';
import { Text } from '@/components/ui/text';
import { path } from '@/constants/path';
Expand Down Expand Up @@ -42,9 +43,7 @@ export default function CountryVerificationRequired() {
<View className="mx-auto w-full max-w-lg px-4 pt-12">
{/* Header */}
<View className="mb-10 flex-row items-center justify-between">
<Pressable onPress={goBack} className="web:hover:opacity-70">
<ArrowLeft color="white" />
</Pressable>
<BackButton onPress={goBack} />
<Text className="text-center text-xl font-semibold text-white md:text-2xl">
Verification Required
</Text>
Expand Down
7 changes: 3 additions & 4 deletions app/(protected)/(tabs)/card-onboard/country_selection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,13 @@ import {
View,
} from 'react-native';
import { useRouter } from 'expo-router';
import { ArrowLeft, ChevronDown } from 'lucide-react-native';
import { ChevronDown } from 'lucide-react-native';
import { useShallow } from 'zustand/react/shallow';

import CountryFlagImage from '@/components/CountryFlagImage';
import { NotificationEmailModalDialog } from '@/components/NotificationEmailModal/NotificationEmailModalDialog';
import PageLayout from '@/components/PageLayout';
import { BackButton } from '@/components/ui/back-button';
import { Button } from '@/components/ui/button';
import { Text } from '@/components/ui/text';
import { COUNTRIES, Country } from '@/constants/countries';
Expand Down Expand Up @@ -330,9 +331,7 @@ export default function CountrySelection() {
/>
<View className="mx-auto w-full max-w-lg px-4 pt-12">
<View className="mb-10 flex-row items-center justify-between">
<Pressable onPress={goBack} className="web:hover:opacity-70">
<ArrowLeft color="white" />
</Pressable>
<BackButton onPress={goBack} />
<Text className="text-center text-xl font-semibold text-white md:text-2xl">
Solid card
</Text>
Expand Down
7 changes: 3 additions & 4 deletions app/(protected)/(tabs)/card/activate/country_selection.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import React, { useEffect, useMemo, useState } from 'react';
import { ActivityIndicator, Modal, Pressable, ScrollView, TextInput, View } from 'react-native';
import { useRouter } from 'expo-router';
import { ArrowLeft, ChevronDown } from 'lucide-react-native';
import { ChevronDown } from 'lucide-react-native';
import { useShallow } from 'zustand/react/shallow';

import CountryFlagImage from '@/components/CountryFlagImage';
import PageLayout from '@/components/PageLayout';
import { BackButton } from '@/components/ui/back-button';
import { Button } from '@/components/ui/button';
import { Text } from '@/components/ui/text';
import { COUNTRIES, Country } from '@/constants/countries';
Expand All @@ -19,7 +20,7 @@

export default function ActivateCountrySelection() {
const router = useRouter();
const { user } = useUserStore(

Check warning on line 23 in app/(protected)/(tabs)/card/activate/country_selection.tsx

View workflow job for this annotation

GitHub Actions / lint

'user' is assigned a value but never used. Allowed unused vars must match /^_/u
useShallow(state => ({
user: state.users.find(user => user.selected),
})),
Expand Down Expand Up @@ -260,9 +261,7 @@
<PageLayout desktopOnly>
<View className="mx-auto w-full max-w-lg px-4 pt-12">
<View className="mb-10 flex-row items-center justify-between">
<Pressable onPress={goBack} className="web:hover:opacity-70">
<ArrowLeft color="white" />
</Pressable>
<BackButton onPress={goBack} />
<Text className="text-center text-xl font-semibold text-white md:text-2xl">
Solid card
</Text>
Expand Down
6 changes: 2 additions & 4 deletions app/(protected)/(tabs)/card/deposit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import { ActivityIndicator, Pressable, View } from 'react-native';
import Toast from 'react-native-toast-message';
import { Image } from 'expo-image';
import { useRouter } from 'expo-router';
import { ArrowLeft } from 'lucide-react-native';
import { Address, formatUnits } from 'viem';

import PageLayout from '@/components/PageLayout';
import { BackButton } from '@/components/ui/back-button';
import { Button } from '@/components/ui/button';
import { Text } from '@/components/ui/text';
import { TRACKING_EVENTS } from '@/constants/tracking-events';
Expand Down Expand Up @@ -216,9 +216,7 @@ const DepositToCard = () => {
<PageLayout desktopOnly contentClassName="px-4 py-8">
<View className="mx-auto h-full w-full max-w-md">
<View className="mb-8 flex-row items-center justify-between">
<Pressable onPress={() => router.back()} className="web:hover:opacity-70">
<ArrowLeft color="white" />
</Pressable>
<BackButton />
<Text className="text-center text-xl font-semibold md:text-2xl">Deposit to card</Text>
<View className="w-6" />
</View>
Expand Down
Loading
Loading