NG911/939 dispatch, GIS and radio, with an in-vehicle terminal and a citizen emergency app
- Role
- Full-stack engineer (team project)
- Year
- 2026
- Status
- Live
- Links
- Private
- Addis Emergency app
- Dispatch console
- NestJS API
- PostGIS · Prisma
- MDT in vehicles
- Radio · SIP · SMS
Addis
The emergency command and dispatch platform for the Addis Ababa Fire and Disaster Risk Management Commission: computer-aided dispatch, NG911/939 call handling, PostGIS mapping and vehicle location, DMR Tier III radio and console telephony, plus two mobile apps: a Mobile Data Terminal for fire trucks and ambulances, and the Addis Emergency app for citizens.
The problem
When someone calls for help, a dispatcher has seconds to locate the caller, pick the nearest available unit and reach the crew. The commission needed one command-and-control system covering call handling, dispatch, mapping, radio and the vehicles themselves, with every action attributable and auditable.
Approach
The platform is a module-based monorepo built to a project charter: dynamic role-based access with a module.resource.action permission catalog, an immutable audit log behind every important action, and each module shipped end to end before the next. The field apps share the same contracts, so a crew's status change follows the same guarded transitions as the dispatch console.
Architecture
A NestJS API and a Next.js command-center console share Zod contracts, i18n and a mobile kit with two Expo apps. PostgreSQL with PostGIS holds stations, zones and landmarks with bilingual fuzzy location lookup. Hardware is reached through gateway ports (radio over MQTT, telephony over FreeSWITCH ESL, SMS over SMPP) so the adapters swap without touching the domain. The Mobile Data Terminal is offline-first: every field write goes through a persisted queue that drains in order when coverage returns.
Features
- Computer-aided dispatch: incident lifecycle, gap-free numbering and unit assignment
- GIS on PostGIS with bilingual fuzzy location lookup
- DMR Tier III radio: talkgroups, DGNA and 48-hour store-and-forward messaging
- Console telephony with call control and supervisor monitoring
- Mobile Data Terminal: accept or decline dispatches, field status, navigation and tiered background GPS
- Offline-first MDT with a persisted, ordered, idempotent action queue
- Addis Emergency citizen app: call, report an emergency and follow your reports
- Dynamic roles, permission-gated end to end, with an immutable audit trail
Stack
NestJS, Next.js, Expo, React Native, TypeScript, PostgreSQL, PostGIS, Prisma, Redis, MinIO, Meilisearch, Zod, pnpm monorepo
Results
- In production for the Addis Ababa Fire and Disaster Risk Management Commission
- One platform from the citizen's report to the crew in the vehicle
“Safety-critical software is mostly about what happens when things go wrong: no signal, no radio, no answer. Designing for coverage gaps and hardware behind honest ports made the whole system testable and dependable.”