feat(dashboard): console phase 4 - 2024 replay, simulation, replaces the old page
The console is now the dashboard at / (src/static/dashboard.html); the old page and console.html are gone. - Replay of the October 2024 flood (flood-2024-all.json): the page's clock, verdict, list, markers, flood zones and panel follow the replay; the panel charts the season on fixed axes with the 2024 model's 24 h peak. Hourly while the model alerts or P.1 is above 3.50 m, faster through quiet days; pause and drag. Rain, basin stations and the 5-minute refresh are off during the replay (today's data). - ?demo_level= and ?demo_rise= simulate P.1. A violet REPLAY / amber SIMULATION bar, the top bar's KPI and the P.1 panel say so; the mode is drawn from state.mode alone, so a refresh or language switch cannot relabel either as live. - History: rows without discharge_percent are ThaiWater's copy of the gauge (night hours RID publishes late), with a different rating (P.1: 26 against RID's 54 m3/s); their discharge is not drawn for gauges with RID discharge. The discharge strip has headroom so its label stays clear of the line. - Swap: the old page's title, description, Open Graph and JSON-LD tags; no noindex; tests/test_dashboard.py = console tests + the old checks that still apply (one P.1 level, SEO files) + a replay/simulation labelling test. - Docs: README screenshot (docs/img/dashboard.jpg, replacing two unused images), CLAUDE.md, CONTRIBUTING.md, FLOOD_FORECASTING.md (where the model shows), DASHBOARD_REDESIGN.md (phase 4 done, mode rules). Deploy needs a restart: the server reads dashboard.html at start.
This commit is contained in:
1 parent
ffd3030352
commit
cf10f2e4c8
15 files changed
+2419
-4599
No files matched your search
+18
-11
@@ -639,17 +639,24 @@ and `scripts/install.sh` does that on every install.
|
||||
|
||||
### Dashboard
|
||||
|
||||
The "Flood risk outlook" panel (`src/static/dashboard.html`, `loadForecasts()`)
|
||||
loads non-blocking after the map renders and **stays hidden unless `/forecast`
|
||||
returns a non-empty array** — a non-OK response, an empty array, or a thrown
|
||||
fetch all just leave the panel hidden, and the rest of the dashboard is
|
||||
unaffected. Per the note above, this means the panel appears with heuristic-only
|
||||
content once data is flowing but before any model is trained; the per-chip
|
||||
tooltip is what tells you so. Stations are sorted worst-risk first, each showing
|
||||
three chips (6/12/24 h) coloured by risk band, with the tooltip carrying the exact
|
||||
warning and danger percentages, the predicted peak level, and a "heuristic
|
||||
fallback" note when the row did not come from a model. The panel is labelled
|
||||
*experimental*.
|
||||
The dashboard (`src/static/dashboard.html`) loads `/forecast` with the gauges; if
|
||||
it fails or is empty, the page works without forecasts. Where the model shows:
|
||||
|
||||
- **Top bar.** Chiang Mai's verdict from P.1: flooding at ≥ 3.70 m; "likely" at a
|
||||
24 h danger chance ≥ 50 % or warning chance ≥ 70 %; "watch" at a warning chance
|
||||
≥ 20 % or a level ≥ 3.20 m. Next to it, the highest 24 h warning chance of any gauge.
|
||||
- **Gauge list and map.** A gauge is "watch" from a 24 h warning chance of 25 %.
|
||||
- **Station panel.** Per horizon (6/12/24 h) the predicted peak and the warning and
|
||||
danger chances, the model version and when it was trained, or "Simple estimate" when
|
||||
the row came from the heuristic fallback. For P.1 the chance of reaching each of the
|
||||
seven inundation stages. The history chart overlays the 24 h peaks as they were
|
||||
issued (`/api/forecast/history`), and "How accurate is the forecast?" loads
|
||||
`/api/forecast/skill`.
|
||||
- **Replay.** "Replay the October 2024 flood" plays `src/static/flood-2024-all.json`:
|
||||
the gauge readings of 2024 with what a model trained only on data before
|
||||
1 September 2024 said at each hour.
|
||||
|
||||
The page labels the forecast experimental.
|
||||
|
||||
### Training on the server
|
||||
|
||||
|
||||
Reference in new issue
Block a user