From 436ea4f4a508c6d731752b1bdf7742806444f3aa Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 4 Oct 2026 11:02:38 +0000 Subject: [PATCH] docs: README und Appwrite-Console-Anleitung an den Ist-Stand angleichen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Endpoint-Standard ${origin}/v1, echte Projekt-ID im Traefik-Header, Console- Einstellungen als Soll-Stand statt Tatsache, Test-Befehle je mit Verzeichnis; Projekt-ID nicht mehr "aircard", Auth-/Dienste-Schritte als optionale Härtung. Co-Authored-By: Claude Opus 5.5 --- README.md | 33 +++++++++++++++++++++++---------- docs/appwrite-console.md | 23 ++++++++++++++--------- web/src/vite-env.d.ts | 2 +- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 3a85366..fec3bb7 100644 --- a/README.md +++ b/README.md @@ -22,15 +22,29 @@ npm ci npm run dev # Entwicklungsserver http://localhost:5173 ``` -Login und Speichern brauchen die Appwrite-Route. Der lokale Host wird nur dann erkannt, wenn die Web-Plattform `localhost` in der Appwrite-Console eingetragen ist (unter Projekt → Overview → Integrations → Platforms). Die Umgebungsvariablen `VITE_APPWRITE_ENDPOINT` und `VITE_APPWRITE_PROJECT_ID` müssen für die lokale Entwicklung verfügbar sein (Standard: `https://appwrite.webklar.com/v1` und `6ac2130a00289343d6d5`). +Login und Speichern brauchen die Appwrite-API. Ohne Einstellung gilt als Endpoint `${location.origin}/v1` (der Entwicklungsserver hat keinen Proxy dafür, es würde also der Vite-Server selbst gefragt). Für die lokale Entwicklung deshalb in `web/.env.local` (steht über `.env*` in `.gitignore`) den Endpoint setzen: + +```sh +VITE_APPWRITE_ENDPOINT=https://appwrite.webklar.com/v1 +``` + +Die Projekt-ID ist als Standard im Code hinterlegt (`6ac2130a00289343d6d5`, `VITE_APPWRITE_PROJECT_ID` überschreibt sie). Damit Appwrite den lokalen Host akzeptiert, muss die Web-Plattform `localhost` in der Appwrite-Console eingetragen sein (Projekt → Overview → Integrations → Platforms). Der Produktions-Build bekommt `VITE_APPWRITE_ENDPOINT=https://aircard-ios.org/v1` aus der Container-Umgebung (`deploy/compose-snippet.yml`). ## Tests +Im Frontend (`web/`): + ```sh -cd web && npx vitest run # Unit-Tests (card/*, editor/*, account/*) +cd web +npx vitest run # Unit-Tests (card/*, editor/*, account/*, pages/*) npx tsc --noEmit # TypeScript-Prüfung -node --test deploy/webhook-server.test.js # Webhook und Build-Logik -node --test web/scripts/appwrite-setup.test.mjs # Appwrite-Schema +``` + +Im Repo-Wurzelverzeichnis: + +```sh +node --test deploy/webhook-server.test.js # Webhook-Server (deploy.sh wird dort durch einen Stub ersetzt) +node --test web/scripts/appwrite-setup.test.mjs # Appwrite-Schema-Skript ``` ## Deploy @@ -47,15 +61,14 @@ Starten nur mit: docker compose up -d aircard-build aircard ``` -Die Appwrite-API wird über `/home/webklar/apps/traefik/dynamic/aircard.yml` geroutet: Requests auf `aircard-ios.org/v1` mit Header `X-Appwrite-Project: aircard` gehen an den Appwrite-Container. +Die Appwrite-API wird über `/home/webklar/apps/traefik/dynamic/aircard.yml` geroutet (Vorlage: `deploy/traefik/aircard.yml`): Requests auf `aircard-ios.org/v1` mit Header `X-Appwrite-Project: 6ac2130a00289343d6d5` gehen an den Appwrite-Container. Ohne diesen Header antwortet der nginx der Seite mit 404. ## Appwrite -Projekt `aircard` auf `appwrite.webklar.com`: -- Projekt-ID (öffentlich): `6ac2130a00289343d6d5` -- Datenbank: `aircard`, Tabelle: `cards`, Bucket: `card-images` -- Auth: E-Mail + Passwort, Sitzungsdauer 30 Tage, max. 5 pro Nutzer, Nutzerlimit 2000 -- Web-Plattformen: `aircard-ios.org`, `localhost` +Projekt „AirCard“ auf `appwrite.webklar.com`: +- Projekt-ID (öffentlich, von Appwrite generiert): `6ac2130a00289343d6d5`. Sie steht in `deploy/traefik/aircard.yml`, in `/home/webklar/apps/.env` (`AIRCARD_APPWRITE_PROJECT_ID`) und als Standard in `web/src/account/appwrite.ts`. +- Datenbank: `aircard`, Tabelle: `cards`, Bucket: `card-images` (das Skript unten legt sie an und prüft sie) +- Console-Einstellungen laut `docs/appwrite-console.md` (Soll-Stand, nicht maschinell geprüft; `--check` prüft nur das Schema): Auth mit E-Mail + Passwort, Sitzungsdauer 30 Tage, max. 5 Sitzungen pro Nutzer, Nutzerlimit 2000, Web-Plattformen `aircard-ios.org` und `localhost`. Schritte 3 und 4 dort (Auth-Härtung, Dienste abschalten) sind optional und am Live-Projekt unbestätigt. **Schema prüfen:** ```sh diff --git a/docs/appwrite-console.md b/docs/appwrite-console.md index df75d2d..6542af7 100644 --- a/docs/appwrite-console.md +++ b/docs/appwrite-console.md @@ -4,16 +4,20 @@ Klickliste für Kenso. Dauer: etwa 5 Minuten. Console: AIRCARD_APPWRITE_API_KEY= ``` 3. Speichern (in `nano`: Strg+O, Enter, Strg+X). Andere Zeilen nicht verändern. -4. Den Key **nicht im Chat teilen**, nicht in Screenshots zeigen und nirgends einchecken. Claude liest ihn nie selbst, das Skript bekommt ihn über `node --env-file=/home/webklar/apps/.env`. +4. Den Key möglichst nicht im Chat teilen (wer ihn dort einfügt, gibt ihn in den Verlauf), nicht in Screenshots zeigen und nirgends einchecken. Das Skript bekommt ihn über `node --env-file=/home/webklar/apps/.env`, dafür muss ihn niemand sonst sehen. ## 7. Bescheid geben diff --git a/web/src/vite-env.d.ts b/web/src/vite-env.d.ts index 2fe3584..0122ac7 100644 --- a/web/src/vite-env.d.ts +++ b/web/src/vite-env.d.ts @@ -3,7 +3,7 @@ interface ImportMetaEnv { /** Appwrite-Endpoint; ohne Angabe `${location.origin}/v1` (Produktion: https://aircard-ios.org/v1). */ readonly VITE_APPWRITE_ENDPOINT?: string; - /** Appwrite-Projekt-ID; ohne Angabe `aircard`. */ + /** Appwrite-Projekt-ID; ohne Angabe die generierte ID des Projekts „AirCard“ (`6ac2130a00289343d6d5`). */ readonly VITE_APPWRITE_PROJECT_ID?: string; }