In January 2026, the WFCA Fire Map was a basic wildfire tracking tool with a handful of inherited data feeds, no satellite detection capability, no weather overlays, no layer controls, no monitoring infrastructure, and minimal documentation. I was brought on to take over engineering and transform it into a best-in-class wildfire intelligence platform for the Western Fire Chiefs Association.
| Metric | Before (Jan 2026) | After (Jul 2026) |
|---|---|---|
| Monthly Active Users | ~28K (Jan takeover) | 1M+ (peak 1.45M, Jul 2026) |
| Data Pipelines | ~5 inherited | 21 automated |
| Map Layer Toggles | None | 32 |
| Satellite Constellations | None | 4 (MODIS, VIIRS, GOES, Landsat) |
| Camera Networks | None | 3 (ALERTWest, 511, Windy) |
| Weather Layers | None | Wind, Lightning, Smoke, SPC |
| Monitoring/Alerting | None | Auto-heal Lambda + SNS + CloudWatch |
| CI/CD | None | 4-gate GitHub Actions pipeline |
| Deploy Speed | ~20 min rebuild | ~30 sec git-pull |
After taking over engineering in January 2026 (~28K monthly active users), traffic grew every month to 1M+ — crossing 1 million for the first time in July 2026 at a peak of 1.45M monthly active users. The chart below is built directly from Google Analytics (GA4) monthly active users.
Reverse-engineered the entire application (Next.js 12, Mapbox GL JS, Redux, GeoServer, AWS RDS) with no documentation. Created developer onboarding docs, local dev environment, E2E test framework, and security hardening.
First feature — Fire Growth Animation: Built an animated timeline player showing fire perimeter growth over days/weeks, with delta coloring, auto-zoom, and progressive filtering.
Also shipped: Daily Dispatch RSS feed, PulsePoint 911 data sync, prescribed burn filtering, iframe embedding for partner sites, dynamic state pages for all 50 US states with SEO meta tags and deep-link fire URLs.
NASA FIRMS pipeline — the transformative feature. Built a complete satellite fire detection system ingesting data from 5 sensors (MODIS, VIIRS SNPP, VIIRS NOAA-20/21, Landsat), served via GeoServer MVT vector tiles for 10x performance. Users can toggle each sensor independently.
UI overhaul — 10+ PRs in one week: split collapsible panels, mobile-first layout, basemap switcher (Street/Satellite/Topo), Lighthouse performance optimizations, MUI → Tailwind migration.
InciWeb integration — fire briefs with agency logos, embeddable widgets for partner sites, PWA support with offline capability.
SEO — dynamic sitemap for all 50 states, deep-link fire URLs, title-first page titles.
3 camera networks unified — ALERTWest wildfire cams, 511 traffic cams, Windy webcams. Multi-camera popups with compass direction, DB-cached API with 3-layer fallback.
Wind flow animation — HRRR + GFS particle visualization with zoom-aware model selection, wind barbs, independent opacity controls, Alaska/Hawaii coverage.
Real-time lightning strikes — subscribed directly to NOAA's GOES GLM satellite topic on AWS SNS. Strikes flow through SNS→SQS→Lambda in near real-time — no polling, no ETL. First event-driven integration on the platform (~432K inv/month, free tier).
Lightning forecast — HRRR model dissolved into High/Extreme threat polygons for forward-looking coverage.
GOES satellite integration — GOES-18 (West) and GOES-19 (East) ABI fire detection, ADP smoke plumes. FRP threshold tuned to 4 MW for early-stage wildfire sensitivity.
On-demand satellite imagery — click any fire to get GOES Fire Bands (M11-I2-I1) showing active fires in red and smoke in grey-blue, plus True Color natural satellite view. Image magnifier, timelapse, and Sharp.js sharpening. Imagery auto-fetched for the fire's exact location and timeframe.
Detections tab — list-based view of all active satellite detections with county enrichment, IRWIN incident linking, weather panels, and unread badge.
App settings kill switch — DB-driven table lets us disable any layer via SQL in under 5 minutes, no deploy needed.
NRT fire detections — subscribed directly to NOAA's satellite SNS topics for near real-time GOES fire detections, eliminating polling latency. Extends the event-driven pattern proven with GLM lightning — moving from batch ETL to event-driven integrations where satellite data arrives as it's published.
SoF AI detection layer — integrated third-party AI-powered satellite fire detection as a comparison layer alongside FIRMS, served via GeoServer MVT.
Fire RGB via GeoServer — replaced external proxy with self-hosted S3 GeoTIFF → GeoServer WMS pipeline for CONUS, Alaska, and Hawaii satellite composites.
Auto-heal alert system — Lambda monitors all 21 pipelines every 15 min, auto-restarts containers when down, sends SMS/email alerts that repeat until resolved.
Infrastructure upgrades — t3.medium (4GB) → t3.xlarge (16GB), EBS disk 8GB → 200GB, CloudWatch memory monitoring with auto-restart, cron watchdog.
CI/CD pipeline — 4 parallel quality gates (lint/build/typecheck, config validation, security scan, E2E tests), PR hygiene enforcement, automated changelog.
Deploy model — shifted from 20-minute Docker rebuilds to 30-second git-pull deploys via GitHub Actions.
Active fires in red, smoke in grey-blue. Shortwave infrared/thermal composite. 1-3h delay.
Natural-color satellite view showing smoke plumes, terrain, and cloud cover. 1-3h delay.
Vegetation fuel type classification for fire behavior prediction. Static reference layer.
Click any fire -> GOES Fire Bands + True Color fetched for that fire's location. Magnifier, timelapse, sharpening.
IRWIN Incidents & Perimeters (Wildfires/Rx sub-toggles) · FIRIS Fire Predictions · PulsePoint 911 Incidents (inherited, enhanced) · Firefighting Aircraft (inherited, enhanced)
NASA FEDS Perimeters · FIRMS Heat Detections with 6 sensor sub-toggles: VIIRS Suomi NPP, VIIRS NOAA-20/21, MODIS Terra/Aqua, Landsat 8/9, GOES ABI GOES-18/19, SoF AI Detections
Fire Cameras (ALERTWest/ALERTCalifornia) · Webcams (Windy + 511 traffic cams)
NWS Fire Weather Alerts · Satellite Smoke (NOAA HMS) · GOES NRT Smoke Detection · Lightning Strikes (GLM real-time) · Wind Flow (HRRR/GFS particles + barbs)
Smoke Forecast (NOAA) · Fire Weather Outlook (SPC — Elevated/Critical/Extremely Critical) · Lightning Forecast (HRRR threat polygons)
Converged Heat+Smoke Detection · GOES IR Fire Temperature (planned)
Now covering Canada, and monetized.
Canada coverage is live — real Canadian wildfire traffic (~10.7K monthly users) now sits alongside the existing CONUS, Alaska, and Hawaii coverage.
The platform is now ad-supported — a consent-mode GTM/AdSense integration serving ~259K monthly ad impressions, turning the map into a self-sustaining public-good service.
50 state routes with SSR meta tags, dynamic sitemap.xml, deep-link fire URLs with irwinid parameter.
InciWeb briefs with agency logos, on-demand satellite imagery, magnifier, timelapse, weather panels.
Satellite detection list with county enrichment, IRWIN linking, unread badges, full metadata.
Fire map widget + ultra widget (map + table) for partner sites. Color presets, size config.
Installable on all browsers, offline caching, iPhone notch handling, branded icons.
Animated perimeter history with delta coloring, auto-zoom, playback controls.
| Component | Before | After |
|---|---|---|
| ETL Instance | t3.medium (4GB) | t3.xlarge (16GB) + swap + watchdog |
| EBS Disk | 8GB | 200GB gp3 |
| Monitoring | None | CloudWatch memory, disk, pipeline health |
| Alerting | None | Auto-heal Lambda + SNS email/SMS q15min |
| CI/CD | None | GitHub Actions — 4 quality gates |
| DB Migrations | Ad-hoc SQL | Numbered migration system |
| ETL Deploy | ~20 min rebuild | ~30 sec git-pull via GitHub Actions |
| Cron | Basic | Heartbeat watchdog + auto-restart |