← mzlabs.llc

WFCA Fire Map

From Legacy App to 1M+ Monthly Users in 6 Months — Now Ad-Monetized & Expanding into Canada
Mauricio Zuniga · May 2026
hello@mzlabs.llc
1M+
Monthly Users
21
Data Pipelines
32
Map Layers
50+
PRs Merged
1
Engineer

The Challenge

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.

The Result

MetricBefore (Jan 2026)After (Jul 2026)
Monthly Active Users~28K (Jan takeover)1M+ (peak 1.45M, Jul 2026)
Data Pipelines~5 inherited21 automated
Map Layer TogglesNone32
Satellite ConstellationsNone4 (MODIS, VIIRS, GOES, Landsat)
Camera NetworksNone3 (ALERTWest, 511, Windy)
Weather LayersNoneWind, Lightning, Smoke, SPC
Monitoring/AlertingNoneAuto-heal Lambda + SNS + CloudWatch
CI/CDNone4-gate GitHub Actions pipeline
Deploy Speed~20 min rebuild~30 sec git-pull

Growth

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.

Monthly Active Users — WFCA Fire Map 0 500K 1M 1.5M WFCA Takeover Jan 2026 · ~28K 1.45M · Jul 2026 Sep '25 Oct Nov Dec Jan '26 Feb Mar Apr May Jun Jul Source: Google Analytics (GA4) — monthly active users, Sep 2025 – Jul 2026
Monthly active users (GA4). The Jan 2026 WFCA takeover (~28K) marks the inflection — six months of month-over-month growth to a 1.45M July peak, the platform's first month over 1 million.

What I Built

Jan 2026 Foundation & First Feature

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.

Feb 2026 Satellite Detection Platform

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.

National fire map
National fire map — IRWIN incidents (red dots), FIRMS heat detections, camera pins (blue shields), firefighting aircraft

Mar 2026 Weather Intelligence & Cameras

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.

Full platform
Full platform — camera pins, wind flow controls with particle/barb opacity sliders, fire incident markers with names

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.

Apr–May 2026 Scale, Event-Driven & CI/CD

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.


32 Map Layer Toggles

Fires section
Fires & Satellite Detections panel
FIRMS sensors
FIRMS sensors, GOES ABI, FRP slider

Satellite Imagery

Fire Bands (M11-I2-I1)

Active fires in red, smoke in grey-blue. Shortwave infrared/thermal composite. 1-3h delay.

True Color

Natural-color satellite view showing smoke plumes, terrain, and cloud cover. 1-3h delay.

Fuel Model (LANDFIRE)

Vegetation fuel type classification for fire behavior prediction. Static reference layer.

On-Demand Per-Fire Imagery

Click any fire -> GOES Fire Bands + True Color fetched for that fire's location. Magnifier, timelapse, sharpening.

Fires

IRWIN Incidents & Perimeters (Wildfires/Rx sub-toggles) · FIRIS Fire Predictions · PulsePoint 911 Incidents (inherited, enhanced) · Firefighting Aircraft (inherited, enhanced)

Satellite Detections

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

Cameras

Fire Cameras (ALERTWest/ALERTCalifornia) · Webcams (Windy + 511 traffic cams)

Observed Weather

NWS Fire Weather Alerts · Satellite Smoke (NOAA HMS) · GOES NRT Smoke Detection · Lightning Strikes (GLM real-time) · Wind Flow (HRRR/GFS particles + barbs)

Forecasts & Alerts

Smoke Forecast (NOAA) · Fire Weather Outlook (SPC — Elevated/Critical/Extremely Critical) · Lightning Forecast (HRRR threat polygons)

Beta

Converged Heat+Smoke Detection · GOES IR Fire Temperature (planned)

All weather layers
All layers active — dynamic legend, wind flow, lightning, SPC fire weather outlook, HRRR lightning forecast, smoke

Platform Capabilities

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.

Dynamic State Sitemap

50 state routes with SSR meta tags, dynamic sitemap.xml, deep-link fire URLs with irwinid parameter.

Fire Detail Panel

InciWeb briefs with agency logos, on-demand satellite imagery, magnifier, timelapse, weather panels.

Detections Tab

Satellite detection list with county enrichment, IRWIN linking, unread badges, full metadata.

Embeddable Widgets

Fire map widget + ultra widget (map + table) for partner sites. Color presets, size config.

Progressive Web App

Installable on all browsers, offline caching, iPhone notch handling, branded icons.

Fire Growth Animation

Animated perimeter history with delta coloring, auto-zoom, playback controls.

Fire widget
Embeddable fire widget — compact mode
Mobile view
Mobile responsive layout

21 Automated Data Pipelines

  1. IRWIN Incidents NIFC
  2. IRWIN Perimeters NIFC
  3. FIRMS MODIS NASA
  4. FIRMS VIIRS SNPP NASA
  5. FIRMS VIIRS NOAA-20 NASA
  6. FIRMS VIIRS NOAA-21 NASA
  7. FIRMS Landsat NASA
  8. NASA FEDS Perimeters NASA
  9. GOES-18 ABI Fire (West) NOAA
  10. GOES-19 ABI Fire (East) NOAA
  11. GOES-18 ADP Smoke (West) NOAA
  12. GOES-19 ADP Smoke (East) NOAA
  13. HRRR Wind Forecast NOAA
  14. HRRR Lightning Forecast NOAA
  15. HMS Smoke Plumes NOAA
  16. NWS Weather Alerts NWS
  17. FlightRadar24 Aircraft FR24
  18. PulsePoint 911 Dispatch PP
  19. Camera Cache Warmer 3 nets
  20. SoF AI Detections SoF
  21. Fire RGB GeoTIFF CIRA

Infrastructure

ComponentBeforeAfter
ETL Instancet3.medium (4GB)t3.xlarge (16GB) + swap + watchdog
EBS Disk8GB200GB gp3
MonitoringNoneCloudWatch memory, disk, pipeline health
AlertingNoneAuto-heal Lambda + SNS email/SMS q15min
CI/CDNoneGitHub Actions — 4 quality gates
DB MigrationsAd-hoc SQLNumbered migration system
ETL Deploy~20 min rebuild~30 sec git-pull via GitHub Actions
CronBasicHeartbeat watchdog + auto-restart
Satellite basemap
Satellite basemap view — one of 3 basemap styles (Street / Satellite / Topo)