feat: Grundgerüst mit Anmeldung, Layout und Design-Tokens

Next.js 16, Prisma 7, Tailwind 4 und Vitest/Playwright, Konfiguration aus
Laufzettel übernommen, weil dort derselbe Stack erprobt ist.

Die Farben der Branding-Vorgabe stehen als Tokens in globals.css, das
helle Theme setzt dieselben Namen neu. Amber und Rot sind dort
abgedunkelt, sonst reicht der Kontrast nicht – ein Test prüft beide
Themes gegen 4,5:1.

Anmeldung mit lokalem Benutzer, Rolle je Anfrage aus der Datenbank,
Audit-Log per Trigger nur anhängbar. Geprüft im gebauten Stand auf
1440 px und 390 px.

Closes #001

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 09:23:41 +02:00
co-authored by Claude Opus 5.5
parent c3211d0fe2
commit 871bb3a77c
75 changed files with 10155 additions and 15 deletions
+41
View File
@@ -0,0 +1,41 @@
# ── Datenbank ────────────────────────────────────────────────────────────────
DATABASE_URL=postgresql://proxdeploy:proxdeploy@localhost:5437/proxdeploy
# Nur für Tests; wird vor jedem Test geleert.
TEST_DATABASE_URL=postgresql://proxdeploy:proxdeploy@localhost:5437/proxdeploy_test
# ── Geheimnisse ──────────────────────────────────────────────────────────────
# Schlüssel für AES-256-GCM (Proxmox-Token, SSH-Schlüssel, OIDC-Secret): genau 32 Byte, base64.
# Erzeugen: openssl rand -base64 32 – NIE ändern, sonst sind gespeicherte Geheimnisse unlesbar.
PROXDEPLOY_SCHLUESSEL=
# Signiert die Sitzungscookies. Erzeugen: openssl rand -base64 48
SITZUNG_GEHEIMNIS=
# ── Adresse und Reverse-Proxy ────────────────────────────────────────────────
# Öffentliche Adresse, wie Browser und CLI sie sehen (ohne Schrägstrich am Ende).
APP_URL=http://localhost:3000
# true hinter einem Reverse-Proxy: X-Forwarded-For/-Proto werden ausgewertet.
TRUST_PROXY=false
# ── Erster Administrator ─────────────────────────────────────────────────────
# Wird nur angelegt, solange es noch keinen Benutzer gibt. Danach wirkungslos.
ADMIN_BENUTZER=admin
ADMIN_PASSWORT=
# ── OIDC (optional, z. B. authentik) ─────────────────────────────────────────
OIDC_AKTIV=false
OIDC_ISSUER=
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
OIDC_ANZEIGENAME=SSO
# Gruppen-Claim und Gruppennamen für die Rollen.
OIDC_GRUPPEN_CLAIM=groups
OIDC_GRUPPE_ADMIN=proxdeploy-admins
OIDC_GRUPPE_OPERATOR=proxdeploy-operators
# ── Worker ───────────────────────────────────────────────────────────────────
# Wie viele Aufträge gleichzeitig laufen dürfen.
WORKER_PARALLEL=4
# ── Logs ─────────────────────────────────────────────────────────────────────
# trace | debug | info | warn | error
LOG_LEVEL=info