agentsclimarketplace

Nextjs

Skill ndisisnd/cook/standards/nextjs

Write and review modern Next.js App Router code with secure RSC boundaries, direct server data access, async route APIs, Server Actions, rendering/cache strategy, and legacy Pages Router awareness.From its SKILL.md

Install
npx -y skills add ndisisnd/cook --skill nextjs

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

10.4 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it

Next.js

Invocation Protocol

When invoked directly as /nextjs, read this file first and apply the critical rules below before editing. Then read standards/nextjs/_INDEX.md and load only the additional refs/*.md entries whose file patterns or keywords match the task.

If both App Router and Pages Router signals appear, apply the Router Decision below before loading App Router-specific refs. For a Pages Router-only project, load refs/pages-router.md and treat App Router refs as informational unless the migration explicitly touches app/.

Router Decision

App Router is the default for new work. If the project uses pages/, treat App Router rules as informational and load refs/pages-router.md; do not apply app/ conventions, Server Components, or Server Actions to a Pages Router-only project.

P0 - Server & Client Components

  • App Router uses React Server Components by default. Keep pages and layouts as Server Components unless they need hooks, browser APIs, or event handlers.
  • Push 'use client' to interactive leaves such as buttons, forms, charts, and wrappers. Do not mark the tree root client-side.
  • Compose Server Components through Client Component children; never import a Server Component into a Client Component.
  • Server-to-Client props must be serializable: strings, numbers, booleans, plain objects, and arrays. Convert Date to strings and avoid functions, classes, Map, Set, and Symbol values except Server Actions marked 'use server'.
  • Never pass secrets, raw ORM models, or full DB objects to the client. Use DTOs and server-only for sensitive modules.
  • Avoid browser-only values (window, Date.now(), layout reads) in initial render; defer with a mounted state when needed.

Detail -> refs/server-components.md

P0 - Data Fetching & Access

  • Fetch directly in async Server Components or call DB/service/DAL functions directly. Never fetch your own /api route from RSCs or server-side hooks.
  • Pick cache behavior deliberately: cache: 'force-cache' for static data, next: { revalidate: N } for ISR, and cache: 'no-store' for request-time data.
  • Parallelize independent work with Promise.all() and push slow fetches down behind <Suspense> instead of blocking the page root.
  • Centralize secure data access in services/, lib/data.ts, or dal/ modules with import 'server-only'.
  • Verify auth inside every DAL function, transform raw DB/API data into DTOs, and wrap shared reads with React cache() where render-cycle deduplication is needed.
  • Use Server Actions or Route Handlers as bridges for Client Components; Client Components must not import DAL modules.

Detail -> refs/data-fetching.md

P0 - App Router Conventions

  • page.tsx renders route UI; layout.tsx wraps children and persists across navigation; loading.tsx creates a Suspense boundary; error.tsx is a Client Component error boundary; route.ts defines server endpoints.
  • In Next.js 15+, always await params, searchParams, cookies(), and headers().
  • Add error.tsx with 'use client' and a reset prop for route segments that need local recovery.
  • Use route groups (auth), dynamic segments [slug], catch-all segments [...slug], private folders _lib, parallel routes @modal, and intercepting routes only when the structure calls for them.
  • Keep route files thin: routing and composition live in app/; business logic belongs in features, widgets, services, DAL, or Server Actions.

Detail -> refs/app-router.md

P0 - Security & Auth

  • Store tokens only in HttpOnly, Secure cookies with SameSite: 'Lax' or 'Strict'; never use localStorage or sessionStorage for tokens.
  • Use middleware.ts for edge-side auth redirection, RBAC checks, and security headers. Do not rely on shared layouts for authorization.
  • Validate every Server Action and Route Handler input with Zod or equivalent, verify Origin/Referer where CSRF matters, and run auth() inside the action or handler.
  • Use server-only for modules with DB clients, secrets, or token verification. Guard sensitive objects with taint APIs where available.
  • Escape user content; never use dangerouslySetInnerHTML without a sanitizer such as DOMPurify.
  • Pass session state to clients, never raw tokens or full user records.

Detail -> refs/security.md

P1 - Rendering & Caching

  • Choose SSG, SSR, ISR, Streaming, or PPR from freshness and personalization requirements, not habit.
  • Use generateStaticParams and force-cache for static content; use revalidate/revalidatePath/revalidateTag for periodic or on-demand freshness; use no-store, cookies(), or headers() for request-time data.
  • Stream slow or dynamic regions with <Suspense> and loading.tsx; avoid root-level sequential awaits that blank the page.
  • Know the four cache layers: Request Memoization, Data Cache, Full Route Cache, and Router Cache.
  • In Next.js 16+, prefer Cache Components with 'use cache', cacheLife(), cacheTag(), updateTag(), and revalidateTag() where available.
  • Do not cache user-specific data at route level; isolate it in dynamic streamed regions.

Detail -> refs/rendering-and-caching.md

P1 - Server Actions

  • Use Server Actions for mutations and form submissions without creating API endpoints.
  • Define actions in actions.ts or other server-only modules; avoid actions defined inside components because closures add encryption overhead and serialization risk.
  • Start action files or functions with 'use server', validate FormData, perform auth inside the action, mutate, then call revalidatePath() or revalidateTag().
  • Use useActionState, useFormStatus, useTransition, and useOptimistic for pending, non-form trigger, and optimistic UI flows.
  • Use redirect() for success navigation, but do not catch it in try/catch.

Detail -> refs/server-actions.md

Anti-Patterns

  • pages/ projects using App Router features or async default page components.
  • 'use client' at the app root, layouts, or pages when only a leaf needs interactivity.
  • Server Components passing functions, Date, classes, Map, Set, raw ORM models, secrets, or full DB objects to Client Components.
  • Client Components importing DAL, DB clients, server-only modules, or server-only environment values.
  • Server Components or Pages Router data hooks fetching their own /api routes instead of calling services directly.
  • Unawaited params, searchParams, cookies(), or headers() in Next.js 15+.
  • Root-level sequential awaits that block page streaming when independent data can be parallelized or wrapped in <Suspense>.
  • localStorage/sessionStorage token storage or raw tokens in Client Components.
  • Unvalidated Server Action or Route Handler inputs and skipped auth checks inside mutations.
  • Auth checks only in shared layouts instead of middleware, DAL, actions, or handlers.
  • dangerouslySetInnerHTML without sanitization.
  • Long-lived caches without tags, router.refresh() used as the primary server-data invalidation mechanism, or unstable_cache in Next.js 16+ when 'use cache' is available.
  • Runtime CSS-in-JS spread across RSC trees; prefer zero-runtime styling unless a Client wrapper is intentional.
  • <img> without dimensions, Google Fonts CDN links, or metadata in _document.tsx.
  • Client-side useEffect data fetching for server state when RSC, SWR, TanStack Query, or RTK Query is the right owner.
  • Cross-slice imports, business logic in page.tsx, file-type folders inside FSD slices, and premature entities/ extraction.

References

Load only what the current task requires.

P0 Detail

  • server-components - RSC/Client composition, serialization, server-only, hydration boundaries
  • data-fetching - fetch strategies, direct DB/service access, DAL, DTOs, auth-colocated data reads
  • app-router - file conventions, route groups, dynamic segments, parallel/intercepting routes, self-hosting
  • security - cookies, middleware auth/RBAC, CSP, CSRF, taint APIs, Server Action validation
  • pages-router - legacy pages/ routing, getServerSideProps, getStaticProps, API routes

P1 Detail

  • rendering-and-caching - SSG/SSR/ISR/Streaming/PPR, Suspense bailout, cache layers, invalidation
  • server-actions - mutations, forms, useActionState, useFormStatus, optimistic updates, secure actions
  • styling-and-optimization - Tailwind, CSS Modules, Ant Design wrappers, next/image, next/font, metadata, Core Web Vitals
  • testing - Jest/Vitest, React Testing Library, Playwright, MSW

P2 Detail

  • architecture - Feature-Sliced Design, thin pages, bundling, runtime selection, debugging
  • i18n - locale routing, next-intl, react-intl, next-translate legacy
  • state-management - URL state, server state, Zustand, Redux legacy
  • tooling - Turbopack, Docker standalone, bundle analysis, env validation, CI, upgrades, codemods

What ships with it: 14 files

67.4 KB alongside SKILL.md

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.