A decentralized school fee payment system built on the Stellar blockchain network. StellarEduPay enables transparent, immutable, and verifiable school fee payments โ eliminating manual reconciliation, reducing fraud, and providing instant proof of payment for both schools and parents.
- Problem Statement
- Solution Overview
- How Stellar Integration Works
- Key Features
- Architecture
- Tech Stack
- Getting Started
- Environment Variables
- API Usage Examples
- Testing
- Project Structure
- Documentation
- Contributing
- License
Traditional school fee payment systems face several challenges:
- Manual Reconciliation: Schools spend hours matching bank deposits to student records
- Lack of Transparency: Parents have no immediate proof of payment
- Fraud Risk: Paper receipts can be forged or lost
- Delayed Confirmation: Bank transfers take days to confirm
- High Transaction Fees: Traditional payment processors charge significant fees
- Poor Audit Trail: Difficult to track payment history and generate reports
StellarEduPay leverages the Stellar blockchain network to solve these problems:
- Instant Verification: Payments are confirmed on the blockchain within 3-5 seconds
- Immutable Records: Every transaction is permanently recorded and cannot be altered
- Automatic Reconciliation: Student IDs embedded in transaction memos enable automatic matching
- Low Fees: Stellar transactions cost a fraction of a cent
- Transparent Audit Trail: Anyone can verify payments on public blockchain explorers
- Multi-Asset Support: Accept payments in XLM (Stellar Lumens) or USDC (stablecoin)
Stellar is a decentralized, open-source blockchain network designed for fast, low-cost financial transactions. Unlike traditional payment systems, Stellar:
- Confirms transactions in 3-5 seconds
- Charges 0.00001 XLM per transaction (~$0.000001)
- Supports multiple currencies (XLM, USDC, and custom tokens)
- Provides public transaction records for transparency
โโโโโโโโโโโโโโโ
โ Parent โ
โ Wallet โ
โโโโโโโโฌโโโโโโโ
โ 1. Send XLM/USDC with student ID as memo
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Stellar Blockchain Network โ
โ (Transaction recorded immutably) โ
โโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Transaction confirmed in 3-5 seconds
โ
โผ
โโโโโโโโโโโโโโโ
โ School โ
โ Wallet โ
โโโโโโโโฌโโโโโโโ
โ 3. Backend syncs from Horizon API
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ StellarEduPay Backend โ
โ โข Reads transaction from blockchain โ
โ โข Extracts memo (student ID) โ
โ โข Validates amount against fee โ
โ โข Updates student payment status โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Stellar transactions include an optional memo field (up to 28 characters). StellarEduPay uses this to embed the student ID:
Transaction Details:
From: Parent's Wallet (GPARENT...)
To: School Wallet (GSCHOOL...)
Amount: 250 XLM
Memo: "STU001" โ Student ID for automatic matching
When the backend syncs transactions, it:
- Reads the memo field
- Matches it to a registered student
- Validates the amount against the student's fee
- Automatically updates the payment status
No manual reconciliation needed!
Important: The backend never holds or requires the school's private key. It only:
- Reads transactions from the public Stellar Horizon API
- Verifies payment amounts and memos
- Records payment metadata in MongoDB
The school administrator controls the wallet privately through their own Stellar wallet application.
StellarEduPay accepts two types of payments:
| Asset | Type | Description |
|---|---|---|
| XLM | Native | Stellar's native cryptocurrency (Lumens) |
| USDC | Stablecoin | USD-pegged stablecoin for price stability |
Assets are configured in backend/src/config/stellarConfig.js. Additional assets can be added by updating the configuration.
- Testnet: For development and testing (free test XLM from Friendbot)
- Mainnet: For production with real assets
Controlled by the STELLAR_NETWORK environment variable.
- โ Blockchain-Based Payments: Immutable, transparent transaction records
- โ Automatic Reconciliation: Student ID memos enable instant payment matching
- โ Multi-Asset Support: Accept XLM or USDC payments
- โ Fee Validation: Automatic detection of underpayments, overpayments, and exact matches
- โ Payment Limits: Configurable min/max thresholds for security
- โ Transaction Verification: Verify any payment by transaction hash
- โ Payment History: Complete audit trail for each student
- โ Retry Mechanism: Automatic retry for failed verifications during network outages
- โ Background Polling: Continuous sync of new payments from the blockchain
- โ RESTful API: Clean, documented endpoints for all operations
- โ Comprehensive Testing: Full test coverage with Jest
StellarEduPay is a three-tier application:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Parent/Admin Browser โ
โโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTPS
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Next.js Frontend (React) โ
โ โข Payment forms โข Student dashboard โข Reports โ
โโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ REST API
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Express.js Backend (Node.js) โ
โ โข Payment controller โข Stellar service โข Validation โ
โโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ โ
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MongoDB โ โ Stellar Horizon API โ
โ โข Students โ โ โข Transaction ledger โ
โ โข Payments โ โ โข Account operations โ
โ โข Fee structures โ โ โข Asset information โ
โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Component | Location | Responsibility |
|---|---|---|
| Express App | backend/src/app.js |
HTTP server, route mounting, error handling |
| Stellar Service | backend/src/services/stellarService.js |
Ledger sync, transaction verification, fee validation |
| Stellar Config | backend/src/config/stellarConfig.js |
Horizon server, accepted assets, network configuration |
| Payment Controller | backend/src/controllers/paymentController.js |
Payment instructions, verification, sync endpoints |
| Student Controller | backend/src/controllers/studentController.js |
Student CRUD, automatic fee assignment |
| Fee Controller | backend/src/controllers/feeController.js |
Fee structure management |
| Retry Service | backend/src/services/retryService.js |
Automatic retry for failed verifications |
| Transaction Service | backend/src/services/transactionService.js |
Background polling for new payments |
| Layer | Technology | Purpose |
|---|---|---|
| Blockchain | Stellar Network | Payment ledger and transaction processing |
| Backend | Node.js + Express | REST API server |
| Database | MongoDB + Mongoose | Student records and payment metadata |
| Frontend | Next.js (React) | User interface |
| Blockchain SDK | Stellar SDK | Horizon API integration |
| Testing | Jest + Supertest | Unit and integration tests |
| DevOps | Docker + Docker Compose | Containerization and deployment |
Before you begin, ensure you have the following installed:
- Node.js 18 or higher (Download)
- npm 9 or higher (bundled with Node.js)
- MongoDB 4.4 or higher (Download or use MongoDB Atlas)
- Git (Download)
- Docker + Docker Compose v2 (optional, for containerized deployment) (Download)
git clone https://github.com/yourusername/StellarEduPay.git
cd StellarEduPayYou need a Stellar wallet to receive payments. Generate one using the Stellar Laboratory:
Option A: Using Stellar Laboratory (Recommended for beginners)
- Visit Stellar Laboratory
- Click "Generate keypair"
- Copy the Public Key (starts with
G...) โ this is yourSCHOOL_WALLET_ADDRESS - Securely save the Secret Key (starts with
S...) โ never share this or commit it to version control - Click "Fund account with Friendbot" to get free test XLM (testnet only)
Option B: Using the provided script
# Install backend dependencies first if you haven't already
cd backend && npm install && cd ..
node scripts/create-school-wallet.jsThis will output:
Public Key: GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Secret Key: SXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
โ ๏ธ Save the secret key securely! The backend only needs the public key.
Backend:
cd backend
npm installFrontend:
cd ../frontend
npm installRoot (for tests):
cd ..
npm installCreate a .env file in the backend/ directory:
Create your local environment file by copying the unified template:
cp .env.example .envOpen .env and configure your credentials (e.g., set SCHOOL_WALLET_ADDRESS slightly generated above).
For the frontend, specify the backend API URL in frontend/.env.local:
cd backend
cp .env.example .envEdit backend/.env with your configuration:
# โโ Required โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# MongoDB connection string
MONGO_URI=mongodb://localhost:27017/stellaredupay
# School's Stellar public key (from Step 2)
SCHOOL_WALLET_ADDRESS=GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# โโ Stellar Network โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Use "testnet" for development, "mainnet" for production
STELLAR_NETWORK=testnet
# โโ Server โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
PORT=5000
# โโ Payment Limits (Optional) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Minimum payment amount in XLM/USDC
MIN_PAYMENT_AMOUNT=0.01
# Maximum payment amount in XLM/USDC
MAX_PAYMENT_AMOUNT=100000
# โโ Background Jobs (Optional) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# How often to poll for new payments (milliseconds)
POLL_INTERVAL_MS=30000
# How often to retry failed verifications (milliseconds)
RETRY_INTERVAL_MS=60000
# Maximum retry attempts before giving up
RETRY_MAX_ATTEMPTS=10Create a .env.local file in the frontend/ directory:
cd ../frontend
cp .env.example .env.localEdit frontend/.env.local:
NEXT_PUBLIC_API_URL=http://localhost:5000/apiTerminal 1 - Start MongoDB (if running locally):
mongod --dbpath /path/to/your/data/directoryTerminal 2 - Start Backend:
cd backend
npm run devYou should see:
MongoDB connected
Server running on port 5000
Background polling started (interval: 30000ms)
Retry worker started (interval: 60000ms)
Terminal 3 - Start Frontend:
cd frontend
npm run devVisit http://localhost:3000 in your browser.
# From the project root โ replace the value with your actual public key
SCHOOL_WALLET_ADDRESS=GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX docker compose up --buildOn older Docker installations, use
docker-compose(with a hyphen) instead ofdocker compose.
This will start:
- MongoDB on port 27017
- Backend on port 5000
- Frontend on port 3000
Once the application is running, seed some initial data:
1. Create a fee structure:
curl -X POST http://localhost:5000/api/fees \
-H "Content-Type: application/json" \
-d '{
"className": "Grade 5A",
"feeAmount": 250,
"description": "Annual tuition fees",
"academicYear": "2026"
}'2. Register a student:
curl -X POST http://localhost:5000/api/students \
-H "Content-Type: application/json" \
-d '{
"studentId": "STU001",
"name": "Alice Johnson",
"class": "Grade 5A"
}'The student's fee will be automatically assigned from the class fee structure.
3. Get payment instructions:
curl http://localhost:5000/api/payments/instructions/STU001Response:
{
"walletAddress": "GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"memo": "STU001",
"acceptedAssets": [
{ "code": "XLM", "type": "native", "displayName": "Stellar Lumens" },
{ "code": "USDC", "type": "credit_alphanum4", "displayName": "USD Coin" }
],
"paymentLimits": {
"min": 0.01,
"max": 100000
},
"note": "Include the student ID exactly as the memo when sending payment."
}4. Make a test payment:
Use a Stellar wallet (e.g., Stellar Laboratory) to send XLM to the school wallet address with memo STU001.
5. Sync payments:
curl -X POST http://localhost:5000/api/payments/syncThe backend will fetch recent transactions from the Stellar network and automatically match them to students.
| Variable | Required | Default | Description |
|---|---|---|---|
MONGO_URI |
โ Yes | - | MongoDB connection string (e.g., mongodb://localhost:27017/stellaredupay) |
SCHOOL_WALLET_ADDRESS |
โ Yes | - | School's Stellar public key (starts with G...) |
STELLAR_NETWORK |
โ Yes | testnet |
Stellar network: testnet or mainnet |
PORT |
No | 5000 |
Backend server port |
HORIZON_URL |
No | Auto | Stellar Horizon API URL (auto-detected from network) |
USDC_ISSUER |
No | Auto | USDC issuer address (auto-detected from network) |
MIN_PAYMENT_AMOUNT |
No | 0.01 |
Minimum payment amount in XLM/USDC |
MAX_PAYMENT_AMOUNT |
No | 100000 |
Maximum payment amount in XLM/USDC |
POLL_INTERVAL_MS |
No | 30000 |
Background polling interval (milliseconds) |
RETRY_INTERVAL_MS |
No | 60000 |
Retry worker interval (milliseconds) |
RETRY_MAX_ATTEMPTS |
No | 10 |
Maximum retry attempts for failed verifications |
| Variable | Required | Default | Description |
|---|---|---|---|
NEXT_PUBLIC_API_URL |
โ Yes | - | Backend API base URL (e.g., http://localhost:5000/api) |
The application validates configuration on startup:
MIN_PAYMENT_AMOUNTmust be positive (> 0)MAX_PAYMENT_AMOUNTmust be greater thanMIN_PAYMENT_AMOUNTSCHOOL_WALLET_ADDRESSmust be a valid Stellar public key
If validation fails, the application will not start and will display a clear error message.
POST /api/students
Content-Type: application/json
{
"studentId": "STU001",
"name": "Alice Johnson",
"class": "Grade 5A"
}Response 201:
{
"studentId": "STU001",
"name": "Alice Johnson",
"class": "Grade 5A",
"feeAmount": 250,
"feePaid": false
}GET /api/studentsGET /api/students/STU001POST /api/fees
Content-Type: application/json
{
"className": "Grade 5A",
"feeAmount": 250,
"description": "Annual tuition fees",
"academicYear": "2026"
}GET /api/feesGET /api/fees/Grade%205AGET /api/payments/instructions/STU001Response 200:
{
"walletAddress": "GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"memo": "STU001",
"acceptedAssets": [
{
"code": "XLM",
"type": "native",
"displayName": "Stellar Lumens"
},
{
"code": "USDC",
"type": "credit_alphanum4",
"displayName": "USD Coin"
}
],
"paymentLimits": {
"min": 0.01,
"max": 100000
},
"note": "Include the student ID exactly as the memo when sending payment."
}POST /api/payments/verify
Content-Type: application/json
{
"txHash": "abc123def456..."
}Response 200:
{
"hash": "abc123def456...",
"memo": "STU001",
"amount": 250,
"feeAmount": 250,
"feeValidation": {
"status": "valid",
"message": "Payment matches the required fee"
},
"date": "2026-03-24T10:00:00Z"
}Fee Validation Statuses:
valid: Payment exactly matches the required feeoverpaid: Payment exceeds the required fee (still accepted)underpaid: Payment is less than required (not accepted)unknown: Student not found or memo missing
POST /api/payments/syncFetches the 20 most recent transactions to the school wallet, matches memos to students, validates amounts, and records new payments.
Response 200:
{
"message": "Sync complete"
}GET /api/payments/STU001Response 200:
[
{
"txHash": "abc123...",
"amount": 250,
"feeAmount": 250,
"feeValidationStatus": "valid",
"memo": "STU001",
"confirmedAt": "2026-03-24T10:00:00Z"
}
]GET /api/payments/accepted-assetsResponse 200:
[
{
"code": "XLM",
"type": "native",
"displayName": "Stellar Lumens"
},
{
"code": "USDC",
"type": "credit_alphanum4",
"displayName": "USD Coin"
}
]GET /api/payments/limitsResponse 200:
{
"min": 0.01,
"max": 100000,
"message": "Payment amounts must be between 0.01 and 100000"
}All errors follow a consistent format:
{
"error": "Human-readable error message",
"code": "ERROR_CODE"
}Common Error Codes:
NOT_FOUND: Resource not found (404)VALIDATION_ERROR: Invalid request data (400)DUPLICATE_TX: Transaction already recorded (409)TX_FAILED: Transaction failed on Stellar network (400)MISSING_MEMO: Transaction missing required memo field (400)INVALID_DESTINATION: Transaction sent to wrong wallet (400)UNSUPPORTED_ASSET: Payment made in unsupported asset (400)AMOUNT_TOO_LOW: Payment below minimum limit (400)AMOUNT_TOO_HIGH: Payment exceeds maximum limit (400)STELLAR_NETWORK_ERROR: Stellar Horizon API unavailable (502)
StellarEduPay includes comprehensive test coverage for all core functionality.
Tests mock both the Stellar SDK and MongoDB โ no real network or database required.
# From the project root โ install root dependencies first if you haven't already
npm install
npm testExpected output:
PASS tests/stellar.test.js
PASS tests/payment.test.js
PASS tests/payment-limits.test.js
Test Suites: 3 passed, 3 total
Tests: 45 passed, 45 total
Snapshots: 0 total
Time: 5.234s
| Test File | Coverage |
|---|---|
tests/stellar.test.js |
Stellar service: asset detection, fee validation, amount normalization, transaction verification, ledger sync |
tests/payment.test.js |
Payment API: full payment flow, all endpoints, edge cases, error handling |
tests/payment-limits.test.js |
Payment limits: validation, boundary cases, error codes |
# Test Stellar service only
npm test tests/stellar.test.js
# Test payment API only
npm test tests/payment.test.js
# Test payment limits only
npm test tests/payment-limits.test.jsAll tests use mocks for:
- Stellar SDK: No real blockchain network calls
- MongoDB: In-memory database for isolation
- HTTP requests: Supertest for API testing
This ensures tests run quickly and don't require external dependencies.
StellarEduPay/
โโโ backend/ # Backend Node.js application
โ โโโ src/
โ โ โโโ app.js # Express server setup
โ โ โโโ config/
โ โ โ โโโ index.js # Environment configuration
โ โ โ โโโ stellarConfig.js # Stellar network configuration
โ โ โโโ controllers/
โ โ โ โโโ feeController.js # Fee structure endpoints
โ โ โ โโโ paymentController.js # Payment endpoints
โ โ โ โโโ reportController.js # Report generation
โ โ โ โโโ studentController.js # Student CRUD endpoints
โ โ โโโ middleware/
โ โ โ โโโ validate.js # Request validation middleware
โ โ โโโ models/
โ โ โ โโโ feeStructureModel.js # Fee structure schema
โ โ โ โโโ paymentModel.js # Payment schema
โ โ โ โโโ paymentIntentModel.js # Payment intent schema
โ โ โ โโโ pendingVerificationModel.js # Retry queue schema
โ โ โ โโโ studentModel.js # Student schema
โ โ โโโ routes/
โ โ โ โโโ feeRoutes.js # Fee structure routes
โ โ โ โโโ paymentRoutes.js # Payment routes
โ โ โ โโโ reportRoutes.js # Report routes
โ โ โ โโโ studentRoutes.js # Student routes
โ โ โโโ services/
โ โ โ โโโ reportService.js # Report generation logic
โ โ โ โโโ retryService.js # Automatic retry mechanism
โ โ โ โโโ stellarService.js # Stellar blockchain integration
โ โ โ โโโ transactionService.js # Background polling
โ โ โโโ utils/
โ โ โโโ paymentLimits.js # Payment limit validation
โ โโโ .env.example # Example environment variables
โ โโโ package.json # Backend dependencies
โ
โโโ frontend/ # Next.js frontend application
โ โโโ src/
โ โ โโโ components/
โ โ โ โโโ Navbar.jsx # Navigation component
โ โ โ โโโ PaymentForm.jsx # Payment form component
โ โ โ โโโ ReportDownload.jsx # Report download component
โ โ โ โโโ TransactionCard.jsx # Transaction display component
โ โ โโโ pages/
โ โ โ โโโ index.jsx # Home page
โ โ โ โโโ dashboard.jsx # Student dashboard
โ โ โ โโโ pay-fees.jsx # Payment page
โ โ โ โโโ reports.jsx # Reports page
โ โ โโโ services/
โ โ โ โโโ api.js # API client
โ โ โโโ styles/
โ โ โโโ globals.css # Global styles
โ โโโ .env.example # Example environment variables
โ โโโ package.json # Frontend dependencies
โ
โโโ docs/ # Documentation
โ โโโ api-spec.md # Full API reference
โ โโโ architecture.md # System architecture
โ โโโ payment-limits.md # Payment limits documentation
โ โโโ stellar-integration.md # Stellar integration details
โ
โโโ scripts/
โ โโโ create-school-wallet.js # Wallet generation script
โ
โโโ tests/ # Test suite
โ โโโ payment.test.js # Payment API tests
โ โโโ payment-limits.test.js # Payment limits tests
โ โโโ stellar.test.js # Stellar service tests
โ
โโโ .gitignore # Git ignore rules
โโโ CONTRIBUTING.md # Contribution guidelines
โโโ docker-compose.yml # Docker Compose configuration
โโโ package.json # Root package.json for tests
โโโ README.md # This file
Comprehensive documentation is available in the docs/ directory:
| Document | Description |
|---|---|
docs/architecture.md |
System design, component overview, data flow diagrams |
docs/api-spec.md |
Complete API reference with request/response examples |
docs/stellar-integration.md |
Stellar-specific details: memo field, assets, testnet setup |
docs/payment-limits.md |
Payment limits feature: configuration, security, troubleshooting |
We welcome contributions! Please read our Contributing Guidelines for details on:
- Code of conduct
- Development workflow
- Pull request process
- Coding standards
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and add tests
- Run tests:
npm test - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Multi-School Support: Isolated wallets and records per institution
- Email/SMS Notifications: Alert parents when payments are confirmed
- Scholarship Disbursement: Outbound XLM payments to student wallets
- Hostel & Exam Fees: Separate fee categories per student
- Donation Tracking: Transparent fund collection for school projects
- Mobile App: Native iOS/Android applications
- Admin Dashboard: Enhanced analytics and reporting
- Recurring Payments: Automatic payment scheduling
- Multi-Currency Support: Additional stablecoins (EURC, etc.)
This project is licensed under the MIT License. See the LICENSE file for details.
If you encounter any issues or have questions:
- Check the Documentation
- Search existing issues
- Open a new issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Environment details (OS, Node version, etc.)
- Stellar Development Foundation for the blockchain infrastructure
- MongoDB for the database platform
- Next.js for the frontend framework
- All contributors who help improve this project
- Stellar Network: https://stellar.org
- Stellar Laboratory: https://laboratory.stellar.org
- Stellar Horizon API: https://developers.stellar.org/api
- Stellar Explorer (Testnet): https://stellar.expert/explorer/testnet
- Stellar Explorer (Mainnet): https://stellar.expert/explorer/public
- MongoDB Atlas: https://www.mongodb.com/atlas
Built with โค๏ธ using Stellar blockchain technology