| pattern |
message |
severity |
upgradeToSkill |
upgradeWhy |
| export.*getServerSideProps |
getServerSideProps is removed in App Router — use server components or route handlers |
error |
nextjs |
Guides migration from Pages Router getServerSideProps to App Router server components with async data fetching. |
|
| pattern |
message |
severity |
| getServerSideProps |
getServerSideProps is a Pages Router pattern — migrate to App Router server components |
warn |
|
| pattern |
message |
severity |
upgradeToSkill |
upgradeWhy |
| export.*getStaticProps |
getStaticProps is removed in App Router — use generateStaticParams + server components instead |
error |
nextjs |
Guides migration from Pages Router getStaticProps to App Router generateStaticParams with server components. |
|
| pattern |
message |
severity |
| getStaticProps |
getStaticProps is a Pages Router pattern — migrate to App Router generateStaticParams + server components |
warn |
|
| pattern |
message |
severity |
upgradeToSkill |
upgradeWhy |
| from\s+['"]next/router['"] |
next/router is Pages Router only — use next/navigation for App Router |
error |
nextjs |
Guides migration from next/router to next/navigation with useRouter, usePathname, useSearchParams hooks. |
|
| pattern |
message |
severity |
skipIfFileContains |
| (useState|useEffect) |
React hooks require "use client" directive — add it at the top of client components |
warn |
^['"]use client['"] |
|
| pattern |
message |
severity |
skipIfFileContains |
upgradeToSkill |
upgradeWhy |
| from\s+['"]next/head['"] |
next/head is Pages Router — use export const metadata or generateMetadata() in App Router. Run Skill(nextjs) for metadata API guidance. |
error |
export\s+(const\s+)?metadata|generateMetadata |
nextjs |
Guides migration from next/head to the App Router metadata API (export const metadata / generateMetadata()). |
|
| pattern |
message |
severity |
upgradeToSkill |
upgradeWhy |
| export\s+(default\s+)?function\s+middleware |
middleware() is renamed to proxy() in Next.js 16 — rename the function and the file to proxy.ts. Run Skill(routing-middleware) for proxy.ts migration guidance. |
recommended |
routing-middleware |
Guides migration from middleware.ts to proxy.ts with correct file placement, runtime config, and request interception patterns. |
|
| pattern |
message |
severity |
upgradeToSkill |
upgradeWhy |
| revalidateTag(\s*['"][^'"]+['"]\s*) |
Single-arg revalidateTag(tag) is deprecated in Next.js 16 — pass a cacheLife profile: revalidateTag(tag, "max") |
recommended |
nextjs |
Guides migration from single-arg revalidateTag to the Next.js 16 two-arg API with cacheLife profiles. |
|
| pattern |
message |
severity |
upgradeToSkill |
upgradeWhy |
| \bcacheHandler\s*: |
Singular cacheHandler is deprecated in Next.js 16 — use cacheHandlers (plural) with per-type handlers |
recommended |
nextjs |
Guides migration from singular cacheHandler to Next.js 16 cacheHandlers (plural) with per-type handler config. |
|
| pattern |
message |
severity |
| useRef(\s*) |
useRef() requires an initial value in React 19 — use useRef(null) or useRef(0) |
error |
|
| pattern |
message |
severity |
upgradeToSkill |
upgradeWhy |
| next\s+export |
next export was removed — use output: "export" in next.config.js for static export |
error |
nextjs |
Guides migration from next export CLI command to output: "export" in next.config for static site generation. |
|
| pattern |
message |
severity |
skipIfFileContains |
| (?<!await )\bcookies(\s*) |
cookies() is async in Next.js 16 — add await: const cookieStore = await cookies() |
error |
^['"]use client['"] |
|
| pattern |
message |
severity |
skipIfFileContains |
| (?<!await )\bheaders(\s*) |
headers() is async in Next.js 16 — add await: const headersList = await headers() |
error |
^['"]use client['"] |
|
| pattern |
message |
severity |
skipIfFileContains |
| =\s*(?!await\b)params\b |
params is async in Next.js 16 — add await: const { slug } = await params |
recommended |
^['"]use client['"] |
|
| pattern |
message |
severity |
skipIfFileContains |
| =\s*(?!await\b)searchParams\b |
searchParams is async in Next.js 16 — add await: const { query } = await searchParams |
recommended |
^['"]use client['"] |
|
| pattern |
message |
severity |
skipIfFileContains |
upgradeToSkill |
upgradeWhy |
| from\s+[''""](next-auth|@auth/core)[''""]|NextAuth(|getServerSession( |
Legacy auth pattern detected. Modern Vercel apps should use Clerk, Descope, or Auth0 for managed authentication. |
recommended |
@clerk/|@descope/|@auth0/ |
auth |
Migrate from next-auth/manual JWT to a managed auth provider (Clerk, Descope, Auth0) for better Vercel integration. |
|
| pattern |
message |
severity |
skipIfFileContains |
upgradeToSkill |
upgradeWhy |
| NextApiRequest|NextApiResponse|export\s+default\s+function\s+handler |
Pages Router API handler detected. Use App Router route handlers with named HTTP exports instead. |
recommended |
export\s+(async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE) |
vercel-functions |
Migrate from Pages Router API routes to App Router route handlers with Web Request/Response API. |
|
| pattern |
message |
severity |
upgradeToSkill |
upgradeWhy |
| from\s+[''""](lru-cache|node-cache|memory-cache)[''""]|new\s+(LRUCache|NodeCache)( |
In-process cache detected. Serverless deployments lose process memory between invocations. |
recommended |
runtime-cache |
Replace process-memory caches with Vercel Runtime Cache for shared, region-aware caching. |
|
| pattern |
message |
severity |
skipIfFileContains |
upgradeToSkill |
upgradeWhy |
| from\s+[''""](express|fastify|koa|hapi)[''""]|require\s*(\s*[''""](express|fastify|koa|hapi)[''""] |
Express/Fastify/Koa/Hapi server framework detected in a Next.js project. Use Next.js route handlers or proxy.ts for request handling instead. |
recommended |
proxy.ts|from\s+[''""](next/server)[''""]|@vercel/functions |
routing-middleware |
Replace custom server frameworks with Next.js proxy.ts for request interception and route handlers for API endpoints. |
|
| pattern |
message |
severity |
skipIfFileContains |
upgradeToSkill |
upgradeWhy |
| from\s+[''""](typeorm|sequelize|mikro-orm|objection|bookshelf|knex)[''""]|require\s*(\s*[''""](typeorm|sequelize|mikro-orm|objection|bookshelf|knex)[''""] |
Heavy ORM detected. Consider using lightweight serverless-native alternatives like Drizzle, Prisma, or direct Neon for better cold start performance. |
recommended |
from\s+[''""](drizzle-orm|@neondatabase|@prisma/client|prisma)[''""] |
vercel-storage |
Migrate from heavy ORMs to serverless-native database clients (Drizzle + Neon, Prisma, or @neondatabase/serverless) for faster cold starts. |
|
| pattern |
message |
severity |
skipIfFileContains |
upgradeToSkill |
upgradeWhy |
| fonts.googleapis.com|from\s+[''""](fontsource|@fontsource)[''""]|<link[^>]*fonts.googleapis |
External font loader detected. Use next/font for zero-CLS, self-hosted font loading with automatic optimization. |
recommended |
next/font |
nextjs |
Guides migration from external font loaders to next/font with Geist Sans/Mono for zero-CLS font optimization. |
|
| pattern |
targetSkill |
message |
| export\s+(default\s+)?function\s+middleware |
routing-middleware |
middleware() is renamed to proxy() in Next.js 16 — loading Routing Middleware guidance for proxy.ts migration. |
|
| pattern |
targetSkill |
message |
| from\s+['"]@vercel/(postgres|kv)['"] |
vercel-storage |
Sunset storage package detected — loading Vercel Storage guidance for Neon/Upstash migration. |
|
| pattern |
targetSkill |
message |
| from\s+['"]@ai-sdk/(anthropic|openai)['"] |
ai-gateway |
Direct AI provider SDK import — loading AI Gateway guidance for unified model routing with failover and cost tracking. |
|
| pattern |
targetSkill |
message |
| from\s+[''""](next-auth|@auth/core)[''""]|NextAuth(|getServerSession( |
auth |
Legacy auth pattern detected — loading managed authentication guidance (Clerk, Descope, Auth0). |
|
| pattern |
targetSkill |
message |
| NextApiRequest|NextApiResponse|export\s+default\s+function\s+handler |
vercel-functions |
Pages Router API handler detected — loading Vercel Functions guidance for App Router migration. |
|
| pattern |
targetSkill |
message |
| from\s+[''""](lru-cache|node-cache|memory-cache)[''""]|new\s+(LRUCache|NodeCache)( |
runtime-cache |
In-process cache detected — loading Runtime Cache guidance for serverless-compatible caching. |
|
| pattern |
targetSkill |
message |
| fetch\s*(\s*[''""](https?://)?(api.openai.com|api.anthropic.com|api.cohere.ai) |
ai-gateway |
Raw AI provider fetch URL detected — loading AI Gateway guidance for unified routing, failover, and OIDC auth. |
|
| pattern |
targetSkill |
message |
| jwt.(sign|verify|decode)(|from\s+[''""](jsonwebtoken)[''""]|new\s+SignJWT(|jwtVerify( |
auth |
Manual JWT token handling detected — loading Auth guidance for managed authentication (Clerk, Descope, Auth0). |
|
| pattern |
targetSkill |
message |
| from\s+[''"]@/components/ui/|from\s+[''"]@/components/ui[''""] |
shadcn |
shadcn/ui component imports detected — loading shadcn guidance for component composition, theming, and registry patterns. |
|
| pattern |
targetSkill |
message |
| from\s+[''""](styled-components|@emotion/(react|styled)|@mui/material)[''""] |
shadcn |
CSS-in-JS library detected — loading shadcn/ui guidance for Tailwind CSS + Radix UI component patterns (Vercel recommended). |
|
| pattern |
targetSkill |
message |
| getInitialProps |
nextjs |
getInitialProps is a legacy Pages Router pattern — loading Next.js guidance for App Router migration with server components and async data fetching. |
|
| pattern |
targetSkill |
message |
| export.*getServerSideProps|getServerSideProps\s*( |
nextjs |
getServerSideProps is a Pages Router pattern — loading Next.js guidance for App Router migration with server components and async data fetching. |
|
| pattern |
targetSkill |
message |
| export.*getStaticProps|getStaticProps\s*( |
nextjs |
getStaticProps is a Pages Router pattern — loading Next.js guidance for App Router migration with generateStaticParams and server components. |
|
| pattern |
targetSkill |
message |
| _app.(tsx?|jsx?) |
nextjs |
_app.tsx is a Pages Router pattern — loading Next.js guidance for App Router layout.tsx migration. |
|
| pattern |
targetSkill |
message |
| _document.(tsx?|jsx?) |
nextjs |
_document.tsx is a Pages Router pattern — loading Next.js guidance for App Router layout.tsx with metadata API migration. |
|
| pattern |
targetSkill |
message |
| from\s+['"]next/document['"] |
nextjs |
next/document is Pages Router only — loading Next.js guidance for App Router layout.tsx with html/body structure. |
|
| pattern |
targetSkill |
message |
| pages/api/ |
vercel-functions |
Pages Router API route (pages/api/) detected — loading Vercel Functions guidance for App Router route handlers with named HTTP exports. |
|