Consented mobile-money credit scoring for Rwanda's underbanked users.
# Twizere
**Consented mobile-money credit scoring for Rwanda's underbanked — a full-stack hackathon project.**
Twizere lets an MTN Mobile Money or Airtel Money user turn their own transaction history into a loan pre-qualification, and gives a bank or MFI's loan officers a dashboard to review the model's evidence and approve, decline, disburse, and track repayment — end to end.
> **This is a school hackathon build. All applicant and transaction data is synthetically generated.** No real MTN or Airtel API is called anywhere in this codebase — see Synthetic data & scoring for exactly how the fake data is produced. The intent is to demonstrate the product end-to-end and, if it proves out, to pursue this as a real project — see From here to production.
## What it does
An applicant picks MTN MoMo or Airtel Money, "authorizes" Twizere with a simulated PIN (no real credential is ever collected), and within seconds sees an indicative amount they're pre-qualified to borrow — backed by a transparent, explainable risk scorecard rather than a black-box model. If they apply, a bank officer sees the same evidence on a dashboard, approves or declines with a reason, disburses the funds, and tracks repayment through to close. Every state change pushes live over a WebSocket, so an applicant watching their status page sees a decision the moment an officer makes it — no polling, no refresh.
## Tech stack
| Layer | Choice |
|---|---|
| Backend | Python 3.11, FastAPI, SQLModel (SQLAlchemy + Pydantic), PostgreSQL |
| Realtime | Native FastAPI WebSockets — no message broker needed at this scale |
| Frontend | React 18 + TypeScript, Vite, React Router — hand-rolled CSS design system, no UI kit |
| Infra | Docker Compose (Postgres + FastAPI + Vite dev server) |
## Quick start (Docker)
```bash
git clone twizere && cd twizere
docker compose up --build
```
- Frontend: **
http://localhost:5173**
- Backend API: **
http://localhost:8000** (interactive docs at `/docs`)
- Postgres: …