mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-05-06 19:49:36 +00:00
9fcf0cd3b7
**Build Fixes:** - Updated next.config.js for Next.js 16 Turbopack (removed deprecated swcMinify, removed webpack config) - Fixed TypeScript configuration (disabled noUnusedLocals/Parameters for dependencies) - Created Client Component wrapper (providers.tsx) for Redux Provider in Server Components - Fixed FakeMUI imports and exports (@metabuilder/fakemui scoped package) - Updated FakeMUI package.json with version-flexible peer dependencies (React 18/19) - Added hooks utility module for email components accessibility **Module Organization:** - Added @metabuilder/fakemui/hooks export for accessibility utilities - Created fakemui/react/components/index.ts for component re-exports - Converted layout/index.js to TypeScript to support type exports - Moved email components to email-wip/ (work-in-progress, needs import fixes) **Deployment Status:** - ✅ emailclient npm run build succeeds - ✅ Production build generated in .next/ - ✅ Ready for Docker deployment **TODO (Phase 5+):** - Fix email component imports and re-enable in FakeMUI exports - Implement /api/v1/packages/email_client/* endpoints for package loading - Deploy Docker services (Postfix, Dovecot, PostgreSQL, Redis, email-service) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
116 lines
2.4 KiB
JavaScript
116 lines
2.4 KiB
JavaScript
/** @type {import('next').NextConfig} */
|
|
const nextConfig = {
|
|
reactStrictMode: true,
|
|
productionBrowserSourceMaps: false,
|
|
|
|
// Turbopack configuration (Next.js 16)
|
|
turbopack: {},
|
|
|
|
// External packages
|
|
transpilePackages: ['@metabuilder/fakemui', '@metabuilder/redux-core', '@metabuilder/hooks'],
|
|
|
|
// API proxy for development
|
|
rewrites: async () => {
|
|
return {
|
|
beforeFiles: [
|
|
{
|
|
source: '/api/v1/:path*',
|
|
destination: 'http://localhost:3001/api/v1/:path*',
|
|
has: [
|
|
{
|
|
type: 'query',
|
|
key: 'bypass',
|
|
value: 'false'
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
|
|
// Environment variables
|
|
env: {
|
|
NEXT_PUBLIC_API_URL: process.env.API_BASE_URL || 'http://localhost:3000'
|
|
},
|
|
|
|
// Headers for security and caching
|
|
async headers() {
|
|
return [
|
|
{
|
|
source: '/:path*',
|
|
headers: [
|
|
{
|
|
key: 'X-Content-Type-Options',
|
|
value: 'nosniff'
|
|
},
|
|
{
|
|
key: 'X-Frame-Options',
|
|
value: 'DENY'
|
|
},
|
|
{
|
|
key: 'X-XSS-Protection',
|
|
value: '1; mode=block'
|
|
},
|
|
{
|
|
key: 'Referrer-Policy',
|
|
value: 'strict-origin-when-cross-origin'
|
|
},
|
|
{
|
|
key: 'Permissions-Policy',
|
|
value: 'geolocation=(), microphone=(), camera=()'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
source: '/static/:path*',
|
|
headers: [
|
|
{
|
|
key: 'Cache-Control',
|
|
value: 'public, max-age=31536000, immutable'
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
|
|
// Content Security Policy
|
|
async redirects() {
|
|
return [
|
|
{
|
|
source: '/email',
|
|
destination: '/',
|
|
permanent: false
|
|
}
|
|
]
|
|
},
|
|
|
|
// Image optimization
|
|
images: {
|
|
remotePatterns: [
|
|
{
|
|
protocol: 'https',
|
|
hostname: '**'
|
|
}
|
|
],
|
|
formats: ['image/avif', 'image/webp'],
|
|
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
|
|
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384]
|
|
},
|
|
|
|
// Compression
|
|
compress: true,
|
|
|
|
// Custom server logs
|
|
onDemandEntries: {
|
|
maxInactiveAge: 60 * 1000,
|
|
pagesBufferLength: 5
|
|
},
|
|
|
|
// Experimental features (optional)
|
|
experimental: {
|
|
optimizePackageImports: ['@metabuilder/fakemui']
|
|
}
|
|
}
|
|
|
|
export default nextConfig
|