--- id: greedychipmunk/agent-skills/nextjs-developer version: "b4e61775" license: MIT install: manual updated: 2026-06-28 --- # nextjs-developer — Master Next.js 15+ development with App Router architecture, Server Components, and advanced patterns like Partial Prerendering. This skill covers file-based routing, Server Actions, caching strategies, and React 19 features to optimize performance and developer experience. Learn streaming, error boundaries, and production-ready patterns for modern web applications. Publisher: greedychipmunk · Stars: 12 · Updated: 2026-06-28 Install (manual): `git clone https://github.com/greedychipmunk/agent-skills` ## SKILL.md # Next.js Developer Skill ## Overview This skill provides comprehensive expertise in building production-ready Next.js applications using the **App Router** (Next.js 15+). It covers Server Components, React 19 support, data fetching patterns, routing, API routes, caching, and performance optimization. ## Core Capabilities ### App Router Architecture - **Server Components**: Default rendering model for optimal performance - **Client Components**: Interactive components with `"use client"` directive - **Layouts**: Shared UI with preserved state across routes - **Templates**: Fresh instances on navigation (no state preservation) - **Loading UI**: Streaming with `loading.tsx` files - **Error Handling**: Granular error boundaries with `error.tsx` ### Data Fetching - **Server-side fetching**: Direct database/API access in Server Components - **Caching strategies**: Dynamic rendering by default, explicit caching, and incremental regeneration - **Revalidation**: Time-based and on-demand cache invalidation - **Parallel fetching**: Optimized data loading patterns ### Routing System - **File-based routing**: Automatic route generation from file structure - **Dynamic routes**: `[param]` and catch-all `[...slug]` patterns - **Route groups**: `(folder)` for organization without URL impact - **Parallel routes**: `@slot` for simultaneous route rendering - **Intercepting routes**: Modal patterns with `(.)`, `(..)`, `(...)` ### Server Actions - **Form handling**: Progressive enhancement with `action` attribute - **Mutations**: Server-side data modifications - **Revalidation**: Automatic cache updates after mutations - **Optimistic updates**: Immediate UI feedback patterns ## Implementation Patterns ### Project Structure ``` app/ ├── layout.tsx # Root layout ├── page.tsx # Home page ├── globals.css # Global styles ├── (auth)/ # Route group │ ├── login/page.tsx │ └── register/page.tsx ├── dashboard/ │ ├── layout.tsx # Dashboard layout │ ├── page.tsx # Dashboard home │ ├── loading.tsx # Loading UI │ ├── error.tsx # Error boundary │ └── [id]/page.tsx # Dynamic route ├── api/ │ └── [route]/route.ts # API routes └── components/ # Shared components ``` ### Component Patterns #### Server Component (Default) ```typescript // app/posts/page.tsx async function PostsPage() { const posts = await db.posts.findMany() return ( ) } export default PostsPage ``` #### Client Component ```typescript // app/components/counter.tsx "use client" import { useState } from "react" export function Counter() { const [count, setCount] = useState(0) return ( ) } ``` ### Data Fetching Patterns #### Dynamic Rendering (Default) ```typescript // In Next.js 15+, fetch is uncached by default (implicit cache: 'no-store') async function Page() { const data = await fetch('https://api.example.com/data') return
{data}
} ``` #### Static Generation (Opt-in) ```typescript // Explicitly opt into caching async function Page() { const data = await fetch('https://api.example.com/data', { cache: 'force-cache', }) return
{data}
} ``` #### Time-based Revalidation ```typescript async function Page() { const data = await fetch('https://api.example.com/data', { next: { revalidate: 3600 }, // Revalidate every hour }) return
{data}
} ``` > Note: The client router cache is also uncached by default in Next.js 15, replacing the old 30s/5m defaults. ### Server Actions ```typescript // app/actions.ts "use server" import { revalidatePath } from "next/cache" export async function createPost(formData: FormData) { const title = formData.get("title") as string await db.posts.create({ data: { title } }) revalidatePath("/posts") } ``` ```typescript // app/posts/new/page.tsx import { createPost } from "@/app/actions" export default function NewPost() { return (
) } ``` ### Partial Prerendering (PPR) - PPR combines a static shell with dynamic streaming in a single HTTP request. - It is production-ready in Next.js 15+ and was experimental in Next.js 14. - Enable incremental adoption with `experimental.ppr: 'incremental'` in `next.config.js`, or use `ppr: true` when you want full PPR. - Use `Suspense` boundaries to define dynamic holes inside static shells. - Adopt PPR route by route so you can gradually expand coverage without rewriting the whole app. ```typescript // app/page.tsx — static shell with dynamic hole export const experimental_ppr = true export default function Page() { return (
}>
) } ``` ### Turbopack - Turbopack is stable for `next dev` in Next.js 15 and for `next build` in Next.js 15.3+. - The production build path passes 8,298 test suite cases. - Use `next dev --turbopack` and `next build --turbopack` to opt in. - It can be up to 10x faster than Webpack for dev server startup. - Some Webpack loaders and plugins may still need migration work. ```bash next dev --turbopack next build --turbopack ``` ### React 19 Features - React 19 is the default runtime in Next.js 15+ App Router projects. - Use `use()` to consume promises and contexts during render. - Server Actions are stable and no longer experimental. - Use `useFormStatus()` for form state without prop drilling. - Use `useOptimistic()` for optimistic UI updates. ```typescript import { use } from "react" import { useFormStatus } from "react-dom" import { useOptimistic } from "react" function ProductName({ productPromise }: { productPromise: Promise<{ name: string }> }) { const product = use(productPromise) return

{product.name}

} ``` ### `after()` Post-Response Work - Next.js 15 introduces `after()` for post-response work. - Use it for logging, analytics, and other non-critical tasks after the response is sent. - Import it from `next/server`. ```typescript import { after } from 'next/server' after(() => { logAnalytics() }) ``` ### Navigation Hooks (Next.js 15.4) - `useLinkStatus()` helps show inline link-loading indicators. - `onNavigate` lets you track or block client-side navigation. - `useLinkStatus()` is a client hook from `next/link` and returns `{ pending }`. - `onNavigate` is a `Link` prop for SPA navigations only. ```typescript 'use client' import Link, { useLinkStatus } from 'next/link' function LinkHint() { const { pending } = useLinkStatus() return {pending ? 'Loading…' : null} } export function Nav() { return ( ) } ``` ### next.config.js Patterns - Keep experimental flags only when needed; several features have graduated to stable in Next.js 15+. - Use `experimental.ppr: 'incremental'` for route-by-route PPR adoption. - Use `ppr: true` only when you want a fully PPR-enabled app. - Turbopack is enabled via CLI flags, not a `next.config.js` switch. ```typescript // next.config.ts import type { NextConfig } from 'next' const nextConfig: NextConfig = { experimental: { ppr: 'incremental', }, // For full PPR: // ppr: true, } export default nextConfig ``` ```json { "scripts": { "dev": "next dev --turbopack", "build": "next build --turbopack" } } ``` ## Best Practices ### Performance - Use Server Components by default - Prefer dynamic rendering unless you explicitly need caching - Use PPR for fast static shells with dynamic holes - Optimize images with `next/image` - Use `next/font` for font optimization - Implement streaming with Suspense boundaries ### Security - Validate all inputs in Server Actions - Use environment variables for secrets - Implement proper authentication patterns - Sanitize user-generated content ### Code Organization - Colocate components with routes when possible - Use route groups for logical organization - Implement proper error boundaries - Create reusable layout patterns ## Scripts This skill includes executable scripts in the `scripts/` folder: ### Development - **dev-server.sh**: Start the development server with hot reloading ```bash ./scripts/dev-server.sh [--port PORT] [--turbo] ``` - **build-production.sh**: Create optimized production build ```bash ./scripts/build-production.sh [--analyze] ``` - **analyze-bundle.sh**: Analyze bundle size and dependencies ```bash ./scripts/analyze-bundle.sh ``` ### Code Generation - **create-page.sh**: Generate a new page with optional layout/loading/error files ```bash ./scripts/create-page.sh [--layout] [--loading] [--error] ``` - **create-api-route.sh**: Generate API route handlers ```bash ./scripts/create-api-route.sh [--dynamic] ``` - **create-component.sh**: Generate React components with optional tests ```bash ./scripts/create-component.sh [--client] [--test] [--dir DIR] ``` ### Testing - **setup-testing.sh**: Set up Jest and React Testing Library ```bash ./scripts/setup-testing.sh [--playwright] ``` - **run-tests.sh**: Run tests with various options ```bash ./scripts/run-tests.sh [--watch] [--coverage] [--file FILE] ``` ## Templates This skill includes production-ready templates in the `templates/` folder: ### Pages - **page-server.tsx**: Server Component page with async data fetching, metadata, and Suspense streaming - **page-client.tsx**: Client Component page with state management, hooks, and interactivity - **page-dynamic.tsx**: Dynamic route page with params, generateStaticParams, and generateMetadata ### Components - **component-server.tsx**: Server Component with data fetching and composition patterns - **component-client.tsx**: Client Component with hooks, event handlers, and localStorage ### API & Backend - **api-route.ts**: Complete API route handler with CRUD, validation (Zod), auth, and CORS - **server-action.ts**: Server Actions with form handling, validation, and revalidation - **middleware.ts**: Middleware with auth, rate limiting, i18n, and security headers ### Infrastructure - **layout.tsx**: Root/nested layout with navigation, footer, metadata, and fonts - **page.test.tsx**: Testing patterns for pages, components, API routes, and Server Actions ## Resources This skill includes detailed reference guides in the `resources/` folder: - **app-router-patterns.md**: Comprehensive App Router patterns and examples - **data-fetching.md**: Data fetching strategies and caching - **server-components.md**: Server vs Client Components guide - **routing-reference.md**: Complete routing system reference - **performance-optimization.md**: Performance best practices - **api-routes.md**: API route handlers and patterns - **testing-patterns.md**: Testing strategies for Next.js apps --- **Specialization**: Next.js App Router Development **Version**: 2.0 **Last Updated**: May 2026 [View on SkillFed](https://skillfed.io/greedychipmunk/agent-skills/nextjs-developer) · [View on GitHub](https://github.com/greedychipmunk/agent-skills)