All projects

Three business applications for a public body: e-Budget, e-Courrier and e-Matière, on one platform.

CNFPLF screenshot
Client
Senegalese public sector
Key result
3 apps on one platform

Context

Budget, mail and supplies were managed separately, mostly on paper, inside an infrastructure that had to stay on premise. Every budget commitment and every incoming letter had to be traceable to a person and a date.

What I built

One Spring Boot platform with three business modules behind a single Angular app: e-Budget follows budget execution from commitment to payment order, e-Courrier captures incoming mail from the mailboxes, reads attachments with OCR and tracks deadlines, and e-Matière manages stock movements, inventories and valuation. Permissions are declared per module and action, an AOP audit trail covers about 600 operations, and notifications arrive in real time over WebSocket (STOMP). Deployed as Docker images behind Nginx on the client's own server, with PostgreSQL.

Result

Three applications in production on the client's own infrastructure.

Architecture

  1. One modular monolith for three apps

    Budget, mail and stock live in separate modules of one Spring Boot application, so the client runs a single deployment with one sign-in and one audit trail.

  2. Permissions as module and action

    About thirty roles are described as module:action permissions and checked by an annotation on each endpoint, so access rules read like the organisation chart.

  3. An audit trail that cannot block the work

    An aspect records who did what, from where and with which values on about 600 operations, written asynchronously in its own transaction so a logging failure never cancels a business action.

  4. Mail captured, read and followed up

    Mailboxes are polled every five minutes, attachments go through a Tesseract OCR service, key fields are extracted, and an hourly job flags overdue replies.

  5. Budget figures recomputed, never typed

    Engaged, liquidated and ordered amounts are aggregated per budget line from the underlying documents, so the totals always match the paperwork.

  6. Real time over STOMP

    Users receive their notifications over WebSocket as soon as a letter is assigned to them.

Stack

  • Spring Boot
  • Java
  • Angular
  • PostgreSQL
  • WebSocket (STOMP)
  • Spring AOP
  • Tesseract OCR
  • Docker
  • Nginx
  • Windows Server