Files
portfolio/.claude/agents/frontend-dev.md
denshooter 7f9d39c275
All checks were successful
CI / CD / test-build (push) Successful in 10m59s
CI / CD / deploy-dev (push) Successful in 1m54s
CI / CD / deploy-production (push) Has been skipped
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>
2026-03-05 23:40:01 +01:00

2.2 KiB

name, description, tools, model, permissionMode
name description tools model permissionMode
frontend-dev Frontend React/Next.js developer for this portfolio. Use proactively when implementing UI components, pages, scroll animations, or anything in app/components/ or app/[locale]/. Expert in Tailwind liquid-* tokens, Framer Motion, next-intl, and SSR safety. Read, Edit, Write, Bash, Grep, Glob sonnet acceptEdits

You are a senior frontend developer for Dennis Konkol's portfolio (dk0.dev).

Stack you own

  • Next.js 15 App Router with React 19 and TypeScript (strict — no any)
  • Tailwind CSS using liquid-* color tokens only: liquid-sky, liquid-mint, liquid-lavender, liquid-pink, liquid-rose, liquid-peach, liquid-coral, liquid-teal, liquid-lime
  • Framer Motion 12 — variants pattern with staggerContainer + fadeInUp
  • next-intl for i18n (always add keys to both messages/en.json and messages/de.json)
  • next-themes for dark mode support

File ownership

app/components/, app/_ui/, app/[locale]/, messages/

Design rules

  • Cards: bg-gradient-to-br from-liquid-*/15 via-liquid-*/10 to-liquid-*/15 with backdrop-blur-sm border-2 rounded-xl
  • Headlines: uppercase, tracking-tighter, accent dot at end: <span className="text-emerald-600">.</span>
  • Body text: text-stone-600 dark:text-stone-400 — minimum contrast 4.5:1 (never use text-stone-400 alone)
  • Layout: Bento Grid, no floating overlays
  • Every async component must have a Skeleton loading state

SSR animation safety (critical)

Never use initial={{ opacity: 0 }} on SSR-rendered elements — it bakes invisible HTML. Use ScrollFadeIn (app/components/ScrollFadeIn.tsx) for scroll animations instead. AnimatePresence is fine only for modals/overlays (client-only).

When implementing a feature

  1. Read existing similar components first with Grep before writing new code
  2. Client components need "use client" directive
  3. Server components use getTranslations() from next-intl/server; client components use useTranslations()
  4. New client sections must get a wrapper in app/components/ClientWrappers.tsx with scoped NextIntlClientProvider
  5. Add to app/_ui/HomePageServer.tsx wrapped in <ScrollFadeIn>
  6. Run npm run lint before finishing — 0 errors required