Back to portfolio

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

01

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).

02

Product UX: command-centre layout—sidebar, map canvas, modals and detail panels—with attention to mobile behaviour and postcode search flows.

03

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.

04

Reproducible data refresh: documented pipeline for quarterly updates; upstream API credentials run in CI, not in the browser.

Tech & stack

React 19TypeScriptViteLeafletTailwind CSSRadix UIPythonGitHub ActionsPostcodes.ioStatic hostingCDN

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.

Demand Map, investment opportunity layer over England LAD boundaries
Investment opportunity layer — blend metrics to compare local authorities.
Demand Map, postcode search with highlighted result on the map
Postcode search (Postcodes.io) — jump straight to an area on the map.
Demand Map, detail panel with metrics for a selected local authority
Detail panel — drill into one LAD with dashboard-style metrics.
Demand Map, verified data sources panel listing ONS, DWP, IMD, LHA and related feeds
Verified data sources — transparent provenance for the merged dataset.
Demand Map on mobile, search and postcode entry sheet over the map
Mobile — search sheet: jump between postcode, coordinates, or authority search without the wide desktop chrome.
Demand Map on mobile, scrollable metrics and layer toggles list
Mobile — scrollable layer list: turn metrics on/off in a thumb-friendly stack (not shown in the desktop crop set).
Demand Map on mobile, postcode match card above the map
Mobile — Postcodes.io result card after lookup (compact layout vs desktop map-led view).
Demand Map on mobile, local authority name search suggestions
Mobile — authority search by name with inline suggestions (separate from the desktop LAD drill-in screenshots).
Demand Map on mobile, zoomed map framing dense boundaries
Mobile — zoomed map: read dense LAD boundaries on a narrow viewport.