Files
qr-tabellen/README.md
2026-07-05 11:36:05 +02:00

54 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 15) werden mit Zeile/Spalte gemeldet;
fehlerhafte CSVs werden komplett abgelehnt.
5. **Fertig:** Seite liegt unter `https://table.lehrstun.de/<slug>/`,
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/<slug>/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
```