independent Danube monitor · official sources

Live

Official sources, independent interpretation.

Dunărea collects what official institutions publish about the Danube, from Ingolstadt to Sulina: gauges from AFDJ, INHGA, PEGELONLINE, RHMZ, and Hydroinfo, the GloFAS model and the ERA5 reanalysis, satellite altimetry, the navigation network, the energy dispatcher, and the operator's own reports. Thirty-three sources feed a provenance register in which every value is labelled measured, modelled, calculated by the product, or not published, and two delivery paths for the same reading never count as two confirmations. The verdicts at the top of each page come from explicit rules, not from an AI.

I defined the product, checked the sources, wrote the deterministic detectors and the methodology dossier, and run the public deployment.

dunarea.info
stagelive · v1.1.1 · dunarea.info
sources33 in the provenance register · 7 public views
method14 deterministic detectors · GloFAS reference 1997–2025
buildPython standard library · zero dependencies · 161 tests

Project images

NowThe home view: the source strip, then a synthesis composed from explicit rules, with the model's low-water state and the cross-checks stated separately.
Romania and CernavodăThe reality test for Romania: the hydrological phenomenon, whether it is unprecedented in the model, and whether it is a nationwide crisis, each with its own limit.
Missing dataThe public register of data that would help but is not yet comparably available, with what each entry needs and what already exists.
On a phoneThe same home view at 390 pixels: sources, view switcher, and synthesis in one column.

What we are building

A source for every value

Every number carries its origin: measured at a gauge, modelled by GloFAS, reanalysed by ERA5, seen from orbit, or calculated here. The provenance register lists 33 sources with their kind and family, and sources from the same provider count once, so three routes to INHGA data are one piece of evidence, not three.

Seven views, separate conclusions

Now, Romania and Cernavodă, basin and history, cross-checks and sources, Iron Gates and delta, options, and missing data. The Romania page keeps the river's state, the confirmed effects at CNE Cernavodă, and the state of the energy system apart instead of merging them into one alarm.

What it refuses to do

It never converts a stage reading into discharge, never converts gauge centimetres into sea-level metres to compare against the Cernavodă intake thresholds, never turns fresh snow into water equivalent, never separates natural from regulated flow, and never publishes an accusation against a country, operator, or institution.

The missing-data register

/date-lipsa separates a missing link from a source that is merely identified. It shows which absent data could change a conclusion, why, and which official sources were already checked; a catalogue entry or a link is not an observation.

How it works

A model is not a measurement

GloFAS gives hydrological context, and today's value is compared with the history of the same model, not with a gauge. The reference is honest about its size: 1991 was requested, the provider delivers from 1997, so every statistic states an effective window of 1997–2025, 29 years, one short of the 30 that standard climate normals require.

Nothing to trust but the standard library

The server is pure Python with zero third-party dependencies, so the supply-chain surface is nil. It listens on loopback only, answers GET and HEAD and nothing else, sends a Content Security Policy without unsafe-inline, and pins the vendored ECharts with subresource integrity. Third-party data is treated as hostile and escaped at the fetch boundary.

AI is opt-in, manual, and narrative only

The synthesis at the head of every page is deterministic. An optional LLM layer can be run by hand from the command line and produces an auditable narrative with the prompt, digest, and model on record. It never runs on refresh, and the public route cannot trigger a paid call.