Back to projects
Full-stack / MobileAvailable Demo
Tontyn
Secure web and mobile platform for managing community savings circles (tontines).
- Java
- Spring Boot
- PostgreSQL
- React
- Flutter
- JWT
- Docker
- DeepSeek API
Problem
Community savings circles (tontines) are often run on paper or messaging threads, with no shared record of who contributed, whose turn it is or who is late.
Solution
A three-tier platform (React web app, Flutter mobile app, Spring Boot API, PostgreSQL) covering the tontine lifecycle: groups and members, contribution cycles and beneficiaries, recorded payments with automatic receipts, scheduled reminders, a payment-reliability score per member, and an assistant that answers member questions.
My contribution
Final-year project of my Licence at ISI, covering the Spring Boot API, the React web interface and the Flutter mobile application.
Key features
- REST API covering authentication, tontines, members, cycles, contributions, payments, receipts and notifications
- PIN login with a one-time-code second factor, JWT sessions, hashed credentials and per-tontine roles (manager, member)
- Progressive identity-verification levels
- Daily scheduled job that follows up on late contributions
- Payment-reliability score per member and automatic receipts
- AI assistant (DeepSeek API) that answers member questions, with a degraded mode when the provider is unavailable
Architecture
React web and Flutter mobile clients
Spring Boot REST API (JWT)
Services: cycles, payments, reminders, assistant
PostgreSQL
Engineering decisions
- Three-tier separation, with a single API shared by the web and mobile clients.
- Spring method security with group-level authorization checks in the service layer.
- Docker image for the API and Docker Compose for the local PostgreSQL database.
Validation and tests
- JUnit tests cover the AI assistant module (service logic, context building and an integration test).
Status and limitations
- Automated tests currently cover the AI assistant module only; the rest of the API, the web app and the mobile app are not covered.
- Payments are recorded per method (Orange Money, Wave); no payment-provider API is integrated.