
Demand Map
React 19, TypeScript, Vite, Leaflet, Tailwind CSS, Radix UI, Python pipeline, GitHub Actions, static hosting / CDN
The DSS Demand Map is a static, data-driven web application that visualises social and housing-related demand across English local authorities. Users explore 296 LAD boundaries on a Leaflet map with a dashboard-style UI: layered metrics, legends, postcode search (via Postcodes.io), and detail panels for each area. The app loads pre-built JSON from a CDN and GeoJSON for boundaries—no custom backend—so updates ship by refreshing datasets, not by redeploying database logic. A Python pipeline and GitHub Actions merge official statistics (ONS, IMD, LHA, DWP Stat-Xplore benefits, and extensions such as MoJ probation and NHS-style fields where present) into one file consumed by the map. The same map ships inside the Allianz Housing iOS app (link below).
What I built
Multi-layer analysis: toggle and blend composite demand score, investment framing, Housing Benefit / Universal Credit / PIP, demographics (children / elderly), house prices vs demand, IMD deprivation, LHA shortfall, and sector-specific signals (e.g. prison/probation and NHS pressure metrics in the data model).
Product UX: command-centre layout—sidebar, map canvas, modals and detail panels—with attention to mobile behaviour and postcode search flows.
Engineering: Vite + React + TypeScript, Tailwind and Radix-style UI primitives, and a deliberate split between batch data build and read-only client—suitable for embedding (e.g. WKWebView) or standalone hosting on S3 / CloudFront.
Reproducible data refresh: documented pipeline for quarterly updates; upstream API credentials run in CI, not in the browser.
Tech & stack
Screenshots
Desktop: map-first analytics (layers, Postcodes.io hit, LAD detail, cited sources). Mobile: flows that are not in the desktop strip above — compact search sheet, scrollable layer list, postcode result card, authority search, and zoomed-in map.








