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
+26
View File
@@ -0,0 +1,26 @@
import { defineConfig, devices } from "@playwright/test";
/**
* Ende-zu-Ende-Abläufe – immer gegen den **gebauten** Stand (`pnpm build && pnpm start`), weil
* `next dev` hier nicht verlässlich hydriert und ein Screenshot dann nichts beweist.
*/
const APP_URL = process.env["E2E_APP_URL"] ?? "http://127.0.0.1:3310";
export default defineConfig({
testDir: "./tests/e2e",
fullyParallel: false,
workers: 1,
forbidOnly: Boolean(process.env["CI"]),
reporter: "list",
use: {
baseURL: APP_URL,
trace: "retain-on-failure",
locale: "de-DE",
timezoneId: "Europe/Berlin",
},
projects: [
{ name: "desktop", use: { ...devices["Desktop Chrome"], viewport: { width: 1440, height: 900 } } },
// 390 px ist die Abnahmebreite fürs Handy (kein horizontales Scrollen).
{ name: "handy", use: { ...devices["Pixel 7"], viewport: { width: 390, height: 844 } } },
],
});