- scripts/bootstrap-admin.ts: legt ersten Plattform-Admin + Mandant via
provisionTenant(isPlatformAdmin) an; idempotent, per Env gesteuert. Ersetzt in
Prod den Demo-Seed. tsx-@/-Auflösung lokal verifiziert.
- docker-compose.coolify.yml: migrate-Job führt bei BOOTSTRAP_ADMIN=true das Skript
nach der Migration aus; BOOTSTRAP_*-Vars durchgereicht.
- .env.prod.example: Prod-Env-Referenz (HTTPS, kein Demo-Seed, Bootstrap-Vars).
- docs/DEPLOY-PROD-CONTABO.md: Runbook (VPS-Härtung/Swap, Coolify+Gitea, DNS/TLS
app.certvia.de, Deploy, Bootstrap, Backups, Go-Live-Checkliste).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Compose reicht nur explizit im environment-Block gelistete Vars an den Container.
AUTH_TRUST_HOST fehlte -> Auth.js v5 hinter dem Proxy warf UntrustedHost. Jetzt mit
Default true, muss in Coolify nicht extra gesetzt werden.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Der migrate-Container beendet sich nach 'migrate deploy' (restart:no) und der
app-Container hat kein tsx/keine Seed-Dateien -> manueller Seed unpraktisch.
Lösung: migrate führt bei RUN_DEMO_SEED=true nach der Migration den idempotenten
Demo-Seed aus (admin@demo.example / Demo1234!). In Prod die Variable weglassen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>