- 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>
1.8 KiB
1.8 KiB
name, description, context, agent
| name | description | context | agent |
|---|---|---|---|
| add-section | Orchestrate adding a new CMS-managed section to the portfolio following the full 6-step pattern | fork | general-purpose |
Add a new CMS-managed section called "$ARGUMENTS" to the portfolio.
Follow the exact 6-step pattern from CLAUDE.md:
Step 1 — lib/directus.ts
Read lib/directus.ts first, then add:
- TypeScript interface for the new collection
directusRequest()GraphQL query for the collection (with translation support if needed)- Export the fetch function
Step 2 — API Route
Create app/api/$ARGUMENTS/route.ts:
export const runtime = 'nodejs'export const dynamic = 'force-dynamic'- Try Directus first, fallback to hardcoded defaults
- Include
source: "directus" | "fallback" | "error"in response - Error logging behind
process.env.NODE_ENV === "development"guard
Step 3 — Component
Create app/components/$ARGUMENTS.tsx:
"use client"directive- Skeleton loading state for the async data
- Tailwind liquid-* tokens for styling (cards:
bg-gradient-to-br from-liquid-*/15 via-liquid-*/10 to-liquid-*/15 backdrop-blur-sm border-2 rounded-xl) - Headline uppercase with tracking-tighter and emerald accent dot
Step 4 — i18n Add translation keys to both:
messages/en.jsonmessages/de.json
Step 5 — Client Wrapper
Add ${ARGUMENTS}Client to app/components/ClientWrappers.tsx:
- Wrap in scoped
NextIntlClientProviderwith only the needed translation namespace
Step 6 — Homepage Integration
Add to app/_ui/HomePageServer.tsx:
- Fetch translations in the existing
Promise.all - Render wrapped in
<ScrollFadeIn>
After implementation:
- Run
npm run lint— must be 0 errors - Run
npm run build— must compile successfully - Report what was created and any manual steps remaining (e.g., creating the Directus collection)