import type { NextConfig } from "next"; const nextConfig: NextConfig = { // Enable standalone output for Docker deployment output: 'standalone', // Skip linting during build for faster Docker builds eslint: { ignoreDuringBuilds: true, }, // Skip TypeScript checking during build (for faster Docker builds) typescript: { ignoreBuildErrors: true, }, // Optimize for production builds experimental: { // Enable turbo mode for faster builds turbo: { rules: { '*.svg': { loaders: ['@svgr/webpack'], as: '*.js', }, }, }, }, // Image optimization images: { formats: ['image/webp', 'image/avif'], minimumCacheTTL: 60 * 60 * 24 * 30, // 30 days }, // Security headers async headers() { return [ { // Security headers apply to every route, including static assets. source: '/:path*', headers: [ { key: 'X-Frame-Options', value: 'DENY', }, { key: 'X-Content-Type-Options', value: 'nosniff', }, { key: 'Referrer-Policy', value: 'origin-when-cross-origin', }, ], }, { // WHY: no-cache must not hit hashed build assets (_next/static) or // optimized images (_next/image); they are content-addressed and rely on // long-lived caching. Overriding them would re-download the bundle on // every page load. source: '/((?!_next/static|_next/image).*)', headers: [ { key: 'Cache-Control', value: 'private, no-cache, must-revalidate, max-age=0', }, { key: 'Pragma', value: 'no-cache' }, { key: 'Expires', value: '0' }, ], }, ]; }, }; export default nextConfig;