Editorial single-page viewer for the City of Münster's 2026/2027
budget draft, built as an Astro v6 SPA with a 4-level zoomable
icicle (Produktbereich → Produktgruppe → Category → Breakdown).
Highlights:
- Multi-flow data layer over the official open-data CSVs
(Aufwendungen + Erträge, 2008–2028) with overlap reconciliation
across plan years.
- Year slider as a 21-year mini-histogram of both flows;
drag-to-scrub and click-to-jump, with bars morphing via CSS
transitions on SVG geometry attributes.
- Vertically centred icicle with year-outline rectangles framing
each year's relative budget size, à la Bostock's animated treemap.
- Headline "ausgibt / einnimmt" toggle; sidebar Aufwendungen/Erträge
rows double as flow toggles. Active flow in Aufwendungen-purple /
Erträge-orange (OKLCH).
- Click-to-zoom via path-keyed lookup with ZOOM_COL_BOUNDS that
reallocate the depth axis per zoom state. Zoomed item moves to the
sidebar; canvas shows its descendants only (no adjacent-block leaks).
- Sidebar shows path-specific Aufwendungen/Erträge/Saldo plus the
source-PDF Beschreibung; Erläuterungen behind a collapsed details.
- Build-time PDF extraction (scripts/extract-pg-sections.mjs) parses
68 Produktgruppen' Beschreibung + Erläuterungen sections from
Band 1, including 10 cells of structured Mio.-€ breakdowns
(Steuern, Transferaufwendungen, etc.) that drive the level-4 view.
- URL state sync for path, year, and flow via history.replaceState
so any zoom is shareable.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>