Problem
The SponsorOnboarding page at src/pages/SponsorOnboarding.tsx:267-316 has a final step titled "Deposit" that does not actually let sponsors deposit USDC. The StepDeposit component only shows a "Connect Freighter Wallet" button (when disconnected) or a "Go to Sponsor Dashboard" link (when connected). There is no deposit amount input, no XDR generation, and no transaction signing.
User impact: New sponsors complete the 4-step onboarding wizard expecting to make their first deposit, but reach a dead end. They are redirected to the sponsor dashboard, which also has no deposit form (only a withdraw form). First-time depositors cannot onboard through the intended flow.
Before Starting
Read ALL of these before writing any code:
- context/architecture-context.md
- context/code-standards.md
Your PR will be rejected if it conflicts with
anything in the context files regardless of
whether CI passes.
Root Cause
Step 4 of the onboarding wizard was designed as a "Deposit" step but was never wired to the backend. The StepDeposit component is a stub — it connects the wallet but never calls sponsorsService.deposit() or sponsorsService.buildDepositXdr() to generate the unsigned XDR.
What To Build
Replace the stub StepDeposit component with a real deposit flow:
- Add a deposit amount input field with validation (min $10)
- Call
sponsorsService.buildDepositXdr() to get unsigned XDR
- Sign the XDR with Freighter
- Submit signed XDR via
sponsorsService.submitTransaction()
- Show success state with Stellar Expert link
- On success, mark onboarding complete and navigate to dashboard
Files To Touch
src/pages/SponsorOnboarding.tsx — replace StepDeposit stub with real deposit flow
src/services/sponsors.service.ts — already has buildDepositXdr and submitTransaction
Acceptance Criteria
Mandatory Checks Before Opening PR
PRs that fail any check above will be closed
without review. No exceptions.
Problem
The SponsorOnboarding page at
src/pages/SponsorOnboarding.tsx:267-316has a final step titled "Deposit" that does not actually let sponsors deposit USDC. TheStepDepositcomponent only shows a "Connect Freighter Wallet" button (when disconnected) or a "Go to Sponsor Dashboard" link (when connected). There is no deposit amount input, no XDR generation, and no transaction signing.User impact: New sponsors complete the 4-step onboarding wizard expecting to make their first deposit, but reach a dead end. They are redirected to the sponsor dashboard, which also has no deposit form (only a withdraw form). First-time depositors cannot onboard through the intended flow.
Before Starting
Read ALL of these before writing any code:
Your PR will be rejected if it conflicts with
anything in the context files regardless of
whether CI passes.
Root Cause
Step 4 of the onboarding wizard was designed as a "Deposit" step but was never wired to the backend. The
StepDepositcomponent is a stub — it connects the wallet but never callssponsorsService.deposit()orsponsorsService.buildDepositXdr()to generate the unsigned XDR.What To Build
Replace the stub
StepDepositcomponent with a real deposit flow:sponsorsService.buildDepositXdr()to get unsigned XDRsponsorsService.submitTransaction()Files To Touch
src/pages/SponsorOnboarding.tsx— replace StepDeposit stub with real deposit flowsrc/services/sponsors.service.ts— already hasbuildDepositXdrandsubmitTransactionAcceptance Criteria
Mandatory Checks Before Opening PR
PRs that fail any check above will be closed
without review. No exceptions.