A national workforce-planning platform for the civil servants of Morocco’s communes, running on air-gapped government servers.

GPEEC (Gestion Prévisionnelle des Emplois, des Effectifs et des Compétences) holds the national register of the communes’ civil servants: about 62.7k records across 11 regions. Every change has to go through a request and approval workflow, regional Excel files have to be imported, and real staffing has to be compared against the theoretical model.
The data is messy: job positions are free text, typed differently by every commune, in French and in Arabic. The security bar is strict, and the servers have no internet, so everything, the AI included, has to run on-prem.
One system to hold the register, control every change to it, compare real against theoretical staffing, and classify job data with an on-prem AI engine.

Simple on the outside, hardened inside
One web entry point. Everything else lives on a closed government network with no internet access, and stays up when a non-critical service fails.

Messy job text in, standard positions out
Every commune writes job titles its own way, in French or Arabic. The on-prem engine proposes a standard position with 92–94% measured precision, and a human reviews every change.

Every edit is a request, every decision is traced
Field agents propose changes, central reviewers approve or reject them. The register only moves when the rules say it can, and every step lands in the audit journal.

129 API endpoints, 28 granular permissions, mandatory 2-factor login and an append-only audit journal. Three environments on six air-gapped servers.
Building something that has to run inside a closed network?