/** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, swcMinify: true, output: 'standalone', // Disable problematic features untuk HF Spaces telemetry: { enabled: false }, // Environment variables env: { JEKYLL_ENV: process.env.JEKYLL_ENV || 'production', GEMINI_API_KEY: process.env.GEMINI_API_KEY, NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET, NEXT_TELEMETRY_DISABLED: '1', }, // API routes configuration async rewrites() { return [ // Jekyll preview proxy { source: '/preview/:site/:path*', destination: '/api/jekyll/preview/:site/:path*' }, // Static jekyll files { source: '/sites/:site/:path*', destination: '/api/jekyll/static/:site/:path*' } ]; }, // Headers untuk CORS dan security async headers() { return [ { source: '/api/:path*', headers: [ { key: 'Access-Control-Allow-Origin', value: process.env.NODE_ENV === 'production' ? process.env.ALLOWED_ORIGINS || '*' : '*' }, { key: 'Access-Control-Allow-Methods', value: 'GET, POST, PUT, DELETE, OPTIONS' }, { key: 'Access-Control-Allow-Headers', value: 'Content-Type, Authorization, X-Requested-With' } ] }, { source: '/sites/:path*', headers: [ { key: 'Cache-Control', value: 'public, max-age=3600, s-maxage=3600' } ] } ]; }, // Webpack config untuk Jekyll integration webpack: (config, { isServer }) => { if (!isServer) { config.resolve.fallback = { ...config.resolve.fallback, fs: false, path: false, child_process: false, }; } // Ignore Jekyll files in webpack config.watchOptions = { ...config.watchOptions, ignored: [ '**/projects/**', '**/templates/**', '**/.bundle/**' ] }; return config; }, // Image optimization images: { unoptimized: true, domains: ['localhost', 'huggingface.co'], }, // Build optimization compress: true, poweredByHeader: false, typescript: { ignoreBuildErrors: true, }, eslint: { ignoreDuringBuilds: true, }, // Experimental features experimental: { serverComponentsExternalPackages: ['@google/generative-ai'] } }; module.exports = nextConfig;