NYC Hazard Historian

Data flow

Eight public sources, five pipeline stages, one archive. Open any stage to see what it does to the data and the rule it keeps. The counts below are read from the current build, not written by hand.

Events
Source rows
Coverage
Built

Sources

Federal and city records, each fetched from its publisher. Radar is the exception: it is never downloaded, and is read live by the browser when a map is opened.

pipeline/

Five stages, deliberately separate, so a change to one does not re-run the others. Python standard library only.

00_config.py

Every tunable value: source URLs and dataset versions, the zone and county mapping, the hazard vocabulary, validation thresholds, unit conversions and the hand-declared event merges. Nothing downstream hard-codes a URL or a cutoff.

    Outputs

    Staged first, then moved into place in one step, so a failed build leaves the live files untouched.

    The site

    Static HTML, CSS and JavaScript. No framework, no bundler. The whole explorer works over one index file, which is why filtering keeps up with typing.

    Every stage, source and rule on this page is defined in one place: the FLOW block in docs/js/dataflow.js. The static diagram in the README is generated from the matching CONFIG block in tools/make_dataflow_diagram.py.