Commit Graph

11 Commits

Author SHA1 Message Date
karim bd85570259 dialog: Diskussionsplattform mit Foren, Rollen & Moderation + RLS-Fix
Auth/RLS-Fix (Schreiben gab 400):
- supabase.js: eigener supabaseAuth-Client für Login/Token-Check, damit
  signInWithPassword den Service-Daten-Client nicht prozessweit aufs
  User-Token umstellt (sonst lief insert als role=authenticated → RLS-Block).

Rollen (admin > editor > user):
- auth.js: roleOf() aus app_metadata.role + ADMIN_EMAILS, requireModerator.
- users.js: Rolle anzeigen/setzen über GoTrue app_metadata; .env-Admins fix.

Datenmodell (schema.sql):
- forums (Kategorien) + threads; Seed Allgemein/Projekte/Technik/Off-Topic
  und Sonder-Kategorie Beiträge. Library-Beiträge werden als Threads
  gespiegelt (dialog-store.syncLibrary).

API (routes/dialog.js, dialog-store.js):
- öffentlich: /api/forums, /api/forums/:slug, /api/recent, /api/thread
- eingeloggt: POST /api/threads (Thread starten, nur in Foren)
- Moderation: /api/mod/* (sperren/ausblenden), Admin: /api/admin/forums CRUD
- comments: Lock-Prüfung beim Schreiben, Moderation darf jede löschen.

Frontend:
- static/dialog.js: Router (Übersicht-Split-View | Forum | Thread),
  neuer Thread, Mod-Leiste, subtiles Login (dezente Zeile statt Formular).
- Admin-UI: Tabs Foren + Moderation, Rollen-Dropdown bei Autor:innen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 16:09:19 +02:00
karim 3594e78d4a dialog: Wortmeldungs-Zähler am „→ Dialog"-Link + Live via Polling (10s)
- Artikel-Link zeigt „→ Dialog · N" wenn Wortmeldungen existieren
- Widget lädt alle 10s nach, rendert nur bei Änderung neu (kein Flackern),
  pausiert im Hintergrund-Tab. Echtes Supabase-Realtime bleibt optional.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:25:55 +02:00
karim 1284747341 dialog: Menü-Eintrag DIALOG + Übersicht aller Dialoge; Breite an andere Seiten angeglichen
- 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>
2026-05-31 14:22:52 +02:00
karim 1ff2eb48f9 dialog: auf eigene Seite auslagern — Beitrag bleibt sauber
- single.html: eingebetteter Dialog raus, stattdessen „→ Dialog"-Link
- neue /dialog/-Seite (content/dialog.md + layouts/_default/dialog.html) mit
  Thread aus ?thread=, Rücklink zum Beitrag
- dialog.js liest Thread aus data-thread ODER ?thread=
- Styling: Pill-Link am Beitragsende, zentrierte Dialog-Seite

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:14:21 +02:00
karim e787961059 dialog: eigene Diskussion pro Beitrag (MVP, flach, eingeladene-only)
- DB: public.comments (thread, parent_id, user_id, author_name/-avatar, body, deleted)
- API: GET /api/comments (öffentlich lesen), POST/DELETE (eingeloggt),
  POST /api/auth/login (Token fürs Widget)
- Vanilla-Widget static/dialog.js: Karten mit Name+Bild, flacher Dialog mit
  optionalem Bezug (↳ Antwort auf), Inline-Login, Löschen (eigene/Admin)
- eingebettet in single.html (thread = Beitrags-Pfad), Styling im Theme-Look
- Autorname/-bild kommen aus dem Profil (data/authors.json)

Realtime (Supabase) folgt als nächster Schritt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:02:59 +02:00
karim e7d820b83c site: aktueller Redesign-Stand (CSS, Layouts, Logo, Content-Feinschliff)
custom.css überarbeitet, hugo.yaml + Layouts angepasst, Logo (static/logo/)
und static/index.html ergänzt, Content-Korrekturen in library/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 11:26:58 +02:00
karim 7a5be9250a republik-style redesign: dark masthead, hero block, palette, pills
- Dark full-bleed masthead with serif wordmark and stacked nav
- Hero entry treatment: full-bleed image bg with gradient overlay
- Per-section color system (data-section) + per-post override (data-color)
- Japanese accent palette (ajisai, sakura, suna, ichigo, yuyake, sora,
  kusa, kori, amagumo, yuki) — set via `color:` in front matter
- Tag pills replace hashtag-style tags; rendered as sibling of card link
  to avoid invalid nested <a> elements
- Single article: clean Republik-style header, no section rubric,
  tags as pills at bottom
- Cover image support (`cover_image:` in front matter):
    - wide mode: full-card banner above text
    - icon mode: small thumbnail right of text with colored card bg
- Library subsection header redesigned with section-colored stripe
- Dates use Swiss DD.MM.YYYY display (ISO retained in datetime attr)
- Custom Tokyo metro photo as demo cover image
2026-05-24 14:32:13 +02:00
karim f586da8ba7 flarum.css: stronger overrides for serif body, hero, post structure
- Force serif on body/post/composer with broader, !important selectors
  to beat Flarum default cascade
- Hero + DiscussionHero: 2px text-colored bottom rule, larger title,
  italic serif subtitle for a present masthead
- Tag pill (e.g. "General") restyled: accent text on paper, sharp
  corners, mono caps, weighted
- Post divider darker; first post gets a top border for symmetry
- Avatar greyscale softened (30% instead of 80%) so identity reads
  without going washed-out

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 20:55:16 +02:00
karim 5a17cfc408 flarum.css: strip the literal '@import' word from header comment
Flarum's LESS parser scans the raw source for the strings '@import'
and 'data-uri' as a security check, even inside /* ... */ comments,
so the documentation comment itself was tripping the guard. Replaced
with a minimal one-liner; full instructions stay in README/chat.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 20:48:33 +02:00
karim 3e6888fbd4 flarum.css: drop @import, document two-step font load
Flarum's Custom Styles parser (LESS) blocks @import and data-uri for
security. Move the font loading to a <link> tag the user adds via
Flarum admin's "Custom Header" HTML field. CSS itself stays unchanged
beyond removing the import line.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 20:43:50 +02:00
karim 53028151ee add OPENBUREAU custom CSS for Flarum forum
Mirrors the editorial typography and color system of openbureau.ch
onto the Flarum instance (openstudio.kgva.ch). Paste into Flarum
admin → Appearance → Custom Styles. File is also served at
openbureau.ch/flarum.css once the site is deployed, so Flarum can
optionally @import the live URL instead.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 20:36:52 +02:00