import type { NextConfig } from "next"; import { defaultLocale, locales } from "./src/i18n/routes"; const PUBLIC_TO_INTERNAL: Record = { "/": "/de", "/ueber-mich": "/de/about", "/projekte": "/de/projects", "/kontakt": "/de/contact", "/impressum": "/de/legal", "/datenschutz": "/de/privacy", "/en": "/en", "/en/about": "/en/about", "/en/projects": "/en/projects", "/en/contact": "/en/contact", "/en/legal": "/en/legal", "/en/privacy": "/en/privacy", }; // Rewrites für Projekt-Detail: /projekte/[slug] -> /de/projects/[slug] (dynamisch). function projectItemRewrite(srcPrefix: string, destLocale: "de" | "en") { return { source: `${srcPrefix}/:slug`, destination: `/${destLocale}/projects/:slug`, }; } const config: NextConfig = { // better-sqlite3 ist ein nativer Server-only Import. Wir halten ihn aus dem // Client-Bundle, indem wir ihn ausschließlich in `src/lib/db/**` und Server- // Komponenten verwenden — keine externen Imports in `src/app/**/page.tsx` // ohne expliziten server boundary. serverExternalPackages: ["better-sqlite3"], images: { unoptimized: true }, // Rewrites als Backup zum proxy.ts (manche Next.js 16 Setups greifen den // proxy nicht konsistent für statische Routen). Der proxy.ts macht // zusätzlich den Locale-Header-Set und Auth — wir behalten beides. async rewrites() { return [ ...Object.entries(PUBLIC_TO_INTERNAL).map(([from, to]) => ({ source: from, destination: to, })), projectItemRewrite("/projekte", "de"), projectItemRewrite("/en/projects", "en"), ]; }, // Standalone-Build: Next.js erzeugt unter .next/standalone einen getrimmten // Server-Tree mit nur den Dependencies, die er zur Runtime braucht. Image // schrumpft von ~1.2 GB auf ~150 MB. output: "standalone", // Traefik vertraut uns — wir akzeptieren X-Forwarded-For. // (trustHostHeader ist die Next.js-Default ab 16, wenn hinter einem // Reverse-Proxy deployed.) }; export default config;