<!-- AUTO-GENERATED from SKILL.md frontmatters — do not edit manually -->
# nextjs Skills Index

## File Match (auto-check against the file you are editing)

| Skill | File pattern | Keywords |
| ----- | ------------ | -------- |
| **nextjs-app-router** | `app/**/page.tsx`, `app/**/layout.tsx`, `app/**/loading.tsx` | App Router, Layout, Route Group, parallel routes |
| nextjs-architecture | `src/features/**`, `src/entities/**`, `src/widgets/**` | FSD, Feature Sliced Design, slices, segments |
| **nextjs-authentication** | `middleware.ts`, `**/auth.ts`, `**/login/page.tsx` | cookie, jwt, session, localstorage, auth |
| nextjs-caching | `**/page.tsx`, `**/layout.tsx`, `**/action.ts` | unstable_cache, revalidateTag, Router Cache, Data Cache |
| nextjs-data-access-layer | `**/lib/data.ts`, `**/services/*.ts`, `**/dal/**` | DAL, Data Access Layer, server-only, DTO |
| **nextjs-data-fetching** | `**/service.ts` | fetch, revalidate, no-store, force-cache |
| nextjs-i18n | `middleware.ts`, `app/[lang]/**`, `pages/[locale]/**`, `messages/*.json`, `next.config.js` | i18n, locale, translation, next-intl, react-intl, next-translate |
| nextjs-optimization | `**/layout.tsx`, `**/page.tsx` | metadata, generateMetadata, next/image, next/font |
| **nextjs-pages-router** | `pages/**/*.tsx`, `pages/**/*.ts` | Pages Router, getServerSideProps, getStaticProps, _app, useRouter |
| **nextjs-rendering** | `**/page.tsx`, `**/layout.tsx` | generateStaticParams, dynamic, dynamicParams, PPR, streaming |
| **nextjs-security** | `app/**/actions.ts`, `middleware.ts` | action, boundary, sanitize, auth, jose |
| nextjs-server-actions | `app/**/actions.ts`, `src/app/**/actions.ts`, `app/**/*.tsx`, `src/app/**/*.tsx` | use server, Server Action, revalidatePath, useFormStatus |
| **nextjs-server-components** | `app/**/*.tsx`, `src/app/**/*.tsx`, `app/**/*.jsx`, `src/app/**/*.jsx` | use client, Server Component, Client Component, hydration |
| nextjs-state-management | `**/hooks/*.ts`, `**/store.ts`, `**/components/*.tsx` | useState, useContext, zustand, redux |
| nextjs-styling | `**/*.css`, `tailwind.config.ts`, `**/components/ui/*.tsx` | tailwind, css modules, styled-components, clsx, cn |
| nextjs-testing | `**/*.test.{ts,tsx}`, `cypress/**`, `tests/**`, `jest.config.*` | vitest, playwright, msw, testing-library |
| nextjs-tooling | `next.config.js`, `package.json` | Dockerfile, turbopack, output, standalone, lint, telemetry |
| nextjs-upgrade | `package.json` | next upgrade, migration guide, codemod |

> Load matched skills: `<SKILLS>/nextjs/<skill>/SKILL.md`. Load ALL that match — the tier model already filters irrelevant ones.
