Conversation
Implements the Yield boost card from Figma 26134:23293 with its Claim
button, and puts the card back on the funded savings vault screen (the
redesign had dropped it), under the balance card.
- The boost is paid by Merkl campaigns (one per vault, all WFUSE on
Fuse). lib/merklYieldBoost.ts reads the WFUSE leaf from
/v4/users/{address}/rewards, scopes "Total Earned" to the campaign ids
in EXPO_PUBLIC_MERKL_YIELD_BOOST_CAMPAIGN_IDS, and builds the claim.
It doesn't import @merkl/api, so it can be tested without it.
- Claim is one user operation: Distributor.claim with the cumulative
amount, then WFUSE.withdraw of exactly what the claim pays, measured
against the Distributor's own claimed record so a stale index can't
revert the batch. Proofs are re-read (bypassing Merkl's cache) right
before signing, and the query is refreshed the same way afterwards.
- Total Earned is the boost campaigns' credited amount plus pending, in
USD at the app's FUSE price (Merkl's quote as a fallback).
- The card stays visible with a disabled "—" boost for a user who lost
their tier but still has something to claim.
- The rewards yield-boost sheet now describes the FUSE boost and its
balance cap ("on your first $10,000") when the backend sends
yieldBoostBalanceCap, and keeps the old copy when it doesn't.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EupadZ9qYL5nDLM6dDtu5n
…mentation-nogeis Add Merkl yield boost claiming to savings screen
The rail only existed in the wallet flow. It now appears in all three card funding modals — Wirex, and Rain on mobile and desktop. The steps are the same screens; only the shell differs. OrchestraFlow renders them with the host's own navigator, the way BuyCryptoFlow already does for TransFi, and lib/orchestraFlow supplies the title and back target so each host asks the owning flow rather than keeping its own copy. Both embedded flows now route through one pair of helpers in each modal. Which balance gets funded is the entry point's to decide, not the screen's: useOrchestraCardEntry sets it to 'card' and the amount screen sends it, so the server resolves the card's own address instead of the Safe. The receive line follows suit — "in your card balance" rather than "in your wallet". A modal that forgot to set it would quietly fund the wallet from a screen titled Fund your card, which is why that lives in a shared hook rather than three copies. The row is passed only when the server says the deposit is available, so it stays hidden rather than disabled outside the US. Worth noting the neighbouring "Buy crypto" row is dead code today: it takes onBuyCryptoPress and none of the three modals pass it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Onramper's hosted widget is back, as an "Apple Pay" method under USD in both deposit flows. - Wallet: Cash → USD → "Deposit US Dollars" lists Wire transfer/ACH, Cash App where the server allows it, and Apple Pay. The bank rail and Apple Pay are offered everywhere, so USD now always opens the chooser instead of going straight to the bank rail outside the US. - Card (Rain mobile and desktop): USD opens the same list — Wire transfer/ACH and Apple Pay — as a step of the funding modal, and back from the widget returns to it. Wirex's funding screen has no USD section and is unchanged. - The rows live in one UsdMethodList shared by both flows, and Cash App availability in one useIsCashAppAvailable hook shared by the cash list's chips and the USD list. - The widget session now names its destination: the card funding modals ask for `card`, so the purchase lands on the card deposit address and arrives as card balance, while the wallet flow keeps `wallet`. Until the matching backend change deploys, the field is ignored and card-screen purchases keep landing in the wallet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nramp feat(deposit): offer Cash App under Fund your card
Resolves the conflicts with a4b43a8 (Cash App under Fund your card) in both Rain card funding modals. Titles and back targets come from the shared getEmbeddedTitle and getEmbeddedBackTarget, and the Onramper widget still returns to the USD methods step it is opened from. useOrchestraCardEntry now reads Cash App availability from useIsCashAppAvailable, so the rule lives in one place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(deposit): Apple Pay under USD, funding the card from card screens
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…page On STANDARD_KYC_REQUIRED / ENHANCED_KYC_REQUIRED the error screen offered "Verify identity", which opened our own identity flow. The user is already verified there, so it bounced them back to the amount screen and into the same refusal - a loop with no way out. The screen now reads "Upgrade your verification" and asks the backend for TransFi's page for the level the refusal names (POST /transfi/kyc/upgrade), then opens it. When TransFi already has a submission it shows "Verification in review" instead, and it offers "Buy a smaller amount", since the limit only caps this purchase. Every other complete_kyc error behaves as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(buy-crypto): send a KYC-limit refusal to TransFi's verification page
Code reviewNo issues found. Checked for bugs and CLAUDE.md compliance. |
Cash App was a row of its own at the bottom of "Fund your card", in the Other group, while the wallet flow lists it under USD beside Apple Pay. The card screens now do the same. - Rain (mobile and desktop): USD opens "Deposit US Dollars", which lists Wire transfer/ACH, Cash App where the server allows it, and Apple Pay. The USD row's chips name Cash App when it is offered, and back from the Cash App amount screen returns to the USD methods rather than the list. - Wirex has no USD section, so it no longer offers Cash App at all. Its modal is back to what it was before Cash App was added to it, and the Other group's Cash App row goes with its last caller. - The USD chips come from one getUsdMethodChips helper beside UsdMethodList, shared by the wallet's cash list and the card options, so the two USD rows cannot drift apart. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-position-faaa69 fix(deposit): list Cash App under USD on Fund your card
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.