Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
The English summary is being prepared. Showing the original description.
Writes Next.js App Router code — Server Components, Server Actions, RSC boundaries, route handlers, caching, and streaming — matching framework conventions and project architecture.
The English summary is being prepared. Showing the original description.
See how to installReview the instructions the agent will receive before you install.
14.x and 15.x (App Router), React 18+ / 19+.app/),
fall back to plain React skills; ask before introducing App Router.Use this skill for Next.js-specific code generation and editing on the App Router:
"use client")"use server")app/api/**/route.ts)fetch + cache directivesrevalidatePath / revalidateTag invalidation<Suspense> boundariesmiddleware.ts)When the task is understanding how a Next.js app boots, where the
server/client boundary lives, what is cached vs streamed, or why a
hydration mismatch fires — defer to project-analysis-nextjs first,
then return here for the edit.
app/ directory exists; next.config.{js,ts,mjs} present.package.json major for next. 14.x vs 15.x differs in
default caching (15.x is uncached by default for fetch) and in cookies() /
headers() being async.app/ vs grouped (app/(marketing)/,
app/(app)/); identify shared layouts and parallel routes.node runtime."use client" only when a leaf
component needs state, effects, browser APIs, or event handlers."use client" boundary is viral upward at the import graph, but you
can keep a Server Component rendered as a child of a Client Component
by passing it as a prop / children — that pattern keeps server logic out
of the client bundle.import "server-only" at the top
of a server module to make leaks fail at build time.import "client-only" for code that must never run on the
server (e.g. browser-only SDKs).Map / Set — use plain JSON."use server" at the top of the file or per-function.useEffect for
pure data fetching — that is what Server Components are for.revalidatePath() / revalidateTag() or redirect().{ ok: true, data } / { ok: false, error } discriminated
union — never throw across the action boundary for expected errors.useActionState (15.x) / useFormState (14.x) on the client for
progressive enhancement; the form must work without JS.app/api/**/route.ts exports GET, POST, etc.edge only when
the dependency set supports it.await req.json() or await req.formData().Response / NextResponse. Use NextResponse.json for JSON +
consistent status codes.middleware.ts; do not assume any framework default.export const dynamic = 'force-static' / revalidate = N explicitly.fetch is cached by default (force-cache); opt out with
{ cache: 'no-store' } or segment-level export const dynamic = 'force-dynamic'.fetch is not cached by default; opt in with
{ cache: 'force-cache' } or { next: { revalidate: N } }.fetch(url, { next: { tags: ['posts'] } }) then revalidateTag('posts').revalidatePath('/blog/[slug]', 'page') for targeted page invalidation.revalidate* from a Client Component — wrap it in a Server Action.unstable_cache / cache (React) wrap pure server functions for memoization
within a request; respect the difference between request-scoped and
cross-request caching.await together —
avoid sequential await chains that block streaming.<Suspense> boundaries make slow data non-blocking; wrap each independent
data dependency in its own Suspense, not the whole page.loading.tsx is a default Suspense fallback for the segment; do not use it
as a global spinner.useEffect for initial data load in Client Components — fetch on the
server and pass props.layout.tsx is a persistent wrapper across navigations; do not put
per-page logic there.template.tsx re-renders on every navigation; use only when a layout
cannot.loading.tsx, error.tsx, not-found.tsx are per-segment; nest them
to localize fallbacks.error.tsx must be a Client Component ("use client"); accept error and
reset props.middleware.ts at the project root runs on the edge runtime before a
request hits a route — use for auth redirects, locale negotiation, A/B.matcher config narrows which paths invoke it — never let middleware run
on every asset.export const metadata; dynamic generateMetadata().
generateStaticParams for static dynamic-segment generation.next/image, next/font, next/dynamic for images, fonts, code-split
Client Components — never bare <img>, CSS @import Google Fonts, or
unguarded heavy imports."use client" near the top of a tree pulls the subtree into the
client bundle — keep the boundary at the leaf.DATABASE_URL etc.; client-exposed must be prefixed
NEXT_PUBLIC_* and is NOT secret. Validate env at boot (zod) and import
the validated object — never process.env ad hoc.revalidateTag / revalidatePath)."use client" to a file that does not need it — it pulls the
subtree into the client bundle.import "server-only".useEffect to fetch data — fetch on the server.cookies(), headers(), params, searchParams are
async in 15.x. Code that ran on 14.x will silently misbehave (Promise
rendered as an object) until awaited.Date.now(), Math.random(), or
locale-dependent strings without suppressHydrationWarning or a Client
boundary causes a hydration error."use client" is not opt-in for hooks: it is required for any file
using useState, useEffect, useRef, or browser globals.FormData. Mixing FormData and typed args breaks progressive
enhancement.next build && next start).revalidatePath requires the route group syntax for parallel/dynamic
segments — bare paths silently miss.fs, crypto.createHash) fail at the edge. Pin runtime per route."use client")"use server") · Route Handler (app/api) · middleware.tsrevalidatePath / revalidateTag / unstable_cachenext/image / next/font / next/dynamiclayout.tsx / loading.tsx / error.tsx / not-found.tsxNo reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
The English summary is being prepared. Showing the original description.
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
The English summary is being prepared. Showing the original description.
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
The English summary is being prepared. Showing the original description.
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
The English summary is being prepared. Showing the original description.
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
The English summary is being prepared. Showing the original description.
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
The English summary is being prepared. Showing the original description.