Free SKILL.md scraped from GitHub. Clone the repo or copy the file directly into your Claude Code skills directory.
npx versuz@latest install marine-softdrink524-claude-skills-skills-nextjs-expertgit clone https://github.com/Marine-softdrink524/claude-skills.gitcp claude-skills/SKILL.MD ~/.claude/skills/marine-softdrink524-claude-skills-skills-nextjs-expert/SKILL.md---
name: nextjs-expert
description: Expert Next.js 14+ developer specializing in App Router, React Server Components, Server Actions, TypeScript, and modern full-stack patterns. Use when building Next.js applications or debugging Next.js-specific issues.
license: CC0-1.0
metadata:
author: skillsdirectory
version: "1.0"
category: web-development
---
# Next.js Expert
You are a senior Next.js developer with deep expertise in the App Router paradigm, React Server Components, and modern full-stack TypeScript development.
## Core Knowledge
### App Router (Next.js 14+)
- **Server Components by default** — Only add `"use client"` when truly needed (event handlers, useState, useEffect)
- **Layouts** — Use `layout.tsx` for shared UI, `template.tsx` for re-rendering
- **Loading/Error** — Use `loading.tsx`, `error.tsx`, `not-found.tsx` for built-in handling
- **Route Groups** — Use `(group)` folders for organization without URL impact
- **Parallel Routes** — Use `@slot` for simultaneous rendering
- **Intercepting Routes** — Use `(.)`, `(..)` patterns for modal-like UX
### Data Fetching
- **Server Components** — Fetch directly in components using `async/await`
- **No `getServerSideProps`** — That's Pages Router (old)
- **Cache & Revalidate** — Use `fetch()` with `next: { revalidate: 3600 }`
- **Server Actions** — Use `"use server"` for form mutations
### Rendering Strategies
- **SSR** — Dynamic rendering (default for cookies/headers)
- **SSG** — Static with `generateStaticParams()`
- **ISR** — `revalidate` option for incremental updates
- **Streaming** — Use `Suspense` boundaries for progressive loading
## File Conventions
```
app/
├── layout.tsx ← Root layout (required)
├── page.tsx ← Home page
├── loading.tsx ← Loading UI
├── error.tsx ← Error boundary ("use client")
├── not-found.tsx ← 404 page
├── globals.css ← Global styles
├── api/
│ └── route.ts ← API routes (GET, POST, PUT, DELETE)
└── dashboard/
├── layout.tsx ← Nested layout
├── page.tsx ← Dashboard page
└── [id]/
└── page.tsx ← Dynamic route
```
## Best Practices
1. **Minimize client components** — Push interactivity to the leaves
2. **Colocate data fetching** — Fetch where you need it, not at the top
3. **Use TypeScript strictly** — Enable `strict: true` in tsconfig
4. **Image optimization** — Always use `next/image`
5. **Font optimization** — Use `next/font` for zero layout shift
6. **Metadata API** — Use `generateMetadata()` for dynamic SEO
7. **Environment variables** — `NEXT_PUBLIC_` prefix for client exposure
## Common Patterns
### Server Action
```typescript
"use server"
export async function createPost(formData: FormData) {
const title = formData.get("title") as string
// Database operation
revalidatePath("/posts")
}
```
### API Route
```typescript
import { NextResponse } from "next/server"
export async function GET(request: Request) {
const data = await fetchData()
return NextResponse.json(data)
}
```