perf: eliminate Three.js/WebGL, fix render-blocking CSS, add dev team agents
- Replace ShaderGradientBackground WebGL shader (3 static spheres) with pure CSS radial-gradient divs — moves from ClientProviders (deferred JS) to app/layout.tsx as a server component rendered in initial HTML. Eliminates @shadergradient/react, three, @react-three/fiber from the JS bundle. Removes chunks/7001 (~20s CPU eval) and the 39s main thread block. - Remove optimizeCss/critters: it was converting <link rel="stylesheet"> to a JS-deferred preload, which PageSpeed read as a 410ms sequential CSS chain. Both CSS files now load as parallel <link> tags from initial HTML (~150ms). - Update browserslist safari >= 15 → 15.4 (Array.prototype.at, Object.hasOwn are native in 15.4+; eliminates unnecessary SWC compatibility transforms). - Delete orphaned app/styles/ghostContent.css (never imported anywhere, 3.7KB). - Add .claude/ dev team setup: 5 subagents (frontend-dev, backend-dev, tester, code-reviewer, debugger), 3 skills (/add-section, /review-changes, /check-quality), 3 path-scoped rules, settings.json with auto-lint hook. - Update CLAUDE.md with server/client orchestrator pattern, SSR animation safety rules, API route conventions, and improved command reference. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -31,16 +31,15 @@ const nextConfig: NextConfig = {
|
||||
},
|
||||
|
||||
// Performance optimizations
|
||||
experimental:
|
||||
process.env.NODE_ENV === "production"
|
||||
? {
|
||||
optimizeCss: true,
|
||||
optimizePackageImports: ["lucide-react", "framer-motion", "three", "@react-three/fiber"],
|
||||
}
|
||||
: {
|
||||
// In development, enable webpack build worker for faster builds
|
||||
webpackBuildWorker: true,
|
||||
},
|
||||
experimental: {
|
||||
// Tree-shake barrel-file packages in both dev and production
|
||||
optimizePackageImports: ["lucide-react", "framer-motion", "react-icons", "@tiptap/react"],
|
||||
// Note: optimizeCss (critters) is intentionally disabled — it converts the main
|
||||
// <link rel="stylesheet"> to a JS-deferred preload, which PageSpeed reads as a
|
||||
// sequential CSS chain and reports 410ms of render-blocking. Without it both CSS
|
||||
// files load as parallel <link> tags discovered from the initial HTML (~150ms total).
|
||||
...(process.env.NODE_ENV !== "production" ? { webpackBuildWorker: true } : {}),
|
||||
},
|
||||
|
||||
// Image optimization
|
||||
images: {
|
||||
@@ -96,17 +95,6 @@ const nextConfig: NextConfig = {
|
||||
};
|
||||
|
||||
if (!isServer) {
|
||||
// Optimize module concatenation and chunking for the client build
|
||||
config.optimization = {
|
||||
...config.optimization,
|
||||
moduleIds: "deterministic",
|
||||
chunkIds: "deterministic",
|
||||
splitChunks: {
|
||||
...config.optimization?.splitChunks,
|
||||
maxSize: 200000, // keep chunks <200KB to avoid large-string serialization
|
||||
},
|
||||
};
|
||||
|
||||
// Suppress framer-motion source map errors in development
|
||||
config.plugins.push(
|
||||
new webpack.SourceMapDevToolPlugin({
|
||||
|
||||
Reference in New Issue
Block a user