How theitush/weatherbaseline works
WeatherBaseline is a historical-versus-forecast weather comparison product. A visitor selects a place, date, and metric; the app snaps the place to a curated ERA5-Land grid cell, loads archive plus fresh forecast data, applies forecast bands, and renders charts and plain-language rarity verdicts. The same archive supports multi-series comparison and significance tests. ERA5-Land archive construction and forecast debiasing are offline supporting stages; Cloudflare Worker refresh and optional analytics provide runtime control-plane services. Some subsystems are represented from README/tree evidence rather than sampled implementation.
Components 22
User Experience
- Weather UI
frontend/src/App.tsx - App State
frontend/src/context/AppContext.tsx - Cell Resolver
frontend/src/services/cellIndex.ts - Timeline Loader
frontend/src/services/tieredData.ts - Data Processor
frontend/src/utils/dataProcessor.ts - Verdict Views
frontend/src/components/TemperatureContext.tsx - Compare Page
frontend/src/pages/ComparePage.tsx - Significance Tests
frontend/src/hooks/usePermutationTest.ts
Runtime Control
- Control Worker
worker/src/index.js - Freshness Service
worker/src/ensureFresh.js - Social Rewrite
functions/_middleware.js
Weather Data
- R2 Weather Files
Data Research
- Archive Pipeline
era5_pipeline - Debias Study
debias - Debias Tables
debias/make_debias_tables.py
Optional Analytics
- D1 Hit Store
- Analytics Reports
analytics
Other components
- Visitor
- Social Crawler
- EarthDataHub ERA5
- Open-Meteo Forecasts
- Cloudflare Analytics
Connections 27
- Visitor → Weather UI: selects weather
- Weather UI → App State: drives state
- App State → Cell Resolver: snaps location
- App State → Timeline Loader: loads timeline
- Timeline Loader → R2 Weather Files: reads tiers
- App State → Control Worker: requests freshness
- Control Worker → Freshness Service: dispatches refresh
- Freshness Service → Open-Meteo Forecasts: fetches forecast
- Freshness Service → R2 Weather Files: writes tiers
- App State → Debias Tables: loads forecast bands
- App State → Data Processor: derives context
- Data Processor → Verdict Views: supplies comparisons
- Weather UI → Verdict Views: renders verdicts
- Compare Page → Timeline Loader: loads archive
- Compare Page → Significance Tests: runs tests
- Significance Tests → Weather UI: returns results
- Archive Pipeline → EarthDataHub ERA5: pulls ERA5 data
- Archive Pipeline → R2 Weather Files: uploads archive
- Debias Study → Open-Meteo Forecasts: matches forecasts
- Debias Study → EarthDataHub ERA5: matches reanalysis
- Debias Study → Debias Tables: trains corrections
- Debias Tables → R2 Weather Files: publishes tables
- Control Worker → D1 Hit Store: logs views
- Analytics Reports → D1 Hit Store: queries hits
- Analytics Reports → Cloudflare Analytics: queries zone data
- Social Crawler → Social Rewrite: requests metadata
- Social Rewrite → Weather UI: rewrites response