Zum Inhalt springen

DA-Tracker: Diplomarbeiten planen mit SvelteKit, PostgreSQL und Podman

Als HTL-Lehrer betreue ich jedes Jahr Diplomarbeitsteams. Excel-Listen und verstreute Protokolle haben wir durch eine eigene Web-App ersetzt: den DA-Tracker. Hier ein Überblick über Funktionen und Technik.

Was die App kann

  • Login ohne Mailserver: Die Lehrkraft legt ein Team an und bekommt einen Einladungslink oder eine QR-Karte. Schüler:innen wählen damit Avatar und Passwort.
  • Sprints statt Stichtage: Termine aus dem Stundenplan (inklusive österreichischer Ferien), dann Planen, Umsetzen im Kanban-Board und Bewerten.
  • Soll-Ist-Vergleich: Fortschritt, geplante gegen tatsächliche Stunden, Kapazität und Schätzgenauigkeit.
  • Arbeitsprotokoll mit Fotos direkt vom Handy und ein Begleitprotokoll als PDF mit Unterschriftszeilen.
  • Lehrer-Dashboard, sortiert nach Handlungsbedarf.
  • Und bewusst etwas Spaß: Avatare, Konfetti, Serien – aber keine Rankings.

Technik

  • SvelteKit (Node) mit PostgreSQL 17, Datenbankänderungen als nummerierte SQL-Migrationen.
  • Betrieb in einem unprivilegierten Debian-LXC unter Proxmox mit rootful Podman und podman-compose. Rootless Podman scheitert im unprivilegierten LXC an fehlenden Sub-UIDs.
  • Drei Container: App, Datenbank und ein Backup-Container, der täglich DB-Dump und Uploads sichert und 21 Tage aufbewahrt.

Deployment mit GitHub Actions

git push ──► GitHub Actions baut das Image und legt es in die GitHub Container Registry
         ──► self-hosted Runner im LXC: podman-compose pull && up -d ──► Healthcheck

Der Runner läuft als eigener Benutzer und darf per sudo ausschließlich podman und podman-compose ausführen. So bleibt ein kompromittierter Workflow im Container eingesperrt.

Zwei Details, die Zeit gekostet haben

  • SvelteKit prüft bei Formularen die Herkunft (CSRF-Schutz). Hinter einem Reverse Proxy muss ORIGIN exakt der öffentlichen Adresse entsprechen, sonst schlägt jedes Formular fehl.
  • Für Foto-Uploads braucht der Reverse Proxy ein höheres Upload-Limit (client_max_body_size).

Wie es weitergeht

Für Phase 2 stehen Beurteilungsraster mit Peer-Einschätzung, Betreuungsprotokolle mit Lesebestätigung, Passkeys und ein Export nach Excel auf der Liste.