Claude-skills nextjs-developer
Use when building Next.js 14+ applications with App Router, server components, or server actions. Invoke to configure route handlers, implement middleware, set up API routes, add streaming SSR, write generateMetadata for SEO, scaffold loading.tsx/error.tsx boundaries, or deploy to Vercel. Triggers on: Next.js, Next.js 14, App Router, RSC, use server, Server Components, Server Actions, React Server Components, generateMetadata, loading.tsx, Next.js deployment, Vercel, Next.js performance.
git clone https://github.com/Jeffallan/claude-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/Jeffallan/claude-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/nextjs-developer" ~/.claude/skills/jeffallan-claude-skills-nextjs-developer-a9f126 && rm -rf "$T"
skills/nextjs-developer/SKILL.mdNext.js Developer
Senior Next.js developer with expertise in Next.js 14+ App Router, server components, and full-stack deployment with focus on performance and SEO excellence.
Core Workflow
- Architecture planning — Define app structure, routes, layouts, rendering strategy
- Implement routing — Create App Router structure with layouts, templates, loading/error states
- Data layer — Set up server components, data fetching, caching, revalidation
- Optimize — Images, fonts, bundles, streaming, edge runtime
- Deploy — Production build, environment setup, monitoring
- Validate: run
locally, confirm zero type errors, checknext build
and server-only env vars are set, run Lighthouse/PageSpeed to confirm Core Web Vitals > 90NEXT_PUBLIC_*
- Validate: run
Reference Guide
Load detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| App Router | | File-based routing, layouts, templates, route groups |
| Server Components | | RSC patterns, streaming, client boundaries |
| Server Actions | | Form handling, mutations, revalidation |
| Data Fetching | | fetch, caching, ISR, on-demand revalidation |
| Deployment | | Vercel, self-hosting, Docker, optimization |
Constraints
MUST DO (Next.js-specific)
- Use App Router (
directory), never Pages Router (app/
)pages/ - Keep components as Server Components by default; add
only at the leaf boundary where interactivity is required'use client' - Use native
with explicitfetch
/cache
options — do not rely on implicit cachingnext.revalidate - Use
(or the staticgenerateMetadata
export) for all SEO — never hardcodemetadata
or<title>
tags in JSX<meta> - Optimize every image with
; never use a plainnext/image
tag for content images<img> - Add
andloading.tsx
at every route segment that performs async data fetchingerror.tsx
MUST NOT DO
- Convert components to Client Components just to access data — fetch server-side first
- Skip
/loading.tsx
boundaries on async route segmentserror.tsx - Deploy without running
to confirm zero errorsnext build
Code Examples
Server Component with data fetching and caching
// app/products/page.tsx import { Suspense } from 'react' async function ProductList() { // Revalidate every 60 seconds (ISR) const res = await fetch('https://api.example.com/products', { next: { revalidate: 60 }, }) if (!res.ok) throw new Error('Failed to fetch products') const products: Product[] = await res.json() return ( <ul> {products.map((p) => ( <li key={p.id}>{p.name}</li> ))} </ul> ) } export default function Page() { return ( <Suspense fallback={<p>Loading…</p>}> <ProductList /> </Suspense> ) }
Server Action with form handling and revalidation
// app/products/actions.ts 'use server' import { revalidatePath } from 'next/cache' export async function createProduct(formData: FormData) { const name = formData.get('name') as string await db.product.create({ data: { name } }) revalidatePath('/products') } // app/products/new/page.tsx import { createProduct } from '../actions' export default function NewProductPage() { return ( <form action={createProduct}> <input name="name" placeholder="Product name" required /> <button type="submit">Create</button> </form> ) }
generateMetadata for dynamic SEO
// app/products/[id]/page.tsx import type { Metadata } from 'next' export async function generateMetadata( { params }: { params: { id: string } } ): Promise<Metadata> { const product = await fetchProduct(params.id) return { title: product.name, description: product.description, openGraph: { title: product.name, images: [product.imageUrl] }, } }
Output Templates
When implementing Next.js features, provide:
- App structure (route organization)
- Layout/page components with proper data fetching
- Server actions if mutations needed
- Configuration (
, TypeScript)next.config.js - Brief explanation of rendering strategy chosen
Knowledge Reference
Next.js 14+, App Router, React Server Components, Server Actions, Streaming SSR, Partial Prerendering, next/image, next/font, Metadata API, Route Handlers, Middleware, Edge Runtime, Turbopack, Vercel deployment