- auth: Supabase-JWT lokal verifizieren (hono/jwt, HS256) statt GoTrue-
Roundtrip pro Request; JWT_SECRET in cms-env, Remote-Fallback wenn ungesetzt
- dialog: comment_stats-View (group by thread) ersetzt Full-Table-Scan +
JS-Aggregation bei jedem Forum-Aufruf
- ops: scripts/backup-db.sh (pg_dump, rotiert) + täglicher Cron im Proxmox-
Script — Dialog-Daten liegen nur in Postgres, nicht in Git
- security: Rate-Limit auf Schreib-Endpunkte (/api non-GET, 60/min je Nutzer)
- perf: Cache-Control (1 Woche) auf statische Assets, HTML bleibt frisch
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Problem: Init-Scripts (docker-entrypoint-initdb.d) laufen nur beim allerersten
DB-Start. Neue Tabellen aus schema.sql (forums/threads) landeten daher nicht in
einer bereits initialisierten Produktiv-DB → "relation public.forums does not
exist" auf der Dialog-Seite.
- docker-compose.yml: neuer einmaliger `migrate`-Service spielt das idempotente
schema.sql als supabase_admin (Superuser, keine Owner-Konflikte) bei jedem
`up` ein und lädt den PostgREST-Cache neu; cms wartet via
service_completed_successfully darauf.
- routes/dialog.js: fehlende Tabelle führt nicht mehr zu rohem SQL-Fehler —
leere Liste + server-seitiges Log statt 500 auf der Seite.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Behebt arm64-Builds (z.B. Apple Silicon): vorher wurde immer amd64-Hugo
gezogen und scheiterte unter QEMU. amd64-LXC bleibt unverändert (auto).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Menü: FORUM (extern) → DIALOG → /dialog/
- /dialog/ ohne ?thread zeigt Übersicht aller begonnenen Dialoge
(GET /api/threads, Titel aus Inhaltsdateien, sortiert nach Aktivität)
- .dialog-page füllt jetzt die normale Inhaltsspalte (kein eigenes max-width/
Padding mehr) → gleiche Breite wie andere Seiten
- Threads entstehen erst mit der ersten Wortmeldung
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- layouts/authors/single.html rendert die Autor-Seite zentriert
- Byline in single.html + index.html verlinkt den Autornamen zu /authors/<urlize name>/
(nur wenn die Seite existiert)
- CMS-Profil-Speichern schreibt content/authors/<slug>.md (aus Name/Bio/Avatar)
+ data/authors.json und baut public neu → Seite & Links sofort live
- Autor-Seiten aus dem Inhalts-Editor ausgeblendet (über „Profil" verwaltet)
- custom.css: .author-page / -photo / -name / -bio + Byline-Link-Stil
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Uploads landen in static/images/, wurden aber erst nach Hugo-Build unter
/images/ ausgeliefert → Vorschau/Cover/Profilbild blieben leer. Jetzt serviert
der Server /images/* direkt aus static/ — sofort sichtbar.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Admin-only Seite „Autor:innen": Nutzer anlegen/Passwort setzen/löschen via
GoTrue-Admin-API (/api/users, requireAdmin). /api/me liefert isAdmin → Nav
zeigt den Punkt nur Admins.
- Cover-Bild: Upload-Knopf + Thumbnail (Bilder im Beitrag gingen schon über den
WYSIWYG-Editor).
- Editor-Metazeile: einzeilige Felder + Dropdowns einheitlich 38px hoch.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- ADMIN_EMAILS (.env) = Admins, sehen/bearbeiten alles
- Autor:innen sehen nur Einträge mit ihrer Mail unter `authors:`; Ersteller wird
beim Anlegen automatisch Autor
- Kollaboration: Feld „Autor:innen" im Editor → mehrere Mails = gemeinsamer Zugriff
- API erzwingt Zugriff bei list/read/save (403 ohne Recht)
- ADMIN_EMAILS in compose + LXC-Script (fragt Admin-Mail ab)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- CMS liest/schreibt jetzt die echten content/**/*.md (gray-matter) statt DB:
alle bestehenden Beiträge, Seiten und Rubriken erscheinen und sind editierbar.
Supabase nur noch für Login.
- Admin neu: Collections-Sidebar (Beiträge/Seiten/Rubriken), an OPENBUREAU-Theme
angeglichen (Newsreader-Serif, Creme, Terracotta, dunkle Topbar).
- Alle Frontmatter-Felder inkl. Farb-Dropdown mit Farbpunkten (Palette aus
custom.css), Layout, Tags, summary, cover_image, external, toc, draft.
- Markdown-Toolbar: Fett/Kursiv/Unterstrichen/H2/H3/Link/Bild-Upload/Liste/Zitat/Code.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
public/ ist git-ignored und fehlt im frischen Clone — Entrypoint baut die
Hugo-Site einmal aus content/. Ausserdem: Script-Output stellt klar, dass
:8000 nur das API-Gateway ist (keine Web-UI).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>