Spaces:
Sleeping
Sleeping
| /** @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; |