Rotula is built for the way groups already save together: a contribution everyone agrees to, a schedule everyone can see, and turns taken in order. The conversation stays in the channel the group already uses. The record and the settlement move onto Stellar.
- Agree the rules. Members, contribution amount, group type, and rotation are captured for the group.
- Contribute. Each member pays the agreed amount into the group, in the configured Stellar token.
- Take turns. A rotational group pays the next member in contract order from the pool; a goal-based group lets a member withdraw against their own recorded savings.
- See it settle. Contributions, payouts, and pauses are Stellar transactions and Soroban events, not just messages in a group chat.
Rotula puts the parts of a savings circle that need to be provable onto Stellar, and leaves the rest where it belongs.
- Settlement on Stellar. Contributions and payouts are transactions on the Stellar network, so a group's money movement can be checked rather than trusted.
- Rules as Soroban contracts. A Rust contract models rotational and goal-based groups, with member authorization, contribution checks, ordered payouts, pause controls, and contract events.
- Accounts, assets, and SEP-10. Stellar accounts and trustlines carry a configured token; SEP-10 challenge transactions back member authentication.
- Honest state. A submitted transaction is pending until Stellar confirms it. Rotula reconciles on-chain contribution state against its own records instead of assuming success.
| Repository | Role | Stack |
|---|---|---|
| rotula-contracts | Soroban savings-group contract and its tests | Rust, Soroban |
| rotula-api | WhatsApp workflows, application data, Stellar and Soroban coordination | TypeScript, Postgres, Redis |
| rotula-app | Landing page and the member and administrator web experience | Next.js, TypeScript |
Stellar · Soroban · WhatsApp · Rust · TypeScript