🔥 See the fire before the smoke.
Satellites detect every fire on Earth within hours. Almost none of that knowledge reaches the people standing in front of the flames. FireWatch closes that gap.
That scene replays every summer across the Mediterranean basin. A civil-protection crew needs to know if the blaze they fought yesterday reignited. A family needs to decide whether to evacuate — in their own language, on a phone. Overhead, NASA's satellites detect every active wildfire on Earth within hours.
And almost none of that knowledge reaches the people standing in front of the flames.
FireWatch turns NASA's fire archive into a live, trustworthy early-warning system — usable by a farmer, a rescue crew, or a climate researcher, on any device, in seconds. Earth Forward, in production.
🌫️ The Silent Threat
The problem isn't detection — it's deliverability.
🛰️ Satellites see the fires. The public doesn't.
VIIRS & MODIS detect active wildfires within hours — but data arrives as raw scientific exports, aimed at researchers, not people on the ground.
🔇 Noise drowns the signal.
Low-confidence pixels, agricultural burns, gas flares — a naive "red dots near you" map misleads as often as it informs.
🗣️ Language and access barriers.
Foreign-language PDFs and scientist consoles in a region that needs Arabic, French, and English on a phone.
The result: The front line has no trusted picture of what is burning, where, and how dangerous it'll get next.
🚨 The front line actually needs
"Is a fire burning near me, how strong is it, and how dangerous will conditions be over the next days?"
✅ Confirmed fire locations — filtered, debiased, trustworthy 🌡️ Plain-language fire weather danger, region by region ⏮️ History — how it ignited and spread in the last 5 days 📱 Mobile-first, local-language
Until now: researcher consoles and static bulletins. For front-line communities — noise.
🛡️ From Chaos to Command
FireWatch converts noisy fire science into community early-warning — detection filtered, danger quantified, and presented in plain language on any device. Built during (Aug 21 – Sep 13, 2026) !
| 🔥 Capability | How it works |
|---|---|
| Live fire map | NASA FIRMS (VIIRS 375 m + MODIS) on MapLibre; points glow and scale with FRP. Dark / satellite / light styles |
| Confirmed only | Server gate: confidence ≥ high and FRP ≥ 15 MW. Low-light noise and industrial flares never reach the map. Border clipping keeps cross-border fires out of the wrong region |
| Tap a fire, know the place | Power (MW), confidence, detection time, satellite + reverse-geocoded town · wilaya · district via OSM Nominatim |
| 5-day timeline replay | Scrub or play; watch how a fire ignited and spread, with a live activity histogram |
| Climate risk (FWI) | Fire Weather Index — the EFFIS standard — per region, from live Open-Meteo. Choropleth, ranking, 3-day outlook |
| Incident clustering | ST-DBSCAN — start, end, peak intensity, duration — archived in PostGIS |
| National statistics | KPIs / ranking / seasonality / cumulative curves per 69 wilayas, each with a page |
| ML-ready archive | Border-clipped 0.1° training grid over the fire belt |
| RTL / languages | Arabic / French / English, full RTL; mobile bottom-sheet; RTL-aware animations |
| SEO & shareable | Open Graph / sitemap / JSON-LD per locale — rich previews |
🔍 The Filter
Signal over noise is not a slogan; it is a server-side quality gate.
- ✅ Confirmed-only gate — confidence ≥
highand FRP ≥ 15 MW before a pixel can touch the map. No false alarms. - ✅ Border-polygon clipping — outside a wilaya's polygon, clipped. Cross-border pollution removed.
- ✅ Buffered Shapely clipping — de-biased geography, precise attribution.
The result: a map trusted enough to decide on evacuation.
🛰️ The Watch
Once a detection passes the filter, it enters a persistent command loop:
- 🛰️ Ingest — NASA FIRMS pull (VIIRS + MODIS) every N minutes via APScheduler
- 📐 Clip — border polygons strip cross-border pollution
- 🗄️ Upsert — dedupe into PostGIS
- 🔗 Cluster — ST-DBSCAN turns pixels into incidents (start, end, peak FRP, duration)
- 🌡️ Risk — live FWI (EFFIS standard) per region from Open-Meteo
- 📊 Archive — 69 wilayas, cumulative curves, 0.1° ML training grid
🚁 The Response
This is not a science console — it's an early-warning system that reads like one.
🗣️ Languages — العربية · Français · English — full RTL
📱 Mobile-first — thumb-zone bottom sheet, RTL-aware animations
🌍 Community — plain-language place names, reverse-geocoded
The fire-intensity colour ramp, gradient flame in a radar ring, timeline scrubbing: every detail designed for someone who needs an answer now.
🏗️ The Command Architecture
A real multi-service pipeline — stateless frontend, endpoint-owning backend, cache, database, scheduler. Secrets stay server-side.
NASA FIRMS (VIIRS·MODIS) ─┐ Open-Meteo ┌─────────────┐ OSM/Nominatim
▼ ▲ ▼ ▼ ▲
┌────────────────────────────────────────────────────────────────┐
│ services/api — FastAPI │
│ /fires /place /risk /stats /events /grid ┌── APScheduler ──┐
│ Redis · ETag · confirmed-only filter │ pull → clip → │
│ │ │ dedupe → upsert │
│ │ │ → ST-DBSCAN │
└─────────┼────────────────────────────────────┴───────┬──────────┘
│ GeoJSON · risk · incidents · stats │ PostGIS
▼ ▼
┌───────────────────────────┐ ┌────────────────────────────┐
│ apps/web — Next.js │ SSL │ PostgreSQL + PostGIS │
│ MapLibre · stateless │ │ detections · fire_events │
│ EN/AR/FR · RTL-aware │ │ wilayas · grid_cells │
└───────────────────────────┘ └────────────────────────────┘
▲ no secrets client-side ✔
│ HTTPS
▼
📱 Any device — dark glass UI, mobile bottom sheet, RTL
🔧 Stack breakdown
| Layer | Technology | Why it matters |
|---|---|---|
| Frontend | Next.js 16 · TypeScript · React 19 · MapLibre GL · SWR | Edge-rendered, fully stateless |
| Backend | FastAPI · Python 3.12 · Pydantic-settings | Typed, documented API (OpenAPI//docs) |
| Caching | Redis (+ in-memory fallback) · ETag | Sub-second repeat queries |
| Database | PostgreSQL + PostGIS (Supabase) | Geospatial detections, incidents, wilaya boundaries, training grid |
| Scheduler | APScheduler | Ingest → clip → upsert → cluster, every N min |
| Geospatial | Shapely clipping · ST-DBSCAN | Cross-border removed; pixels → incidents |
| ML (seed) | 0.1° border-clipped training grid | Dataset for future risk models |
| Data sources | NASA FIRMS · Open-Meteo · OSM · OpenFreeMap · Esri | Free, global, live satellite + weather + geocoding |
| Tooling | Docker · Docker Compose · Railway · Vercel | One-command local stack; deploy-ready |
| i18n | next-intl (EN/AR/FR) · RTL-aware | Native-language UX |
📸 Screenshots — Operational Views
🖥️ Desktop — live map view
.png)
### 🌡️ Risk (FWI) view
|
### 🛰️ Satellite imagery view
|
### 📱 Mobile — bottom-sheet UX
|
🎯 The Mission Outcome
Wildfires are among the 21st century's clearest climate symptoms. FireWatch takes an environmental problem — unusable satellite fire data — and solves it with working technology, live in production. It directly answers the theme's call to help communities adapt to climate change and protect ecosystems, by giving the front line an early-warning system that actually reads like one.
🛑 FireWatch: The Defensive Line
🔥 Originality — Converts raw satellite data dumps into a community early-warning portal featuring confirmed-only filters, live weather risks, and localized place names.
🌲 Adherence to Earth Forward — Delivers a complete, end-to-end operational tool for climate adaptation and critical ecosystem protection.
🚀 Completion — Fully functional today with live data endpoints, a finished interface, and instant deployment configurations via Docker and Railway.
📚 Learning — Pushes past basic map markers into complex ST-DBSCAN clustering, geospatial clipping, and EFFIS-standard FWI models.
🎨 Design — Features a premium glass-paneled dark theme, fire-intensity color ramps, timeline scrubbing, and an optimized mobile thumb-zone layout.
⚙️ Technology — Powered by a multi-service pipeline leveraging FastAPI, PostGIS archiving, Redis caching, and a stateless edge frontend.
🚨 FireWatch stops treating satellite data like a research project and starts treating it like a community lifeline.
Built With
- apscheduler
- docker
- docker-compose
- esri
- fastapi
- maplibre-gl
- nasa-firms
- next.js-16
- nominatim
- open-meteo
- openfreemap
- openstreetmap
- postgis
- postgresql
- python-3.12
- react-19
- redis
- shapely
- st-dbscan
- supabase
- tailwind-css
- typescript

Log in or sign up for Devpost to join the conversation.