Vienna Living Map Architektur
Wie es funktioniert

Eine ruhige App,
eine Daten-Fabrik dahinter.

Vorne fühlt sich Vienna Living Map an wie eine einzige Suche und eine Karte. Dahinter arbeitet eine Kette aus Engines, Cron-Jobs und Prüfungen — die KI übersetzt nur, gerankt wird deterministisch, und für jeden Baustein gibt es einen ehrlichen Fallback. Diese Seite ist die begehbare Karte davon.

Tippen auf einen Baustein springt zur Tiefe · hell/dunkel
🔎
01

Suche — ein Feld, kein Modus

Eine universelle Suche erkennt die Absicht selbst — der Nutzer wählt nie „Adress-" oder „KI-Suche".

AdresseWunsch/LifestyleRanking BudgetÄhnlichkeitNähe
↩︎Fallback: unklarer Text wird als Wunsch behandelt; ein leerer Zustand bietet Beispiele statt einer Fehlermeldung.
🗣
02

KI — nur Übersetzer, nie Entscheider

Gemini läuft ausschließlich serverseitig und macht zwei Dinge: Wünsche → Gewichtungen, Fakten → Prosa. Es rankt nie und erfindet nie einen Score.

Kostendeckel

Schema + Cache

Erzwungenes JSON-Schema, kleine Token-Caps, thinkingBudget 0 und ein Cache je ~100 m-Zelle halten jeden Aufruf winzig.

Ton-Gate

Banned-Words

Ein Build-Gate verwirft Floskeln („pulsiert", „im Herzen Wiens") und lässt neu generieren.

Privacy

Nur gerundete Koordinaten

Die genaue Adresse verlässt den Server-Kontext nie — nur Grätzl-Name + gerundete Koordinaten gehen an KI/Bild.

↩︎Fallback: ist die KI nicht erreichbar, zeigt VLM sofort den deterministischen Template-Text — die Seite bleibt vollständig nutzbar.
⚖️
03

Score-Engine — die Quelle der Wahrheit

Deterministisch, nachvollziehbar, per Golden-Tests eingefroren. Sechs Dimensionen × sechs Perspektiven — dieselben Daten, je nach Blick anders gewichtet.

6 Dimensionen

Sicherheit · Öffis · Grünflächen · Ruhe · Preis-Leistung · Urbanität — für Adresse, Grätzl und Bezirk mit derselben Formel.

6 Perspektiven

Für die meisten · Familie · Urban · Homeoffice · Preis-Leistung · Genuss & Kultur. Perspektive gewichtet nur, sie erfindet nichts.

🔒Sicherung: jede Änderung an Scoring/Fingerprint braucht zuerst einen Golden-Test — die Zahlen können nicht unbemerkt driften.
🗺
04

Karte — eigene Infrastruktur, kein Google

MapLibre GL mit selbst gebauten Vektor-Tiles (PMTiles, Wien-Extract) auf Cloudflare R2 und einem eigenen warm-stone-Stil.

Tiles

PMTiles auf R2

Kein externer Kartendienst, keine fremden Tracker in der Karte.

Ebenen

13 Daten-Layer

Score-Choropleth, Bäume, Sommerhitze, Öffis, Cafés, Radwege … lazy geladen, GPU-gerendert.

Licht

3D-Vignette

Reale Gebäudehöhen + Bäume + Gelände; die Sonne wandert, Schatten wandern mit.

📖
05

Story-Engine — „wie lebt es sich dort"

Aus den Fakten wird Sprache, die klingt wie eine ortskundige Wiener Freundin — persona-bewusst, mit Pflicht-Trade-off, nie erfunden.

Precompute

Grätzl × Perspektive

Alles Endliche wird einmal erzeugt und als stories.json gespeichert — konsistent in PDF & Vergleich, ohne Laufzeitkosten.

On-demand

Adress-Story

Beliebige Adressen bekommen ihre Prosa live (dann gecacht); der deterministische Text erscheint zuerst.

🏭
06

Daten-Fabrik — Precompute statt Runtime

~15 Build-Skripte + monatliche Cron-Jobs (GitHub Actions) ziehen offene Quellen und legen sie als statische, versionierte Dateien ab. Wo der Raum endlich ist, wird vorgerechnet — nicht zur Laufzeit.

Monatlich

Data-Factory-Cron

History-Snapshots (insert-only), Preise, Wohnstatistik, Klima, dann Regeneration von SEO-Seiten, Wissens-Index & Pressekit-Zahlen.

Quellen

Alle offen

Stadt Wien OGD, OpenStreetMap/Overpass, Wiener Linien, GeoSphere, Statistik Austria — alle zitiert.

Konsistenz

Nie Drift

Dieselben Skripte laufen im Cloudflare-Build (prebuild) — Produktion und committete Dateien bleiben gleich.

🛡Sicherung: jeder Job hat ein Plausibilitäts-Gate und schreibt insert-only — eine schlechte API-Antwort kann Live-Daten nie überschreiben.
🖼
07

Bild-Pipeline — echtes Foto, kein Fantasie-Wien

Moodboards entstehen aus einem echten, frei lizenzierten Referenzfoto der Gegend — nur der Stil wird übertragen, die Geometrie bleibt.

📷 ReferenzfotoWikimedia · Openverse 🎨 RestyleGemini, nur Stil 👁 Vision-QAlogische Brüche raus ⚡ CacheCloudflare KV · global 1×
↩︎Fallback: fehlt ein Foto oder scheitert die QA, zeigt VLM eine ehrliche generative Farbkomposition — nie ein erfundenes Wien. Ein wöchentlicher Audit heilt sich selbst.
🧭
08

Entscheiden — Vergleich, PDF, Tagebuch

Vergleich

Wer gewinnt wo

Bis zu vier Orte gegenübergestellt — Unterschiede statt Zahlenwüste.

PDF-Engine

Digitales Exposé

Ein A4-Exposé, das erst nach dem Font-Laden vermessen und auf die Seite skaliert wird — warm, kein UI-Screenshot.

Tagebuch

Local-first

Favoriten, „besichtigt / passt nicht", Notizen — alles nur am Gerät, ohne Konto.

09

Qualität & Fallbacks — überall

Ehrlichkeit ist keine Haltung, sondern Infrastruktur: Prüfungen laufen automatisch, und jeder Baustein hat einen ehrlichen Rückfall.

Vor dem Merge

Golden-Tests

Scoring & Fingerprint sind eingefroren; ein Banned-Words-Gate hält den Ton ehrlich.

Nach jedem Deploy

Live-Smoke-Test

Ein Runner prüft die echte Seite: SEO-Seiten, Magazin-Prosa, Übersetzungen, Story-Voice.

Immer

Ehrliche Rückfälle

KI weg → Template. Foto weg → Gradient. Sinn fehlt → benannt, nie gefälscht (Sommerhitze = „modelliert, kein °C").

🔒
10

Privacy — local-first, cookieless

Es gibt schlicht keine Nutzerkonten und keine personenbezogene Datenbank.

🍪 kein Cookie-Banner (weil cookieless) 📍 Adresse bleibt am Gerät 📊 Aggregate mit k-Anonymität ≥ 5 👤 kein Konto, kein Tracking-Profil