| /** @type {import('next').NextConfig} */ | |
| const nextConfig = { | |
| reactStrictMode: true, | |
| // Performance optimizations | |
| swcMinify: true, | |
| compress: true, | |
| // Image optimization | |
| images: { | |
| formats: ['image/webp', 'image/avif'], | |
| minimumCacheTTL: 60, | |
| dangerouslyAllowSVG: true, | |
| contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;", | |
| }, | |
| // Experimental features for better performance | |
| experimental: { | |
| optimizeCss: true, | |
| scrollRestoration: true, | |
| }, | |
| // Headers for better caching and security | |
| async headers() { | |
| return [ | |
| { | |
| source: '/(.*)', | |
| headers: [ | |
| { | |
| key: 'X-Frame-Options', | |
| value: 'DENY', | |
| }, | |
| { | |
| key: 'X-Content-Type-Options', | |
| value: 'nosniff', | |
| }, | |
| { | |
| key: 'Referrer-Policy', | |
| value: 'origin-when-cross-origin', | |
| }, | |
| ], | |
| }, | |
| { | |
| source: '/(.*)\\.(ico|png|jpg|jpeg|gif|webp|svg|mp4|webm)', | |
| headers: [ | |
| { | |
| key: 'Cache-Control', | |
| value: 'public, max-age=31536000, immutable', | |
| }, | |
| ], | |
| }, | |
| ]; | |
| }, | |
| // Bundle analyzer (optional - uncomment to analyze bundle size) | |
| // webpack: (config, { isServer }) => { | |
| // if (!isServer) { | |
| // config.resolve.fallback = { | |
| // ...config.resolve.fallback, | |
| // fs: false, | |
| // }; | |
| // } | |
| // return config; | |
| // }, | |
| }; | |
| export default nextConfig; | |