A Soroban smart contract for transparent group treasury management on Stellar — built for chama savings groups in East Africa
# ChamaWallet
A Soroban smart contract and bilingual web app for transparent, multi-signature
treasury management for chama savings groups in East Africa — built on Stellar.
## The problem
Chamas across East Africa lose significant savings to unauthorized, secretive
withdrawals — funds moved without the knowledge or consent of the group's
members. This erodes trust and causes otherwise healthy savings groups to
collapse.
## The solution
ChamaWallet puts a chama's treasury on-chain. Every withdrawal requires
approval from two independent members before funds move, and every group's
balance and membership is publicly verifiable — no single person can quietly
drain the account.
## Governance model
A group isn't controlled by one admin. It's founded by three people, each
claiming their own role with their own wallet — nobody ever enters another
person's address anywhere in the app:
1. **Propose** — one founder proposes the group and claims one of the three
seats (Chairperson, Secretary, or Treasurer) for themselves.
2. **Fill the remaining seats** — the other two open an invite link, connect
their own wallet, and claim their own seat. The group is `Proposed` — not
usable by anyone — until all three seats are filled.
3. **Activate** — the moment the third seat is filled, the group becomes
`Active` in that same transaction. No separate "activate" step.
4. **Regular members join by request** — once active, anyone can request to
join; the Secretary approves or the request stays pending.
5. **Withdrawals need two signatures** — any member can propose a withdrawal;
it executes automatically once two members approve it.
## Tech stack
**Contract**
- Rust, Soroban SDK 26
- Stellar Testnet
**Frontend** (chamawallet-frontend/)
- React 19 + Vite
- `@stellar/stellar-sdk`, `@stellar/freighter-api` (wallet connect + signing)
- Bilingual UI (English / Swahili) with a single language toggle
- Nickname system — no raw wallet addresses are ever shown to users
- No backend — all …