All projects

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

Benin Cockpit screenshot
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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. Real-time updates

    Django Channels pushes changes over WebSocket, with Web Push and Firebase notifications on mobile.

  6. 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