diff --git a/README.md b/README.md new file mode 100644 index 0000000..86ab525 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# QR-Tabellen + +Kleines selbst gehostetes Web-Tool für den Schuleinsatz: CSV-Tabellen +(Stationenlernen, Materiallisten, Linksammlungen) werden hochgeladen und als +statische HTML-Seite veröffentlicht — Link-Spalten bekommen automatisch +QR-Codes. Läuft auf **https://table.lehrstun.de** (Admin unter `/admin/`, +Basic Auth). + +Die Dateneingabe bleibt bewusst in Excel/LibreOffice; ausgetauscht wird nur +CSV. QR-Codes werden lokal per [segno](https://pypi.org/project/segno/) +erzeugt — kein externer API-Aufruf (DSGVO/Schulkontext). + +## Workflow + +1. **Tabelle anlegen** (`/admin/neu`): Spalten benennen und Typ wählen + (`text`, `text_long`, `number`, `date`, `url`, `rating_5`). +2. **CSV-Vorlage herunterladen** — Semikolon + UTF-8-BOM, öffnet in + deutschem Excel/LibreOffice direkt korrekt. +3. **Befüllen** in Excel/LibreOffice, als CSV speichern. +4. **In die Dropzone ziehen** — die Zieltabelle wird am Dateinamen erkannt, + sonst an der Spalten-Signatur, sonst manuell wählbar. Validierungsfehler + (kaputte URLs, Bewertung außerhalb 1–5) werden mit Zeile/Spalte gemeldet; + fehlerhafte CSVs werden komplett abgelehnt. +5. **Fertig:** Seite liegt unter `https://table.lehrstun.de//`, + jede Link-Zelle mit QR-Code. Die Linkliste im Admin zeigt alle Tabellen + mit QR-Code und allen CSV-Versionen zum Download. + +## Technik + +- Python 3.12+ · Flask · segno · gunicorn (nur Produktion) — sonst Stdlib +- Öffentliche Seiten: beim Upload fertig gerendertes, in sich geschlossenes + HTML (QR als Inline-SVG), von Nginx statisch ausgeliefert — bleiben auch + bei gestoppter App online +- Admin-Panel: Flask hinter Nginx Basic Auth, Ablage im Dateisystem + (`data/tables//schema.json` + `versions/*.csv`), keine Datenbank + +## Entwicklung + +```bash +python -m venv venv +venv/Scripts/pip install -r requirements.txt # Windows +venv/Scripts/python -m flask --app app.main run # Admin: http://localhost:5000/admin/ +venv/Scripts/python tests/test_engine.py # Engine-Selbsttest +``` + +## Deployment (Hetzner) + +Details in `deploy/` (systemd-Unit + Nginx-Vhost) und `CLAUDE.md`. Update: + +```bash +ssh herb@46.225.114.15 +cd ~/qr-tabellen && git pull && sudo systemctl restart qr-tabellen +```