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>
22 lines
810 B
TypeScript
22 lines
810 B
TypeScript
import type { NextConfig } from "next";
|
|
|
|
/** Feste Sicherheitskopfzeilen; die CSP setzt src/proxy.ts je Anfrage mit Nonce. */
|
|
const SICHERHEITS_KOPFZEILEN = [
|
|
{ key: "X-Content-Type-Options", value: "nosniff" },
|
|
{ key: "X-Frame-Options", value: "DENY" },
|
|
{ key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
|
|
{ key: "Permissions-Policy", value: "geolocation=(), microphone=(), camera=()" },
|
|
];
|
|
|
|
const konfiguration: NextConfig = {
|
|
// Schlankes Laufzeit-Abbild für Dockerfile und LXC-Installer.
|
|
output: "standalone",
|
|
// ssh2 bringt optionale native Teile mit, die der Bundler nicht anfassen soll.
|
|
serverExternalPackages: ["ssh2", "pg-boss", "pino"],
|
|
async headers() {
|
|
return [{ source: "/:pfad*", headers: SICHERHEITS_KOPFZEILEN }];
|
|
},
|
|
};
|
|
|
|
export default konfiguration;
|