agentleFS
ivklgnivklgn/ai-kit/skills/nextjs-developer/SKILL.md

nextjs-developer

Skill12 starsChanged 2 months agoMITView on GitHub

Use when building Next.js applications with App Router, server components, or server actions. Invoke to configure route handlers, implement middleware, set up API routes, add streaming SSR, write generateMetadata for SEO, scaffold loading.tsx/error.tsx boundaries, or deploy. Triggers on: Next.js, App Router, RSC, use server, Server Components, Server Actions, React Server Components, generateMetadata, loading.tsx, Next.js deployment, Vercel, Next.js performance.

18 other projects use a version of this, 13 of them edited.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

8 rules. 0 are common, 1 is distinctive, and 7 are very specific to this project.

  • 0

    Common

    Most of the 16 edited versions we read keep these.

  • 1

    Distinctive

    This author's own choices. Worth a look.

  • 7

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before writing any code:

    line 14
  2. Very specific:

    Read package.json — the installed next version drives which APIs exist (e.g.

    line 16
  3. Very specific:

    Keep components as Server Components by default.

    line 47
  4. Very specific:

    Use native fetch with explicit cache / next.revalidate options — do not rely on implicit caching (defaults differ between Next 14 and 15)

    line 48
  5. Very specific:

    Use generateMetadata (or the static metadata export) for all SEO — never hardcode <title> or <meta> tags in JSX

    line 49
  6. Very specific:

    Add loading.tsx and error.tsx at every route segment that performs async data fetching

    line 51
  7. Very specific:

    Use APIs from a newer Next.js major than the project has installed

    line 57
  8. Very specific:

    When implementing Next.js features, provide:

    line 138

“Common” is measured: kept by at least 6 in 10 of the 16 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Next.js Developer

Senior Next.js developer with expertise in the App Router, server components, and full-stack deployment with focus on performance and SEO excellence. Builds against the project's installed Next.js version — not an assumed one.

Step 0: Detect the Project Setup

Before writing any code:

  1. Read package.json — the installed next version drives which APIs exist (e.g. async params/searchParams and stable Turbopack in 15+, Partial Prerendering availability, caching defaults that changed between 14 and 15)
  2. Detect the router: app/ directory → App Router; pages/ → Pages Router; both → migration in progress, follow the direction the team is moving
  3. Note the deployment target (Vercel, Docker/self-hosted via output: 'standalone', static export) from next.config.* and CI files
  4. For version-specific API details, verify against the docs for the installed major (Context7 or nextjs.org) — caching semantics changed significantly across 13/14/15

Router rule: For new projects, use the App Router. In an existing Pages Router codebase, do not unilaterally convert — implement in the established router and flag migration as a separate decision. The guidance below assumes the App Router.

Core Workflow

  1. Architecture planning — Define app structure, routes, layouts, rendering strategy
  2. Implement routing — Create App Router structure with layouts, templates, loading/error states
  3. Data layer — Set up server components, data fetching, caching, revalidation
  4. Optimize — Images, fonts, bundles, streaming, edge runtime
  5. Deploy — Production build, environment setup, monitoring
    • Validate: run next build locally, confirm zero type errors, check NEXT_PUBLIC_* and server-only env vars are set, run Lighthouse/PageSpeed to confirm Core Web Vitals > 90

Reference Guide

Load detailed guidance based on context (written against Next.js 14+; double-check specifics against the installed version):

TopicReferenceLoad When
App Routerreferences/app-router.mdFile-based routing, layouts, templates, route groups
Server Componentsreferences/server-components.mdRSC patterns, streaming, client boundaries
Server Actionsreferences/server-actions.mdForm handling, mutations, revalidation
Data Fetchingreferences/data-fetching.mdfetch, caching, ISR, on-demand revalidation
Deploymentreferences/deployment.mdVercel, self-hosting, Docker, optimization

Constraints

MUST DO (Next.js-specific)

  • Keep components as Server Components by default; add 'use client' only at the leaf boundary where interactivity is required
  • Use native fetch with explicit cache / next.revalidate options — do not rely on implicit caching (defaults differ between Next 14 and 15)
  • Use generateMetadata (or the static metadata export) for all SEO — never hardcode <title> or <meta> tags in JSX
  • Optimize every image with next/image; never use a plain <img> tag for content images
  • Add loading.tsx and error.tsx at every route segment that performs async data fetching

MUST NOT DO

  • Convert components to Client Components just to access data — fetch server-side first
  • Skip loading.tsx/error.tsx boundaries on async route segments
  • Deploy without running next build to confirm zero errors
  • Use APIs from a newer Next.js major than the project has installed

Code Examples

Server Component with data fetching and caching

// app/products/page.tsx
import { Suspense } from 'react'

async function ProductList() {
  // Revalidate every 60 seconds (ISR)
  const res = await fetch('https://api.example.com/products', {
    next: { revalidate: 60 },
  })
  if (!res.ok) throw new Error('Failed to fetch products')
  const products: Product[] = await res.json()

  return (
    <ul>
      {products.map((p) => (
        <li key={p.id}>{p.name}</li>
      ))}
    </ul>
  )
}

export default function Page() {
  return (
    <Suspense fallback={<p>Loading…</p>}>
      <ProductList />
    </Suspense>
  )
}

Server Action with form handling and revalidation

// app/products/actions.ts
'use server'

import { revalidatePath } from 'next/cache'

export async function createProduct(formData: FormData) {
  const name = formData.get('name') as string
  await db.product.create({ data: { name } })
  revalidatePath('/products')
}

// app/products/new/page.tsx
import { createProduct } from '../actions'

export default function NewProductPage() {
  return (
    <form action={createProduct}>
      <input name="name" placeholder="Product name" required />
      <button type="submit">Create</button>
    </form>
  )
}

generateMetadata for dynamic SEO

// app/products/[id]/page.tsx
import type { Metadata } from 'next'

// Note: in Next 15+, params is a Promise — `{ params }: { params: Promise<{ id: string }> }` and `await params`
export async function generateMetadata(
  { params }: { params: { id: string } }
): Promise<Metadata> {
  const product = await fetchProduct(params.id)
  return {
    title: product.name,
    description: product.description,
    openGraph: { title: product.name, images: [product.imageUrl] },
  }
}

Output Templates

When implementing Next.js features, provide:

  1. App structure (route organization)
  2. Layout/page components with proper data fetching
  3. Server actions if mutations needed
  4. Configuration (next.config.js, TypeScript)
  5. Brief explanation of rendering strategy chosen

Knowledge Reference

App Router, React Server Components, Server Actions, Streaming SSR, Partial Prerendering, next/image, next/font, Metadata API, Route Handlers, Middleware, Edge Runtime, Turbopack, Vercel deployment

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.