import bundleAnalyzer from '@next/bundle-analyzer'; const withBundleAnalyzer = bundleAnalyzer({ enabled: process.env.ANALYZE === 'true' }); /** @type {import('next').NextConfig} */ const baseConfig = { output: 'standalone', reactStrictMode: false, compress: process.env.NODE_ENV === 'production', images: { remotePatterns: [ { protocol: "https", hostname: "api.telegram.org", }, { protocol: "https", hostname: "telegram.org", }, ...(process.env.API_HOSTNAME ? [{ protocol: "https", hostname: process.env.API_HOSTNAME, }] : []), ], }, async rewrites() { const apiBaseUrl = process.env.API_BASE_URL; if (!apiBaseUrl || apiBaseUrl === 'undefined') { console.warn('⚠️ API_BASE_URL not set! Set it to your backend domain'); console.warn('⚠️ Using localhost fallback - this will fail in production!'); return [ { source: '/api/:path*', destination: 'http://localhost:3001/api/:path*', }, ]; } console.log(`🔗 API rewrites pointing to: ${apiBaseUrl}`); return [ { source: '/api/:path*', destination: `${apiBaseUrl}/api/:path*`, }, ]; }, compiler: { removeConsole: process.env.NODE_ENV === 'production' ? { exclude: ['error', 'warn'], } : false, }, poweredByHeader: false, webpack: (config, { isServer, dev }) => { if (!isServer && !dev) { // Only apply aggressive code splitting in production config.optimization = { ...config.optimization, moduleIds: 'deterministic', splitChunks: { chunks: 'all', cacheGroups: { default: false, vendors: false, recharts: { test: /[\\/]node_modules[\\/]recharts[\\/]/, name: 'recharts', chunks: 'all', priority: 30, }, radix: { test: /[\\/]node_modules[\\/]@radix-ui[\\/]/, name: 'radix-ui', chunks: 'all', priority: 25, }, reactMarkdown: { test: /[\\/]node_modules[\\/]react-markdown[\\/]/, name: 'react-markdown', chunks: 'all', priority: 20, }, dateFns: { test: /[\\/]node_modules[\\/]date-fns[\\/]/, name: 'date-fns', chunks: 'all', priority: 15, }, framework: { name: 'framework', chunks: 'all', test: /[\\/]node_modules[\\/](react|react-dom|scheduler)[\\/]/, priority: 40, enforce: true, }, commons: { name: 'commons', minChunks: 2, priority: 10, }, }, }, }; } return config; }, onDemandEntries: { maxInactiveAge: 15 * 1000, pagesBufferLength: 2, }, productionBrowserSourceMaps: false, typescript: { ignoreBuildErrors: true, }, eslint: { ignoreDuringBuilds: true, }, }; const nextConfig = withBundleAnalyzer(baseConfig); export default nextConfig;