Integration surface
A water authority does not adopt a dashboard; it adopts something its existing SCADA, GIS or alerting stack can call. Every value this interface displays comes from these endpoints, so anything you can see here you can also pull into another system.
system
Liveness probe.
Which pipeline artefacts exist, plus the data policy. Lets a client degrade honestly instead of guessing.
Project configuration: AOI, sensor cascade, algorithm parameters.
events
Event index with state, severity, confidence and class.
The full water-event object: geometry, classification, anomaly statistics, indices, quality, temporal assessment, forecast, exposure, samples.
Background, event and per-region mean spectra with dispersion, difference, z-scores and per-band SNR.
Drift steps with particle positions, the wind series used, and the model's own limitations.
Field-sampling plan as GeoJSON. Add ?fmt=csv for a field-ready CSV.
Complete traceability record including source checksums.
layers
Available map layers with AOI bounds and the native grid.
Colour-mapped anomaly raster (PNG, transparent off-water).
Detected event polygons as GeoJSON, with class and confidence per region.
validation
Every experiment, including the ones that found no effect.
The five-second answer to "did 813 add measurable value?", with confidence intervals.
Multi-year Sentinel-2 monitoring record per zone.
assets
Operator assets and the supported asset taxonomy.
Register an operator asset. Body: {name, type, lon, lat, sensitivity?, notes?}.
docs
Documentation exposed to the Evidence drawer.
Response
Run any endpoint on the left to see its live response. Nothing is mocked: this is the same data the interface renders.
Reproducing every number from scratch
# 1. dependencies pip install -r requirements.txt # 2. hyperspectral scene (0.9 GB, CC-BY-4.0, no authentication) python scripts/fetch_tanager.py 20250601_104901_58_4001 # 3. multi-year Sentinel-2 baseline (~13 min, 1692 reads) python scripts/build_baseline.py --years 6 --max-cloud 15 # 4. Tanager <-> Sentinel-3 OLCI matchups python scripts/build_matchup.py # 5. experiments python experiments/validate_simulator.py python experiments/hyperspectral_ablation.py BLUEBAN_REGIME=hard python experiments/detectability_ablation.py BLUEBAN_REGIME=easy python experiments/detectability_ablation.py # 6. the event object and every map layer python scripts/build_demo_event.py # 7. serve uvicorn services.api.main:app --port 8813 cd apps/web && npm run dev