Real-time wildfire and smoke detection platform for firefighters, from camera and drone feeds to field alerts.
- Client
- Midgard, French civil security start-up
- Key result
- Showcased at the Élysée
- Live
- midgard-ai.com ↗
Context
Every minute counts in a wildfire. Fire services monitor large forest areas through camera networks and drones, and needed smoke detected and confirmed before it spreads.
What I built
Event-driven microservices: AI detection scores each camera and drone frame and publishes detections to RabbitMQ, a Django service processes those events into alerts with a confidence level and an azimuth, and a NestJS API with role-based access pushes them over WebSocket. The Angular front end, with NgRx state, shows live alerts, a map with each camera's field of view, remote control of the confirmation camera, and a media library of drone imagery.
Result
Operators validate or dismiss a detection in seconds and push it to dispatch. The platform was showcased at the Élysée.
Architecture
An event pipeline on RabbitMQ
Detections are published to a queue, so the AI keeps scoring frames even when processing slows down, and no detection is lost in between.
Django for event processing
A dedicated service turns raw detections into alerts with a confidence level and an azimuth, separate from the API that serves operators.
Alerts pushed, never polled
NestJS pushes each alert over WebSocket, so an operator sees new smoke within seconds of its detection.
One NgRx store for live streams
Alerts, camera status and the map read from the same state, so every panel stays consistent as events arrive.
Role-based access on every action
Permissions decide who can validate an alert or take control of a camera, checked on the API and reflected in the interface.
Stack
- NestJS
- Django
- RabbitMQ
- Java
- Angular
- NgRx
- WebSocket




