- Archiv-Root + Library-Übersicht bekommen einen section-title ganz oben.
- Archiv-Atlas: letzte 10 statt 6 pro Kategorie, 'alle in … →' am Block-Ende.
- Subsektionen rendern ihren Intro (.Content) nach dem Header.
- Wordmark clamp 140-200 → 154-220 (+10%); Header-Padding 0.4rem/2px → 0.48rem/2.4px,
Logo↔Menü 0.1→0.12em (+20%).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Library-Einzelseiten rendern ihren Text in .single-content → die Goldmark-
Fussnoten [^x] bekommen automatisch denselben 'Quellen'-Block wie die Essays.
Typus mit zwei echten Quellen versehen (Quatremère, Moneo).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Hauptmenü: JOURNAL · LIBRARY · ARCHIV · DIALOG. Manifest und Code (Repo)
wandern in die Footer-Linkleiste zu Colophon/Impressum/Datenschutz/RSS/Spenden.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Wiki-Header (section-header) spannt jetzt die volle Spalte (grid-column 1/-1)
und die .wiki-Box hat dieselbe max-width/Zentrierung wie der normale Inhalt —
so fluchten Library- und Wiki-Header. Seitenleiste + Inhalt darunter.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Header war volle (schmalere, zentrierte) Inhaltsbreite, die zweispaltige Fläche
darunter aber breiter → Titel versetzt. Header jetzt in .wiki-page, Oberkante
mit der Seitenleiste gleichgezogen (margin-top:0).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Übersicht: nur ein section-title (Rubrik 'Wiki' über Titel 'Wiki' entfernt)
- Einzelseite: Rubrik = Gruppe (z.B. Begriffe), Titel = Seitentitel
- Titel über die volle Breite (8px-Akzentlinie wie Library), Spalten darunter
- ungenutzte .wiki-rubric/.wiki-head CSS entfernt
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
/library/software trennt jetzt 'Werkzeuge' (Beiträge mit externem Link wie
DOSSIER/RAPPORT, als Karten mit ↗ und Farbakzent) von 'Texte & Anleitungen'
(chronologisch). Andere Rubriken bleiben unverändert. dist/ ignoriert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Neue /api/stats (Admin, read-only): Inhalte/Nutzer/Dialog-Kennzahlen
- Übersicht-View als Admin-Dashboard: Stat-Karten (klickbar) + Schnellzugriff
- Nutzerverwaltung: Avatar-Initiale, angelegt/zuletzt-aktiv, Rolle beim Anlegen,
Inline-Passwort (statt prompt), Filter, Rollen-Badge; API liefert last_sign_in_at
- Wiki im Editor anlegbar: Typ 'Wiki-Seite' + Gruppe-Feld → content/wiki/<slug>.md;
files.js klassifiziert wiki als eigene 'kind' (eigene Sidebar-Gruppe)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Neue Hugo-Sektion /wiki als 'effektives Wiki' im KISS-Sinn:
- Zweispaltiges Layout: gruppierte Seitenleiste (nach Frontmatter 'group')
mit Live-Filter + Inhalt mit TOC und 'zuletzt bearbeitet'/bearbeiten-Link
- Übersichtsseite gruppiert alle Einträge; WIKI im Hauptmenü
- Seiten ohne group landen unter 'Allgemein' (robust)
- Start-Inhalte: Meta-Seite (wie es funktioniert), Typus (→ Bibliothek),
Dateiablage/Benennung; Archetype setzt group/summary
- Bewusst dateibasiert: jede Seite verlinkt zur Bearbeitung ins Repo
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Dezente Lade-Skelette (Shimmer) in Übersicht/Forum/Thread statt leerem Pop-in
- Deterministische, ruhige Avatar-Farbe aus dem Namen (statt einheitlichem Grau)
- URLs in Wortmeldungen klickbar (sicher, ohne innerHTML)
- ⌘/Ctrl+Enter sendet; Textarea wächst mit dem Inhalt; Hinweis im Composer
- Enter im Thread-Titel springt ins Textfeld
- prefers-reduced-motion respektiert
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
article-actions margin-top spacing-md -> spacing-sm, damit der Abstand
zitieren->Trennlinie gleich gross ist wie obere Trennlinie->Quellen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Für die öffentlich erreichbare Instanz (dev.openbureau.ch):
1. Reverse-Proxy nur /auth/* durchreichen — /rest, /storage, /realtime raus.
PostgREST /rest/v1/ gab die komplette DB-Schema-Beschreibung (OpenAPI) preis;
der Browser nutzt Supabase nur fürs Login, Daten laufen über /api/*.
(Caddy-Block in create-openbureau-lxc.sh + proxmox/README.md angepasst.)
2. GoTrue GOTRUE_RATE_LIMIT_TOKEN_REFRESH=100 — bremst Brute-Force aufs /token,
das public direkt gegen GoTrue läuft (nicht übers Node-Rate-Limit).
3. db/schema.sql: revoke all from anon/authenticated auf posts/comments/forums/
threads; grants nur noch service_role. RLS bleibt so auch bei künftigen
Policies dicht (Defense-in-Depth statt "RLS ohne Policy").
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Hält den dev.openbureau.ch-Deploy reproduzierbar fest: SITE_DOMAIN-Env,
Env-Overrides (local-zfs, statische IP, CTID …) und der Caddy-Block mit
Pfad-Routing (/auth/* + /rest/* -> :8000, Rest -> :8080) samt
Login-User-Anlage. Der reale Caddyfile liegt im separaten dms-stack (VPS).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Geführter Installer proxmox/install.sh: erst Vorhaben wählen
(Komplettes Büro / 365+Synology ersetzen / nur Website / einzeln),
dann werden die nötigen LXCs der Reihe nach gebaut. Jeder Dienst ist
auch als eigenständiges, einzeln curlbares Skript verfügbar:
- proxmox/nextcloud-lxc.sh Nextcloud AIO (ersetzt 365/Synology)
- proxmox/empty-lxc.sh leerer Docker-LXC als Geruest
- proxmox/git-compose-lxc.sh beliebiges Git-Repo (RAPPORT/DOSSIER)
- (OPENBUREAU: bestehendes cms/proxmox/create-openbureau-lxc.sh)
Gemeinsames Muster: unprivilegierter Debian-12-LXC mit nesting+keyctl,
Docker via get.docker.com, Dienst als Container/Compose. proxmox/README.md
dokumentiert beide Wege.
Dazu zwei Bibliotheksbeitraege (Hochparterre-Ton):
- server-im-eigenen-haus.md — das Warum/Ziel
- proxmox-schritt-fuer-schritt.md — die Anleitung mit curl-Befehlen
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Deutsche Datenschutzerklärung an die tatsächliche Praxis angepasst (self-hosted,
keine Tracker/Analytics, Server-Logs nur technisch, Dialog-Konto mit E-Mail/Name,
revDSG-Rechte, EDÖB). Footer: Datenschutz neben Kontakt/Impressum.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- zitieren: kein Pill mehr — Link in der Pill-Schrift (Display) mit ↗ am Ende
- Versionen: Pill behält, davor ein monochromes Uhr-SVG (currentColor)
- Zitier-Formate: „intern" (OPENBUREAU-Hausformat inkl. Version) als dritte
Option und Default, neben APA und DIN
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- zitieren + Versionen jetzt Akzent-Outline-Pills wie Dialog (statt Links);
„kopieren" in der Quellenangabe bleibt ein Link
- Quellen/Fußnoten: feste, vom Theme vererbte Zeilenhöhe (~26px) mit
unitless line-height:1.5 überschrieben + kleinere Abstände → deutlich
kompakter. Aktionsreihe-Abstände reduziert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- zitieren: schlichter Link direkt unter den Quellen (statt Pill); klappt eine
dezente, gesamthaft kopierbare Quellenangabe auf — wahlweise APA oder DIN
- Tags raus von unter den Quellen → in die Aktionsreihe, ganz rechts neben Dialog
- „Versionen" als Link eine Zeile darunter; Liste in voller Inhaltsbreite und
normaler Schrift/Größe (statt mono-Box). Auswahl öffnet Diff/Fassung oben.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- API: /api/history/diff liefert den Unified-Diff einer Fassung (git show)
- „Version vom <Datum>"-Pill (statt Marke oben + Git-Links) öffnet den Verlauf
direkt auf openbureau: Liste der Fassungen → Diff rot/grün wie auf GitHub,
Toggle „ganze Fassung anzeigen", Rücksprung. Keine externen Git-Links mehr.
- Pills neu: Dialog (Akzent-Outline, wie zuvor) + Version/Zitieren im Tag-Look
- CSS: Tag-Pills, Diff-Styling (d-add/d-del/d-hunk), alte Badge-Styles raus
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Dialog-Link in .provenance verschoben: → Dialog · Version · Verlauf · Zitieren
in einer Reihe, gleiche Pill-Form. Dialog (prov-dialog) hebt sich durch Pfeil
+ Akzentfarbe (Rahmen/Text, fett) ab, Hover füllt Akzent. Zähler-Script mit ins
Partial gezogen; alte .dialog-link-Klasse/-CSS entfernt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Version/Verlauf/Zitieren als dezente Outline-Pills (wie Versions-Marke),
„·"-Trenner entfernt
- Byline (Autor) + „Aktualisiert am" nur noch bei Library-Beiträgen; Seiten
wie Manifest/Kontakt/Spenden/Colophon zeigen sie nicht mehr
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- API (öffentlich): /api/history listet Git-Versionen eines Beitrags,
/api/history/version rendert eine alte Fassung (marked + Fußnoten-Support),
on-demand via git im CMS-Container — kein Vorbauen. Pfad/rev validiert.
- Versions-Marke neben dem Kopf jedes Library-Beitrags (zeigt bewusst die
Fassung); öffnet den Verlauf, Auswahl ersetzt den Text + Rücksprung-Banner.
- CSS für Badge/Panel/Banner; marked als Dependency.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Vorher: stiller clipboard.writeText → tut auf HTTP/LAN nichts (Clipboard-API
nur in sicherem Kontext). Jetzt: Klick klappt ein Panel mit der lesbaren
Quellenangabe auf (user-select:all), „Kopieren" nutzt clipboard-API mit
execCommand-Fallback; schlägt das fehl, wird der Text markiert (manuelles
Strg/⌘+C).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
sup auf 0.62em verkleinert; .footnote-ref bekommt feine Unterstreichung
(0.5px, 0.2em Offset) statt gar keiner.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- content/library/**/muster-*.md: Typus und Modell, Im Offenen arbeiten,
Die Werkzeugkette — mit echten Fußnoten/Quellen, demonstrieren auch
Provenance/Zitieren und Dialog am Artikel
- seed-demo.sql: Wortmeldungen auf den Musterbeiträgen (thread = Beitrags-URL)
+ DELETE-Hinweis für die d-Kommentare
Test-/Demo-Inhalt — vor dem späteren Full-Wipe leicht entfernbar.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Fußnoten (Goldmark [^1], schon nativ) gestylt: ruhiges Schriftbild,
automatische „Quellen"-Überschrift statt <hr>
- provenance.html-Partial bei Library-Beiträgen: Version → Commit, Verlauf
(Gitea), „Zitieren"-Knopf (kopiert Quellenangabe in die Zwischenablage)
- repoURL-Param (git.openbureau.ch) für die Provenance-Links
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Kapselt git pull + Deploy-Config + Neustart, damit die Migrationsschritte
nicht mehr per Hand nötig sind:
- kong.yml vor dem Pull auf die Vorlage zurücksetzen (kein Konflikt), danach
CORS-Origin aus SITE_URL rendern
- chown -R 1000:1000 (non-root-Container darf schreiben)
- git safe.directory für root auf dem uid-1000-Repo
- docker compose up -d --build + kong reload + Healthcheck
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- coalesce.js: generisches Serialisieren+Koaleszieren je Key; buildSite() in
hugo.js nutzt es → Publish/Preview/Profil starten nie überlappende Hugo-
Prozesse, schnelle Folge-Aufrufe lösen nur einen Trailing-Build aus
- dialog-store: syncLibrary() gedrosselt (60s-TTL) statt bei jedem Forum-Read
Filesystem-Walk + Upsert; Publish forciert Sync (force:true)
- test/: node:test-Suite (19 Tests) für safeRel/normAuthors/urlFor/hasAccess,
roleOf + lokale JWT-Verifikation, Rate-Limiter, Coalescing; npm test
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 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>
Beispiel-Threads + Wortmeldungen für die Forum-Kategorien, bewusst getrennt
von der Migration (Produktion startet leer). Idempotent über feste UUIDs +
ON CONFLICT DO NOTHING; manuell einspielbar, DELETE-Block zum Entfernen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
body:not(.is-home) main als Flex-Spalte mit justify-content: safe center —
kurze Seiten zeigen den Inhalt mittig zwischen Header und Footer (gleiche
Lücke oben/unten), langer Inhalt scrollt normal von oben (safe → start).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Footer auf allen Seiten so flach wie auf Journal (padding 0.55rem, row-gap 0.2rem)
- Breadcrumb ohne Trennlinie und ohne großen Abstand (war der „Balken" über dem Footer)
- Artikel-Top-Abstände reduziert (Inhalt sitzt enger unter dem Header)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Statt Seiten-Scroll jetzt überall der Journal-„Rahmen": body height:100dvh +
overflow:hidden, Header oben / Footer unten fix, main scrollt INTERN mit
verstecktem Scrollbalken. Dadurch:
- keine Seiten-Scrollbar → Header/Footer reichen schwarz bis an den rechten Rand
(kein weißer scrollbar-gutter-Streifen mehr)
- Footer immer unten, Inhalt im Rahmen dazwischen
- nichts hat sichtbare Scrollbalken
Inhalt 72ch-zentriert in der vollbreiten Scroll-Fläche; Hero-Bild füllt die
volle Breite (kein 100vw-Hack mehr); Breadcrumb wandert in main (scrollt mit).
Mobil: normaler Seiten-Scroll (kein 100dvh-Rahmen).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Nicht-Home-Seiten nutzten ein Grid-Sticky-Layout, das den Footer durch die
zusätzliche Breadcrumb-Zeile (impliziter Grid-Row) nicht zuverlässig unten
hielt. Body jetzt durchgehend Flex-Spalte wie Home: min-height:100dvh,
main flex:1 → Footer klebt unten. Inhaltsspalte (72ch + 1.75rem Gutter) per
max-width/margin-inline zentriert, Header/Footer volle Breite (eigenes inneres
Raster zentriert deren Inhalt), Full-Bleed-Hero rechnet sich weiter korrekt aus.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Header/Masthead:
- neuer Wortmark logo.svg; Home als Full-Height-Flex (zwei eigenständig
scrollbare Journal-Spalten, Footer klebt unten)
- kompakte Masthead; scrollbar-gutter:stable auf html → kein weißer Streifen
links und kein Logo/Menü-Versatz zwischen den Seiten
Journal-Home:
- zwei Spalten, eckige Karten in natürlicher Höhe; Bild als Block (Inline-
Whitespace-Lücke behoben)
Footer:
- Lizenzen AGPL-3.0 / CC BY-SA verlinken auf /lizenz/ (eigene Seite);
„Hosted in Lucerne" (Link zur Autor-URL); keine Underlines; flush unten;
kein Open-Source-Fließtext mehr, kein Name im Copyright
Dialog:
- schlichte Foren-Auflistung statt Karten; kompaktes Login; kleinerer
„→ Dialog"-Button (nur noch auf Library-Artikeln); einheitliche Fontgrößen;
weniger Abstand zum Header, Trennlinien entfernt
Config: CODE-Menü → git.openbureau.ch; params.author.url
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- /lizenz/agpl-3.0/ + /lizenz/cc-by-sa-4.0/ mit den offiziellen Volltexten
(Code unter AGPL-3.0, Inhalte unter CC BY-SA 4.0) + /lizenz/-Übersicht
- /spenden/ mit LOGO-OB und Hinweis, wofür Spenden verwendet würden
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- LOGO-OB.svg: Honk-Schriftzug in Kurven umgewandelt (10 <path>, keine
Font-Referenz) → rendert korrekt als Hintergrundbild, hellgrau auf der
schwarzen Masthead. Hintere Rechtecke füllen die Buchstaben-Punzen hellgrau.
- ungenutzte logo-ob2.svg (lebender Text) entfernt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Journal-Startseite: .journal-list von Grid auf Multi-Column umgestellt —
linke/rechte Spalte packen unabhängig (keine gemeinsame Zeilenhöhe mehr),
break-inside:avoid hält Karten zusammen. Mobil: eine Spalte.
- Wortmark: eigenes logo-ob2.svg als Hintergrund (Honk-Webfont wieder raus).
Hinweis: SVG enthält noch lebenden Honk-Text — für korrektes Rendern als
Hintergrundbild müssen die Buchstaben in Kurven umgewandelt werden.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>