Executive cockpit tracking about 40 priority government projects, on the web and on mobile.

- Client
- Presidency of Benin
- Key result
- About 40 priority projects tracked
Context
The Presidency needed a consolidated, up-to-date view of its priority projects instead of reports gathered by hand from each ministry.
What I built
A Django REST API with a dedicated AI service that produces meeting summaries, a web dashboard for decision makers and a React Native (Expo) mobile app for follow-up on the move. Delivery is automated with GitHub Actions, Docker and Nginx behind Let's Encrypt, with monitoring in production.
Result
Decision makers follow every priority project from one cockpit, on desktop or phone.
Architecture
Tokens out of JavaScript's reach
Sessions use JWT in httpOnly cookies, with 15-minute access tokens, rotation and a blacklist, so a stolen device can be signed out remotely.
Access checked at three levels
Every request is filtered by role, then by query, then by object, so each user only sees the ministries or projects in their scope.
Long jobs in the background
Transcription, meeting minutes and action items run in Celery over Redis and are tracked by task id, because a two-hour meeting does not fit in an HTTP request.
A separate AI service with a swappable model
A FastAPI service handles transcription and summaries, the language model is a setting, and transcription falls back across three engines.
Real-time updates
Django Channels pushes changes over WebSocket, with Web Push and Firebase notifications on mobile.
Staging, then production
GitHub Actions deploys staging from master and production from a dedicated branch, with a health check after each deployment.
Stack
- Django REST Framework
- Python
- Django Channels
- Celery
- Redis
- PostgreSQL
- FastAPI
- Next.js
- React Native
- Expo
- GitHub Actions
- Docker
- Nginx
- AWS EC2
