From 301a629b42111118faf94e3cd81e1fff9793893c Mon Sep 17 00:00:00 2001 From: grabowski Date: Mon, 19 Oct 2026 16:31:09 +0700 Subject: [PATCH] feat(dashboard): the console, phase 1 of the redesign (preview at /static/console.html) The user chose direction B of the redesign: a full-screen operations console. It is built next to the current dashboard, served by ServeDir at /static/console.html (noindex, links back to /), and replaces dashboard.html once it covers every feature (docs/DASHBOARD_REDESIGN.md, phase 4). Phase 1: - top bar: the Chiang Mai verdict (P.1 level + 24 h forecast, the current dashboard's rule), gauges reporting, highest 24 h flood chance, data age ("overnight pause" instead of "stale" during RID's nightly gap, as in the notifier), EN/TH, light/dark (dark default), Get alerts - gauge list: one status rule for list, map and panel (normal, watch within 0.5 m or >= 25 % chance, warning, danger, no data), margin to the warning level, 72 h sparkline, 6 h change; filter; sort by river order, closest to the warning level, rising; arrow keys - map: Ping mainstem and tributaries, status markers with code + level, layers Rain 24 h (on by default only with heavy rain) and Flood zones (auto-shown while P.1 is at a stage), one legend - station panel: level, change, discharge (last RID value when the newest hour is level-only), warning/danger levels with margins, capacity, level scale with now and 24 h peak, 72 h chart with the forecast peaks, forecast table with the model and issue time, the P.1 inundation stages, data links - alerts drawer with the ntfy topics; selection in the URL (#P.84); refresh every 5 minutes - Inter and Noto Sans Thai self-hosted (src/static/fonts, 75 KB, OFL), no emoji, Thai first, Bangkok time tests/test_console.py: routed fetch paths, EN/TH parity, translated aria labels, no emoji, fonts and licences, noindex. dev_proxy.py serves src/static with real content types (it sent HTML as octet-stream). --- CLAUDE.md | 5 +- README.md | 1 + docs/DASHBOARD_REDESIGN.md | 151 +++ scripts/dev_proxy.py | 10 +- src/static/console.html | 1376 ++++++++++++++++++++ src/static/fonts/README.md | 13 + src/static/fonts/inter-OFL.txt | 93 ++ src/static/fonts/inter-latin.woff2 | Bin 0 -> 48256 bytes src/static/fonts/noto-sans-thai-OFL.txt | 93 ++ src/static/fonts/noto-sans-thai-thai.woff2 | Bin 0 -> 26924 bytes tests/test_console.py | 100 ++ 11 files changed, 1839 insertions(+), 3 deletions(-) create mode 100644 docs/DASHBOARD_REDESIGN.md create mode 100644 src/static/console.html create mode 100644 src/static/fonts/README.md create mode 100644 src/static/fonts/inter-OFL.txt create mode 100644 src/static/fonts/inter-latin.woff2 create mode 100644 src/static/fonts/noto-sans-thai-OFL.txt create mode 100644 src/static/fonts/noto-sans-thai-thai.woff2 create mode 100644 tests/test_console.py diff --git a/CLAUDE.md b/CLAUDE.md index 52a96ae..749e5fe 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,7 +32,10 @@ plus the monthly `water-monitor-retrain.timer` (Python, `.venv`, uv-managed). Up - Do not add Co-Authored-By trailers. - The dashboard is a single file, `src/static/dashboard.html`, EN + TH via the `t()` table: every user-visible string needs both languages. Every path it fetches must be - a route in `rust/collector/src/web/mod.rs` (tests/test_dashboard.py checks). + a route in `rust/collector/src/web/mod.rs` (tests/test_dashboard.py checks). Its + replacement, the console (`src/static/console.html`, preview at /static/console.html, + plan in docs/DASHBOARD_REDESIGN.md), follows the same rules plus no emoji + (tests/test_console.py); preview it with `uv run python scripts/dev_proxy.py`. - Rust (`rust/`, see rust/README.md): `cargo fmt --all`, `cargo clippy --all-targets -- -D warnings`, `cargo test`; minimum version 1.88 (`CARGO_TARGET_DIR=target/msrv cargo +1.88 check --all-targets --locked`). Read diff --git a/README.md b/README.md index 4d269f1..476b6c3 100644 --- a/README.md +++ b/README.md @@ -176,6 +176,7 @@ models/ trained bundles (gitignored) and evaluation results - [docs/MATRIX_QUICK_START.md](docs/MATRIX_QUICK_START.md) — the same alerts in a Matrix room - [rust/README.md](rust/README.md) — the service: commands, configuration, develop, deploy - [docs/RUST_REWRITE.md](docs/RUST_REWRITE.md) — why and how it moved from Python to Rust +- [docs/DASHBOARD_REDESIGN.md](docs/DASHBOARD_REDESIGN.md) — the new console dashboard (preview at `/static/console.html`): layout, rules, phases - [docs/references/NOTABLE_DOCUMENTS.md](docs/references/NOTABLE_DOCUMENTS.md) — official Thai government resources - Public overview: [buildfor.life/docs/tooling/ping-river-monitor](https://buildfor.life/docs/tooling/ping-river-monitor/) diff --git a/docs/DASHBOARD_REDESIGN.md b/docs/DASHBOARD_REDESIGN.md new file mode 100644 index 0000000..58bc8c1 --- /dev/null +++ b/docs/DASHBOARD_REDESIGN.md @@ -0,0 +1,151 @@ +# Dashboard redesign: the console + +Status: **phase 1 done** (2026-10-19). The new dashboard is built next to the current +one and replaces it in phase 4. + +- **Preview:** , after `git pull` on the + server (static files are read per request, no restart). It is not indexed + (`noindex`) and links back to the current dashboard. +- **Locally:** `uv run python scripts/dev_proxy.py 8765`, then + . The API is proxied to production. +- **Rules:** the same as for `dashboard.html`, plus no emoji (`tests/test_console.py`): + - every path it fetches is a Rust route; + - every string exists in EN and TH, and Thai is the default; + - timestamps are Bangkok wall-clock time. + +## Why: the current page + +Observed on 2026-10-19 at 1440 px and on a 390 px phone. + +- **No clear first answer.** "Is Chiang Mai flooding?" is a thin green banner above + four KPI cards of equal weight. Two of them answer nothing for a resident: "Most + stressed gauge 16%" and "Chiang Mai river flow 53.9" (no unit in the number). At the + bottom there are five more (2,700,706 datapoints, 3,002 days, …). +- **The colours answer the wrong question.** Markers and river lines are coloured by + discharge class (m³/s), not by distance to the warning level, and the station list + shows discharge. +- **The map is noisy.** OSM terrain with Thai labels, numbered markers and animated + dashes. The legend covers about a third of the map, and more than half of the first + phone screen. +- **The header is busy.** It has six buttons with emoji (↻ 🌙 🔔 ▶); on a phone they + wrap into three rows. +- **Internal detail on the main page.** The model-skill table lists seven model hashes; + the history card is an empty 360 px box until a station is clicked. +- **Inconsistent styling.** A gradient background, several card and pill styles, three + greens. + +## Decision + +Two directions were sketched on 2026-10-19 against live data (throwaway HTML, not kept): + +- **A:** a public information page. +- **B:** an operations console. + +The user chose **B**. + +## Layout + +One screen, no page scroll on a desktop: + +| Area | Content | +|---|---| +| Top bar | brand · **Chiang Mai verdict** (P.1 level + 24 h forecast, always visible, click selects P.1) · gauges reporting · highest 24 h flood chance · data age · EN/ไทย · light/dark · Get alerts | +| Left | gauge list: status bar, code, name, margin to the warning level, 72 h sparkline, level and 6 h change; filter; sort by river order, closest to the warning level, rising; status legend | +| Centre | map: Ping mainstem and tributaries, gauges coloured by status with code + level labels, layers Rain 24 h and Flood zones, one legend | +| Right | selected gauge: level, 6 h change, discharge, warning/danger level with margins, capacity; level scale with now and 24 h peak; 72 h chart with the forecast peaks; forecast table (peak, chance of warning/danger at 6/12/24 h, model, issue time, disclaimer); for P.1 the seven inundation stages and the zones toggle; data links | +| Status bar | data credits, API, source code | + +**Narrower screens:** + +| Width | Layout | +|---|---| +| < 1280 px | The panel moves below list and map, in columns | +| < 860 px | One column: verdict, map, list, panel | + +**Behaviour:** +- Selection is in the URL (`#P.84`). +- Arrow keys move through the list. +- Data refreshes every 5 minutes. + +## Where every current element goes + +| Current (`dashboard.html` id) | Console | Phase | +|---|---|---| +| `flood-verdict`, `verdict-*` | Verdict in the top bar | 1 | +| `station-count`, `last-updated`, `data-age`, `live-pill` | Top-bar KPIs (reporting, data age) | 1 | +| `river-flow`, `peak-station` (P.1 flow, most stressed gauge) | Discharge and capacity in the panel; "Closest to warning level" sort | 1 | +| `station-map`, `map-legend`, `legend-toggle`, `rain-toggle`, `zones-toggle` | Map, layer buttons, one legend | 1 | +| side list, `station-search` | Gauge list with filter and sorts | 1 | +| `forecast-card`, `p1-outlook`, `p1-peak`, `p1-stages`, `forecast-grid` | Panel: forecast table for every gauge, stages for P.1 | 1 | +| `alerts-panel`, `alerts-*` | Alerts drawer | 1 | +| `refresh-button` | Removed: refresh every 5 min, age in the top bar | 1 | +| `lang-toggle`, `theme-toggle` | EN / ไทย segmented control, icon button | 1 | +| `error`, `loading` | Map overlay with retry; "Loading" in the list | 1 | +| `thaiwater-sensors`, `sensors-*` | List tab + map layer | 2 | +| custom markers | Map layer | 2 | +| `history-card`, `history-*` | Panel history with ranges | 3 | +| `skill-panel`, `skill-*` | Panel section for P.1 | 3 | +| `db-stats`, `db-*` | Status-bar popover | 3 | +| `replay-2024`, `replay-*`, demo hooks | Replay/simulation mode with banner and mode pill | 4 | + +## Design rules + +- **Type:** Inter (Latin) and Noto Sans Thai, self-hosted in `src/static/fonts/` (75 KB, OFL). Numbers use tabular figures. +- **Colours:** CSS variables for light and dark, with dark the default; a saved choice wins (`ping-river-theme`, shared with the current dashboard). + - **Accent:** `#1d6fd6` light, `#4c9bf0` dark. + - **Status:** colours are used only for status, each with an `-ink` variant for text (WCAG AA on white). +- **One status rule** (`statusOf`) for the map, list and panel. It is display-only; the notifier keeps its own transitions. + + | Status | Rule | + |---|---| + | Normal | none of the rules below | + | Watch | within 0.5 m of the warning level, or 24 h warning chance ≥ 25 % | + | Warning | level ≥ `threshold_warning` | + | Danger | level ≥ `threshold_danger` | + | No data | no reading for 24 h | + +- **City verdict:** the current dashboard's rule — flooding from P.1 ≥ 3.70 m; "likely" at danger ≥ 50 % or warning ≥ 70 %; watch at warning ≥ 20 % or level ≥ 3.20 m. +- **Data age:** "feed stale" after 3 h, except during RID's overnight pause (21:00 to 09:00 with an evening reading). The pause shows as "overnight pause", the same rule as the notifier's `FEED_NIGHT_UNTIL_HOUR`. +- **Discharge:** comes with RID's report. When the newest hour is a level-only reading, the panel shows the last RID discharge with its time ("at 14:00"). +- **Rain layer:** off by default unless any station has heavy rain (> 35 mm / 24 h); an explicit choice is remembered. +- **Flood zones:** shown automatically while P.1 is at or above a stage, unless hidden by the user. + +## Phases + +Each phase is one commit, checked with screenshots: 1440, 1100 and 390 px; light and dark; EN and TH. + +1. **Done — Console shell with live data.** + - Layout, design tokens, fonts, EN/TH. + - Verdict and KPIs, gauge list with sparklines and sorts. + - Map with status markers, rain and flood-zone layers. + - Station panel (readings, scale, 72 h chart, forecast table, P.1 stages). + - Alerts drawer (ntfy topics); URL selection; 5-minute refresh. + - `tests/test_console.py`; `dev_proxy.py` serves `src/static` with proper content types. +2. **Map and basin.** + - **Basemap:** a self-hosted Protomaps extract of the Ping basin (PMTiles in `src/static/`, labels in Thai or English following the page language, light/dark themes). This replaces the dimmed OSM raster tiles, whose baked-in labels are the noisiest part of the screen. + - **Server:** check that ServeDir answers HTTP range requests (PMTiles needs them); add range support to `dev_proxy.py`. + - **ThaiWater/HII stations:** + - A tab in the list. + - A map layer: % of bank height, `/api/hii/waterlevel/latest`, falling back to `/sensors/thaiwater`. + - **Custom markers:** `custom-markers.json`, with their flood-zone popup. +3. **Station depth.** + - **History in the panel:** range 24 h / 7 d / 30 d / 90 d / all / custom dates, level and discharge, issued 24 h forecasts overlaid, flood bands; Chart.js or SVG. + - **P.1 forecast skill** ("Is the model getting better?") as a panel section, from `/api/forecast/skill`. + - **Data statistics:** a status-bar popover, from `/api/stats`. +4. **Modes and the swap.** + - **October 2024 replay:** banner, clock, markers and verdict follow the replay; zones auto-show. + - **Demo hooks:** `?demo_level=`, `?demo_rise=`. A mode pill (LIVE / REPLAY / SIMULATION) never relabels a replay or simulation as live. + - **The swap:** `console.html` becomes `dashboard.html`; the old file and its tests go. `tests/test_console.py` absorbs the remaining checks of `tests/test_dashboard.py` (one P.1 level, SEO tags; the robots `noindex` is removed). + - **Docs:** README screenshot and the CLAUDE.md rule. +5. **Polish.** + - Phone layout pass. + - Native-speaker review of the Thai strings. + - Keyboard and screen reader pass. + - Lighthouse ≥ 90 (performance, accessibility). + - No console errors. + +## Data notes from building phase 1 + +- **Negative levels.** P.4A (−1.28 m) and P.67 (−0.59 m) report negative levels: gauge datums, not errors. The panel's scale starts at the lowest of 0 and the station's 72 h readings. +- **P.1 discharge disagrees between endpoints.** At 15:00 on 2026-10-19, `/measurements/latest` had level 1.30 m with no discharge, while `/measurements/history` had 26.0 m³/s with no capacity. RID's 14:00 report said 53.9 m³/s. The console shows the last RID discharge. Worth checking where the 26.0 comes from. +- **P.84 spike.** A one-hour spike at 13:00 the same day: 0.73 → 1.05 → 0.78 m. diff --git a/scripts/dev_proxy.py b/scripts/dev_proxy.py index 793bf11..775de1d 100644 --- a/scripts/dev_proxy.py +++ b/scripts/dev_proxy.py @@ -1,8 +1,12 @@ """Serve the working-copy dashboard locally with API calls proxied to the live server, so browser-side changes can be checked against real data -before deploy. Usage: python scripts/dev_proxy.py [port]""" +before deploy. Usage: python scripts/dev_proxy.py [port] + +/ is src/static/dashboard.html, /static/... any file in src/static (e.g. the +console preview at /static/console.html), everything else the live server.""" import http.server +import mimetypes import os import sys import urllib.request @@ -30,8 +34,10 @@ class Handler(http.server.BaseHTTPRequestHandler): ctype = ( "application/json" if f.suffix in (".json", ".geojson") - else "application/octet-stream" + else mimetypes.guess_type(f.name)[0] or "application/octet-stream" ) + if ctype.startswith("text/"): + ctype += "; charset=utf-8" self._send(200, ctype, f.read_bytes()) return try: diff --git a/src/static/console.html b/src/static/console.html new file mode 100644 index 0000000..0ebf3aa --- /dev/null +++ b/src/static/console.html @@ -0,0 +1,1376 @@ + + + + + + Ping River Monitor · Chiang Mai water levels and flood outlook + + + + + + + + + + + + + + +
+
+ +
Ping River MonitorChiang Mai · Northern Thailand
+
+ +
+
+
+ + +
+ + +
+
+ +
+
+
+

Gauges

+ +
+ + + +
+
+
Loading gauges…
+
+ Normal + Within 0.5 m + Warning + Danger + No data +
+
+ +
+
+
+ + +
+
+
+ Ping River + Tributaries + Gauge · colour = status +
+ + +
+

+
+ + +
+ + + + +
+ + + + + diff --git a/src/static/fonts/README.md b/src/static/fonts/README.md new file mode 100644 index 0000000..b53835e --- /dev/null +++ b/src/static/fonts/README.md @@ -0,0 +1,13 @@ +# Fonts + +Self-hosted so the dashboard makes no request to Google. Both fonts are under the +SIL Open Font License 1.1 (`*-OFL.txt` next to them). + +| File | Font | Subset | +|---|---|---| +| `inter-latin.woff2` | Inter (variable, weight 400–700), | Latin | +| `noto-sans-thai-thai.woff2` | Noto Sans Thai (variable, weight 400–700), | Thai | + +Both files are Google Fonts' woff2 subsets (`fonts.googleapis.com/css2?family=Inter:wght@400..700` +and `family=Noto+Sans+Thai:wght@400..700`, fetched with a woff2-capable user agent). +The `unicode-range` of each `@font-face` in `console.html` matches its subset. diff --git a/src/static/fonts/inter-OFL.txt b/src/static/fonts/inter-OFL.txt new file mode 100644 index 0000000..21f6aff --- /dev/null +++ b/src/static/fonts/inter-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/static/fonts/inter-latin.woff2 b/src/static/fonts/inter-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d15208de03cd1ad7c5199f0a0ce915fe841e4722 GIT binary patch literal 48256 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∾Na#*TBTU(!jF?9zmR-!C*+RdvGrd0&{`| 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 DR5W$` literal 0 HcmV?d00001 diff --git a/tests/test_console.py b/tests/test_console.py new file mode 100644 index 0000000..4af7206 --- /dev/null +++ b/tests/test_console.py @@ -0,0 +1,100 @@ +"""The console dashboard (src/static/console.html, docs/DASHBOARD_REDESIGN.md). + +Served at /static/console.html while it is built; it replaces dashboard.html +once it covers every feature. The rules are the dashboard's: every fetched +path is routed, every string has EN and TH, no emoji in the interface. +""" + +import re +from pathlib import Path + +STATIC = Path(__file__).parents[1] / "src" / "static" +CONSOLE = STATIC / "console.html" +ROUTER = Path(__file__).parents[1] / "rust" / "collector" / "src" / "web" / "mod.rs" + + +def _html() -> str: + return CONSOLE.read_text(encoding="utf-8") + + +def _body(html: str) -> str: + return html[html.index("") : html.index("