Decentralized community finance on the Stellar blockchain β open source, contributor-first.
Traditional finance excludes billions of people through geographic barriers, credit requirements, and prohibitive fees. CoopLumen uses the Stellar network β with its 5-second finality, near-zero fees, and built-in DEX β to give any group (NGO, cooperative, local community, diaspora network) the tools to issue community tokens, run peer-to-peer lending pools, and govern shared treasuries without a bank in the middle.
Why Stellar specifically?
- Speed & cost: Transactions settle in 3β5 seconds for fractions of a cent
- Built-in asset primitives: Native support for custom assets, trustlines, and multi-sig
- Soroban smart contracts: Path to on-chain governance in Phase 3
- Freighter wallet: Mature browser extension for end-user signing
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser / PWA β
β Next.js 14 (App Router) Β· Freighter Wallet Extension β
βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β REST (JSON)
βββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββ
β Node.js / Express API (port 4000) β
β /api/communities /api/tokens /api/balances β
β β
β ββββββββββββββββββββ ββββββββββββββββββββββββββββββββ β
β β /contracts β β PostgreSQL (off-chain meta) β β
β β assets.ts β β communities Β· members β β
β β trustlines.ts β β loans β β
β β transactions.ts β ββββββββββββββββββββββββββββββββ β
β ββββββββββ¬ββββββββββ β
ββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββ
β Stellar SDK (Horizon REST)
ββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββ
β Stellar Network (Testnet / Mainnet) β
β Horizon API Β· Asset issuance Β· Trustlines β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
cooplumen/
βββ backend/ # Node.js / Express API
β βββ src/
β β βββ api/
β β β βββ middleware/ # errorHandler, notFound
β β β βββ routes/ # communities, tokens, balances
β β βββ contracts/ # Stellar SDK wrappers
β β β βββ assets.ts # Asset issuance
β β β βββ trustlines.ts # Trustline management
β β β βββ transactions.ts # Payment building & submission
β β β βββ stellar.ts # Horizon server singleton
β β βββ db/ # PostgreSQL pool & migrations
β β βββ utils/ # Logger
β βββ Dockerfile
β βββ package.json
βββ frontend/ # Next.js 14 (App Router)
β βββ src/
β β βββ app/ # Routes, layout, global CSS
β β βββ components/ # Dashboard, WalletConnect, CommunityCard, BalancePanel
β β βββ hooks/ # useWallet, useCommunities, useBalances
β βββ Dockerfile
β βββ package.json
βββ docker-compose.yml
βββ README.md
βββ PRD.md
βββ CONTRIBUTING.md
- Docker Desktop (v24+)
- Node.js 20+ (for local development without Docker)
- Freighter wallet browser extension
git clone https://github.com/yourname/cooplumen.git
cd cooplumen# Backend
cp backend/.env.example backend/.env
# Frontend
cp frontend/.env.example frontend/.env.localEdit backend/.env to set your Stellar keys and network preference.
docker-compose upThis starts:
- PostgreSQL on
localhost:5432 - Backend API on
localhost:4000 - Frontend on
localhost:3000
docker-compose exec backend npm run db:migrateNavigate to http://localhost:3000 and connect Freighter.
# Terminal 1 β Backend
cd backend
npm install
npm run dev # starts ts-node-dev on :4000
# Terminal 2 β Frontend
cd frontend
npm install
npm run dev # starts Next.js on :3000You will need a local PostgreSQL instance. Set DATABASE_URL in backend/.env.
| Variable | Default | Description |
|---|---|---|
PORT |
4000 |
API server port |
DATABASE_URL |
β | PostgreSQL connection string |
STELLAR_NETWORK |
testnet |
testnet or mainnet |
STELLAR_HORIZON_URL |
Testnet Horizon | Override Horizon endpoint |
FRONTEND_URL |
http://localhost:3000 |
CORS allowed origin |
LOG_LEVEL |
info |
winston log level |
| Variable | Default | Description |
|---|---|---|
NEXT_PUBLIC_API_URL |
http://localhost:4000 |
Backend API base URL |
NEXT_PUBLIC_STELLAR_NETWORK |
TESTNET |
Network shown in UI |
| Method | Path | Description |
|---|---|---|
GET |
/api/communities |
List all communities |
GET |
/api/communities/:id |
Get a single community |
POST |
/api/communities |
Register a new community |
GET |
/api/communities/:id/members |
List community members |
POST |
/api/communities/:id/members |
Add a member |
| Method | Path | Description |
|---|---|---|
POST |
/api/tokens/issue |
Issue community token on Stellar |
POST |
/api/tokens/trustline |
Establish trustline for a member |
| Method | Path | Description |
|---|---|---|
GET |
/api/balances/:publicKey |
Get all balances for an account |
GET |
/api/balances/:publicKey/loans |
Get loans for an account |
GET |
/api/balances/community/:id/loans |
Get all loans in a community |
GET /health β { "status": "ok", "version": "0.1.0" }
curl -X POST http://localhost:4000/api/communities \
-H "Content-Type: application/json" \
-d '{
"name": "EcoDAO Lagos",
"description": "Eco-finance cooperative for Lagos community",
"issuerPublicKey": "GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"assetCode": "ECOLGS",
"assetIssuer": "GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}'# Backend
cd backend && npm test
cd backend && npm run test:coverage
# Frontend
cd frontend && npm test- Product Requirements Document β goals, roadmap, user stories
- Contributing Guide β branch model, conventions, code review
- GitHub Discussions: github.com/yourname/cooplumen/discussions
- Discord: coming soon
- Stellar Developers: discord.gg/stellar
MIT Β© CoopLumen Contributors