[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GXFWRRMPJ9KPMPE9KPK12Y":3,"skill-same:01M6GXFWRRMPJ9KPMPE9KPK12Y":80},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":63,"ownerDescription":64,"updatedAt":65,"install":66,"resources":79},"01M6GXFWRRMPJ9KPMPE9KPK12Y","Next.js Review",null,"Deep review of Next.js applications — server\u002Fclient boundaries, data fetching, caching, middleware, route handlers, and App Router patterns.","malayvuong\u002Fagent-orchestra","malayvuong","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13240975?v=4","01M6GXCDVPB2VPZMDZK1KF98M0","Nguyen Minh Vuong","01M6GXCE176VDX3XV4Z4KNR33J",1,"MIT","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fnextjs-review\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"Next js Review","next","js","review","router","action","middleware","app","logic","deep","caching","route","Next.js","applications","data","nextjs","server","deep review","component","performance","2026-11-10 10:12:30",false,"---\nname: Next.js Review\ndescription: Deep review of Next.js applications — server\u002Fclient boundaries, data fetching, caching, middleware, route handlers, and App Router patterns.\nversion: 2026.3.1\nlicense: MIT\ntriggers:\n  lenses:\n    - logic\n    - performance\n    - security\n  keywords:\n    - nextjs\n    - next\n    - app router\n    - server component\n    - server action\n---\n\nWhen reviewing Next.js code, apply the following framework-specific checks.\n\n## Server and Client Component Boundaries\n\nVerify every component's rendering environment. Flag `'use client'` directives that are missing when browser APIs (`window`, `document`, `localStorage`, `addEventListener`) are used. Flag `'use client'` directives that are unnecessary — components that only render HTML and call no browser APIs should be Server Components by default.\n\nCheck that Server Components do not import Client Components in a way that forces the server tree to become client-rendered. Verify that shared layout components do not accidentally pull large client bundles into the server tree.\n\n## Data Fetching Patterns\n\nFor App Router: verify `fetch()` calls in Server Components use appropriate cache and revalidation options. Flag `fetch()` without `cache` or `next.revalidate` options — the default caching behavior has changed across Next.js versions and should be explicit.\n\nFlag `useEffect` + `fetch` in Client Components for data that could be loaded in a Server Component or via `generateStaticParams`. This pattern causes waterfalls and loading spinners that server-side fetching eliminates.\n\nCheck that `generateStaticParams` is used for known dynamic segments at build time. Flag dynamic routes that serve a finite set of pages but use runtime fetching instead of static generation.\n\n## Server Actions\n\nVerify Server Actions (`'use server'`) validate all input — they are publicly accessible API endpoints. Flag Server Actions that trust client-supplied IDs without authorization checks. Verify form submissions using Server Actions handle errors gracefully and do not expose internal error messages to the client.\n\nCheck that Server Actions do not perform expensive operations synchronously — they should use `revalidatePath` or `revalidateTag` to trigger background revalidation rather than blocking the response.\n\n## Route Handlers\n\nVerify `route.ts` handlers validate HTTP methods explicitly. Flag route handlers that accept any method without checking `request.method`. Check that response headers include appropriate CORS, Content-Type, and cache-control values.\n\nFlag route handlers that read request body without size limits — large payloads can exhaust server memory.\n\n## Middleware\n\nCheck that `middleware.ts` runs only the logic that must execute on every request. Flag middleware that performs database queries, external API calls, or heavy computation — middleware runs on the Edge runtime and has strict execution time limits.\n\nVerify middleware correctly handles redirect and rewrite responses. Flag middleware that returns `NextResponse.next()` without modifications — it adds overhead for no purpose.\n\n## Caching and Revalidation\n\nFlag pages that use `export const dynamic = 'force-dynamic'` without justification — this disables all caching. Verify `revalidate` intervals are appropriate for the data freshness requirements. Check that `unstable_cache` or `cache()` wrappers are used for expensive data operations that are shared across requests.\n\nFlag stale-while-revalidate patterns where the revalidation window is too long for user-facing data that must appear fresh.\n\n## Image and Asset Optimization\n\nVerify `next\u002Fimage` is used instead of raw `\u003Cimg>` tags. Flag images without `width` and `height` attributes — these cause layout shift. Check that large images use the `priority` prop for above-the-fold content and lazy loading for below-the-fold.\n\n## Environment Variables\n\nFlag `NEXT_PUBLIC_` environment variables that contain secrets — these are embedded in the client bundle. Verify server-only environment variables are not accessed in Client Components. Check that `.env.local` is in `.gitignore`.\n\nFor each finding, report: the file, the Next.js-specific pattern violated, and the recommended fix.\n","When reviewing Next.js code, apply the following framework-specific checks.\n\n## Server and Client Component Boundaries\n\nVerify every component's rendering environment. Flag `'use client'` directives that are missing when browser APIs (`window`, `document`, `localStorage`, `addEventListener`) are used. Flag `'use client'` directives that are unnecessary — components that only render HTML and call no browser APIs should be Server Components by default.\n\nCheck that Server Components do not import Client Components in a way that forces the server tree to become client-rendered. Verify that shared layout components do not accidentally pull large client bundles into the server tree.\n\n## Data Fetching Patterns\n\nFor App Router: verify `fetch()` calls in Server Components use appropriate cache and revalidation options. Flag `fetch()` without `cache` or `next.revalidate` options — the default caching behavior has changed across Next.js versions and should be explicit.\n\nFlag `useEffect` + `fetch` in Client Components for data that could be loaded in a Server Component or via `generateStaticParams`. This pattern causes waterfalls and loading spinners that server-side fetching eliminates.\n\nCheck that `generateStaticParams` is used for known dynamic segments at build time. Flag dynamic routes that serve a finite set of pages but use runtime fetching instead of static generation.\n\n## Server Actions\n\nVerify Server Actions (`'use server'`) validate all input — they are publicly accessible API endpoints. Flag Server Actions that trust client-supplied IDs without authorization checks. Verify form submissions using Server Actions handle errors gracefully and do not expose internal error messages to the client.\n\nCheck that Server Actions do not perform expensive operations synchronously — they should use `revalidatePath` or `revalidateTag` to trigger background revalidation rather than blocking the response.\n\n## Route Handlers\n\nVerify `route.ts` handlers validate HTTP methods explicitly. Flag route handlers that accept any method without checking `request.method`. Check that response headers include appropriate CORS, Content-Type, and cache-control values.\n\nFlag route handlers that read request body without size limits — large payloads can exhaust server memory.\n\n## Middleware\n\nCheck that `middleware.ts` runs only the logic that must execute on every request. Flag middleware that performs database queries, external API calls, or heavy computation — middleware runs on the Edge runtime and has strict execution time limits.\n\nVerify middleware correctly handles redirect and rewrite responses. Flag middleware that returns `NextResponse.next()` without modifications — it adds overhead for no purpose.\n\n## Caching and Revalidation\n\nFlag pages that use `export const dynamic = 'force-dynamic'` without justification — this disables all caching. Verify `revalidate` intervals are appropriate for the data freshness requirements. Check that `unstable_cache` or `cache()` wrappers are used for expensive data operations that are shared across requests.\n\nFlag stale-while-revalidate patterns where the revalidation window is too long for user-facing data that must appear fresh.\n\n## Image and Asset Optimization\n\nVerify `next\u002Fimage` is used instead of raw `\u003Cimg>` tags. Flag images without `width` and `height` attributes — these cause layout shift. Check that large images use the `priority` prop for above-the-fold content and lazy loading for below-the-fold.\n\n## Environment Variables\n\nFlag `NEXT_PUBLIC_` environment variables that contain secrets — these are embedded in the client bundle. Verify server-only environment variables are not accessed in Client Components. Check that `.env.local` is in `.gitignore`.\n\nFor each finding, report: the file, the Next.js-specific pattern violated, and the recommended fix.\n",{"name":5,"license":15,"version":49,"triggers":50,"description":7},"2026.3.1",{"lenses":51,"keywords":53},[32,43,52],"security",[39,25,54,55,56],"app router","server component","server action","main","eac6069a8690d89fd23f08d2d14e4874ed376a77",".agent-orchestra\u002Fskills\u002Fnextjs-review",0,"https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra","https:\u002F\u002Fgithub.com\u002Fmalayvuong","www.malayvuong.com","Just a newbie at everything","2026-10-09 12:52:45",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add malayvuong\u002Fagent-orchestra --skill \"Next.js Review\"",{"tool":72,"command":73},"bunx","bunx skills add malayvuong\u002Fagent-orchestra --skill \"Next.js Review\"",{"tool":75,"command":76},"pnpm","pnpm dlx skills add malayvuong\u002Fagent-orchestra --skill \"Next.js Review\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fnextjs-review\u002FSKILL.md",true,[],[81,112,132,150,174,193],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":99,"publishedAt":44},"01M6GXHYPRJ43SHFPFJTF87GS8","Vue.js Review","Deep review of Vue.js applications — Composition API patterns, reactivity traps, component design, Pinia state management, and performance pitfalls.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fvue-review\u002FSKILL.md",[87,90,91,94],{"categoryNo":88,"categoryName":89,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":92,"categoryName":93,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":95,"categoryName":96,"taxonomyType":97,"taxonomyTypeDesc":98},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[27,100,26,101,102,43,42,103,104,41,105,37,106,107,108,109,33,32,110,111],"vue","Vue js Review","design","state management","state","api patterns","api","Composition","pinia","management","pitfalls","pinia state",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":44},"01M6GXHSPDDH1PQEN61ENMCEF5","Unity Review","Deep review of Unity C# code — object pooling, Update allocation, physics patterns, UI performance, serialization, and mobile optimization.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Funity-review\u002FSKILL.md",[],[27,119,114,43,120,121,41,122,123,124,125,126,127,33,32,128,129,130,131],"unity","update","code","ui","serialization","Optimization","mobile","patterns","physics","C#","mobile optimization","object","allocation",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":44},"01M6GXHNKTH12CGSRWDGF2H1Q9","TypeScript Review","Deep review of TypeScript code — type safety, generics patterns, strict mode compliance, type narrowing, module boundaries, and common escape hatches.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Ftypescript-review\u002FSKILL.md",[],[27,139,140,121,41,141,142,143,144,126,33,32,145,146,147,148,149],"typescript","typescript review","compliance","Type Safety","Safety","common","module","type","interface","consistency","mode",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":162,"publishedAt":44},"01M6GXHH3DMZD272RVH4800C67","Test Conventions","Testing patterns and conventions for code review. Covers naming, AAA structure, boundary testing, mock vs real dependencies, and coverage expectations.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Ftest-conventions\u002FSKILL.md",[156,159],{"categoryNo":157,"categoryName":158,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":160,"categoryName":161,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[163,164,152,165,166,27,121,167,168,169,126,170,171,172,173],"test","conventions","code review","testing","testing patterns","boundary","coverage","dependencies","structure","mock","naming",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":184,"publishedAt":44},"01M6GXHCAQSJDVNVRFFD1HJWTN","Terraform Review","Deep review of Terraform\u002FOpenTofu configuration — state management, module design, security hardening, drift prevention, and production safety patterns.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fterraform-review\u002FSKILL.md",[180,183],{"categoryNo":181,"categoryName":182,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":92,"categoryName":93,"taxonomyType":21,"taxonomyTypeDesc":22},[27,185,176,102,52,103,104,41,186,187,188,189,143,190,109,191,192,33,32,145],"terraform","cloud","aws","hardening","Production","opentofu","iac","drift",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":200,"publishedAt":44},"01M6GXH83F11CK4BQEAJPN6HDE","Swift Review","Deep review of Swift code — memory management, concurrency patterns, optionals, protocol design, SwiftUI lifecycle, and iOS platform patterns.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fswift-review\u002FSKILL.md",[199],{"categoryNo":92,"categoryName":93,"taxonomyType":21,"taxonomyTypeDesc":22},[201,27,195,102,202,43,121,203,41,204,205,206,207,208,109,33,32,209,210,211],"swift","memory","protocol","ios","concurrency","lifecycle","swiftui","uikit","xcode","apple","platform"]