Gutscheintracker
Private Gutscheinverwaltung für einen Haushalt (Next.js + SQLite + Prisma). Gemeinsamer Bestand, Anmeldung per Passwort oder SSO (OIDC), Erinnerungen per Mail/Telegram.
Rollen: Der erste Nutzer ist Admin (wird beim Start aus APP_USER/APP_PASSWORD_HASH angelegt). Admins verwalten Nutzer, Einladungen und Einstellungen; alle Mitglieder verwalten gemeinsam Gutscheine.
Start (Docker Compose)
cp .env.example .env # Werte ausfüllen (v. a. APP_PASSWORD_HASH bzw. ADMIN_EMAIL, SESSION_SECRET, SETTINGS_ENCRYPTION_KEY, CRON_SECRET, APP_URL)
docker compose up --build -d
App: http://localhost:3000 — Anmeldung mit Benutzername oder E-Mail plus Passwort, oder per SSO (falls in den Einstellungen konfiguriert).
Der Erinnerungs-Scheduler startet automatisch im Production-Prozess (instrumentation.ts → lib/scheduler.ts, alle 15 Minuten, APP_URL als Basis).
Mitglieder einladen
Admins laden unter Einstellungen → Nutzer per E-Mail ein (Link 7 Tage gültig). Eingeladene richten ein Passwort ein oder melden sich per SSO an, sofern die OIDC-E-Mail zur Einladung passt. Mit ALLOW_PASSWORD_LOGIN=false brauchen Mitglieder SSO; der Admin behält zusätzlich den Passwort-Notfallzugang.
Update
git pull
docker compose up --build -d
Backup
Die SQLite-Datei liegt im Volume gutschein-data unter /data/gutscheine.db:
docker cp gutscheintracker-app-1:/data/gutscheine.db ./gutscheine-backup.db
# oder Volume direkt kopieren
docker run --rm -v gutschein-data:/data -v "$PWD":/backup alpine cp /data/gutscheine.db /backup/gutscheine-backup.db
Reverse Proxy
Für HTTPS einen Reverse Proxy (z. B. Caddy/Nginx) vor Port 3000 schalten und APP_URL auf die öffentliche URL setzen, damit der Scheduler die Cron-Route über die richtige Basis-URL aufruft.
Entwicklung
npm ci
npx prisma generate
npm run dev
npm test
npm run build