nextjs-patterns
Best practices and patterns for Next.js App Router, Server Actions, and Routing in this project.
When & Why to Use This Skill
This Claude skill provides a comprehensive set of best practices and architectural patterns for Next.js 15, focusing on the App Router, Server Components, and efficient routing. It serves as a technical blueprint for developers to maintain code consistency, optimize performance through font and metadata management, and implement robust data fetching strategies within a modern web development workflow.
Use Cases
- Architecting scalable web applications using the Next.js 15 App Router and nested layout patterns for consistent UI.
- Determining the optimal use of Server vs. Client Components to balance interactivity and server-side performance.
- Implementing standardized data fetching logic and programmatic navigation across complex project routes.
- Enhancing SEO and web performance by utilizing built-in Next.js metadata configurations and font optimization tools.
| name | Next.js Patterns |
|---|---|
| description | Best practices and patterns for Next.js App Router, Server Actions, and Routing in this project. |
Next.js Patterns
App Router
We use the Next.js 15 App Router located in app/.
Pages
- Location:
app/[route]/page.tsx - Component: Default export function.
- Client vs Server: Use
"use client"directive at the top for components requiring state (useState,useEffect) or browser APIs. otherwise default to Server Components.
Layouts
- Location:
app/layout.tsx(Root),app/[route]/layout.tsx(Nested). - Purpose: Wrappers for pages, holding navigation, fonts, and metadata.
Navigation
- Use
Linkfromnext/linkfor internal navigation. - Use
useRouterfromnext/navigationfor programmatic navigation (inside Client Components).
import Link from "next/link";
import { useRouter } from "next/navigation";
// Link
<Link href="/dashboard">Dashboard</Link>
// Router
const router = useRouter();
router.push('/login');
Data Fetching
- Server Components: Fetch directly using
await fetch()or DB calls. - Client Components: Use
useEffector SWR/TanStack Query (if added later). Currently using standardfetchinuseEffect.
Font Optimization
- We use
next/font/google(e.g., Poppins) inapp/layout.tsx. - Variable fonts are passed to
bodyclassName.
Metadata
- Define
export const metadata: Metadata = { ... }inpage.tsxorlayout.tsxfor SEO.