[10]
CITY 3D — CITY MAP
▓ TIER B · YEAR 2026 · STATUS: LIVE · LANGUAGES: TYPESCRIPT / PYTHON
3D map of Sopot: events, crowd heatmap, quests, gamification
[FIG. 1] MISSION
Full-stack 3D map of Sopot (React 18 + deck.gl / MapLibre GL front, FastAPI + async SQLAlchemy + Postgres 16 + Redis back). Toggleable layers: Facebook events (Apify), an hour-slider crowd heatmap, popular places (Google Places), photo hotspots (Wikimedia) and city quests. Gamification loop: check-in → hashtag → Instagram post → one-time discount code. A custom dual-sided plugin system (a module is just a folder, no central registry) with real→fallback→mock graceful degradation — spins up with one `docker compose up` and zero API keys.
[FIG. 2] ARCHITECTURE
hover a block to see its description
[FIG. 2A] THE CITY AT EVERY HOUR
BOTTOM = BEACH (PEAK 1 PM) · MIDDLE = CENTRE (PEAK 8 PM)
GRACEFUL DEGRADATION — CLICK TO CUT A SOURCE
→ /api/health: heatmapa: real · eventy: real · miejsca: real — the same Pydantic contract either way
[FIG. 3] CHALLENGES
[+][CH-01]
Run with zero API keys — deterministic per-module mocks + a fallback chain, identical Pydantic contract in real and mock mode.
[+][CH-02]
Extensibility with no central registry — backend module auto-loader and frontend `import.meta.glob`; a new module is a new folder.
[+][CH-03]
Fusing several geo APIs (Apify/FB, Google, Outscraper, Wikimedia) into one deck.gl layer model.
[FIG. 4] AI LAYER
3D map of Sopot: events, crowd heatmap, quests, gamification
[FIG. 5] GALLERY
SCREENSHOTS INCOMING — see SHOTS-WANTED