{"id":24871,"plugin_id":"plugin_connector_690a90ec05c881918afb6a55dc9bbaa1","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:18:44.411Z","digest":"d78833d26b029a6de83eb4b1b58fb221f9e5011f35fd79a61d13a6c2ffb18e41","against":5333,"payload":{"description":"Next.js App Router expert guidance. Use when building, debugging, or architecting Next.js applications — routing, Server Components, Server Actions, Cache Components, layouts, middleware/proxy, data fetching, rendering strategies, and deployment on Vercel.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":95},{"relative_path":"references/app-router-files.md","size_in_bytes":2610},{"relative_path":"references/async-patterns.md","size_in_bytes":1664},{"relative_path":"references/bundling.md","size_in_bytes":4456},{"relative_path":"references/data-patterns.md","size_in_bytes":6687},{"relative_path":"references/debug-tricks.md","size_in_bytes":2953},{"relative_path":"references/directives.md","size_in_bytes":1476},{"relative_path":"references/error-handling.md","size_in_bytes":4736},{"relative_path":"references/file-conventions.md","size_in_bytes":3464},{"relative_path":"references/font.md","size_in_bytes":5196},{"relative_path":"references/functions.md","size_in_bytes":4388},{"relative_path":"references/hydration-error.md","size_in_bytes":1801},{"relative_path":"references/image.md","size_in_bytes":3882},{"relative_path":"references/metadata.md","size_in_bytes":7140},{"relative_path":"references/parallel-routes.md","size_in_bytes":7171},{"relative_path":"references/route-handlers.md","size_in_bytes":3244},{"relative_path":"references/rsc-boundaries.md","size_in_bytes":4309},{"relative_path":"references/runtime-selection.md","size_in_bytes":985},{"relative_path":"references/scripts.md","size_in_bytes":3326},{"relative_path":"references/self-hosting.md","size_in_bytes":8334},{"relative_path":"references/suspense-boundaries.md","size_in_bytes":1366}],"name":"nextjs","skill_md_contents":"---\nname: nextjs\ndescription: Next.js App Router expert guidance. Use when building, debugging, or architecting Next.js applications — routing, Server Components, Server Actions, Cache Components, layouts, middleware/proxy, data fetching, rendering strategies, and deployment on Vercel.\nmetadata:\n  priority: 5\n  docs:\n    - \"https://nextjs.org/docs\"\n    - \"https://nextjs.org/docs/app\"\n  sitemap: \"https://nextjs.org/sitemap.xml\"\n  pathPatterns:\n    - 'next.config.*'\n    - 'next-env.d.ts'\n    - 'app/**'\n    - 'pages/**'\n    - 'src/app/**'\n    - 'src/pages/**'\n    - 'tailwind.config.*'\n    - 'postcss.config.*'\n    - 'tsconfig.json'\n    - 'tsconfig.*.json'\n    - 'apps/*/app/**'\n    - 'apps/*/pages/**'\n    - 'apps/*/src/app/**'\n    - 'apps/*/src/pages/**'\n    - 'apps/*/next.config.*'\n  bashPatterns:\n    - '\\bnext\\s+(dev|build|start|lint)\\b'\n    - '\\bnext\\s+experimental-analyze\\b'\n    - '\\bnpx\\s+create-next-app\\b'\n    - '\\bbunx\\s+create-next-app\\b'\n    - '\\bnpm\\s+run\\s+(dev|build|start)\\b'\n    - '\\bpnpm\\s+(dev|build)\\b'\n    - '\\bbun\\s+run\\s+(dev|build)\\b'\n  promptSignals:\n    phrases:\n      - \"next.js\"\n      - \"nextjs\"\n      - \"app router\"\n      - \"server component\"\n      - \"server action\"\n    allOf:\n      - [middleware, next]\n      - [layout, route]\n    anyOf:\n      - \"pages router\"\n      - \"getserversideprops\"\n      - \"use server\"\n    noneOf: []\n    minScore: 6\n---\n\n# Next.js Best Practices\n\nApply these rules when writing or reviewing Next.js code.\n\n## File Conventions\n\nSee [file-conventions.md](references/file-conventions.md) for:\n- Project structure and special files\n- Route segments (dynamic, catch-all, groups)\n- Parallel and intercepting routes\n- Middleware rename in v16 (middleware → proxy)\n\n## RSC Boundaries\n\nDetect invalid React Server Component patterns.\n\nSee [rsc-boundaries.md](references/rsc-boundaries.md) for:\n- Async client component detection (invalid)\n- Non-serializable props detection\n- Server Action exceptions\n\n## Async Patterns\n\nNext.js 15+ async API changes.\n\nSee [async-patterns.md](references/async-patterns.md) for:\n- Async `params` and `searchParams`\n- Async `cookies()` and `headers()`\n- Migration codemod\n\n## Runtime Selection\n\nSee [runtime-selection.md](references/runtime-selection.md) for:\n- Default to Node.js runtime\n- When Edge runtime is appropriate\n\n## Directives\n\nSee [directives.md](references/directives.md) for:\n- `'use client'`, `'use server'` (React)\n- `'use cache'` (Next.js)\n\n## Functions\n\nSee [functions.md](references/functions.md) for:\n- Navigation hooks: `useRouter`, `usePathname`, `useSearchParams`, `useParams`\n- Server functions: `cookies`, `headers`, `draftMode`, `after`\n- Generate functions: `generateStaticParams`, `generateMetadata`\n\n## Error Handling\n\nSee [error-handling.md](references/error-handling.md) for:\n- `error.tsx`, `global-error.tsx`, `not-found.tsx`\n- `redirect`, `permanentRedirect`, `notFound`\n- `forbidden`, `unauthorized` (auth errors)\n- `unstable_rethrow` for catch blocks\n\n## Data Patterns\n\nSee [data-patterns.md](references/data-patterns.md) for:\n- Server Components vs Server Actions vs Route Handlers\n- Avoiding data waterfalls (`Promise.all`, Suspense, preload)\n- Client component data fetching\n\n## Route Handlers\n\nSee [route-handlers.md](references/route-handlers.md) for:\n- `route.ts` basics\n- GET handler conflicts with `page.tsx`\n- Environment behavior (no React DOM)\n- When to use vs Server Actions\n\n## Metadata & OG Images\n\nSee [metadata.md](references/metadata.md) for:\n- Static and dynamic metadata\n- `generateMetadata` function\n- OG image generation with `next/og`\n- File-based metadata conventions\n\n## Image Optimization\n\nSee [image.md](references/image.md) for:\n- Always use `next/image` over `<img>`\n- Remote images configuration\n- Responsive `sizes` attribute\n- Blur placeholders\n- Priority loading for LCP\n\n## Font Optimization\n\nSee [font.md](references/font.md) for:\n- `next/font` setup\n- Google Fonts, local fonts\n- Tailwind CSS integration\n- Preloading subsets\n\n## Bundling\n\nSee [bundling.md](references/bundling.md) for:\n- Server-incompatible packages\n- CSS imports (not link tags)\n- Polyfills (already included)\n- ESM/CommonJS issues\n- Bundle analysis\n\n## Scripts\n\nSee [scripts.md](references/scripts.md) for:\n- `next/script` vs native script tags\n- Inline scripts need `id`\n- Loading strategies\n- Google Analytics with `@next/third-parties`\n\n## Hydration Errors\n\nSee [hydration-error.md](references/hydration-error.md) for:\n- Common causes (browser APIs, dates, invalid HTML)\n- Debugging with error overlay\n- Fixes for each cause\n\n## Suspense Boundaries\n\nSee [suspense-boundaries.md](references/suspense-boundaries.md) for:\n- CSR bailout with `useSearchParams` and `usePathname`\n- Which hooks require Suspense boundaries\n\n## Parallel & Intercepting Routes\n\nSee [parallel-routes.md](references/parallel-routes.md) for:\n- Modal patterns with `@slot` and `(.)` interceptors\n- `default.tsx` for fallbacks\n- Closing modals correctly with `router.back()`\n\n## Self-Hosting\n\nSee [self-hosting.md](references/self-hosting.md) for:\n- `output: 'standalone'` for Docker\n- Cache handlers for multi-instance ISR\n- What works vs needs extra setup\n\n## Debug Tricks\n\nSee [debug-tricks.md](references/debug-tricks.md) for:\n- MCP endpoint for AI-assisted debugging\n- Rebuild specific routes with `--debug-build-paths`\n"},"changes":[{"path":"/included_files","type":"changed","before":[{"relative_path":"references/app-router-files.md","size_in_bytes":2610},{"relative_path":"references/async-patterns.md","size_in_bytes":1664},{"relative_path":"references/bundling.md","size_in_bytes":4456},{"relative_path":"references/data-patterns.md","size_in_bytes":6687},{"relative_path":"references/debug-tricks.md","size_in_bytes":2953},{"relative_path":"references/directives.md","size_in_bytes":1476},{"relative_path":"references/error-handling.md","size_in_bytes":4736},{"relative_path":"references/file-conventions.md","size_in_bytes":3464},{"relative_path":"references/font.md","size_in_bytes":5196},{"relative_path":"references/functions.md","size_in_bytes":4388},{"relative_path":"references/hydration-error.md","size_in_bytes":1801},{"relative_path":"references/image.md","size_in_bytes":3882},{"relative_path":"references/metadata.md","size_in_bytes":7140},{"relative_path":"references/parallel-routes.md","size_in_bytes":7171},{"relative_path":"references/route-handlers.md","size_in_bytes":3244},{"relative_path":"references/rsc-boundaries.md","size_in_bytes":4309},{"relative_path":"references/runtime-selection.md","size_in_bytes":985},{"relative_path":"references/scripts.md","size_in_bytes":3326},{"relative_path":"references/self-hosting.md","size_in_bytes":8334},{"relative_path":"references/suspense-boundaries.md","size_in_bytes":1366}],"after":[{"relative_path":"agents/openai.yaml","size_in_bytes":95},{"relative_path":"references/app-router-files.md","size_in_bytes":2610},{"relative_path":"references/async-patterns.md","size_in_bytes":1664},{"relative_path":"references/bundling.md","size_in_bytes":4456},{"relative_path":"references/data-patterns.md","size_in_bytes":6687},{"relative_path":"references/debug-tricks.md","size_in_bytes":2953},{"relative_path":"references/directives.md","size_in_bytes":1476},{"relative_path":"references/error-handling.md","size_in_bytes":4736},{"relative_path":"references/file-conventions.md","size_in_bytes":3464},{"relative_path":"references/font.md","size_in_bytes":5196},{"relative_path":"references/functions.md","size_in_bytes":4388},{"relative_path":"references/hydration-error.md","size_in_bytes":1801},{"relative_path":"references/image.md","size_in_bytes":3882},{"relative_path":"references/metadata.md","size_in_bytes":7140},{"relative_path":"references/parallel-routes.md","size_in_bytes":7171},{"relative_path":"references/route-handlers.md","size_in_bytes":3244},{"relative_path":"references/rsc-boundaries.md","size_in_bytes":4309},{"relative_path":"references/runtime-selection.md","size_in_bytes":985},{"relative_path":"references/scripts.md","size_in_bytes":3326},{"relative_path":"references/self-hosting.md","size_in_bytes":8334},{"relative_path":"references/suspense-boundaries.md","size_in_bytes":1366}]}],"summary":"Fields changed: 1. /included_files.","summary_kind":"deterministic","summary_metadata":{}}