Unified Dispatching System: a live map for 112, 101, 102, 103 and 104
Context
A nationwide government platform for emergency services in Uzbekistan: 112, fire (101), police (102), ambulance (103) and gas emergency (104). Operators and dispatchers manage incidents, track vehicles, coordinate brigades, monitor statuses and follow analytics from one interface. I joined as a middle Angular developer in April 2024 and led the front-end team from August 2024 to March 2026.
The problem
Dispatchers need to see where every vehicle is right now. Location updates arrive over a SignalR socket several times a second per vehicle, alongside a steady stream of event notifications: new incidents, status changes, brigade assignments. Rendering every message as it arrives freezes the map and floods the interface.
Constraints
Government users on ordinary office hardware; the map must stay responsive during peak incidents; no notification may be dropped; every emergency service has its own event types and statuses that the same interface has to present consistently.
What I did
Built the live map on OpenLayers with a vector layer per vehicle class. Modelled the socket feed as RxJS streams: positions are buffered for a fixed window, reduced to the latest position per vehicle, and drawn as one batch, so the redraw rate is bounded no matter how many vehicles report. The reasoning is written up in Throttling a socket feed without losing the latest position.
Built the notification and live-update layer on SignalR: hub subscriptions exposed as RxJS observables, a PrimeNG toast queue for incoming events, and lists that update in place instead of refetching. Built the shared component set on PrimeNG and Angular Material with one theme, so every service's module looks and behaves the same and meets accessibility requirements.
What happened
The map redraws at a steady rate no matter how many vehicles report at once, so it stays usable through the peaks that used to freeze it. Dispatchers stopped clicking on a vehicle and getting the wrong one. The position stream is now the only place the map learns about vehicles, which made it easy to record a feed and replay it for testing.