Kenya chama group savings management — replaces Excel and WhatsApp
# ChamaVault
**Group-savings ("chama" / SACCO) management for Kenyan investment groups.** ChamaVault
gives a chama's officers one place to record member contributions, issue and track
loans, log fines and expenses, run resolutions/votes, distribute year-end dividends,
and generate PDF statements and meeting minutes — bilingual (English / Kiswahili).
> Chamas move real money. ChamaVault treats contribution, loan, and dividend logic
> as money-movement code: monetary math is done in **integer cents**, payout and
> interest use a **single canonical formula**, and the arithmetic is locked by tests.
---
## Stack
| Layer | Choice |
|-----------|----------------------------------------------------|
| Framework | Next.js 16 (App Router, React 19, Turbopack) |
| Language | TypeScript (strict) |
| Data | Supabase (Postgres + Auth + Storage), RLS-scoped |
| UI | Tailwind CSS v4, Base UI, lucide-react |
| Validation| Zod on money-mutation inputs |
| PDF | @react-pdf/renderer (statements, minutes, reports) |
| Messaging | Resend (email), Africa's Talking (SMS) |
| AI | Anthropic API (draft meeting minutes) |
| Tests | Vitest |
## Getting started
```bash
npm install
cp .env.example .env.local # then fill in the values below
npm run dev #
localhost
```
### Required environment variables
| Variable | Purpose |
|-----------------------------------|------------------------------------------|
| `NEXT_PUBLIC_SUPABASE_URL` | Supabase project URL |
| `NEXT_PUBLIC_SUPABASE_ANON_KEY` | Supabase anon key (browser) |
| `SUPABASE_SERVICE_ROLE_KEY` | Server-only admin key (never exposed) |
| `NEXT_PUBLIC_SITE_URL` | Cano …