HydraIssues

HydraDistrict market atlas: NUTS 2 map interface for the #603 target markets
open feature Project: experiencenet Parent: #603 Reporter: 31 Aug 2026 18:31

Description

Turn the #603 target market research into a visual interface for experience and venue operators, and a GTM asset.

Working prototype (published artifact, all #603 data live in it): https://claude.ai/code/artifact/df33dc4a-3343-46a8-9fa9-9db81697fa32

Not mapchart.net

mapchart.net/europe-nuts2.html is a static image builder. You colour regions in their UI and download a PNG or SVG. Its terms allow commercial use under CC BY-SA 4.0 with a 'Created with mapchart.net' credit. That is fine for one slide, but it cannot be an interface: no live data binding, no click through to a dossier, and every refresh is manual work.

Use the same regions as data instead. Eurostat GISCO publishes the NUTS 2024 boundaries as GeoJSON, free with EuroGeographics attribution:

https://gisco-services.ec.europa.eu/distribution/v2/nuts/geojson/NUTS_RG_20M_2024_4326_LEVL_2.geojson

299 regions, 676 KB. Trimmed to mainland Europe and rounded to 2 decimals it is 276 regions and 164 KB, small enough to embed. Projected with Lambert azimuthal equal-area (ETRS89-LAEA), which is what Eurostat itself uses.

Data problems the map exposes

Drawing #603 on real NUTS 2 geometry forced three corrections. None are visible in a prose list.

  1. Four of the fifteen targets are NUTS 1, not NUTS 2. North Rhine-Westphalia (DEA) is 5 NUTS 2 regions, Bavaria (DE2) is 7, Baden-Wuerttemberg (DE1) is 4, and Flanders (BE2) is 5 provinces (BE21-BE25). The 15 named markets paint 32 NUTS 2 regions. #603 ranks Baden-Wuerttemberg at tier 3 purely because of ZKM, which is in DE12 Karlsruhe alone, so tiering the whole Land overstates the target by four regions.

  2. South Holland is NL36, not NL33. Eurostat renumbered it. Any list carrying NL33 will not join against current NUTS data.

  3. Four researched markets carry no tier. North Rhine-Westphalia, Midi-Pyrenees, Silesia and Prague are written up in #603 but do not appear in its priority list. They need a tier or they should be dropped. The prototype shows them in a separate neutral colour so the gap is visible.

What the prototype does

  • Choropleth of the 32 target NUTS 2 regions on a sequential tier ramp, with the rest of Europe as context.
  • Click or keyboard select a region to zoom to that market and open a dossier: NUTS codes, tier, and every candidate city with its #603 rationale and visitor figures.
  • 47 candidate cities, 3 live venues (Tongeren, Sint-Niklaas, Rupelmonde), 2 Hydra districts (bxl1, eu-nbg1) with an optional 750 km reach ring.
  • Each city shows great circle distance to its nearest district, the same measure hydradistrict already computes at GET /api/v1/nearest. Farthest candidate is Helsinki at 1480 km.
  • Tier and layer filters, light and dark themes, no external data fetches.

Proposed work

hydradistrict today models infrastructure only: District{id,name,location,lat,lon,provider,services}, 6 entries, all compute locations. Markets are a second, different thing. Suggested split:

  • Add a Market entity to the YAML store: id, name, country, nuts_level, nuts_ids[], tier, note, cities[]{name,lat,lon,rationale,stat,venue_id}. Same store pattern as District, no database, per the repo's constraints.
  • GET/POST/PUT/DELETE /api/v1/markets and /api/v1/markets/{id}, matching the existing district handlers.
  • GET /api/v1/markets/{id}/coverage: reuse the haversine in internal/api/handlers.go to return nearest district and distance per city.
  • Serve the atlas at /atlas from the existing http server, geometry as a static asset. Note the repo rule against go:embed for content, so ship the GeoJSON on disk and COPY it in the image.
  • Replace the seeded venue list with the live hydravenues feed. The prototype only carries the three venues named in #603; cloud-seven, nerdland, ad6 and mobile-kit are not placed because I had no confirmed coordinates.

Open decisions:

  • Tier the four untiered markets, or drop them.
  • Confirm whether Baden-Wuerttemberg, Bavaria and North Rhine-Westphalia should be narrowed to specific NUTS 2 regions rather than whole Laender.
  • Whether the atlas belongs in hydradistrict or in hydravenues, given the audience is venue and experience operators.

Region boundaries (C) EuroGeographics. Visitor figures carried over from #603, checked there on 2026-08-30.

Sub-issues (3)

open #752 hydratam: give candidate cities a Sources list for accumulating evidence citations
open #751 hydratam: public atlas + an iamnim-gated layer for dealroom-derived market signal
closed #620 [DONE] Scaffold hydratam and deploy as a scale: LIVE at hydratam.experiencenet.com