import type { NextConfig } from "next"; const isDev = process.env.NODE_ENV === 'development'; const nextConfig: NextConfig = { distDir: 'dist', images: { remotePatterns: [ { protocol: 'https', hostname: '**', }, ], formats: ['image/avif', 'image/webp'], deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], imageSizes: [16, 32, 48, 64, 96, 128, 256, 384], dangerouslyAllowSVG: true, contentDispositionType: 'attachment', contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;", minimumCacheTTL: 60, unoptimized: !isDev, }, compress: true, poweredByHeader: false, reactStrictMode: true, reactProductionProfiling: !isDev, experimental: { optimizePackageImports: ['lucide-react'], }, compiler: { removeConsole: process.env.NODE_ENV === 'production', }, headers: async () => { return [ { source: '/:path*', headers: [ { key: 'X-DNS-Prefetch-Control', value: 'on' }, { key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubDomains; preload' }, { key: 'X-XSS-Protection', value: '1; mode=block' }, { key: 'X-Frame-Options', value: 'SAMEORIGIN' }, { key: 'X-Content-Type-Options', value: 'nosniff' }, { key: 'Referrer-Policy', value: 'origin-when-cross-origin' }, { key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' }, ], }, { source: '/:all*(svg|jpg|jpeg|png|gif|webp|avif)', locale: false, headers: [ { key: 'Cache-Control', value: 'public, max-age=31536000, immutable', }, ], }, { source: '/_next/static/:all*', locale: false, headers: [ { key: 'Cache-Control', value: 'public, max-age=31536000, immutable', }, ], }, { source: '/fonts/:all*', locale: false, headers: [ { key: 'Cache-Control', value: 'public, max-age=31536000, immutable', }, { key: 'Access-Control-Allow-Origin', value: '*', }, ], }, ]; }, }; export default nextConfig;