Files
qr-tabellen/docs/decisions.md

41 lines
2.5 KiB
Markdown
Raw Normal View History

# Entscheidungs- und Änderungslog
## 2026-07-05 — Projektstart (MVP)
- **Stack:** Python/Flask + segno statt Node (Briefing-Vorschlag). Begründung:
Hetzner-Deploy-Muster ist Python + systemd; `csv` ist Stdlib, segno rendert
QR als SVG ohne weitere Abhängigkeiten. Herbs Entscheidung nach Vorlage.
- **Scope-Kürzungen gegenüber Briefing:** kein XLSX-Upload (CSV reicht, Excel/LO
können das), Schema-Designer minimal (Name + Typ), keine Süßholz-Features.
- **Architektur-Trennung:** öffentliche Seiten sind beim Upload fertig gerendertes,
in sich geschlossenes HTML (QR inline als SVG) → Nginx statisch; der
Flask-Prozess existiert nur fürs Admin-Panel (Dropzone, Schema-Designer,
Linkliste, Versionen) hinter Nginx Basic Auth.
- **Herbs Erweiterung zum Briefing:** Admin-Panel mit Dropzone, automatischer
Versions-Zuordnung (Dateiname → Header-Signatur → manuelle Wahl),
CSV-Versionen jederzeit downloadbar, Linkliste mit QR pro Tabelle.
Das beantwortet die offene Briefing-Frage: Upload läuft auf dem Server,
nicht als lokales CLI.
- **Validierung:** fehlerhafte CSVs werden komplett abgelehnt (Zeile/Spalte in
der Fehlermeldung), nichts wird halb veröffentlicht.
- **Encoding-Realität:** Vorlagen mit Semikolon + UTF-8-BOM (deutsches Excel);
Upload-Decoder probiert utf-8-sig, dann cp1252; Delimiter wird gesnifft.
- **Design:** Tokens als CSS-Variablen in `table.css`; Systemfont-Fallbacks für
Source Serif 4 / Fira Sans, bewusst kein Google-CDN (Schulkontext). Vertiefung
später.
- **Global:** Docker-Default aus den Infrastruktur-Regeln gestrichen — Docker
nur noch als Vorschlag für Projekte mit eigenem Ökosystem.
## 2026-07-05 — Deployment auf Hetzner
- **Gitea-Repo öffentlich** statt privat: entspricht dem Muster der anderen
Web-Projekte (arduino/3d.lehrstun.de) und vermeidet, dass der Gitea-Token
auf dem Server abgelegt werden muss. Das Repo enthält keine Secrets.
- **gunicorn (2 Worker, Port 8010) + systemd** statt Flask-Dev-Server;
`QT_PUBLIC_DIR=/var/www/table`, damit Nginx die öffentlichen Seiten ohne
Zugriff auf `/home/herb` ausliefern kann.
- **Basic Auth in Nginx**, nicht in der App: `/etc/nginx/htpasswd-table`
(apr1-Hash), Klartext-Zugangsdaten nur lokal in
`~/.config/claude-secrets/qr-tabellen.env`.
- **Verifiziert:** kompletter Workflow live (Tabelle anlegen → Vorlage →
Upload → veröffentlichte Seite mit QR-SVGs); öffentliche Seiten bleiben
bei gestopptem App-Prozess erreichbar (Nginx statisch).