tribunal-kit 2.4.6 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/.agent/ARCHITECTURE.md +99 -99
  2. package/.agent/GEMINI.md +52 -52
  3. package/.agent/agents/accessibility-reviewer.md +139 -86
  4. package/.agent/agents/ai-code-reviewer.md +160 -90
  5. package/.agent/agents/backend-specialist.md +164 -127
  6. package/.agent/agents/code-archaeologist.md +115 -73
  7. package/.agent/agents/database-architect.md +130 -110
  8. package/.agent/agents/debugger.md +137 -97
  9. package/.agent/agents/dependency-reviewer.md +78 -30
  10. package/.agent/agents/devops-engineer.md +161 -118
  11. package/.agent/agents/documentation-writer.md +151 -87
  12. package/.agent/agents/explorer-agent.md +117 -99
  13. package/.agent/agents/frontend-reviewer.md +127 -47
  14. package/.agent/agents/frontend-specialist.md +169 -109
  15. package/.agent/agents/game-developer.md +28 -164
  16. package/.agent/agents/logic-reviewer.md +87 -49
  17. package/.agent/agents/mobile-developer.md +151 -103
  18. package/.agent/agents/mobile-reviewer.md +133 -50
  19. package/.agent/agents/orchestrator.md +121 -110
  20. package/.agent/agents/penetration-tester.md +103 -77
  21. package/.agent/agents/performance-optimizer.md +136 -92
  22. package/.agent/agents/performance-reviewer.md +139 -69
  23. package/.agent/agents/product-manager.md +104 -70
  24. package/.agent/agents/product-owner.md +6 -25
  25. package/.agent/agents/project-planner.md +95 -95
  26. package/.agent/agents/qa-automation-engineer.md +174 -87
  27. package/.agent/agents/security-auditor.md +133 -129
  28. package/.agent/agents/seo-specialist.md +160 -99
  29. package/.agent/agents/sql-reviewer.md +132 -44
  30. package/.agent/agents/supervisor-agent.md +137 -109
  31. package/.agent/agents/swarm-worker-contracts.md +17 -17
  32. package/.agent/agents/swarm-worker-registry.md +46 -46
  33. package/.agent/agents/test-coverage-reviewer.md +132 -53
  34. package/.agent/agents/test-engineer.md +0 -21
  35. package/.agent/agents/type-safety-reviewer.md +143 -33
  36. package/.agent/patterns/generator.md +9 -9
  37. package/.agent/patterns/inversion.md +12 -12
  38. package/.agent/patterns/pipeline.md +9 -9
  39. package/.agent/patterns/reviewer.md +13 -13
  40. package/.agent/patterns/tool-wrapper.md +9 -9
  41. package/.agent/rules/GEMINI.md +63 -63
  42. package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
  43. package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
  44. package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
  45. package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
  46. package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
  47. package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
  48. package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
  49. package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
  50. package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
  51. package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
  52. package/.agent/scripts/compress_skills.py +167 -0
  53. package/.agent/scripts/consolidate_skills.py +173 -0
  54. package/.agent/scripts/deep_compress.py +202 -0
  55. package/.agent/scripts/minify_context.py +80 -0
  56. package/.agent/scripts/security_scan.py +1 -1
  57. package/.agent/scripts/strip_tribunal.py +41 -0
  58. package/.agent/skills/agent-organizer/SKILL.md +60 -100
  59. package/.agent/skills/agentic-patterns/SKILL.md +0 -70
  60. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +108 -53
  61. package/.agent/skills/api-patterns/SKILL.md +197 -257
  62. package/.agent/skills/api-security-auditor/SKILL.md +125 -57
  63. package/.agent/skills/app-builder/SKILL.md +326 -50
  64. package/.agent/skills/app-builder/templates/SKILL.md +13 -15
  65. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
  66. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
  67. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
  68. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
  69. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
  70. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
  71. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
  72. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
  73. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
  74. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
  75. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
  76. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
  77. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
  78. package/.agent/skills/appflow-wireframe/SKILL.md +71 -98
  79. package/.agent/skills/architecture/SKILL.md +161 -200
  80. package/.agent/skills/authentication-best-practices/SKILL.md +121 -54
  81. package/.agent/skills/bash-linux/SKILL.md +71 -166
  82. package/.agent/skills/behavioral-modes/SKILL.md +8 -69
  83. package/.agent/skills/brainstorming/SKILL.md +345 -127
  84. package/.agent/skills/building-native-ui/SKILL.md +125 -57
  85. package/.agent/skills/clean-code/SKILL.md +266 -149
  86. package/.agent/skills/code-review-checklist/SKILL.md +0 -62
  87. package/.agent/skills/config-validator/SKILL.md +73 -131
  88. package/.agent/skills/csharp-developer/SKILL.md +434 -73
  89. package/.agent/skills/database-design/SKILL.md +190 -275
  90. package/.agent/skills/deployment-procedures/SKILL.md +81 -158
  91. package/.agent/skills/devops-engineer/SKILL.md +255 -94
  92. package/.agent/skills/devops-incident-responder/SKILL.md +50 -69
  93. package/.agent/skills/doc.md +5 -5
  94. package/.agent/skills/documentation-templates/SKILL.md +19 -63
  95. package/.agent/skills/edge-computing/SKILL.md +75 -165
  96. package/.agent/skills/extract-design-system/SKILL.md +84 -58
  97. package/.agent/skills/framer-motion-expert/SKILL.md +195 -0
  98. package/.agent/skills/frontend-design/SKILL.md +151 -499
  99. package/.agent/skills/game-design-expert/SKILL.md +71 -0
  100. package/.agent/skills/game-engineering-expert/SKILL.md +88 -0
  101. package/.agent/skills/geo-fundamentals/SKILL.md +52 -178
  102. package/.agent/skills/github-operations/SKILL.md +197 -272
  103. package/.agent/skills/gsap-expert/SKILL.md +194 -0
  104. package/.agent/skills/i18n-localization/SKILL.md +60 -172
  105. package/.agent/skills/intelligent-routing/SKILL.md +123 -103
  106. package/.agent/skills/lint-and-validate/SKILL.md +8 -52
  107. package/.agent/skills/llm-engineering/SKILL.md +281 -195
  108. package/.agent/skills/local-first/SKILL.md +76 -159
  109. package/.agent/skills/mcp-builder/SKILL.md +48 -188
  110. package/.agent/skills/mobile-design/SKILL.md +213 -219
  111. package/.agent/skills/motion-engineering/SKILL.md +184 -0
  112. package/.agent/skills/nextjs-react-expert/SKILL.md +184 -203
  113. package/.agent/skills/nodejs-best-practices/SKILL.md +403 -185
  114. package/.agent/skills/observability/SKILL.md +211 -203
  115. package/.agent/skills/parallel-agents/SKILL.md +53 -146
  116. package/.agent/skills/performance-profiling/SKILL.md +171 -151
  117. package/.agent/skills/plan-writing/SKILL.md +49 -153
  118. package/.agent/skills/platform-engineer/SKILL.md +57 -103
  119. package/.agent/skills/playwright-best-practices/SKILL.md +110 -63
  120. package/.agent/skills/powershell-windows/SKILL.md +61 -179
  121. package/.agent/skills/python-patterns/SKILL.md +7 -35
  122. package/.agent/skills/python-pro/SKILL.md +273 -114
  123. package/.agent/skills/react-specialist/SKILL.md +227 -108
  124. package/.agent/skills/readme-builder/SKILL.md +15 -85
  125. package/.agent/skills/realtime-patterns/SKILL.md +216 -243
  126. package/.agent/skills/red-team-tactics/SKILL.md +10 -51
  127. package/.agent/skills/rust-pro/SKILL.md +525 -142
  128. package/.agent/skills/seo-fundamentals/SKILL.md +92 -153
  129. package/.agent/skills/server-management/SKILL.md +110 -166
  130. package/.agent/skills/shadcn-ui-expert/SKILL.md +154 -55
  131. package/.agent/skills/skill-creator/SKILL.md +18 -58
  132. package/.agent/skills/sql-pro/SKILL.md +543 -68
  133. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +28 -68
  134. package/.agent/skills/swiftui-expert/SKILL.md +124 -57
  135. package/.agent/skills/systematic-debugging/SKILL.md +49 -151
  136. package/.agent/skills/tailwind-patterns/SKILL.md +433 -149
  137. package/.agent/skills/tdd-workflow/SKILL.md +63 -169
  138. package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
  139. package/.agent/skills/testing-patterns/SKILL.md +437 -130
  140. package/.agent/skills/trend-researcher/SKILL.md +30 -71
  141. package/.agent/skills/ui-ux-pro-max/SKILL.md +0 -41
  142. package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
  143. package/.agent/skills/vue-expert/SKILL.md +225 -119
  144. package/.agent/skills/vulnerability-scanner/SKILL.md +264 -226
  145. package/.agent/skills/web-accessibility-auditor/SKILL.md +141 -58
  146. package/.agent/skills/web-design-guidelines/SKILL.md +17 -61
  147. package/.agent/skills/webapp-testing/SKILL.md +71 -196
  148. package/.agent/skills/whimsy-injector/SKILL.md +58 -132
  149. package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
  150. package/.agent/workflows/api-tester.md +96 -224
  151. package/.agent/workflows/audit.md +81 -122
  152. package/.agent/workflows/brainstorm.md +69 -105
  153. package/.agent/workflows/changelog.md +65 -97
  154. package/.agent/workflows/create.md +73 -88
  155. package/.agent/workflows/debug.md +80 -111
  156. package/.agent/workflows/deploy.md +119 -92
  157. package/.agent/workflows/enhance.md +80 -91
  158. package/.agent/workflows/fix.md +68 -97
  159. package/.agent/workflows/generate.md +165 -164
  160. package/.agent/workflows/migrate.md +106 -109
  161. package/.agent/workflows/orchestrate.md +103 -86
  162. package/.agent/workflows/performance-benchmarker.md +77 -268
  163. package/.agent/workflows/plan.md +120 -98
  164. package/.agent/workflows/preview.md +39 -96
  165. package/.agent/workflows/refactor.md +105 -97
  166. package/.agent/workflows/review-ai.md +63 -102
  167. package/.agent/workflows/review.md +71 -110
  168. package/.agent/workflows/session.md +53 -113
  169. package/.agent/workflows/status.md +42 -88
  170. package/.agent/workflows/strengthen-skills.md +90 -51
  171. package/.agent/workflows/swarm.md +114 -129
  172. package/.agent/workflows/test.md +125 -102
  173. package/.agent/workflows/tribunal-backend.md +60 -78
  174. package/.agent/workflows/tribunal-database.md +62 -100
  175. package/.agent/workflows/tribunal-frontend.md +62 -82
  176. package/.agent/workflows/tribunal-full.md +56 -100
  177. package/.agent/workflows/tribunal-mobile.md +65 -94
  178. package/.agent/workflows/tribunal-performance.md +62 -105
  179. package/.agent/workflows/ui-ux-pro-max.md +72 -121
  180. package/README.md +11 -15
  181. package/package.json +1 -1
  182. package/.agent/skills/api-patterns/api-style.md +0 -42
  183. package/.agent/skills/api-patterns/auth.md +0 -24
  184. package/.agent/skills/api-patterns/documentation.md +0 -26
  185. package/.agent/skills/api-patterns/graphql.md +0 -41
  186. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  187. package/.agent/skills/api-patterns/response.md +0 -37
  188. package/.agent/skills/api-patterns/rest.md +0 -40
  189. package/.agent/skills/api-patterns/security-testing.md +0 -122
  190. package/.agent/skills/api-patterns/trpc.md +0 -41
  191. package/.agent/skills/api-patterns/versioning.md +0 -22
  192. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  193. package/.agent/skills/app-builder/feature-building.md +0 -53
  194. package/.agent/skills/app-builder/project-detection.md +0 -34
  195. package/.agent/skills/app-builder/scaffolding.md +0 -118
  196. package/.agent/skills/app-builder/tech-stack.md +0 -40
  197. package/.agent/skills/architecture/context-discovery.md +0 -43
  198. package/.agent/skills/architecture/examples.md +0 -94
  199. package/.agent/skills/architecture/pattern-selection.md +0 -68
  200. package/.agent/skills/architecture/patterns-reference.md +0 -50
  201. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  202. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
  203. package/.agent/skills/database-design/database-selection.md +0 -43
  204. package/.agent/skills/database-design/indexing.md +0 -39
  205. package/.agent/skills/database-design/migrations.md +0 -48
  206. package/.agent/skills/database-design/optimization.md +0 -36
  207. package/.agent/skills/database-design/orm-selection.md +0 -30
  208. package/.agent/skills/database-design/schema-design.md +0 -56
  209. package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
  210. package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
  211. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  212. package/.agent/skills/frontend-design/color-system.md +0 -329
  213. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  214. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  215. package/.agent/skills/frontend-design/typography-system.md +0 -363
  216. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  217. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  218. package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  219. package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  220. package/.agent/skills/game-development/SKILL.md +0 -236
  221. package/.agent/skills/game-development/game-art/SKILL.md +0 -185
  222. package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  223. package/.agent/skills/game-development/game-design/SKILL.md +0 -129
  224. package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  225. package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  226. package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  227. package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  228. package/.agent/skills/game-development/web-games/SKILL.md +0 -150
  229. package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
  230. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  231. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  232. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  233. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  234. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  235. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  236. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  237. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  238. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  239. package/.agent/skills/mobile-design/platform-android.md +0 -666
  240. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  241. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  242. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  243. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  244. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  245. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  246. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  247. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  248. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  249. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  250. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
@@ -1,203 +1,184 @@
1
- ---
2
- name: nextjs-react-expert
3
- description: Next.js App Router and React v19+ performance optimization from Vercel Engineering. Use when building React components, optimizing performance, implementing React Compiler patterns, eliminating waterfalls, reducing JS payload, or implementing Streaming/PPR optimizations.
4
- allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 1.0.0
6
- last-updated: 2026-03-12
7
- applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
- ---
9
-
10
- # React v19+ & Next.js Pro-Max Performance Patterns
11
-
12
- > The fastest code is code that doesn't run.
13
- > The second fastest is code that runs on the edge and streams the result.
14
-
15
- ---
16
-
17
- ## Contemporary Paradigm Shifts
18
-
19
- | Legacy (React 18 / Next.js Pages) | Modern (React 19 / Next.js App Router) |
20
- |---|---|
21
- | Manual `useMemo()` / `useCallback()` | **React Compiler** handles memoization natively |
22
- | `getServerSideProps` / Client Fetching | **React Server Components (RSC)** default |
23
- | `useActionState` custom hooks | **Server Actions** native mutations |
24
- | Loading spinners on client | **Streaming UI** & `Suspense` boundaries |
25
- | Static *or* Dynamic pages | **Partial Prerendering (PPR)** (Static shell, dynamic guts) |
26
-
27
- ---
28
-
29
- ## Core Architecture Decision Framework
30
-
31
- ### Server vs. Client Component
32
- By default, everything in Next.js App Router is a Server Component.
33
-
34
- ```
35
- Default: Server Component (Zero JS sent to client)
36
- Switch to Client ('use client') ONLY when:
37
- - Uses browser APIs (window, localStorage, navigator)
38
- - Needs DOM event handlers (onClick, onChange)
39
- - Needs state/effects (useState, useEffect, useOptimistic)
40
- ```
41
-
42
- **The Interleaved Pattern:** Never make a layout or major shell `'use client'`.
43
- Pass Server Components *into* Client components as `children`.
44
-
45
- ```tsx
46
- // ✅ Correct: The heavy static content stays on the server
47
- <ClientInteractiveDrawer>
48
- <ServerHeavyGraph data={dbData} />
49
- </ClientInteractiveDrawer>
50
- ```
51
-
52
- ---
53
-
54
- ## Extreme Waterfall Elimination
55
-
56
- The most impactful Next.js optimization is eliminating network waterfalls.
57
-
58
- ```tsx
59
- // CRITICAL WATERFALL: 3 sequential async calls, each waits for the previous
60
- async function Dashboard() {
61
- const user = await getUser(); // 200ms
62
- const posts = await getPosts(); // 200ms (waits unnecessarily)
63
- const analytics = await getAnalytics(); // 200ms (waits unnecessarily)
64
- // Total: 600ms (Blocked UI)
65
- }
66
- ```
67
-
68
- ### Fix 1: Parallel Fetching
69
- ```tsx
70
- // Parallel all 3 start at the same time
71
- async function Dashboard() {
72
- const [user, posts, analytics] = await Promise.all([
73
- getUser(),
74
- getPosts(),
75
- getAnalytics(),
76
- ]);
77
- // Total: ~200ms (Blocked UI, but faster)
78
- }
79
- ```
80
-
81
- ### Fix 2: Streaming UI (The Pro-Max Way)
82
- Do not await slow data at the page level. Wrap slow components in `<Suspense>`.
83
-
84
- ```tsx
85
- // 🚀 PRO-MAX: Streaming Components
86
- export default function Dashboard() {
87
- return (
88
- <main>
89
- <FastHeader />
90
- <Suspense fallback={<AnalyticsSkeleton />}>
91
- {/* React streams this HTML down when the DB resolves */}
92
- <SlowAnalyticsComponent />
93
- </Suspense>
94
- </main>
95
- );
96
- }
97
- ```
98
-
99
- ---
100
-
101
- ## Partial Prerendering (PPR)
102
-
103
- PPR allows a single route to have both an ultra-fast static edge-cached shell, and dynamic personalized content streamed in instantly after execution.
104
-
105
- - Avoid using global `cookies()` or `headers()` high up in the component tree, as this forces the entire route to be dynamic.
106
- - Isolate dynamic data fetching within a `<Suspense>` boundary so the rest of the page can be statically pre-rendered at build time.
107
-
108
- ---
109
-
110
- ## AI & Streaming UI Responses
111
-
112
- When building GenAI interfaces, waiting for complete API responses breaks the "Doherty Threshold" (400ms).
113
-
114
- - **Use the `ai` SDK (`@ai-sdk/react`)** to stream text using `useChat` or `useCompletion`.
115
- - **Generative UI (RSC streaming):** Stream actual React Server Components back from the LLM, not just strings.
116
-
117
- ```tsx
118
- // ✅ AI Generative UI response
119
- return (
120
- <div>
121
- Here is the weather:
122
- <Suspense fallback={<WeatherSkeleton />}>
123
- <WeatherCard promise={llmTools.getWeather(location)} />
124
- </Suspense>
125
- </div>
126
- )
127
- ```
128
-
129
- ---
130
-
131
- ## Bundle Size & JS Dropping
132
-
133
- - **Import strictly:** Use barrel files cautiously. Ensure `package.json` `sideEffects: false` is respected so bundlers can tree-shake.
134
- - **Client boundaries low:** Push `'use client'` as far down the component tree as mathematically possible.
135
- - **Lazy loading heavy client deps:**
136
- ```tsx
137
- import dynamic from 'next/dynamic'
138
- // Only load D3.js when the user actually opens the modal
139
- const HeavyChart = dynamic(() => import('./HeavyChart'), { ssr: false })
140
- ```
141
-
142
- ---
143
-
144
- ## Key Anti-Patterns
145
-
146
- | Pattern | Problem | Fix |
147
- |---|---|---|
148
- | Fetching via `useEffect` | Client waterfall, huge CLS, breaks SSR | Fetch in RSC or use `SWR`/`React Query` |
149
- | Manual `useMemo` everywhere | Hurts code readability; React 18 legacy | Trust **React Compiler** to optimize renders automatically |
150
- | Missing `key` on mapped lists | Complete DOM destruction on update | Use stable unique IDs (never `index`) |
151
- | Unhandled Server Actions | Silent errors on DB failures | Wrap in `try/catch` and return `{ error }` objects |
152
- | Client-side secret passing | Exposes API keys | `server-only` package + Server Actions |
153
-
154
- ---
155
-
156
- ## Output Format
157
-
158
- When this skill produces or reviews code, structure your output as follows:
159
-
160
- ```
161
- ━━━ Nextjs React Expert Report ━━━━━━━━━━━━━━━━━━━━━━━━
162
- Skill: Nextjs React Expert
163
- Language: [detected language / framework]
164
- Scope: [N files · N functions]
165
- ─────────────────────────────────────────────────
166
- ✅ Passed: [checks that passed, or "All clean"]
167
- ⚠️ Warnings: [non-blocking issues, or "None"]
168
- ❌ Blocked: [blocking issues requiring fix, or "None"]
169
- ─────────────────────────────────────────────────
170
- VBC status: PENDING VERIFIED
171
- Evidence: [test output / lint pass / compile success]
172
- ```
173
-
174
- **VBC (Verification-Before-Completion) is mandatory.**
175
- Do not mark status as VERIFIED until concrete terminal evidence is provided.
176
-
177
-
178
- ---
179
-
180
- ## 🏛️ Tribunal Integration (Anti-Hallucination)
181
-
182
- **Slash command: `/tribunal-frontend`**
183
- **Active reviewers: `logic` · `security` · `frontend` · `type-safety`**
184
-
185
- ### ❌ Forbidden AI Tropes in Next.js/React
186
-
187
- 1. **Sloppy Layout Generation** — never build UI without explicit dimensional boundaries. You MUST apply strict numeric design tokens (e.g. 4px grid spacing) and explicit flex/grid layouts.
188
- 2. **`"use client"` on everything** — do not convert Server Components to Client unless interaction/state is strictly required.
189
- 3. **`getServerSideProps` in App Router** — never hallucinate legacy Pages router data fetching in an App Router context.
190
- 4. **Unnecessary `useEffect` fetching** — always prefer Server Components or SWR/React Query for data fetching.
191
- 4. **Vercel clones** — do not default to generic black/white Vercel aesthetics unless instructed.
192
- 5. **Missing `key` in maps** — always provide a unique, stable key. No using iteration index as the key.
193
-
194
- ### ✅ Pre-Flight Self-Audit
195
-
196
- Review these questions before generating React/Next.js code:
197
- ```
198
- ✅ Did I maximize Server Component usage and isolate `'use client'` boundaries?
199
- ✅ Are there any sequential network calls creating a waterfall? If so, did I use `Promise.all` or `Suspense`?
200
- ✅ Did I ensure no sensitive environment variables leak to the client?
201
- ✅ Did I use `next/image` and `next/link` instead of raw `<img>` and `<a>` when appropriate?
202
- ✅ Did I implement proper loading/error boundaries (`loading.tsx`, `error.tsx`)?
203
- ```
1
+ ---
2
+ name: nextjs-react-expert
3
+ description: Next.js 15+ App Router mastery. Server Components, Server Actions, PPR, caching, metadata, middleware, parallel/intercepting routes. Use when building Next.js apps or optimizing Next.js performance.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ version: 3.1.0
6
+ last-updated: 2026-04-06
7
+ applies-to-model: gemini-3-1-pro, claude-3-7-sonnet
8
+ ---
9
+
10
+ # Next.js 15+ App Router Dense Reference
11
+
12
+ ## Hallucination Traps (Read First)
13
+ - `pages/api/` or `_app.tsx` App Router only: `app/api/route.ts`, `app/layout.tsx`
14
+ - ❌ `getServerSideProps` → ✅ `async function Page()` fetches directly
15
+ - ❌ `next/router` → ✅ `next/navigation` (`useRouter`, `usePathname`, `useSearchParams`)
16
+ - ❌ Server Action without `"use server"` → ✅ Required at top of file or top of function
17
+ - Fetch is cached by default → ✅ **Next.js 15 changed this**: `fetch()` is UNCACHED by default
18
+ - ❌ `cookies()` at top of page → ✅ Opts entire route into dynamic rendering, breaking PPR. Wrap inside `<Suspense>`
19
+ - Passing functions as props Server Client Illegal. Use Server Actions instead.
20
+ - ❌ Plain `Response` in route handler → ✅ Use `NextResponse.json()`
21
+
22
+ ---
23
+
24
+ ## App Router Conventions
25
+
26
+ ```text
27
+ app/
28
+ ├── layout.tsx ← Root shell (HTML/BODY)
29
+ ├── page.tsx ← Route UI
30
+ ├── loading.tsx ← Auto-suspense fallback
31
+ ├── error.tsx ← Error boundary (Must be "use client")
32
+ ├── not-found.tsx ← 404 UI
33
+ ├── global-error.tsx ← Root error boundary
34
+ ├── api/users/route.ts ← API Handler (GET, POST)
35
+ ├── @modal/login/page.tsx Parallel Route (renders in same layout)
36
+ └── (auth)/login/page.tsx Route Group (doesn't affect URL)
37
+ ```
38
+
39
+ ---
40
+
41
+ ## Server vs Client Components
42
+
43
+ - **Server Components (Default)**: Zero JS. Direct DB access. Secure env vars.
44
+ - **Client Components (`"use client"`)**: Lifecycle (`useEffect`), State (`useState`), Browser APIs (`window`), Event listeners (`onClick`).
45
+
46
+ ```tsx
47
+ // ✅ INTERLEAVING PATTERN: Pass Server Component as children to Client Component
48
+ export default function Page() {
49
+ return (
50
+ <ClientSidebar> {/* "use client" */}
51
+ <ServerStats /> {/* Server: zero JS bundle, fetches DB */}
52
+ </ClientSidebar>
53
+ );
54
+ }
55
+ ```
56
+
57
+ ---
58
+
59
+ ## Server Actions (Mutations)
60
+
61
+ ```tsx
62
+ "use server"
63
+ import { revalidatePath } from "next/cache";
64
+ import { z } from "zod";
65
+
66
+ const Schema = z.object({ name: z.string().min(2) });
67
+
68
+ export async function createUser(prevState: any, formData: FormData) {
69
+ // ❌ TRAP: ALWAYS validate formData. Never trust client input.
70
+ const parsed = Schema.safeParse({ name: formData.get("name") });
71
+ if (!parsed.success) return { errors: parsed.error.flatten().fieldErrors };
72
+
73
+ await db.user.create({ data: parsed.data });
74
+ revalidatePath("/users"); // Clears cache so next render shows new user
75
+ return { success: true };
76
+ }
77
+ ```
78
+
79
+ Client usage (React 19):
80
+ ```tsx
81
+ "use client"
82
+ import { useActionState } from "react";
83
+ import { createUser } from "./actions";
84
+
85
+ export function UserForm() {
86
+ const [state, formAction, isPending] = useActionState(createUser, null);
87
+ return (
88
+ <form action={formAction}>
89
+ <input name="name" />
90
+ <button disabled={isPending}>Submit</button>
91
+ {state?.errors?.name && <p>{state.errors.name}</p>}
92
+ </form>
93
+ )
94
+ }
95
+ ```
96
+
97
+ ---
98
+
99
+ ## Data Fetching & Caching (Next.js 15)
100
+
101
+ ```tsx
102
+ // Next.js 15 caching defaults
103
+ const dynamic = await fetch(url); // 15 default: NO CACHE
104
+ const static = await fetch(url, { cache: "force-cache" }); // Static
105
+ const isr = await fetch(url, { next: { revalidate: 3600 } }); // Revalidate every hour
106
+ const tagged = await fetch(url, { next: { tags: ["user-1"] } }); // On-demand via revalidateTag()
107
+
108
+ // DB calls without fetch
109
+ import { unstable_cache } from "next/cache";
110
+ const getCachedUser = unstable_cache(
111
+ async (id) => db.user.findUnique({ where: { id } }),
112
+ ["user-cache-key"],
113
+ { revalidate: 60, tags: ["users"] }
114
+ );
115
+ ```
116
+
117
+ ### Waterfall Elimination
118
+ ```tsx
119
+ // ✅ Parallel Fetching:
120
+ const [user, posts] = await Promise.all([getUser(), getPosts()]);
121
+
122
+ // Streaming (PPR-compatible):
123
+ export default function Page() {
124
+ return (
125
+ <main>
126
+ <FastNav />
127
+ {/* Page shell loads instantly, SlowChart streams in when ready */}
128
+ <Suspense fallback={<Skeleton />}>
129
+ <SlowChart />
130
+ </Suspense>
131
+ </main>
132
+ );
133
+ }
134
+ ```
135
+
136
+ ---
137
+
138
+ ## Partial Prerendering (PPR)
139
+
140
+ PPR static-generates the route shell and streams dynamic parts.
141
+ ```tsx
142
+ // next.config.ts
143
+ export default { experimental: { ppr: true } };
144
+
145
+ // Any component reading cookies/headers inside a Suspense boundary becomes a dynamic hole
146
+ import { cookies } from "next/headers";
147
+
148
+ async function Cart() {
149
+ const c = await cookies(); // Next.js 15 cookies are async!
150
+ const cartId = c.get("cartId");
151
+ }
152
+
153
+ export default function Page() {
154
+ return (
155
+ <div>
156
+ <StaticHeader /> {/* Cached at build time on CDN */}
157
+ <Suspense fallback={<CartSkeleton />}>
158
+ <Cart /> {/* Dynamic, streamed at request time */}
159
+ </Suspense>
160
+ </div>
161
+ )
162
+ }
163
+ ```
164
+
165
+ ---
166
+
167
+ ## Middleware
168
+
169
+ ```typescript
170
+ // middleware.ts (Root of project)
171
+ import { NextResponse } from "next/server";
172
+ import type { NextRequest } from "next/server";
173
+
174
+ export function middleware(req: NextRequest) {
175
+ const token = req.cookies.get("auth-token");
176
+ if (!token && req.nextUrl.pathname.startsWith("/dashboard")) {
177
+ return NextResponse.redirect(new URL("/login", req.url));
178
+ }
179
+ }
180
+
181
+ export const config = {
182
+ matcher: ["/dashboard/:path*"], // Strict matcher is critical for performance
183
+ };
184
+ ```