A public-facing explorer for a data-driven typology of ~11k global cities. The landing page introduces the four city archetypes and why they matter; the explorer lets you search, filter, and compare cities on a map or in an embedding view to spot peers, gaps, and learning opportunities.
Single-page app built with Vite + React (React 19). Landing map uses MapLibre GL; explorer uses Plotly for both the map and embedding visualizations. Everything is rendered from the static public/cities.json, and the production image serves the bundle via Nginx with Traefik-ready docker compose config.
npm install # Node 20+ recommended
npm run dev # start Vite dev serverOpen the printed localhost URL. Edit or replace public/cities.json to change the dataset.
npm run build # outputs to dist/
npm run preview # serve the production build locally- Local:
docker compose -f docker-compose-local.yml up --build -dthen visithttp://localhost:8080. - Production:
docker compose up --build -dthen visithttps://cities-explorer.eubucco.com/. Compose config contains labels for Traefik routing. Traefik is deployed separately.d
- Linting:
npm run lint. - If the map on the landing page does not render, ensure WebGL is available/enabled in your browser.