/** @type {import('next').NextConfig} */ const nextConfig = { output: 'standalone', experimental: { appDir: true, }, // Environment variables env: { NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001', NEXT_PUBLIC_WS_URL: process.env.NEXT_PUBLIC_WS_URL || 'ws://localhost:3001', NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY: process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY, NEXT_PUBLIC_GOOGLE_CLIENT_ID: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID, }, // Image configuration for external sources images: { remotePatterns: [ { protocol: 'https', hostname: 'lh3.googleusercontent.com', port: '', pathname: '/a/**', }, { protocol: 'http', hostname: 'localhost', port: '3001', pathname: '/api/images/**', }, ], dangerouslyAllowSVG: true, contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;", }, // Headers for security async headers() { return [ { source: '/(.*)', headers: [ { key: 'X-Frame-Options', value: 'DENY', }, { key: 'X-Content-Type-Options', value: 'nosniff', }, { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin', }, { key: 'X-XSS-Protection', value: '1; mode=block', }, ], }, ]; }, // Rewrites for API proxy in development async rewrites() { if (process.env.NODE_ENV === 'development') { return [ { source: '/api/:path*', destination: `${process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001'}/api/:path*`, }, ]; } return []; }, // Webpack configuration webpack: (config, { dev, isServer }) => { // Optimization for production if (!dev && !isServer) { config.optimization.splitChunks.cacheGroups = { ...config.optimization.splitChunks.cacheGroups, vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all', priority: 10, }, common: { name: 'common', minChunks: 2, chunks: 'all', priority: 5, reuseExistingChunk: true, }, }; } return config; }, // TypeScript configuration typescript: { ignoreBuildErrors: false, }, // ESLint configuration eslint: { ignoreDuringBuilds: false, }, // Compression and optimization compress: true, poweredByHeader: false, generateEtags: true, // Redirects async redirects() { return [ { source: '/dashboard', destination: '/', permanent: false, has: [ { type: 'cookie', key: 'authenticated', value: undefined, }, ], }, ]; }, }; module.exports = nextConfig;