Files
wichteln/README.md
T
nico 1b5826220b Deployment: Compose zieht fertiges Image aus der Gitea-Registry
Statt lokal zu bauen, verwendet docker-compose.yml jetzt
gitea.korbel.network/nico/wichteln:latest – auf dem Server reicht damit
ein einmaliges docker login plus compose up.
2026-08-07 14:57:31 +02:00

78 lines
3.0 KiB
Markdown
Raw 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.
# Wichtel-Werkstatt 🎅
Wichteln ohne Zettel-Chaos: Ein Admin erstellt einen Raum, alle melden sich per
Link an, Ausschlüsse werden festgelegt (z. B. Ehepartner), dann wird fair
ausgelost. Jede Person sieht **nur ihr eigenes Ergebnis** der Admin sieht
keine Zuweisungen.
## So funktioniert's
1. **Raum erstellen:** Auf der Startseite Raumname + Admin-Passwort angeben.
Es gibt einen Einladungslink und einen 6-stelligen Code zum Weitergeben.
2. **Anmelden:** Alle Teilnehmer öffnen den Link und geben ihren Namen ein.
Der Browser merkt sich die Teilnahme über ein langlebiges Cookie.
Der Admin nimmt über „Selbst mitwichteln" im Panel direkt selbst teil.
3. **Ausschlüsse:** Der Admin legt einseitig fest: „A darf nicht B ziehen“.
(Ehepaare = zwei Einträge, je einer pro Richtung.)
4. **Auslosen:** Ab 3 Teilnehmern. Danach ist der Raum eingefroren
nichts kann mehr geändert werden.
5. **Ergebnis:** Jeder Teilnehmer sieht auf seiner Seite, wen er beschenkt.
Der Admin sieht nur, *dass* ausgelost wurde nicht, wer wen gezogen hat.
**Cookie verloren?** Der Admin kann im Panel jederzeit (auch nach der Auslosung)
einen Einmal-Wiederherstellungslink für eine Person erstellen. Damit bekommt
sie auf einem beliebigen Gerät ihr Ergebnis zurück. Der Link funktioniert
genau einmal und verrät dem Admin weiterhin nichts über die Zuweisungen.
## Technik
- Python/FastAPI, serverseitig gerenderte Templates (Jinja2), kein Build-Schritt
- SQLite-Datei in einem Volume dieses Verzeichnis zu sichern ist das komplette Backup
- Mobil-zuerst gestaltet, läuft ohne externe CDN/Font-Abhängigkeiten
## Lokal testen (Bazzite/podman)
```bash
podman build -t wichteln .
podman volume create wichtel-data # überlebt Container-Neustarts
podman run -d --name wichteln -p 127.0.0.1:8080:8000 \
-v wichtel-data:/data wichteln
```
Dann <http://localhost:8080> öffnen. Stoppen/aufräumen:
```bash
podman rm -f wichteln
# optional: podman volume rm wichtel-data
```
Alternativ mit Bind-Mount statt Volume (auf SELinux-Systemen wie Bazzite/Fedora
ist `:z` für das SELinux-Label nötig):
```bash
podman run -d --name wichteln -p 127.0.0.1:8080:8000 -v "$PWD/data:/data:z" localhost/wichteln
```
Die Compose-Datei zieht das fertige Image aus der Gitea-Registry und
funktioniert sowohl mit `docker compose` (Server) als auch mit
`podman-compose up -d` lokal einmalig anmelden nicht vergessen:
`docker login gitea.korbel.network` bzw. `podman login gitea.korbel.network`.
## Auf dem Server (docker compose + nginx)
```bash
docker login gitea.korbel.network # einmalig
docker compose up -d
```
Der Container lauscht nur auf `127.0.0.1:8000`; davor gehört ein Reverse
Proxy siehe [`nginx.example.conf`](nginx.example.conf). **HTTPS wird dringend
empfohlen**, damit Ergebnis-Cookies nicht unverschlüsselt übertragen werden.
Die Daten liegen im `./data/`-Verzeichnis neben der Compose-Datei.
## Tests
```bash
python3 tests/test_draw.py # Auslosungslogik, ohne Abhängigkeiten
```