Stellar + Soroban dApp for continuous USDC micropayment streams. Connect a wallet, fund an escrow, and let recipients withdraw earned value over time — no subscriptions, no manual transfers.
Live App → https://streampay-roan.vercel.app Demo Video → https://youtu.be/p1tYF4V3nZQ GitHub → https://github.com/SumitRaikwar18/StreamPay
- What is StreamPay?
- Level 1 — White Belt
- Level 2 — Yellow Belt
- Level 3 — Orange Belt
- Level 4 — Green Belt
- Tech Stack
- Local Setup
- Contract Development
Traditional blockchain payments are one-shot transfers. That creates friction for freelancers who should be paid continuously, AI agents paying for usage-based services, and creators who need small repeated payments instead of lump sums.
StreamPay is a belt-by-belt Stellar dApp that evolves from a basic XLM payment tool into a full Soroban USDC escrow platform with inter-contract fee accounting, real-time event sync, and production CI/CD.
The basics: wallet connect, XLM balance, testnet payment.
Covers the core Stellar fundamentals — Freighter wallet connect/disconnect, XLM balance from Horizon, testnet payment flow, and success/failure feedback with transaction hash verification.
What was built:
- Freighter wallet connect and disconnect
- Stellar Testnet enforcement
- XLM balance display from Horizon
- Testnet XLM payment with pending → success → failure states
- Transaction hash with Stellar Expert verification link
Screenshots:
| Balance + In-App Result | Transaction on Stellar Expert |
|---|---|
![]() |
![]() |
Multi-wallet + first Soroban contract deployed and called.
Moved from Freighter-only to StellarWalletsKit, deployed a real stream metadata contract on Soroban testnet, and wired up frontend contract invocations with live event polling.
What was built:
- StellarWalletsKit wallet modal (Freighter, xBull, Albedo, etc.)
- Deployed Soroban stream metadata contract
create_stream,pause_stream,complete_streamfrom the frontend- Contract reads: recipient, amount, flow rate, status, note, stream IDs
- Event feed polling from Soroban RPC
- Explicit error handling: wallet unavailable, user rejected, insufficient balance
Deployed contract:
CBX335TVF52JLKT2YTJUZBFNM5WFFOTINLZD44CM5MD2INFUW2X7WOZN
On-chain proof:
| Event | Transaction |
|---|---|
| Deployment | 8b7f9e63...574b6b9 |
| Contract call | 9fdd9aba...557f3d |
Screenshots:
| Multi-wallet Popup | Contract Deployment | Contract Call |
|---|---|---|
![]() |
![]() |
![]() |
Caching, loading states, automated tests, and demo-ready quality.
Upgraded StreamPay into a polished mini-dApp with dashboard state caching, progress indicators during wallet restore and live sync, and automated test coverage.
What was built:
localStoragecache for streams and recent Soroban events- Loading states and progress indicators for wallet restore and live sync
- Reusable validation helpers for stream creation
- 8 automated tests — validation, cache parsing, XLM/stroops conversion
- Complete README and demo video
Test command:
npm testDemo video → https://youtu.be/p1tYF4V3nZQ
On-chain proof:
| Event | Transaction |
|---|---|
| Complete stream call | aeaef662...dad6f8 |
Screenshots:
| Test Output (8 passing) | Complete Stream |
|---|---|
![]() |
![]() |
Real USDC escrow, inter-contract fee vault, CI/CD, mobile responsive.
StreamPay becomes a production-ready dApp. USDC is escrowed in a Soroban contract, protocol fees are routed to a separate FeeVault contract via an inter-contract call, and recipients withdraw earned balance on demand.
Live App → https://streampay-roan.vercel.app
What was built:
- Real testnet USDC funded streams via Stellar Asset Contract (SAC)
StreamEscrowcontract — create, pause, resume, withdraw, completeFeeVaultcontract — protocol fee accounting via inter-contract call- Dashboard: XLM + USDC balances, trustline awareness, funded stream forms, withdraw panel
- Linked escrow + fee event feed
- GitHub Actions CI (frontend lint, tests, build + Soroban contract tests and build)
- Mobile-responsive dashboard layout
Deployed contracts:
| Contract | Address |
|---|---|
| StreamEscrow | CD34OVJRB4ACS3VDJRAUOW6BPOJ5TZRRQ4VHS3XIEOWVAHCBD7U2YLO5 |
| FeeVault | CBRAYXE2MCTP5MBDPT3CQNFARYVEYWQLMALVTWEYFUS6LBCQTAPIEK2T |
| Testnet USDC SAC | CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA |
On-chain proof:
| Event | Transaction |
|---|---|
| FeeVault deployment | b598b47e...c2c50 |
| StreamEscrow deployment | ffb63414...21a14 |
| Funded stream + inter-contract fee | 15075257...58890 |
| Funded stream withdrawal | 9fc226a8...a5fa3a |
CI/CD:
Screenshots:
| Mobile Responsive | Contract Interactions (RPC Events) |
|---|---|
![]() |
![]() |
| Layer | Technology |
|---|---|
| Frontend | Next.js 16, TypeScript, Tailwind CSS |
| Wallet | @creit.tech/stellar-wallets-kit (Freighter, xBull, Albedo, etc.) |
| Stellar SDK | @stellar/stellar-sdk, @stellar/freighter-api |
| Smart contracts | Rust, Soroban SDK 25 |
| RPC | Soroban testnet RPC (soroban-testnet.stellar.org) |
| Horizon | Stellar Testnet Horizon |
| Testing | Vitest (frontend), cargo test (contracts) |
| CI/CD | GitHub Actions |
| Deployment | Vercel |
git clone https://github.com/SumitRaikwar18/StreamPay
cd StreamPay
npm install
npm run devOpen http://localhost:3000.
The app already points to the deployed contract addresses from src/lib/constants.ts. No extra config needed to run against the live testnet contracts.
Before using funded USDC streams:
- Create or open a testnet wallet (Freighter recommended)
- Fund with XLM via Stellar Friendbot
- Add the USDC trustline and get testnet USDC via the dashboard's "Open USDC setup" link
Run all contract tests:
# In WSL or Linux
cd contracts
cargo test -p streampay_level2 -p streampay_level4_fee_vault -p streampay_level4_escrowBuild contracts:
cd contracts
stellar contract buildRun frontend tests:
npm testContract source files:
| Contract | Source |
|---|---|
| Level 2 stream metadata | contracts/contracts/streampay_level2/src/lib.rs |
| Level 4 FeeVault | contracts/contracts/streampay_level4_fee_vault/src/lib.rs |
| Level 4 StreamEscrow | contracts/contracts/streampay_level4_escrow/src/lib.rs |
Built on Stellar and Soroban testnet · Rise In Challenge · April 2026








