mcpField
N
nextjs-best-practices

nextjs-best-practices

github.com/davila7Development33.0k630 installsUpdated 1d ago
Repository

About nextjs-best-practices

nextjs-best-practices is a reference skill for developers building with the Next.js App Router. It organizes guidance on components, data fetching, routing, caching, and performance.

Key features

  1. 01Server and Client Component choices
  2. 02Data fetching and caching strategies
  3. 03App Router route organization
  4. 04API route handler guidance
  5. 05Performance and metadata optimization

Use cases

  1. 01Plan an App Router project structure
  2. 02Choose server or client rendering
  3. 03Configure request caching and revalidation
  4. 04Review API routes and Server Actions

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/davila7/claude-code-templates --skill nextjs-best-practices

After installing, type/nextjs-best-practicesin Claude Code to confirm it loaded.

Details

From the project README

Next.js Best Practices

Principles for Next.js App Router development.


1. Server vs Client Components

Decision Tree
Does it need...?
│
├── useState, useEffect, event handlers
│   └── Client Component ('use client')
│
├── Direct data fetching, no interactivity
│   └── Server Component (default)
│
└── Both? 
    └── Split: Server parent + Client child
By Default
TypeUse
ServerData fetching, layout, static content
ClientForms, buttons, interactive UI

2. Data Fetching Patterns

Fetch Strategy
PatternUse
DefaultStatic (cached at build)
RevalidateISR (time-based refresh)
No-storeDynamic (every request)
Data Flow
SourcePattern
DatabaseServer Component fetch
APIfetch with caching
User inputClient state + server action

3. Routing Principles

File Conventions
FilePurpose
page.tsxRoute UI
layout.tsxShared layout
loading.tsxLoading state
error.tsxError boundary
not-found.tsx404 page
Route Organization
PatternUse
Route groups (name)Organize without URL
Parallel routes @slotMultiple same-level pages
Intercepting (.)Modal overlays

4. API Routes

Route Handlers
MethodUse
GETRead data
POSTCreate data
PUT/PATCHUpdate data
DELETERemove data
Best Practices
  • Validate input with Zod
  • Return proper status codes
  • Handle errors gracefully
  • Use Edge runtime when possible

5. Performance Principles

Image Optimization
  • Use next/image component
  • Set priority for above-fold
  • Provide blur placeholder
  • Use responsive sizes
Bundle Optimization
  • Dynamic imports for heavy components
  • Route-based code splitting (automatic)
  • Analyze with bundle analyzer

6. Metadata

Static vs Dynamic
TypeUse
Static exportFixed metadata
generateMetadataDynamic per-route
Essential Tags
  • title (50-60 chars)
  • description (150-160 chars)
  • Open Graph images
  • Canonical URL

7. Caching Strategy

Cache Layers
LayerControl
Requestfetch options
Datarevalidate/tags
Full routeroute config
Revalidation
MethodUse
Time-basedrevalidate: 60
On-demandrevalidatePath/Tag
No cacheno-store

8. Server Actions

Use Cases
  • Form submissions
  • Data mutations
  • Revalidation triggers
Best Practices
  • Mark with 'use server'
  • Validate all inputs
  • Return typed responses
  • Handle errors

9. Anti-Patterns

❌ Don't✅ Do
'use client' everywhereServer by default
Fetch in client componentsFetch in server
Skip loading statesUse loading.tsx
Ignore error boundariesUse error.tsx
Large client bundlesDynamic imports

10. Project Structure

app/
├── (marketing)/     # Route group
│   └── page.tsx
├── (dashboard)/
│   ├── layout.tsx   # Dashboard layout
│   └── page.tsx
├── api/
│   └── [resource]/
│       └── route.ts
└── components/
    └── ui/

Remember: Server Components are the default for a reason. Start there, add client only when needed.

Comments

Markdown supported