nextjs-app-router-patterns — Next.js skill: what it does
This skill covers Next.js App Router patterns for rendering, routing, and data fetching. Use it when starting an App Router project or moving from Pages Router.
/plugin marketplace add wshobson/agents
/plugin install frontend-mobile-development@claude-code-workflowsWhat nextjs-app-router-patterns does
The skill explains Server and Client Components, static and dynamic rendering, streaming, and file conventions under app/. It also covers parallel and intercepting routes, caching, and Server Actions. Its examples include fetching data with fetch and setting up a root layout.
More worked examples live in references/details.md. The guidance starts with Server Components and adds 'use client' for interactivity or browser APIs. Slow data sources call for Suspense boundaries and loading states. Install it when your project uses App Router; it is not aimed at projects built with another framework.
What it helps with
- move a Pages Router project to App Router
- choose between Server and Client Components
- stream a page with slow data sources
- set up parallel routes with independent loading states
- handle mutations with Server Actions
Example prompts for the agent
- Move this section from Pages Router to App Router and suggest the file structure.
- Review these components and decide where `'use client'` is needed.
- Fetch this data with `fetch` and add a Suspense boundary for the slow source.
How to install nextjs-app-router-patterns
1Plugin marketplace
/plugin marketplace add wshobson/agents/plugin install frontend-mobile-development@claude-code-workflowsThis installs the whole frontend-mobile-development plugin with all its skills
2Skills CLI (Vercel)
npx skills add wshobson/agents --skill nextjs-app-router-patterns -a claude-code3Manually: put the files in place
~/.claude/skills/nextjs-app-router-patterns/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/nextjs-app-router-patterns/
1Skills CLI (Vercel)
npx skills add wshobson/agents --skill nextjs-app-router-patterns -a codex2Manually: put the files in place
.agents/skills/nextjs-app-router-patterns/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add wshobson/agents --skill nextjs-app-router-patterns -a cursor2Manually: put the files in place
.cursor/skills/nextjs-app-router-patterns/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install wshobson/agents nextjs-app-router-patterns2Manually: put the files in place
.github/skills/nextjs-app-router-patterns/SKILL.mdPlatform CLI
gemini skills install https://github.com/wshobson/agents --path plugins/frontend-mobile-development/skills/nextjs-app-router-patternsManually: put the files in place
.devin/skills/nextjs-app-router-patterns/SKILL.mdThe legacy .windsurf/skills/ path still works
Claude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set213
The whole set →Similar
Questions about nextjs-app-router-patterns
How do I install nextjs-app-router-patterns in Claude Code?
Run npx skills add wshobson/agents --skill nextjs-app-router-patterns -a claude-code.
What does nextjs-app-router-patterns do?
It provides patterns for Next.js App Router, covering components, rendering, routing, data fetching, and Server Actions.
Does this skill cover migration from Pages Router?
Yes. Moving an application from Pages Router to App Router is one of its stated use cases.
Source text
SKILL.md · MIT
---
name: nextjs-app-router-patterns
description: Master Next.js 14+ App Router with Server Components, streaming, parallel routes, and advanced data fetching. Use when building Next.js applications, implementing SSR/SSG, or optimizing React Server Components.
---
# Next.js App Router Patterns
Comprehensive patterns for Next.js 14+ App Router architecture, Server Components, and modern full-stack React development.
## When to Use This Skill
- Building new Next.js applications with App Router
- Migrating from Pages Router to App Router
- Implementing Server Components and streaming
- Setting up parallel and intercepting routes
- Optimizing data fetching and caching
- Building full-stack features with Server Actions
## Core Concepts
### 1. Rendering Modes
| Mode | Where | When to Use |
| --------------------- | ------------ | ----------------------------------------- |
| **Server Components** | Server only | Data fetching, heavy computation, secrets |
| **Client Components** | Browser | Interactivity, hooks, browser APIs |
| **Static** | Build time | Content that rarely changes |
| **Dynamic** | Request time | Personalized or real-time data |
| **Streaming** | Progressive | Large pages, slow data sources |
### 2. File Conventions
```
app/
├── layout.tsx # Shared UI wrapper
├── page.tsx # Route UI
├── loading.tsx # Loading UI (Suspense)
├── error.tsx # Error boundary
├── not-found.tsx # 404 UI
├── route.ts # API endpoint
├── template.tsx # Re-mounted layout
├── default.tsx # Parallel route fallback
└── opengraph-image.tsx # OG image generation
```
## Quick Start
```typescript
// app/layout.tsx
import { Inter } from 'next/font/google'
import { Providers } from './providers'
const inter = Inter({ subsets: ['latin'] })
export const metadata = {
title: { default: 'My App', template: '%s | My App' },
description: 'Built with Next.js App Router',
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en" suppressHydrationWarning>
<body className={inter.className}>
<Providers>{children}</Providers>
</body>
</html>
)
}
// app/page.tsx - Server Component by default
async function getProducts() {
const res = await fetch('https://api.example.com/products', {
next: { revalidate: 3600 }, // ISR: revalidate every hour
})
return res.json()
}
export default async function HomePage() {
const products = await getProducts()
return (
<main>
<h1>Products</h1>
<ProductGrid products={products} />
</main>
)
}
```
## Detailed patterns and worked examples
Detailed pattern documentation lives in `references/details.md`. Read that file when the navigation tier above is insufficient.
## Best Practices
### Do's
- **Start with Server Components** - Add 'use client' only when needed
- **Colocate data fetching** - Fetch data where it's used
- **Use Suspense boundaries** - Enable streaming for slow data
- **Leverage parallel routes** - Independent loading states
- **Use Server Actions** - For mutations with progressive enhancement
### Don'ts
- **Don't pass serializable data** - Server → Client boundary limitations
- **Don't use hooks in Server Components** - No useState, useEffect
- **Don't fetch in Client Components** - Use Server Components or React Query
- **Don't over-nest layouts** - Each layout adds to the component tree
- **Don't ignore loading states** - Always provide loading.tsx or Suspense
© Seth Hobson · MIT · wshobson/agents