UrbanLab is a Romanian NGO protecting the built and natural heritage of the Jiu Valley. For an AFCN co-financed project, the valley's heritage buildings had to become explorable online, on a map their own non-technical team could keep growing for years without calling a developer.
What I built
A custom SVG map of six towns with hand-built pins, tap targets and detail cards. No map library.
Pins driven by data. Each building carries its own X and Y coordinates as CMS fields, and the map places the pin from those values.
A detail card that opens on tap with the building's photo, its summary and the way into its full page, read from the same CMS entry as the pin.
One building template with a lead gallery, the history, a masonry photo archive and the 3D viewer, filled by the CMS for every building.
3D scans in the browser. glTF models embedded with model-viewer, so a visitor can turn a building around on desktop or phone.
City filtering, a bottom sheet on mobile so one thumb reaches everything.
The hard part
A heritage archive is never finished, so the brief was really a system. Adding a building had to stay a content job. Names, histories, photo sets, 3D models and the pin's position on the map all live in CMS collections, and the map just renders what it finds there. Placing a new pin means typing two numbers, not editing code.
Result
Live at urbanlab.ro/harta. A new building is a CMS entry with photos, a history and two coordinates, and it appears on the map with its own page, no developer in the loop.
What I would change
Hand-picking X and Y coordinates per pin works, but it is trial and error. Next time I would add a click-to-copy coordinate helper on the map itself, so an editor could position a pin in one click.