chore: Projektgeruest mit Next.js, TypeScript und Tailwind

Grundgeruest der Anwendung: Next.js 15 (App Router), TypeScript im
strict-Modus, Tailwind mit shadcn/ui-Farbtokens.

Bewusste Festlegungen:
- Nur Systemschriften, keine externen Fonts, kein CDN.
- Grundschrift eine Stufe groesser, Fokusring immer sichtbar,
  Touchziele mindestens 44px.
- Ampelfarben fuer Fristen als eigene Design-Tokens.
- Betraege werden als Cent-Ganzzahl gefuehrt, damit die Rechnungslegung
  keine Rundungsfehler erbt.
- .env.example dokumentiert alle Geheimnisse; npm run schluessel erzeugt sie.

Etappe: 1
Phase: Fundament
This commit is contained in:
Florian Wilde
2026-08-22 01:31:17 +02:00
commit cc72f5efd7
15 changed files with 638 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
// Standalone-Build fuer ein schlankes Docker-Image.
output: 'standalone',
reactStrictMode: true,
poweredByHeader: false,
// Argon2 ist eine native Bibliothek und darf nicht gebundelt werden.
serverExternalPackages: ['@node-rs/argon2'],
eslint: {
ignoreDuringBuilds: false,
},
async headers() {
return [
{
source: '/:path*',
headers: [
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'X-Frame-Options', value: 'DENY' },
{ key: 'Referrer-Policy', value: 'no-referrer' },
{ key: 'X-DNS-Prefetch-Control', value: 'off' },
{
key: 'Permissions-Policy',
// Kamera bleibt erlaubt: Belege werden am Handy fotografiert.
value: 'camera=(self), microphone=(self), geolocation=(), interest-cohort=()',
},
{
key: 'Strict-Transport-Security',
value: 'max-age=63072000; includeSubDomains; preload',
},
],
},
]
},
}
export default nextConfig