"Talk to me" an anonymous digital support system for people in Rwanda dealing with stigmatized issues: mental health, gender-based violence (GBV), substance abuse, and unwanted pregnancies.
# Mbwira
**Ubuzima bwawe, ibanga ryawe.** *(Your health, your secret.)*
### Demo video
Watch the demo on YouTube
---
Mbwira is a privacy-first digital support platform for young people in Rwanda seeking help with sensitive topics — sexual and reproductive health, mental health, gender-based violence, and unwanted pregnancies. It combines a USSD channel that works on any phone, WhatsApp, a web chat, and an anonymous video call bridge, with an automatic escalation pipeline to counsellors — so nobody has to choose between staying anonymous and getting real help.
**Live deployment:** mbwira.iraelie.tech
Built by **Team Achievers**, BSc Software Engineering, African Leadership University.
---
## Project status
| Channel / Feature | Status |
|---|---|
| USSD channel (Africa's Talking) | ✅ Implemented |
| Web chat (Kinyarwanda / English) | ✅ Implemented |
| WhatsApp channel (Meta Cloud API) | ✅ Implemented |
| Anonymous video calls (WebRTC) | ✅ Implemented |
| Counsellor dashboard | ✅ Implemented |
| Safety pre-filter and LLM escalation detection | ✅ Implemented |
| Session, message, and escalation persistence | ✅ Implemented |
| Automated test suite (147 tests) | ✅ Implemented |
| CI/CD pipeline (test → build → push → deploy) | ✅ Implemented |
| Per-counsellor accounts (replacing the shared password) | 🔜 Planned |
| Migration from SQLite to PostgreSQL | 🔜 Planned |
This is an active student project under continuous development, not a finished product. See Notes and limitations before relying on it for anything beyond demonstration and testing.
---
## The anonymity guarantee
Anonymity is the core design constraint, not a feature bolted on afterwards. It shapes the data model:
- **No raw phone numbers are ever stored.** USSD and WhatsApp numbers are reduced to a one-way SHA-256 `phone_hash` at the moment they arrive (`ussd.py`, `whatsapp.py`). WhatsApp replies use the number from the live request, which is never persisted.
- **Sessions are random tokens.** A …