import nextMDX from "@next/mdx"; import path from "path"; /** @type {import('next').NextConfig} */ const nextConfig = { experimental: { optimizePackageImports: [ 'lucide-react', 'react-icons', '@tabler/icons-react', 'framer-motion', 'react-hook-form', '@radix-ui/react-label', '@radix-ui/react-slot', ], }, reactStrictMode: false, images: { remotePatterns: [ { protocol: 'https', hostname: 'i.pravatar.cc' }, { protocol: 'https', hostname: 'images.unsplash.com' }, { protocol: 'https', hostname: '*.supabase.co' }, { protocol: 'https', hostname: 'www.robot-speed.com' }, { protocol: 'https', hostname: 'robot-speed.com' }, ], formats: ['image/avif', 'image/webp'], loader: 'default', dangerouslyAllowSVG: true, contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;", }, pageExtensions: ["js", "jsx", "ts", "tsx", "md", "mdx"], poweredByHeader: false, compress: true, typescript: { ignoreBuildErrors: true }, eslint: { ignoreDuringBuilds: true }, productionBrowserSourceMaps: false, compiler: { removeConsole: process.env.NODE_ENV === 'production' ? { exclude: ['error'] } : false, reactRemoveProperties: process.env.NODE_ENV === 'production' ? { properties: ['^data-testid$'] } : false, }, transpilePackages: ['geist', 'cobe'], webpack: (config, { isServer, webpack }) => { config.resolve.alias = { ...config.resolve.alias, '@': path.resolve('.'), '@components': path.resolve('./components'), '@lib': path.resolve('./lib'), '@constants': path.resolve('./constants'), '@context': path.resolve('./context'), }; const isVercel = !!(process.env.VERCEL || process.env.NEXT_PUBLIC_VERCEL || process.env.VERCEL_ENV); const isProduction = process.env.NODE_ENV === 'production'; if (isVercel || isProduction) { config.plugins.push( new webpack.NormalModuleReplacementPlugin( /tailwind-cdn-loader/, path.resolve('./components/empty-loader.tsx') ) ); } return config; }, async headers() { return [ { source: '/:path*', headers: [ { key: 'X-Frame-Options', value: 'ALLOWALL' }, { key: 'Cache-Control', value: 'no-store, no-cache, must-revalidate, proxy-revalidate' }, { key: 'Pragma', value: 'no-cache' }, { key: 'Expires', value: '0' }, ], }, { source: '/_next/static/:path*', headers: [ { key: 'Cache-Control', value: 'no-cache, no-store, must-revalidate' }, ], }, ]; }, }; const withMDX = nextMDX({ extension: /\.mdx?$/, options: { remarkPlugins: [], rehypePlugins: [], }, }); export default withMDX(nextConfig);