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.
3.0 KiB
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
- Raum erstellen: Auf der Startseite Raumname + Admin-Passwort angeben. Es gibt einen Einladungslink und einen 6-stelligen Code zum Weitergeben.
- 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.
- Ausschlüsse: Der Admin legt einseitig fest: „A darf nicht B ziehen“. (Ehepaare = zwei Einträge, je einer pro Richtung.)
- Auslosen: Ab 3 Teilnehmern. Danach ist der Raum eingefroren – nichts kann mehr geändert werden.
- 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)
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:
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):
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)
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. HTTPS wird dringend
empfohlen, damit Ergebnis-Cookies nicht unverschlüsselt übertragen werden.
Die Daten liegen im ./data/-Verzeichnis neben der Compose-Datei.
Tests
python3 tests/test_draw.py # Auslosungslogik, ohne Abhängigkeiten