// Case study · N°02
AeroAnalytics.
1st place. NASA Space Apps Challenge 2025, Vancouver (23 teams). Continent-scale air-quality dashboard over NASA TEMPO data.
- Role
- Full-stack Engineer
- Year
- 2025
- Status
- shipped
- Stack
- React 19 · TypeScript · deck.gl 9
A web app that ingests NASA TEMPO satellite data plus ground-based stations and visualizes air quality across North America on an interactive continent-scale map and per-location dashboard. Built in a 48-hour hackathon by a team of six; I was one of three full-stack engineers, focused on the React/TypeScript frontend.
// Demo
// Context
The WHO links ambient and household air pollution to roughly 7 million premature deaths a year. AeroAnalytics gives the public an at-a-glance view of AQI, key pollutants, forecasts, and hazard alerts, turning heterogeneous scientific data into something a non-expert can read in seconds.
Result
1st of 23 teams
Event
NASA Space Apps 2025, Vancouver
Built in
48 hours
Team
6 engineers
What we built .
The team web-scraped NASA TEMPO data, built an ETL that harmonizes disparate sources spatially and temporally, trained a short-term forecasting model, and shipped a working demo for the judges, end to end in 48 hours.
The frontend (my part) .
The flagship view is a continent-scale 3D pollution heatmap: a deck.gl HexagonLayer with GPU-accelerated aggregation over a MapLibre dark-matter basemap, with three zoom-aware interpolations (radius, elevation, coverage) so it stays legible from continent to city scale. Clicking the map deep-links to a per-location dashboard at /dashboard/:lat/:lng. The URL is the source of truth, so views are bookmarkable and shareable.
State runs on Redux Toolkit + RTK Query (30s freshness, reconnect refetch, friendly error transforms). ECharts time-series charts overlay a dashed amber forecast line that splits at the current hour, so users see the boundary between observed and predicted at a glance.
What I did.
- deck.gl heatmap integration: HexagonLayer, GPU aggregation, custom lighting, zoom-aware radius/elevation/coverage interpolation, selected-point marker.
- CSV/API pollution data loader with per-source client-side caching.
- Dashboard wiring: URL params → Redux → RTK Query → ECharts, with a forecast/historical mode state machine.
- Sidebar, filter panel, location detail, quick-jump cities, theme toggle, responsive collapse.
- API client with RTK Query and a custom transformErrorResponse for friendlier empty states.
Notable decisions.
Honest scope under time pressure
It shipped as a technically-feasible demonstration: the +1h forecast was real, longer horizons were stubbed during the 48 hours. The architecture supports the full vision the team pitched, and it took 1st place out of 23 teams at the Vancouver event.