Precipitation nowcasting ("rain starting in ~X min") #88

Closed
opened 2026-07-18 05:31:47 +00:00 by claude-bot · 1 comment
Contributor

Short-range "minutely" precip prediction for a location — the single most-used feature of consumer weather apps and a natural fit for the per-location model. RainViewer (already wired as the radar fallback, radar.py) exposes nowcast frames, so there's a low-friction path to a first version; a richer version could ride a dedicated nowcast API. Could surface on the dashboard card and/or as an opt-in "precip incoming" notification. Missed because the forecast surface was scoped to NWS period/hourly forecasts, not sub-hourly nowcasting. Effort M, value Medium-High.


Filed from the 2026-07-17 codebase audit (docs/.internal/report-2026-07-17.md), finding I-18.

Short-range "minutely" precip prediction for a location — the single most-used feature of consumer weather apps and a natural fit for the per-location model. RainViewer (already wired as the radar fallback, `radar.py`) exposes nowcast frames, so there's a low-friction path to a first version; a richer version could ride a dedicated nowcast API. Could surface on the dashboard card and/or as an opt-in "precip incoming" notification. Missed because the forecast surface was scoped to NWS period/hourly forecasts, not sub-hourly nowcasting. Effort M, value Medium-High. --- _Filed from the 2026-07-17 codebase audit (`docs/.internal/report-2026-07-17.md`), finding I-18._
Author
Contributor

Done in #115 (merged). A short-range point precip nowcast per location using RainViewer's nowcast frames: services/nowcast.py samples the location's tile pixel (zoom 8) across the latest past frame + up to 7 future frames and derives "rain starting in ~X min" / "rain easing" / "no precip expected soon". Served at GET /api/locations/{id}/nowcast (auth + visibility, cached ~5 min, fully fail-soft → never raises), and shown as a lazy-loaded 💧 line on each dashboard location card (hidden on error/disabled — never blocks render). PRECIP_NOWCAST_ENABLED (default true). 16 tests; bulk 739 passed.

Documented caveats: RainViewer is a global mosaic (coarser than the authoritative NWS NEXRAD radar), single-pixel sampling is imprecise, and the horizon is short (~30 min) — it's a heads-up, not a forecast; NWS alerts remain the source of truth. A richer version on a dedicated nowcast API + an opt-in "precip incoming" notification remains a possible follow-up.

Done in #115 (merged). A short-range point precip nowcast per location using RainViewer's `nowcast` frames: `services/nowcast.py` samples the location's tile pixel (zoom 8) across the latest past frame + up to 7 future frames and derives "rain starting in ~X min" / "rain easing" / "no precip expected soon". Served at `GET /api/locations/{id}/nowcast` (auth + visibility, cached ~5 min, fully fail-soft → never raises), and shown as a lazy-loaded 💧 line on each dashboard location card (hidden on error/disabled — never blocks render). `PRECIP_NOWCAST_ENABLED` (default true). 16 tests; bulk 739 passed. Documented caveats: RainViewer is a global mosaic (coarser than the authoritative NWS NEXRAD radar), single-pixel sampling is imprecise, and the horizon is short (~30 min) — it's a heads-up, not a forecast; NWS alerts remain the source of truth. A richer version on a dedicated nowcast API + an opt-in "precip incoming" notification remains a possible follow-up.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/WeatherBot#88
No description provided.