Case study · Progressive web app · Climate data
Global atmospheric anomalies.One map. Updated every ten minutes.
Real-time El Niño and temperature anomaly tracking — any device.
Overview
AtmoWatch

Challenge
What needed solving.
Climate data is typically locked inside dense scientific portals — accessible to researchers, not to the general public. Yet temperature anomalies, El Niño cycles, and precipitation patterns affect everyone: farmers, insurers, logistics planners, journalists.
The brief: build a lightweight, public-interest tool that presents global atmospheric anomaly data in an immediately readable visual format, refreshes automatically, and works on any device without requiring a download.
Approach
What was done, and how.
Architecture: a Next.js PWA layered on top of OpenStreetMap via Leaflet, with a custom anomaly classification system (deviation from the 1991–2020 baseline).
Map layers
Temperature anomalies (global surface), ENSO / El Niño monitoring regions, ocean temperature anomalies (SST deviation) and precipitation radar.
Anomaly scale
Colour-coded by deviation: Normal (< 2 °C), Low (2–4 °C), Moderate (4–7 °C), High (7–10 °C), Critical (≥ 10 °C).
Refresh
Data refreshes every 10 minutes — no page reload required. A service worker keeps the last-fetched layer set available when the user goes offline.
Results
What changed.
- 5
- Map layers covering temperature, ENSO, ocean SST and precipitation — unified in one interface
- 10 min
- Data refresh cycle — always near-real-time
- 1991–2020
- Baseline used for scientifically grounded deviation scoring
- ✓
- Offline capability — the last-known atmospheric state is preserved
Under the hood
What makes it a Progressive Web App.
- Works offline (last-fetched layer set cached by service worker)
- Installs to home screen (no app store required)
- Any device: desktop, tablet, Android, iPhone
- Auto-refresh: live data every 10 minutes
Tech stack
Next.js · TypeScript · Leaflet · OpenStreetMap · Service Worker (Workbox) · Web App Manifest · REST weather APIs
Next project
Let’s find out if we’re a good fit.
A free 30-minute call. No pitch. No pressure.