Minitandem: eine Web-App, gebaut und betrieben mit KI-Agenten
Ein Verzeichnis von Familienangeboten im Kanton Freiburg. Von Alex Shamrai.
Worum es geht
Minitandem sammelt Angebote für Familien mit Kindern von 0 bis 6 Jahren im ganzen Kanton Freiburg, von Spielen und Natur bis Musik und Pferden. Eltern filtern nach Alter, Ort und Kategorie. Die Oberfläche gibt es auf Deutsch, Französisch und Englisch.
Schwierig ist nicht die Seite, sondern die Daten. Angebote ändern sich, und ein Sprachmodell erfindet leicht eine Antwort, wenn eine Quelle nichts dazu sagt.
Die Regel
Modelle lesen und schlagen vor. Code entscheidet und schreibt.
- Jede Angabe braucht ein wörtliches Zitat aus einer Quelle, die das Programm selbst abgerufen hat.
- Ein zweiter, unabhängiger Lauf prüft, ob das Zitat die Angabe wirklich stützt.
- Ein Entwurf darf sich nur auf geprüfte Angaben stützen. Ein weiterer Lauf genehmigt ihn.
- Was nicht belegt ist, bleibt «unbekannt».
- Nichts wird automatisch veröffentlicht. Das entscheide ich.
- Quelle abrufenProgramm
- Angabe mit ZitatSuch-Agent
- Bedeutung prüfenPrüf-Agent
- Entwurf und GenehmigungEditor- und Prüf-Agent
- Katalognur das Programm schreibt
Ein Beispiel: Eine falsche Angabe wird abgefangen
Aus der Demo im Repository. Sie läuft ohne Netz und ohne Modell, mit aufgezeichneten Antworten (npm run demo).
- Der Such-Agent liest die Seite einer Spielgruppe. Er findet «children aged 2 to 4 years» und schlägt ein Alter von 2 bis 4 Jahren vor. Aus «Registration is not needed» macht er «kostenlos».
- Der Prüf-Agent bestätigt das Alter. «Kostenlos» lehnt er ab: Das Zitat sagt nur, dass man sich nicht anmelden muss. Auf derselben Seite steht ein Beitrag von CHF 5 pro Familie und Besuch.
- Der Editor-Agent schreibt trotzdem «kostenlos» in seinen Entwurf. Das Programm weist den Entwurf ab, weil er sich auf eine abgelehnte Angabe stützt.
- Der zweite Entwurf enthält nur geprüfte Angaben: das Alter und dass ein Elternteil dabeibleibt. Er wird genehmigt. Der Preis bleibt «unbekannt», bis ihn ein Such-Agent mit einem Zitat belegt.
Zahlen
Stand 14. Oktober 2026.
- 295 Einträge im Katalog, 26 im Archiv
- alle 7 Bezirke des Kantons
- 462 Quellen
- 491 automatische Tests. Auf GitHub laufen sie bei jedem Push; 6 davon werden dort übersprungen.
- bewusst «unbekannt» gelassen: die Sprache bei 263 Einträgen, der Preis bei 189, das Mindestalter bei 199
Pipeline, 2. bis 13. Oktober 2026
Die meisten Modell-Läufe (197 von 205) gingen noch über die frühere Route mit OpenAI Codex (2. und 3. Oktober), 8 über Claude. Die Regeln im Code sind für beide gleich.
- 205 Modell-Läufe: 72 Suche, 100 Prüfung, 33 Editor
- 1219 vorgeschlagene Angaben. Bei 46 fand das Programm das Zitat nicht wörtlich in der Quelle, bei 33 stammte es nicht von einer offiziellen Seite des Angebots. Diese Angaben wurden auf «unbekannt» gesetzt.
- 1078 Urteile des Prüf-Agenten: 567 bestätigt, 123 abgelehnt, 388 «braucht eine andere Quelle»
- Entwürfe des Editor-Agenten: 20 genehmigt und übernommen, 5 wies das Programm ab, 5 lehnte der Prüf-Agent ab
- 12 Antworten verletzten die Regeln (Schema oder Belege) und wurden verworfen, darunter die 5 abgewiesenen Entwürfe
- Der Circuit Breaker hat sich nie geöffnet; einmal musste ein Mensch eingreifen.
Betrieb
- Die Seite läuft in Docker-Containern auf einem Server in der Schweiz (Infomaniak Public Cloud), mit HTTPS über Caddy. Auch diese Fallstudie kommt von dort.
- Jede Nacht wird gesichert. Die Wiederherstellung wurde am 14. Oktober 2026 auf dem laufenden Server geübt.
- Alle fünf Minuten prüft der Server, ob die Seite antwortet. Wenn nicht, kommt eine E-Mail.
- Die Redaktions-Pipeline läuft nicht auf dem Server, sondern auf meinem Rechner.
Was ich mache und was die Agenten machen
Den Code schreiben KI-Agenten: Claude Code, früher Codex. Meine Arbeit:
- Ich lege fest, was das Produkt tut und was nicht. Zum Beispiel: keine Namen von Privatpersonen im Katalog.
- Ich lege die Anforderungen und Regeln fest. Die Agenten schreiben daraus die Specs, ich gebe sie frei.
- Ich prüfe die Ergebnisse: Die Agenten führen Tests und Audits durch, ich lese ihre Berichte und sehe mir die laufende Seite selbst an.
- Ich entscheide, was veröffentlicht wird. Domain und Server habe ich ausgewählt und bezahlt. Agenten haben beides nach meiner Freigabe eingerichtet.
Code lese ich noch nicht flüssig. Die Abläufe kann ich erklären: Die vier wichtigsten Wege durch den Code stehen in docs/architektur.md.
Grenzen
- Die Texte im Katalog sind auf Englisch. Deutsch und Französisch gibt es nur für die Oberfläche.
- Viele Felder sind «unbekannt». Das ist Absicht, aber für Eltern weniger bequem.
- Fällt der ganze Server aus, kann er keine E-Mail mehr schicken. Eine Prüfung von aussen fehlt noch.
- Den Abgleich zwischen Geräten gibt es öffentlich nur für eine Demo-Familie.
Kontakt
Alex Shamrai · hello@minitandem.ch · github.com/avsomg