← Zurück zur Karte

Behind the Scenes

Eine Web-App für Flohmarkttermine mit nativer KI-Integration. Sprachmodelle extrahieren und aggregieren Daten aus heterogenen Quellen. Ihre Extraktionslogik bleibt auch bei Layoutänderungen stabil. LLM-basierte Agenten validieren Outlier und fehlerhafte Einträge, nehmen Anpassungen vor und prüfen Einträge auf Plausibilität.

Wie ein Markt auf die Karte kommt

01

Quelle

Veranstalter-Webseite, Stadt-Portal oder Vereinskalender. Jede Quelle hat ihren eigenen Aufbau und ihre eigenen Schreibweisen für Datum und Adresse.

↓
AI
02

Extraktion

Ein Sprachmodell liest die Seite und gibt strukturierte Einträge zurück: Titel, Datum, Adresse und Quelle. Ändert sich das Layout einer Quelle leicht, kommt der Scrape meist trotzdem durch. Größere Brüche fängt der Review-Schritt ab.

LLM OpenRouter
↓
03

Geocoding

Adressen werden über die offene OpenStreetMap-Datenbank zu Koordinaten aufgelöst. Findet sich eine Adresse nicht oder nur unscharf wieder, geht der Eintrag entsprechend markiert ins Review, statt blind auf der Karte zu landen.

↓
AI
04

Klassifikation und Review

Jeder Eintrag wird in Kategorien sortiert: vollständig, Adresse zu unspezifisch, ohne Koordinaten, außerhalb der Region, vermutliches Duplikat oder vom Anbieter zurückgezogen. Nur die vollständigen Einträge landen auf der Karte. Für die problematischen Fälle schlägt ein Agent eine konkrete Korrektur oder Löschung vor. Jede Schreib-Aktion wird im Admin-Bereich manuell bestätigt.

AI Agents Agno
↓
05

Diese Karte

Live, sortiert nach Datum, filterbar nach Region.

Engineering Principles

Observability

Transparente Modell-Interaktion

Jeder LLM-Aufruf wird mitsamt Input, Output, Latenz und Token-Verbrauch detailliert protokolliert. Dies ermöglicht eine lückenlose Traceability: Anomalien in der App oder auf der Karte lassen sich präzise auf die zugrunde liegenden Prompts und Modell-Antworten zurückführen.

→ Langfuse
Konfigurierbarkeit

Modell-Agnostisches Design

Die Modell-Logik ist von der Applikation entkoppelt und liegt in einer dedizierten Konfigurationsschicht. Ein Wechsel auf performantere oder kosteneffizientere Modelle erfolgt dort, ohne Anpassungen am Core-System.

→ OpenRouter
Automation

Decoupled Scheduling

Wiederkehrende Prozesse wie Data-Ingestion oder Geocoding sind in eine externe Automations-Layer ausgelagert. Diese kommuniziert zustandslos über die öffentliche API mit der App, was den Anwendungscode schlank hält und die Skalierbarkeit der Hintergrundprozesse erhöht.

→ Coolify Scheduled Tasks
Reversibilität

Versioniertes Audit-Log & State Recovery

Sämtliche manuellen Korrekturen und Löschvorgänge werden als Versionen mit Begründung und Diff-Historie (Vorher-/Nachher-Vergleich) gespeichert. Durch diesen Audit-Trail lassen sich Datensätze jederzeit konsistent und unter Beibehaltung ihrer ursprünglichen Identität (IDs) wiederherstellen.

→ Postgres

Stack

Python FastAPI Jinja2 Postgres Leaflet OpenStreetMap Coolify OpenRouter Agno Langfuse

Design im NeoBrutalism-Stil, inspiriert von retroui.dev