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
Frueher lag beides in den Einstellungen und ein blasses Verzeichnis
zusaetzlich unter "Fahrer". Wer einen Fahrer anlegen wollte, landete
erst im Verzeichnis, dann in den Einstellungen. Jetzt gibt es einen Ort,
und die Verwaltungsknoepfe stehen an den Zeilen, zu denen sie gehoeren.
Der Einladungslink sitzt im Kopf der Seite statt in einer eigenen
Section; die ausgegebenen Links stehen mit im Dialog, weil sie sonst mit
der Section auch das Kopieren und das Zuruecknehmen verloren haetten.
Die Adminrolle wandert aus der Tabellenzeile in den Personendialog. Ein
Knopf, der ohne Rueckfrage Rechte vergibt, gehoert nicht neben die Icons
fuers Entfernen und Loeschen. Der Bearbeiten-Knopf steht dafuer an jeder
Zeile, auch an Konten ohne Fahrer — sonst waere deren Rolle nirgends
mehr erreichbar.
Die Liste "Meine Teams" entfaellt: Wechseln und Anlegen stehen im
Submenue am Menuepunkt Team. Verlassen gilt nur dem aktiven Team und
steht deshalb jetzt im Kopf.
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>