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.
Scanned 9/22/2026
Install to Claude Code
npx -y skills add Marine-softdrink524/claude-skills --skill nextjs-expert --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Nextjs Expert?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/marine-softdrink524-nextjs-expert)More formats (shields.io, HTML) on the badges page.
---
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)
}
```
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!