README fuer Gitea: Zweck, Workflow, Technik, Deployment
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
53
README.md
Normal file
53
README.md
Normal file
@@ -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/<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
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user