Flo Hartmann
fee5f8b9a3
P1: Tabellen — Sticky-Header, größere mobile Cover, einklappbare Audit-Details
...
- Desktop-Tabellen (Neuheiten, Planung, Archiv, Audit-Log): Scrollbox
max-h-70vh mit sticky thead
- Mobile Cover jetzt min. 48x68 px (bereits im Icon-Commit umgesetzt)
- Audit-Log: Alt/Neu/Details-JSON per nativem <details> einklappbar,
monospace 11px
2026-08-26 09:03:21 +00:00
Flo Hartmann
7645f6a791
P1: Einheitliche klassische Pagination (Neuheiten, Planung, Audit-Log)
...
- Infinite Scroll ersetzt durch Zurück/Weiter + Seitenzahlen-Fenster
(funktioniert ohne JavaScript)
- Gemeinsames Makro seitennavigation.html (aria-current auf aktiver
Seite, deaktivierte Buttons als span)
- Neuheiten: Pagination bleibt beim HTMX-Filter-Swap innerhalb von
#neuheiten-liste konsistent; Filter/Sortierung/Jahr bleiben in den
Seiten-URLs erhalten
- Audit-Log: gleiche Optik statt reiner Text-Links
2026-08-26 08:59:49 +00:00
Flo Hartmann
9bd3b700c4
P1: Rollenbasiertes Dashboard mit Plugin-Karten
...
- Plugin-Vertrag erweitert: optionaler Hook dashboard_karten(user) +
DashboardKarte-Dataclass (Kern bleibt schlank, Fachlogik im Plugin)
- Karten: Neuheiten+System-Status (neuheiten), Planungs-Stats bzw.
eigene Einträge (planung), offene Dedup-Konflikte (dedup), nächste
Redaktionsschlüsse (erinnerung), ungelesene Benachrichtigungen
(benachrichtigung), letzte Audit-Einträge (audit-log, nur Admin),
Benutzer-Anzahl (Kern, nur Admin)
- 'Geladene Plugins' als aufklappbarer Admin-Technikbereich
2026-08-26 08:48:30 +00:00
Flo Hartmann
742c265df8
P0: Formular-Accessibility — Fehlerboxen mit role=alert, Pflichtfeld-ARIA
...
- Alle fehler-Boxen: role=alert + tabindex=-1
- Login: aria-invalid/aria-describedby auf Feldern bei Fehler
- Pflichtfelder: aria-required=true ergänzt
2026-08-26 08:40:45 +00:00
Flo Hartmann
b9444289b5
P0: Status-Badge-Farben semantisch vereinheitlicht
...
Zentrales status_badge-Makro (status.html): neuheit/neu+abgeschlossen =
emerald, offen = slate, in_bearbeitung/planung = sky, warnung/konflikt/
pruefung = amber mit Warn-Icon, fehler = red, deaktiviert/archiviert =
slate. Angewendet in neuheiten, planung, archiv, dedup, Benutzerliste.
2026-08-26 08:38:56 +00:00
Flo Hartmann
14a4846948
P0: Lösch-Aktionen mit Bestätigungsdialog (Planung + Erinnerungen)
...
Alpine-Modal 'Eintrag löschen?' mit Abbrechen/Löschen; ohne JavaScript
sendet das Formular wie bisher direkt (Progressive Enhancement).
benutzer/liste.html hat keine Lösch-Aktion — nichts zu tun.
2026-08-26 08:35:18 +00:00
Flo Hartmann
e1ef7ba926
P0: x-cloak aktiv + Emojis durch Inline-SVG-Icons ersetzt
...
- base.html: [x-cloak]-CSS gegen Alpine-Flackern
- Neues zentrales Icon-Makro-Template (icons.html, Heroicons-Stil,
currentColor, aria-hidden)
- Logo-Würfelbecher, Sync-Pfeile, Sortier-Chevrons, Warn-/Check-Icons,
dedup-Karten (Gebäude/Tag/Buch/Dokument), Cover-Platzhalter als SVG
- Cover-Platzhalter: 'Kein Cover'-Text in Großansicht, Mindestgröße
48x68 px in der Kartenansicht
2026-08-26 08:33:37 +00:00
Flo Hartmann
aea52d1563
Neuheiten+Planung: Pagination (50/Seite, Infinite Scroll) + quellen_url in Planung mit Quellen-Link
2026-08-24 22:44:18 +00:00
Flo Hartmann
96d6af8163
Coverbilder (bild_url) + responsives Layout für Mobil/Tablet
...
Teil 1 — Coverbilder:
- Migration 0004_bild_url (neuheiten), 0002_bild_url (planung, archiv
mit beiden Spiegel-Tabellen); nullable VARCHAR(500), SQLite↔Postgres
portabel, bestehende Zeilen bleiben erhalten
- BGG-Client extrahiert Cover aus der Thing-Antwort (bevorzugt <image>,
sonst <thumbnail>; protokoll-relative URLs → https)
- Sync-Upsert pflegt bild_url beim Update; fehlendes Bild löscht keines
- Web-Quellen übernehmen img-URLs aus den Listenelementen (src/data-src,
relative Pfade gegen die Seiten-URL aufgelöst); SPIEL-Essen nutzt das
BILDER-Feld des JSON-Endpunkts
- Verschiebung Neuheiten→Planung und Archivierung/Wiederherstellen
schreiben bild_url mit
- Anzeige: kleine Vorschaubilder (40x56) in den Listen, groß (max 200px)
in Planung-Bearbeiten/Prüf-Dialog; Platzhalter-Div ohne Bild;
Hotlinking mit loading=lazy + decoding=async
Teil 2 — Responsives Layout:
- Basislayout: Burger-Menü (Alpine.js) auf Mobil, Desktop-Leiste ab md:
- Listen kollabieren <768px zu Karten-Ansichten (Cover links, Titel +
Metadaten rechts, Status-Badge oben); Desktop behält Tabellenform
- Touch-Ziele >= 44px auf Mobil, Formulare vollbreit mit Labels oben
- Sync-Übersicht/Audit-Log bleiben horizontal scrollbare Tabellen
Tests: 15 neue Fälle (tests/test_covers.py) — Migration inkl.
Daten-Erhalt, BGG-Parsing gemockt, Quellen-Übernahme, Template-Render;
316 Tests grün. README aktualisiert.
2026-08-24 16:54:56 +00:00
Flo Hartmann
0f12cd952b
Plugins dedup + planung: Prüf-API, Verzahnung mit Benachrichtigung und Audit-Log
...
Plugin dedup:
- Öffentliche Prüf-API check_titel(titel, verlag, bgg_id, user) mit
strukturiertem PruefErgebnis (Konflikte, Verlagsauswahl, Titel-Empfehlung)
- Vier Prüfungen: Verlags-Konflikt, Titel-Varianten (deutsche Version
bevorzugt: Umlaut-/Wort-Heuristik + BGG Alternate-Names), Spiel oder
Vorgänger bereits besprochen (BGG boardgameexpansion-Relation +
rapidfuzz-Fuzzy-Match), Titel in fremder Planungsliste
- BGG-Hilfsclient mit Rate-Limit, netzwerkfrei testbar, degradiert defensiv
- Eigene Migration (Prüfprotokoll dedup_pruefungen) + Prüfseite /dedup
- Fremde Plugin-Tabellen werden nur lesend über die gemeinsame Metadata
gelesen — keine Import-Abhängigkeiten zwischen Plugins
Plugin planung:
- Migration planungsliste: Titel, Verlag, Ausgabe, Rezensent, Status
(offen/in_bearbeitung/abgeschlossen), Quelle, Prüf-Befund (JSON)
- Beide Eintragswege durch die dedup-Prüfung: Verschiebung aus den
Neuheiten (Button „→ Zur Planung“, Neuheit wechselt auf Status planung)
und händisches Nachtragen im Formular
- Bei Treffern: send_notification an den eintragenden Rezensenten
(benachrichtigung-Plugin) + Audit-Log-Eintrag (audit-log-Plugin)
- Verlags-Konflikt → Auswahl-Dialog „Welcher Verlag wird geführt?“,
Entscheidung wird auditiert
- Planungsliste mit Zuordnung, Statuswechsel, Bearbeiten/Löschen;
Rezensenten nur eigene Einträge, Admin/Redakteur alle
Tests: 45 neue Tests (Heuristik, alle vier Prüfungen mit Fake-BGG-Client,
Protokoll, beide Eintragswege mit Stub-gemockten Abhängigkeiten, Rollen,
Integration mit echten Plugins) — 141 Tests grün.
2026-08-21 19:51:53 +00:00
Flo Hartmann
96a37e878b
Phase 1: Kern mit Plugin-System, Auth/Rollen, Migrations, Plugin-Stubs
...
- redaktionskern (src/): schlanker Kern — App-Fabrik, Plugin-Loader
(Entry-Points + plugins/-Verzeichnis), Migrations-Laufzeit
(schema_migrations pro Plugin, SQLite-/Postgres-portabel),
Auth mit Argon2id + Session-Cookies, Rollen admin/redakteur/rezensent,
Benutzerverwaltung für Admins
- plugins/: 8 ladbare Stubs (neuheiten, dedup, planung, archiv,
erinnerung, benachrichtigung, audit-log, export) nach Plugin-Vertrag
- Frontend: Jinja2 + Tailwind (CDN) + HTMX + Alpine.js, UI deutsch
- Tests: 28 pytest-Fälle (Loader, Lifecycle, Entry-Points, Migrations-
Idempotenz, Login/Logout, Rollen-Zugriff, Benutzerverwaltung)
- Docker/Podman: Compose (Traefik-Labels) + Dockerfile (uv)
- README.md mit Setup-Anleitung
2026-08-21 18:35:09 +00:00