A cross-border remittance application built on the Stellar blockchain, enabling fast and low-cost international money transfers.
This repository includes both frontend and backend services for building a Stellar payment experience.
- Create Stellar accounts
- Check account balances
- Send XLM payments
- Low transaction fees (~$0.00001)
- Fast settlement (3-5 seconds)
- Backend: Node.js + Express + Stellar SDK
- Frontend: React + Vite
- Blockchain: Stellar (Testnet)
- Install dependencies:
npm install- Configure backend environment:
cd backend
cp .env.example .envSee backend/CONFIGURATION.md for environment options, validation rules, and optional encrypted secrets.
- Configure frontend environment (optional):
cd frontend
cp .env.example .envSet VITE_API_URL to your production API endpoint when deploying to a CDN or different domain. Leave empty for development (Vite proxy handles /api requests to localhost:3001).
- Start development servers:
npm run devBackend runs on http://localhost:3001 Frontend runs on http://localhost:3000
Docker Compose spins up the full stack — PostgreSQL, Redis, backend, and frontend — with a single command. No local database installation required.
docker compose up --build- Frontend: http://localhost:3000
- Backend API: http://localhost:3001
- PostgreSQL:
localhost:5432(userfuture_admin, dbfuture_remittance, passworddev_password) - Redis:
localhost:6379
Prisma migrations run automatically on backend startup. Source directories are bind-mounted so the backend (node --watch) and frontend (Vite HMR) both hot-reload on file changes.
docker compose down # stop containers, keep the db volume
docker compose down -v # stop and delete the db volumeTo customise ports, credentials, or log levels without editing the shared file:
cp docker-compose.override.yml.example docker-compose.override.yml
# edit docker-compose.override.yml — it is git-ignored
docker compose up --build| From | To | Address |
|---|---|---|
| backend | postgres | postgres:5432 |
| backend | redis | redis:6379 |
| frontend (Vite proxy) | backend | http://backend:3001 |
| browser | frontend | http://localhost:3000 |
| browser | backend | http://localhost:3001 |
- Click "Create Account" to generate a new Stellar keypair
- Account is automatically funded on testnet via Friendbot
- Check balance to see your XLM
- Send payments to other Stellar addresses
Friendbot is Stellar's automated account-funding service for the testnet. It credits any new (or unfunded) Stellar public key with 10,000 test XLM at no cost, letting you start testing payments immediately without real funds.
Fund an account via the API directly:
curl "https://friendbot.stellar.org/?addr=YOUR_PUBLIC_KEY"Or use the bundled helper script (see scripts/fund-testnet-account.sh):
bash scripts/fund-testnet-account.sh GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGZWM9CQJHD9QDNHXHXNThe app calls Friendbot automatically when you click Create Account in the UI.
- Quarterly resets — the Stellar testnet is wiped roughly every three months. All accounts, balances, and transaction history are deleted. You must re-fund accounts after each reset.
- Test XLM has no monetary value and cannot be transferred to mainnet.
- Friendbot is only available on testnet; it does not exist on mainnet.
| Setting | Testnet | Mainnet |
|---|---|---|
STELLAR_NETWORK |
testnet |
mainnet |
HORIZON_URL |
https://horizon-testnet.stellar.org |
https://horizon.stellar.org |
| Network passphrase | Test SDF Network ; September 2015 |
Public Global Stellar Network ; September 2015 |
| Friendbot available | ✅ Yes | ❌ No |
| Real funds | ❌ No | ✅ Yes |
Set STELLAR_NETWORK=testnet (the default) in backend/.env for local development. Change to mainnet only for production deployments.
- Add stablecoin support (USDC)
- Integrate fiat on/off ramps
- Add exchange rate conversion
- Implement KYC/AML compliance
- Add transaction history
- Mobile app development
- Security best practices for integrators — API key storage, webhook verification, private key management, CSP, replay attacks, front-running
- Operational Runbook — Server restart, DB migration rollback, stream cancellation, IP unblock, incident response
See CONTRIBUTING.md for local setup, running tests, branch naming, PR process, code style, and commit message conventions.
Key technology choices are documented as ADRs in docs/adr/:
| ADR | Decision |
|---|---|
| ADR-0001 | Stellar as the blockchain layer |
| ADR-0002 | Prisma as the ORM |
| ADR-0003 | Multi-level caching (in-memory L1 + Redis L2) |
| ADR-0004 | JWT auth with refresh token rotation |