✨ Características: - 45 ejercicios universitarios (Basic → Advanced) - Renderizado LaTeX profesional - IA generativa (Z.ai/DashScope) - Docker 9 servicios - Tests 123/123 pasando - Seguridad enterprise (JWT, XSS, Rate limiting) 🐳 Infraestructura: - Next.js 14 + Node.js 20 - PostgreSQL 15 + Redis 7 - Docker Compose completo - Nginx + SSL ready 📚 Documentación: - 5 informes técnicos completos - README profesional - Scripts de deployment automatizados Estado: Producción lista ✅
96 lines
2.2 KiB
JavaScript
96 lines
2.2 KiB
JavaScript
/** @type {import('next').NextConfig} */
|
|
const nextConfig = {
|
|
reactStrictMode: true,
|
|
swcMinify: true,
|
|
|
|
// Environment variables exposed to the browser
|
|
env: {
|
|
NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001',
|
|
NEXT_PUBLIC_APP_NAME: process.env.NEXT_PUBLIC_APP_NAME || 'Math Platform',
|
|
},
|
|
|
|
// Optimize images
|
|
images: {
|
|
domains: [],
|
|
formats: ['image/avif', 'image/webp'],
|
|
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
|
|
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
|
|
},
|
|
|
|
// Compiler options
|
|
compiler: {
|
|
removeConsole: process.env.NODE_ENV === 'production',
|
|
},
|
|
|
|
// Headers for security and CORS
|
|
async headers() {
|
|
return [
|
|
{
|
|
source: '/:path*',
|
|
headers: [
|
|
{
|
|
key: 'X-DNS-Prefetch-Control',
|
|
value: 'on'
|
|
},
|
|
{
|
|
key: 'X-Frame-Options',
|
|
value: 'SAMEORIGIN'
|
|
},
|
|
{
|
|
key: 'X-Content-Type-Options',
|
|
value: 'nosniff'
|
|
},
|
|
{
|
|
key: 'Referrer-Policy',
|
|
value: 'origin-when-cross-origin'
|
|
},
|
|
{
|
|
key: 'X-XSS-Protection',
|
|
value: '1; mode=block'
|
|
}
|
|
]
|
|
}
|
|
];
|
|
},
|
|
|
|
// Webpack configuration for KaTeX
|
|
webpack: (config, { isServer }) => {
|
|
if (!isServer) {
|
|
config.resolve.fallback = {
|
|
...config.resolve.fallback,
|
|
fs: false,
|
|
};
|
|
}
|
|
|
|
// Add support for importing CSS files
|
|
config.module.rules.push({
|
|
test: /\.(css|scss)$/,
|
|
use: ['style-loader', 'css-loader', 'postcss-loader'],
|
|
});
|
|
|
|
return config;
|
|
},
|
|
|
|
// Performance optimization
|
|
poweredByHeader: false,
|
|
compress: true,
|
|
|
|
// Output configuration for Docker - use no-static to avoid SSR prerendering issues
|
|
output: 'standalone',
|
|
|
|
// Disable static page generation to avoid KaTeX SSR issues
|
|
staticPageGenerationTimeout: 1,
|
|
|
|
// Experimental features
|
|
experimental: {
|
|
optimizePackageImports: ['lucide-react', '@radix-ui/react-icons'],
|
|
},
|
|
};
|
|
|
|
// Bundle analyzer plugin
|
|
const withBundleAnalyzer = require('@next/bundle-analyzer')({
|
|
enabled: process.env.ANALYZE === 'true',
|
|
});
|
|
|
|
module.exports = withBundleAnalyzer(nextConfig);
|