Diese Adresse führte bis September 2026 eine Anwendung: Zeitnahme, Kader,
Trails, Renntage. Die heißt jetzt Kurbeler, liegt unter kurbeler.de und führt
den Stammtisch als eines von mehreren Teams. Was hier bleibt, ist die Adresse
— und die soll niemanden ins Leere laufen lassen.
Übrig sind drei vorgerenderte Seiten: Wappen, ein Satz, ein Knopf, dazu
Impressum und Datenschutz. Kein Konto, keine Datenbank, kein Formular, keine
Cookies, keine Schriften oder Karten von fremden Servern. Die
Datenschutzerklärung ist deshalb kurz und nicht die von Kurbeler mit
Streichungen — eine Erklärung, die von Konten und Benachrichtigungen spricht,
wäre auf dieser Seite schlicht falsch.
`adapter-static` statt `adapter-node`, ausgeliefert von nginx: Für drei Seiten
ohne eine dynamische Angabe einen JavaScript-Prozess laufen zu lassen, der auf
Anfragen wartet, um jedes Mal dieselbe Datei herauszugeben, wäre Beschäftigung
ohne Arbeit. Von den Abhängigkeiten bleiben die zwölf, die zum Bauen nötig
sind; zur Laufzeit keine einzige. Das Bild ist damit 492 kB statt elf
Megabyte — zwei alte Grafiken von je 2,4 MB lagen ungenutzt in `static/`.
Das Backend bleibt unangetastet. Es wird vom Wegweiser nicht benutzt, aber
darin liegen die Daten des alten Deployments.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LTw6xVYgjMy9AQtfs1Gdyu
Ohne Service Worker war "offline" nur so lange wahr, wie der Tab offen
blieb: Ein Neuladen an der Stage endete in einer weissen Seite — samt
den Zeiten, die noch im Ausgang lagen.
Drei Sorten Anfragen, drei Strategien. Was zum Build gehoert, liegt
unter seiner Versions-URL und aendert sich nie: Cache zuerst.
Seitenaufrufe und lesende Anfragen an PocketBase: Netz zuerst, Antwort
merken, ohne Netz die zuletzt gesehene Fassung — nur so steht nach einem
Neuladen im Funkloch ueberhaupt ein Kader da, gegen den sich stoppen
laesst.
Schreibende Anfragen werden nie aus dem Cache beantwortet: Ein Start,
der aus dem Cache "gelingt", waere eine Zeit, die es nicht gibt. Dafuer
ist der Ausgang zustaendig. Und /api/clock ist ausgenommen — eine
gemerkte Uhrzeit ist das Gegenteil von dem, wozu die Route da ist.
Beim Abmelden raeumt der Worker seinen API-Vorrat weg. Sonst stuenden
auf einem geteilten Geraet die Daten des vorigen Nutzers offline weiter
da.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P32KoesVtABd6xWsqMKzhr
Die SvelteKit-App liegt unter frontend/, das Backend unter backend/ als
eigenständige PocketBase-Instanz mit Dockerfile, docker-compose und
versioniertem Schema.
- PocketBase-URL über PUBLIC_PB_URL konfigurierbar, Default bleibt die
produktive Instanz https://api.stammtisch-hersbruck.de
- Schema als Snapshot-Migration der sechs fachlichen Collections
(users, teams, events, runs, riders, times), abgezogen von der
produktiven Instanz. Verifiziert: ein Erststart gegen leere pb_data
legt alle sechs an, Felder und API-Rules stimmen überein.
- pb_data und pb_migrations als Bind-Mounts, damit Daten persistieren und
im Admin-UI erzeugte Migrationen im Repo landen
- Veraltete Dokumentation entfernt: pocketbase_schema.json nannte
Collections (stages, results, organizers), die es nicht gibt
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>