Commit graph

5 commits

Author SHA1 Message Date
Daniel Michelberger
64c5139d71 feat: GPX-Parser mit Länge, Höhenmetern und Streckenvereinfachung
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 17:19:02 +02:00
Daniel Michelberger
f316058367 fix: Deployment reparieren — adapter-node und Node-Anforderung festschreiben
Das Coolify-Deployment scheiterte an zwei Stellen:

1. npm ci brach mit EBADENGINE ab. Coolify baute mit Node 22.11.0, vite und
   @sveltejs/vite-plugin-svelte verlangen aber >=22.12; engine-strict=true
   aus der .npmrc macht daraus einen Abbruch statt einer Warnung. Das
   engines-Feld schreibt die Anforderung jetzt im Repo fest, statt sie einer
   Einstellung in der Coolify-UI zu überlassen.

2. Selbst nach erfolgreichem npm ci wäre der Start gescheitert: adapter-auto
   erkennt Coolify nicht ("Could not detect a supported production
   environment") und erzeugt gar kein build/ — der Startbefehl "node build"
   findet dann nichts. Jetzt adapter-node, adapter-auto entfällt.

Verifiziert in einer frischen Kopie ohne node_modules, mit derselben Kette
wie im Deployment: npm ci läuft durch, npm run build erzeugt build/index.js,
node build antwortet auf / und /login mit HTTP 200.

Dabei fiel ein dritter Punkt auf, der keine Code-Änderung braucht, aber im
Deployment gesetzt sein muss: PUBLIC_PB_URL wird zur Buildzeit eingesetzt.
Fehlt sie, bricht der Build mit "PUBLIC_PB_URL is not exported by
virtual:env/static/public" ab. Steht jetzt in frontend/README.md und CLAUDE.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 14:52:00 +02:00
Daniel Michelberger
2540666e1a feat: Typen aus der Schema-Migration erzeugen statt aus einer Instanz
npm run generate-pocketbase-types liest das Collections-Array jetzt direkt
aus backend/pb_migrations/ (scripts/schema-to-json.mjs) und speist es über
pocketbase-typegen --json ein. Keine laufende Instanz, kein Token, kein
Netzwerkzugriff mehr nötig.

Damit stammen Schema und Typen aus derselben versionierten Quelle und können
nicht auseinanderlaufen. Vorher zeigten sie auf eine Remote-Instanz, deren
Stand niemand garantieren konnte — nach dem Neu-Deployment lieferte sie
prompt Typen ohne die fachlichen Collections.

frontend/.env enthält dadurch nur noch PUBLIC_PB_URL. PB_TYPEGEN_URL und
PB_TYPEGEN_TOKEN entfallen (letztere wurde ohnehin nirgends gelesen),
PB_SUPERUSER_TOKEN wird nicht mehr gebraucht. Die Datei enthält damit kein
Geheimnis mehr.

Verifiziert: ohne .env, ohne Token und ohne laufende Instanz entstehen alle
sechs Collections, svelte-check meldet 0 Fehler und 0 Warnungen.

Die System-Collections (_superusers, _mfas, ...) fehlen in den Typen, weil
sie bewusst nicht in der Migration stehen. Die Anwendung verwendet sie nicht.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 14:20:15 +02:00
Daniel Michelberger
5658ef7bcc chore: veraltete Scripts unter frontend/scripts entfernen
Alle vier Scripts setzten auf einem Schema auf, das es nicht mehr gibt:

- seed-test-data.ts schrieb in stages und results (heute: runs und times)
  und kannte users.role, riders.email/birthday sowie events.created_by/
  timekeepers -- alles nicht mehr vorhanden. Teams kannte es gar nicht,
  ohne Team-Zuordnung greifen sämtliche API-Rules und die Daten wären
  unsichtbar geblieben.
- migrate-schema.ts und migrate-teams.ts waren Einmal-Migrationen. Ihr
  Ergebnis steckt längst im Schema (events.status, riders.number, times.
  correction, die teams-Collection, die team-Felder). Ein erneuter Lauf
  gegen die produktive Instanz wäre bestenfalls wirkungslos.
- test-token.ts war ein Wegwerf-Prüfscript für den Superuser-Token.

Das Schema ist jetzt in backend/pb_migrations/ versioniert; das ist der
Weg für Änderungen. tsx entfällt als Abhängigkeit, es wurde nur von
diesen Scripts benutzt.

PB_SUPERUSER_TOKEN bleibt in .env -- generate-pocketbase-types braucht ihn.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 13:42:24 +02:00
Daniel Michelberger
1061a8b9ad chore: Repo-Struktur mit frontend/ und backend/ aufsetzen
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>
2026-08-06 13:16:43 +02:00