Self-hosted school administration for Rwandan schools, ten roles deep

Schools run on spreadsheets, paper registers and whatever the last vendor left behind. Hosted systems put a child's record on somebody else's server, and most of them fall over on report card evening when every parent opens the app at once.
A system the school owns and runs on its own infrastructure: a REST API that holds the data, a dashboard for all ten roles, and a mobile app for staff and parents. PostgreSQL carries row level security on the tables holding a child's record, and 10,406 tests cover the three clients. One machine for a single school, or three API instances behind nginx when the whole school signs in at once.
Admin, head teacher, teacher, bursar, librarian, patron, matron, nurse, parent and student, each with its own reach enforced by the API rather than hidden by the menu.
Marks, the register and report cards belong to the Director of Studies, not the principal, and the routes enforce that division.
nginx, three API replicas, two render workers, pgbouncer and Redis, with nightly backups and a restore rehearsal that proves they work.
A REST API of 291 routes with 266 role guards, documented in Swagger.
89 dashboard pages spread across ten separate role dashboards.
A React Native app for admins, teachers, parents and librarians.
Join the founders and operators getting our most concise thinking on product, design, and engineering; once a month.