Click any component to explore it in the full case study.

Ingestion — 3 independently scheduled Cloud Run Jobs
Job 1
weather-updater-v6
Parses METAR strings from 17 stations into BigQuery
Job 2
weather-lightning-ingestor
GLM flashes, 30-min lookback, MERGE-deduped into tbl_lightning_whisperer
Job 3
weather-updater-atmos
Tampa Bay radiosonde soundings ingest, every 12 hrs
Intelligence Layer — spatial nowcasting, narrative generation, outage detection
Job 4
weather-ml-predictor
Spatial storm-tracked nowcasts (BigQuery ST_DISTANCE); 6 models, every 20 min
Job 5
weather-insights-generator
Vertex AI Gemini 1.5 Flash risk narratives from structured scores, every 20 min
Job 6
weather-outage-tracker
Flags weather-attributed ride closures against risk thresholds, every 5 min
Training & Publishing
Job 7
weather-ml-trainer
Retrains all 6 scikit-learn models on-demand from 44K+ historical observations
Job 8
weather-json-publisher
Publishes curated JSON API; drives the adaptive fast-poll scheduler (5–15 min, 1 min during storms)
🤝
Cross-Cloud Agentic Pattern
AWS Bedrock (Claude) agent calls weather "tools" implemented as Azure Function endpoints, which query these BigQuery views via a read-only, Key-Vault-secured service account — a hand-rolled precursor to MCP/A2A tool-calling standards.
Bedrock Claude agentAzure Function toolsKey Vault-secured GCP keyRead-only BigQuery SA
17
METAR stations monitored
6
Production ML models
1–20m
Adaptive refresh cadence
$6–220
Monthly cost range (core → full agentic)
StackGCP BigQueryCloud Run JobsCloud SchedulerVertex AI / Gemini 1.5 FlashTerraformPythonGCS public bucketGOES-18 GLMNWS APIaviationweather.govUniversity of Wyoming soundingsAWS BedrockAzure Functions + Key Vault