@su-record/vibe 2.8.51 → 2.8.53

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 (428) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +169 -169
  3. package/LICENSE +21 -21
  4. package/README.ko.md +5 -5
  5. package/README.md +5 -5
  6. package/agents/architect-low.md +41 -41
  7. package/agents/architect-medium.md +59 -59
  8. package/agents/architect.md +80 -80
  9. package/agents/build-error-resolver.md +115 -115
  10. package/agents/compounder.md +261 -261
  11. package/agents/diagrammer.md +178 -178
  12. package/agents/docs/api-documenter.md +99 -99
  13. package/agents/docs/changelog-writer.md +93 -93
  14. package/agents/e2e-tester.md +294 -294
  15. package/agents/event/event-comms.md +78 -78
  16. package/agents/event/event-content.md +68 -68
  17. package/agents/event/event-image.md +95 -95
  18. package/agents/event/event-ops.md +84 -84
  19. package/agents/event/event-scheduler.md +69 -69
  20. package/agents/event/event-speaker.md +86 -86
  21. package/agents/explorer-low.md +42 -42
  22. package/agents/explorer-medium.md +59 -59
  23. package/agents/explorer.md +48 -48
  24. package/agents/implementer-low.md +43 -43
  25. package/agents/implementer-medium.md +52 -52
  26. package/agents/implementer.md +54 -54
  27. package/agents/junior-mentor.md +141 -141
  28. package/agents/planning/requirements-analyst.md +84 -84
  29. package/agents/planning/ux-advisor.md +83 -83
  30. package/agents/qa/acceptance-tester.md +86 -86
  31. package/agents/qa/edge-case-finder.md +93 -93
  32. package/agents/qa/qa-coordinator.md +131 -131
  33. package/agents/refactor-cleaner.md +143 -143
  34. package/agents/research/best-practices-agent.md +199 -199
  35. package/agents/research/codebase-patterns-agent.md +157 -157
  36. package/agents/research/framework-docs-agent.md +188 -188
  37. package/agents/research/security-advisory-agent.md +213 -213
  38. package/agents/review/architecture-reviewer.md +107 -107
  39. package/agents/review/complexity-reviewer.md +116 -116
  40. package/agents/review/data-integrity-reviewer.md +88 -88
  41. package/agents/review/git-history-reviewer.md +103 -103
  42. package/agents/review/performance-reviewer.md +86 -86
  43. package/agents/review/python-reviewer.md +150 -150
  44. package/agents/review/rails-reviewer.md +139 -139
  45. package/agents/review/react-reviewer.md +144 -144
  46. package/agents/review/security-reviewer.md +80 -80
  47. package/agents/review/simplicity-reviewer.md +140 -140
  48. package/agents/review/test-coverage-reviewer.md +116 -116
  49. package/agents/review/typescript-reviewer.md +127 -127
  50. package/agents/searcher.md +54 -54
  51. package/agents/simplifier.md +120 -120
  52. package/agents/tester.md +49 -49
  53. package/agents/ui/ui-a11y-auditor.md +93 -93
  54. package/agents/ui/ui-antipattern-detector.md +102 -102
  55. package/agents/ui/ui-dataviz-advisor.md +69 -69
  56. package/agents/ui/ui-design-system-gen.md +57 -57
  57. package/agents/ui/ui-industry-analyzer.md +49 -49
  58. package/agents/ui/ui-layout-architect.md +65 -65
  59. package/agents/ui/ui-stack-implementer.md +68 -68
  60. package/agents/ui/ux-compliance-reviewer.md +81 -81
  61. package/agents/ui-previewer.md +258 -258
  62. package/commands/vibe.analyze.md +379 -379
  63. package/commands/vibe.docs.md +32 -32
  64. package/commands/vibe.event.md +163 -163
  65. package/commands/vibe.figma.md +69 -69
  66. package/commands/vibe.review.md +686 -686
  67. package/commands/vibe.run.md +2276 -2276
  68. package/commands/vibe.spec.md +1195 -1195
  69. package/commands/vibe.spec.review.md +609 -609
  70. package/commands/vibe.trace.md +259 -259
  71. package/commands/vibe.utils.md +413 -413
  72. package/commands/vibe.verify.md +510 -510
  73. package/dist/cli/collaborator.js +52 -52
  74. package/dist/cli/commands/config.js +9 -9
  75. package/dist/cli/commands/evolution.js +12 -12
  76. package/dist/cli/commands/figma.js +20 -20
  77. package/dist/cli/commands/info.js +53 -53
  78. package/dist/cli/commands/init.d.ts.map +1 -1
  79. package/dist/cli/commands/init.js +82 -15
  80. package/dist/cli/commands/init.js.map +1 -1
  81. package/dist/cli/commands/remove.js +14 -14
  82. package/dist/cli/commands/sentinel.js +27 -27
  83. package/dist/cli/commands/skills.js +5 -5
  84. package/dist/cli/commands/slack.js +10 -10
  85. package/dist/cli/commands/stats.js +6 -6
  86. package/dist/cli/commands/telegram.js +12 -12
  87. package/dist/cli/detect.js +32 -32
  88. package/dist/cli/index.js +51 -51
  89. package/dist/cli/llm/claude-commands.js +16 -16
  90. package/dist/cli/llm/config.js +18 -18
  91. package/dist/cli/llm/gemini-commands.js +16 -16
  92. package/dist/cli/llm/gpt-commands.js +19 -19
  93. package/dist/cli/llm/help.js +21 -21
  94. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  95. package/dist/cli/postinstall/constants.js +2 -0
  96. package/dist/cli/postinstall/constants.js.map +1 -1
  97. package/dist/cli/postinstall/cursor-agents.js +32 -32
  98. package/dist/cli/postinstall/cursor-rules.js +83 -83
  99. package/dist/cli/postinstall/cursor-skills.js +743 -743
  100. package/dist/cli/setup/Provisioner.js +42 -42
  101. package/dist/cli/types.d.ts +12 -0
  102. package/dist/cli/types.d.ts.map +1 -1
  103. package/dist/infra/lib/DeepInit.js +24 -24
  104. package/dist/infra/lib/IterationTracker.js +11 -11
  105. package/dist/infra/lib/PythonParser.js +108 -108
  106. package/dist/infra/lib/ReviewRace.js +96 -96
  107. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  108. package/dist/infra/lib/SkillQualityGate.js +9 -9
  109. package/dist/infra/lib/SkillRepository.js +159 -159
  110. package/dist/infra/lib/TokenBudgetTracker.d.ts +13 -0
  111. package/dist/infra/lib/TokenBudgetTracker.d.ts.map +1 -1
  112. package/dist/infra/lib/TokenBudgetTracker.js +44 -3
  113. package/dist/infra/lib/TokenBudgetTracker.js.map +1 -1
  114. package/dist/infra/lib/UltraQA.js +99 -99
  115. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  116. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  117. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  118. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  119. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  120. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  121. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  122. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  123. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  124. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  125. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  126. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  127. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  128. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  129. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  130. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  131. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  132. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  133. package/dist/infra/lib/gemini/orchestration.js +5 -5
  134. package/dist/infra/lib/gpt/orchestration.js +4 -4
  135. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  136. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  137. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  138. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  139. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  140. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  141. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  142. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  143. package/dist/infra/orchestrator/AgentManager.js +12 -12
  144. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  145. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  146. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  147. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  148. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  149. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  150. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  151. package/dist/tools/memory/getMemoryGraph.js +12 -12
  152. package/dist/tools/memory/getSessionContext.js +9 -9
  153. package/dist/tools/memory/linkMemories.js +14 -14
  154. package/dist/tools/memory/listMemories.js +4 -4
  155. package/dist/tools/memory/recallMemory.js +4 -4
  156. package/dist/tools/memory/saveMemory.js +4 -4
  157. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  158. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  159. package/dist/tools/semantic/astGrep.test.js +6 -6
  160. package/dist/tools/spec/prdParser.test.js +171 -171
  161. package/dist/tools/spec/specGenerator.js +169 -169
  162. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  163. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  164. package/hooks/gemini-hooks.json +73 -73
  165. package/hooks/hooks.json +174 -170
  166. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  167. package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -286
  168. package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -210
  169. package/hooks/scripts/auto-commit.js +97 -97
  170. package/hooks/scripts/auto-format.js +64 -64
  171. package/hooks/scripts/auto-test.js +81 -81
  172. package/hooks/scripts/code-check.js +268 -268
  173. package/hooks/scripts/codex-detect.js +46 -46
  174. package/hooks/scripts/codex-review-gate.js +80 -80
  175. package/hooks/scripts/command-log.js +32 -32
  176. package/hooks/scripts/context-save.js +353 -353
  177. package/hooks/scripts/devlog-gen.js +230 -0
  178. package/hooks/scripts/evolution-engine.js +91 -91
  179. package/hooks/scripts/figma-extract.js +635 -477
  180. package/hooks/scripts/hud-status.js +321 -321
  181. package/hooks/scripts/keyword-detector.js +214 -214
  182. package/hooks/scripts/llm-orchestrate.js +572 -572
  183. package/hooks/scripts/post-edit.js +32 -32
  184. package/hooks/scripts/pr-test-gate.js +52 -52
  185. package/hooks/scripts/pre-tool-guard.js +214 -159
  186. package/hooks/scripts/prompt-dispatcher.js +185 -185
  187. package/hooks/scripts/sentinel-guard.js +131 -131
  188. package/hooks/scripts/session-start.js +177 -177
  189. package/hooks/scripts/skill-injector.js +83 -83
  190. package/hooks/scripts/stop-notify.js +209 -209
  191. package/hooks/scripts/utils.js +243 -243
  192. package/languages/csharp-unity.md +515 -515
  193. package/languages/gdscript-godot.md +470 -470
  194. package/languages/ruby-rails.md +489 -489
  195. package/languages/typescript-angular.md +433 -433
  196. package/languages/typescript-astro.md +416 -416
  197. package/languages/typescript-electron.md +406 -406
  198. package/languages/typescript-nestjs.md +524 -524
  199. package/languages/typescript-svelte.md +407 -407
  200. package/languages/typescript-tauri.md +365 -365
  201. package/package.json +101 -101
  202. package/skills/agents-md/SKILL.md +121 -121
  203. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  204. package/skills/agents-md/templates/agents-md.md +36 -36
  205. package/skills/arch-guard/SKILL.md +181 -181
  206. package/skills/arch-guard/agents/detector.md +48 -48
  207. package/skills/arch-guard/agents/reporter.md +48 -48
  208. package/skills/arch-guard/agents/rule-generator.md +49 -49
  209. package/skills/arch-guard/agents/violation-checker.md +51 -51
  210. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  211. package/skills/arch-guard/frameworks/solid.md +102 -102
  212. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  213. package/skills/arch-guard/templates/arch-rules.json +47 -47
  214. package/skills/arch-guard/templates/violation-report.md +53 -53
  215. package/skills/brand-assets/SKILL.md +147 -147
  216. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  217. package/skills/brand-assets/templates/brand-guide.md +161 -161
  218. package/skills/capability-loop/SKILL.md +168 -168
  219. package/skills/capability-loop/agents/capability-designer.md +61 -61
  220. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  221. package/skills/capability-loop/agents/implementer.md +50 -50
  222. package/skills/capability-loop/agents/tester.md +53 -53
  223. package/skills/capability-loop/templates/capability-spec.md +118 -118
  224. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  225. package/skills/characterization-test/SKILL.md +207 -207
  226. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  227. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  228. package/skills/characterization-test/agents/reporter.md +50 -50
  229. package/skills/characterization-test/agents/test-writer.md +49 -49
  230. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  231. package/skills/characterization-test/templates/test-template.ts +101 -101
  232. package/skills/chub-usage/SKILL.md +139 -139
  233. package/skills/claude-md-guide/SKILL.md +351 -351
  234. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  235. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  236. package/skills/commerce-patterns/SKILL.md +64 -64
  237. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  238. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  239. package/skills/commit-push-pr/SKILL.md +77 -77
  240. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  241. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  242. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  243. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  244. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  245. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  246. package/skills/context7-usage/SKILL.md +106 -106
  247. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  248. package/skills/create-prd/SKILL.md +90 -90
  249. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  250. package/skills/create-prd/agents/prioritizer.md +60 -60
  251. package/skills/create-prd/agents/requirements-writer.md +48 -48
  252. package/skills/create-prd/agents/researcher.md +55 -55
  253. package/skills/create-prd/agents/reviewer.md +54 -54
  254. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  255. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  256. package/skills/create-prd/orchestrator.md +70 -70
  257. package/skills/create-prd/rubrics/completeness.md +58 -58
  258. package/skills/create-prd/templates/prd.md +139 -139
  259. package/skills/design-audit/SKILL.md +152 -152
  260. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  261. package/skills/design-audit/agents/performance-auditor.md +46 -46
  262. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  263. package/skills/design-audit/agents/scorer.md +47 -47
  264. package/skills/design-audit/agents/slop-detector.md +47 -47
  265. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  266. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  267. package/skills/design-audit/orchestrator.md +64 -64
  268. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  269. package/skills/design-audit/rubrics/scoring.md +63 -63
  270. package/skills/design-audit/templates/report.md +88 -88
  271. package/skills/design-critique/SKILL.md +139 -139
  272. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  273. package/skills/design-critique/templates/critique-report.md +86 -86
  274. package/skills/design-distill/SKILL.md +130 -130
  275. package/skills/design-distill/templates/design-system.md +132 -132
  276. package/skills/design-normalize/SKILL.md +133 -133
  277. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  278. package/skills/design-normalize/templates/token-audit.md +89 -89
  279. package/skills/design-polish/SKILL.md +131 -131
  280. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  281. package/skills/design-polish/templates/polish-report.md +64 -64
  282. package/skills/design-teach/SKILL.md +182 -182
  283. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  284. package/skills/design-teach/templates/design-context.json +36 -36
  285. package/skills/devlog/SKILL.md +143 -0
  286. package/skills/e2e-commerce/SKILL.md +62 -62
  287. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  288. package/skills/event-comms/SKILL.md +162 -162
  289. package/skills/event-comms/templates/email-invite.md +99 -99
  290. package/skills/event-comms/templates/sns-post.md +133 -133
  291. package/skills/event-ops/SKILL.md +198 -198
  292. package/skills/event-ops/rubrics/contingency.md +85 -85
  293. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  294. package/skills/event-planning/SKILL.md +132 -132
  295. package/skills/event-planning/rubrics/timeline.md +70 -70
  296. package/skills/event-planning/templates/event-plan.md +91 -91
  297. package/skills/exec-plan/SKILL.md +149 -149
  298. package/skills/exec-plan/agents/decomposer.md +47 -47
  299. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  300. package/skills/exec-plan/agents/estimator.md +43 -43
  301. package/skills/exec-plan/agents/validator.md +55 -55
  302. package/skills/exec-plan/orchestrator.md +70 -70
  303. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  304. package/skills/exec-plan/templates/plan.md +147 -147
  305. package/skills/git-worktree/SKILL.md +73 -73
  306. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  307. package/skills/handoff/SKILL.md +110 -110
  308. package/skills/handoff/agents/context-summarizer.md +51 -51
  309. package/skills/handoff/agents/document-writer.md +63 -63
  310. package/skills/handoff/agents/state-collector.md +53 -53
  311. package/skills/handoff/agents/verifier.md +48 -48
  312. package/skills/handoff/rubrics/completeness.md +62 -62
  313. package/skills/handoff/templates/handoff.md +107 -107
  314. package/skills/parallel-research/SKILL.md +89 -89
  315. package/skills/parallel-research/agents/best-practices.md +43 -43
  316. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  317. package/skills/parallel-research/agents/framework-docs.md +45 -45
  318. package/skills/parallel-research/agents/security-advisory.md +46 -46
  319. package/skills/parallel-research/agents/synthesizer.md +52 -52
  320. package/skills/parallel-research/experts/best-practices.md +50 -50
  321. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  322. package/skills/parallel-research/experts/framework-docs.md +65 -65
  323. package/skills/parallel-research/experts/security-advisory.md +69 -69
  324. package/skills/parallel-research/orchestrator.md +65 -65
  325. package/skills/parallel-research/templates/synthesis.md +101 -101
  326. package/skills/prioritization-frameworks/SKILL.md +87 -87
  327. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  328. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  329. package/skills/priority-todos/SKILL.md +64 -64
  330. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  331. package/skills/priority-todos/templates/todo-board.md +59 -59
  332. package/skills/seo-checklist/SKILL.md +58 -58
  333. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  334. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  335. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  336. package/skills/techdebt/SKILL.md +124 -124
  337. package/skills/techdebt/agents/analyzer.md +50 -50
  338. package/skills/techdebt/agents/fixer.md +41 -41
  339. package/skills/techdebt/agents/reviewer.md +47 -47
  340. package/skills/techdebt/agents/scanner.md +44 -44
  341. package/skills/techdebt/orchestrator.md +70 -70
  342. package/skills/techdebt/rubrics/severity.md +51 -51
  343. package/skills/techdebt/scripts/scan.js +90 -90
  344. package/skills/techdebt/templates/report.md +86 -86
  345. package/skills/tool-fallback/SKILL.md +104 -104
  346. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  347. package/skills/typescript-advanced-types/SKILL.md +67 -67
  348. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  349. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  350. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  351. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  352. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  353. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  354. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  355. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  356. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  357. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  358. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  359. package/skills/user-personas/SKILL.md +75 -75
  360. package/skills/user-personas/rubrics/research-methods.md +56 -56
  361. package/skills/user-personas/templates/persona.md +89 -89
  362. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  363. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  364. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  365. package/skills/vibe.docs/SKILL.md +171 -171
  366. package/skills/vibe.docs/templates/architecture.md +80 -80
  367. package/skills/vibe.docs/templates/readme.md +84 -84
  368. package/skills/vibe.docs/templates/release-notes.md +74 -74
  369. package/skills/vibe.figma/SKILL.md +215 -982
  370. package/skills/vibe.figma/rubrics/extraction-checklist.md +51 -51
  371. package/skills/vibe.figma/templates/component-index.md +126 -126
  372. package/skills/vibe.figma/templates/figma-handoff.md +100 -100
  373. package/skills/vibe.figma/templates/remapped-tree.md +277 -277
  374. package/skills/vibe.figma.convert/SKILL.md +188 -511
  375. package/skills/vibe.figma.convert/rubrics/conversion-rules.md +129 -113
  376. package/skills/vibe.figma.convert/templates/component.md +140 -140
  377. package/skills/vibe.figma.extract/SKILL.md +179 -300
  378. package/skills/vibe.figma.extract/rubrics/image-rules.md +145 -137
  379. package/skills/video-production/SKILL.md +52 -52
  380. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  381. package/skills/video-production/templates/production-plan.md +104 -104
  382. package/vibe/config.json +29 -29
  383. package/vibe/constitution.md +227 -227
  384. package/vibe/rules/principles/communication-guide.md +98 -98
  385. package/vibe/rules/principles/development-philosophy.md +52 -52
  386. package/vibe/rules/principles/quick-start.md +102 -102
  387. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  388. package/vibe/rules/quality/checklist.md +276 -276
  389. package/vibe/rules/quality/performance.md +236 -236
  390. package/vibe/rules/quality/testing-strategy.md +440 -440
  391. package/vibe/rules/standards/anti-patterns.md +541 -541
  392. package/vibe/rules/standards/code-structure.md +291 -291
  393. package/vibe/rules/standards/complexity-metrics.md +313 -313
  394. package/vibe/rules/standards/git-workflow.md +237 -237
  395. package/vibe/rules/standards/naming-conventions.md +198 -198
  396. package/vibe/rules/standards/security.md +305 -305
  397. package/vibe/rules/writing/document-style.md +74 -74
  398. package/vibe/setup.sh +31 -31
  399. package/vibe/templates/constitution-template.md +252 -252
  400. package/vibe/templates/contract-backend-template.md +526 -526
  401. package/vibe/templates/contract-frontend-template.md +599 -599
  402. package/vibe/templates/feature-template.md +96 -96
  403. package/vibe/templates/spec-template.md +221 -221
  404. package/vibe/ui-ux-data/charts.csv +26 -26
  405. package/vibe/ui-ux-data/colors.csv +97 -97
  406. package/vibe/ui-ux-data/icons.csv +101 -101
  407. package/vibe/ui-ux-data/landing.csv +31 -31
  408. package/vibe/ui-ux-data/products.csv +96 -96
  409. package/vibe/ui-ux-data/react-performance.csv +45 -45
  410. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  411. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  412. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  413. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  414. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  415. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  416. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  417. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  418. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  419. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  420. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  421. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  422. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  423. package/vibe/ui-ux-data/styles.csv +68 -68
  424. package/vibe/ui-ux-data/typography.csv +57 -57
  425. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  426. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  427. package/vibe/ui-ux-data/version.json +31 -31
  428. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -1,89 +1,89 @@
1
- # User Persona: {{PERSONA_NAME}}
2
-
3
- > Product: {{PRODUCT_NAME}} | Research basis: {{DATA_SOURCE}} | Created: {{DATE}}
4
-
5
- ---
6
-
7
- ## Identity
8
-
9
- | Field | Value |
10
- |-------|-------|
11
- | Name (fictional) | {{PERSONA_NAME}} |
12
- | Age range | {{AGE_RANGE}} |
13
- | Role / Title | {{ROLE}} |
14
- | Company size | {{COMPANY_SIZE}} (if B2B) |
15
- | Location | {{LOCATION}} |
16
- | Tech comfort | {{LOW / MEDIUM / HIGH}} |
17
-
18
- **In their own words**: "{{REPRESENTATIVE_QUOTE_FROM_RESEARCH}}"
19
-
20
- ---
21
-
22
- ## Primary Job-to-be-Done
23
-
24
- > {{THE CORE OUTCOME THIS PERSONA IS TRYING TO ACHIEVE}}
25
-
26
- **Context**: {{WHEN AND HOW OFTEN DOES THIS JOB ARISE?}}
27
- **Definition of done**: {{HOW DOES THIS PERSONA KNOW THEY SUCCEEDED?}}
28
-
29
- ---
30
-
31
- ## Top 3 Pain Points
32
-
33
- | # | Pain | Impact | Severity |
34
- |---|------|--------|----------|
35
- | 1 | {{PAIN_1}} | {{CONSEQUENCE}} | High / Med / Low |
36
- | 2 | {{PAIN_2}} | {{CONSEQUENCE}} | High / Med / Low |
37
- | 3 | {{PAIN_3}} | {{CONSEQUENCE}} | High / Med / Low |
38
-
39
- ---
40
-
41
- ## Top 3 Desired Gains
42
-
43
- | # | Gain | How They Measure It |
44
- |---|------|---------------------|
45
- | 1 | {{GAIN_1}} | {{METRIC_OR_FEELING}} |
46
- | 2 | {{GAIN_2}} | {{METRIC_OR_FEELING}} |
47
- | 3 | {{GAIN_3}} | {{METRIC_OR_FEELING}} |
48
-
49
- ---
50
-
51
- ## Unexpected Insight
52
-
53
- > {{A COUNTERINTUITIVE BEHAVIORAL PATTERN OR MOTIVATION FROM RESEARCH DATA}}
54
-
55
- **Why it matters for product decisions**: {{IMPLICATION}}
56
-
57
- ---
58
-
59
- ## Current Alternatives
60
-
61
- How does this persona solve the problem today?
62
-
63
- | Alternative | Why they use it | What frustrates them |
64
- |-------------|----------------|----------------------|
65
- | {{ALT_1}} | {{REASON}} | {{FRUSTRATION}} |
66
- | {{ALT_2}} | {{REASON}} | {{FRUSTRATION}} |
67
-
68
- ---
69
-
70
- ## Product Fit Assessment
71
-
72
- **How {{PRODUCT_NAME}} addresses their needs**:
73
- - {{FIT_POINT_1}}
74
- - {{FIT_POINT_2}}
75
-
76
- **Potential friction points**:
77
- - {{FRICTION_1}}
78
- - {{FRICTION_2}}
79
-
80
- **Unmet needs (future opportunities)**:
81
- - {{UNMET_NEED_1}}
82
-
83
- ---
84
-
85
- ## Data Sources
86
-
87
- - {{SOURCE_1}} (e.g., "10 user interviews, March 2026")
88
- - {{SOURCE_2}} (e.g., "NPS survey, n=142")
89
- - **Data gaps**: {{WHAT WE DON'T KNOW YET}}
1
+ # User Persona: {{PERSONA_NAME}}
2
+
3
+ > Product: {{PRODUCT_NAME}} | Research basis: {{DATA_SOURCE}} | Created: {{DATE}}
4
+
5
+ ---
6
+
7
+ ## Identity
8
+
9
+ | Field | Value |
10
+ |-------|-------|
11
+ | Name (fictional) | {{PERSONA_NAME}} |
12
+ | Age range | {{AGE_RANGE}} |
13
+ | Role / Title | {{ROLE}} |
14
+ | Company size | {{COMPANY_SIZE}} (if B2B) |
15
+ | Location | {{LOCATION}} |
16
+ | Tech comfort | {{LOW / MEDIUM / HIGH}} |
17
+
18
+ **In their own words**: "{{REPRESENTATIVE_QUOTE_FROM_RESEARCH}}"
19
+
20
+ ---
21
+
22
+ ## Primary Job-to-be-Done
23
+
24
+ > {{THE CORE OUTCOME THIS PERSONA IS TRYING TO ACHIEVE}}
25
+
26
+ **Context**: {{WHEN AND HOW OFTEN DOES THIS JOB ARISE?}}
27
+ **Definition of done**: {{HOW DOES THIS PERSONA KNOW THEY SUCCEEDED?}}
28
+
29
+ ---
30
+
31
+ ## Top 3 Pain Points
32
+
33
+ | # | Pain | Impact | Severity |
34
+ |---|------|--------|----------|
35
+ | 1 | {{PAIN_1}} | {{CONSEQUENCE}} | High / Med / Low |
36
+ | 2 | {{PAIN_2}} | {{CONSEQUENCE}} | High / Med / Low |
37
+ | 3 | {{PAIN_3}} | {{CONSEQUENCE}} | High / Med / Low |
38
+
39
+ ---
40
+
41
+ ## Top 3 Desired Gains
42
+
43
+ | # | Gain | How They Measure It |
44
+ |---|------|---------------------|
45
+ | 1 | {{GAIN_1}} | {{METRIC_OR_FEELING}} |
46
+ | 2 | {{GAIN_2}} | {{METRIC_OR_FEELING}} |
47
+ | 3 | {{GAIN_3}} | {{METRIC_OR_FEELING}} |
48
+
49
+ ---
50
+
51
+ ## Unexpected Insight
52
+
53
+ > {{A COUNTERINTUITIVE BEHAVIORAL PATTERN OR MOTIVATION FROM RESEARCH DATA}}
54
+
55
+ **Why it matters for product decisions**: {{IMPLICATION}}
56
+
57
+ ---
58
+
59
+ ## Current Alternatives
60
+
61
+ How does this persona solve the problem today?
62
+
63
+ | Alternative | Why they use it | What frustrates them |
64
+ |-------------|----------------|----------------------|
65
+ | {{ALT_1}} | {{REASON}} | {{FRUSTRATION}} |
66
+ | {{ALT_2}} | {{REASON}} | {{FRUSTRATION}} |
67
+
68
+ ---
69
+
70
+ ## Product Fit Assessment
71
+
72
+ **How {{PRODUCT_NAME}} addresses their needs**:
73
+ - {{FIT_POINT_1}}
74
+ - {{FIT_POINT_2}}
75
+
76
+ **Potential friction points**:
77
+ - {{FRICTION_1}}
78
+ - {{FRICTION_2}}
79
+
80
+ **Unmet needs (future opportunities)**:
81
+ - {{UNMET_NEED_1}}
82
+
83
+ ---
84
+
85
+ ## Data Sources
86
+
87
+ - {{SOURCE_1}} (e.g., "10 user interviews, March 2026")
88
+ - {{SOURCE_2}} (e.g., "NPS survey, n=142")
89
+ - **Data gaps**: {{WHAT WE DON'T KNOW YET}}
@@ -1,60 +1,60 @@
1
- ---
2
- name: vercel-react-best-practices
3
- tier: core
4
- description: "React/Next.js performance gotchas from Vercel engineering. Non-intuitive pitfalls that LLMs commonly miss."
5
- triggers: [react, next.js, performance, optimization, vercel, component, rendering]
6
- priority: 60
7
- ---
8
-
9
- # Vercel React Best Practices
10
-
11
- ## Pre-check (K1)
12
-
13
- > Is this a React/Next.js performance issue? Standard React patterns (useState, useEffect, components) don't need this skill. Activate only for performance optimization or code review.
14
-
15
- ## CRITICAL Gotchas
16
-
17
- ### Waterfall Elimination
18
-
19
- | Gotcha | Why Non-obvious |
20
- |--------|----------------|
21
- | **Sequential awaits** | `const a = await f1(); const b = await f2();` creates waterfall. Use `Promise.all([f1(), f2()])` for independent ops |
22
- | **Await placement** | Move `await` to the branch where value is actually used, not at declaration |
23
- | **Missing Suspense** | Wrap slow server components in `<Suspense>` to stream — don't block entire page |
24
-
25
- ### Bundle Size
26
-
27
- | Gotcha | Why Non-obvious |
28
- |--------|----------------|
29
- | **Barrel imports** | `import { Button } from "@/components"` pulls entire barrel. Use `import { Button } from "@/components/Button"` |
30
- | **Third-party in initial bundle** | Load analytics/logging AFTER hydration with `next/dynamic` or lazy `useEffect` |
31
- | **Heavy components** | Charts, editors, maps → `next/dynamic` with `{ ssr: false }` |
32
-
33
- ## HIGH Gotchas
34
-
35
- ### Server-side
36
-
37
- | Gotcha | Fix |
38
- |--------|-----|
39
- | Duplicate DB calls across server components | Wrap with `React.cache()` for per-request dedup |
40
- | Large data serialized to client | Pick only needed fields before passing to client components |
41
- | Blocking post-processing (logging, analytics) | Use `after()` for non-blocking tasks |
42
-
43
- ## MEDIUM Gotchas
44
-
45
- | Gotcha | Fix |
46
- |--------|-----|
47
- | Expensive computation re-runs on parent re-render | Isolate in `memo()` wrapped component |
48
- | Static JSX recreated every render | Hoist outside component: `const HEADER = <header>...</header>` |
49
- | Long lists render all items | `content-visibility: auto; contain-intrinsic-size: 0 80px;` on list items |
50
- | `{count && <Item />}` renders `0` | Use ternary: `{count > 0 ? <Item /> : null}` |
51
- | Event handler changes every render → effect re-runs | Store handlers in `useRef` for stable effects |
52
- | Object in useEffect deps | Use primitive values (id, not entire object) as dependencies |
53
-
54
- ## Done Criteria (K4)
55
-
56
- - [ ] No sequential awaits for independent operations
57
- - [ ] No barrel imports for tree-shakeable modules
58
- - [ ] Server component data is `React.cache()`-wrapped where reused
59
- - [ ] Heavy third-party loaded after hydration
60
- - [ ] Long lists use `content-visibility: auto`
1
+ ---
2
+ name: vercel-react-best-practices
3
+ tier: core
4
+ description: "React/Next.js performance gotchas from Vercel engineering. Non-intuitive pitfalls that LLMs commonly miss."
5
+ triggers: [react, next.js, performance, optimization, vercel, component, rendering]
6
+ priority: 60
7
+ ---
8
+
9
+ # Vercel React Best Practices
10
+
11
+ ## Pre-check (K1)
12
+
13
+ > Is this a React/Next.js performance issue? Standard React patterns (useState, useEffect, components) don't need this skill. Activate only for performance optimization or code review.
14
+
15
+ ## CRITICAL Gotchas
16
+
17
+ ### Waterfall Elimination
18
+
19
+ | Gotcha | Why Non-obvious |
20
+ |--------|----------------|
21
+ | **Sequential awaits** | `const a = await f1(); const b = await f2();` creates waterfall. Use `Promise.all([f1(), f2()])` for independent ops |
22
+ | **Await placement** | Move `await` to the branch where value is actually used, not at declaration |
23
+ | **Missing Suspense** | Wrap slow server components in `<Suspense>` to stream — don't block entire page |
24
+
25
+ ### Bundle Size
26
+
27
+ | Gotcha | Why Non-obvious |
28
+ |--------|----------------|
29
+ | **Barrel imports** | `import { Button } from "@/components"` pulls entire barrel. Use `import { Button } from "@/components/Button"` |
30
+ | **Third-party in initial bundle** | Load analytics/logging AFTER hydration with `next/dynamic` or lazy `useEffect` |
31
+ | **Heavy components** | Charts, editors, maps → `next/dynamic` with `{ ssr: false }` |
32
+
33
+ ## HIGH Gotchas
34
+
35
+ ### Server-side
36
+
37
+ | Gotcha | Fix |
38
+ |--------|-----|
39
+ | Duplicate DB calls across server components | Wrap with `React.cache()` for per-request dedup |
40
+ | Large data serialized to client | Pick only needed fields before passing to client components |
41
+ | Blocking post-processing (logging, analytics) | Use `after()` for non-blocking tasks |
42
+
43
+ ## MEDIUM Gotchas
44
+
45
+ | Gotcha | Fix |
46
+ |--------|-----|
47
+ | Expensive computation re-runs on parent re-render | Isolate in `memo()` wrapped component |
48
+ | Static JSX recreated every render | Hoist outside component: `const HEADER = <header>...</header>` |
49
+ | Long lists render all items | `content-visibility: auto; contain-intrinsic-size: 0 80px;` on list items |
50
+ | `{count && <Item />}` renders `0` | Use ternary: `{count > 0 ? <Item /> : null}` |
51
+ | Event handler changes every render → effect re-runs | Store handlers in `useRef` for stable effects |
52
+ | Object in useEffect deps | Use primitive values (id, not entire object) as dependencies |
53
+
54
+ ## Done Criteria (K4)
55
+
56
+ - [ ] No sequential awaits for independent operations
57
+ - [ ] No barrel imports for tree-shakeable modules
58
+ - [ ] Server component data is `React.cache()`-wrapped where reused
59
+ - [ ] Heavy third-party loaded after hydration
60
+ - [ ] Long lists use `content-visibility: auto`
@@ -1,82 +1,82 @@
1
- # React Performance Patterns
2
-
3
- ## memo — Skip Re-render
4
-
5
- Wrap components that receive stable props but re-render from parent updates.
6
-
7
- ```typescript
8
- const ItemRow = memo(function ItemRow({ item }: { item: Item }) {
9
- return <tr>{item.name}</tr>;
10
- });
11
- ```
12
-
13
- **When to use**: Pure display components in long lists, or children of frequently-updating parents.
14
- **When NOT to use**: Components that almost always re-render anyway (memo check costs CPU too).
15
-
16
- ## useMemo — Cache Expensive Computation
17
-
18
- ```typescript
19
- // Expensive filter/sort that depends on list + query
20
- const filtered = useMemo(
21
- () => items.filter(i => i.name.includes(query)).sort(byDate),
22
- [items, query]
23
- );
24
- ```
25
-
26
- **Rule**: Only memoize when the computation is genuinely expensive (> 1ms). Measuring before adding is best practice.
27
-
28
- **Gotcha**: Object/array deps break memoization — use primitive values:
29
-
30
- ```typescript
31
- // Bad: new object reference every render breaks memo
32
- useMemo(() => compute(config), [config]);
33
-
34
- // Good: primitive values stay stable
35
- useMemo(() => compute(config), [config.id, config.mode]);
36
- ```
37
-
38
- ## useCallback — Stable Function References
39
-
40
- ```typescript
41
- // Without useCallback: new function ref → effect re-runs every render
42
- const handleSubmit = useCallback(
43
- (e: FormEvent) => { submitForm(formData); },
44
- [formData]
45
- );
46
- ```
47
-
48
- **Use when**: passing callbacks to memo-wrapped children, or as useEffect dependencies.
49
- **Skip when**: the component receiving it is not memoized (no benefit).
50
-
51
- ## Suspense — Stream Slow Components
52
-
53
- ```tsx
54
- // Without Suspense: entire page waits for slowComponent
55
- // With Suspense: page streams, slot renders when ready
56
- <Suspense fallback={<Skeleton />}>
57
- <SlowDataComponent /> {/* server component with slow fetch */}
58
- </Suspense>
59
- ```
60
-
61
- **Gotcha**: Suspense boundaries must be placed at the **component that fetches**, not a parent.
62
-
63
- ## useTransition — Keep UI Responsive
64
-
65
- ```typescript
66
- const [isPending, startTransition] = useTransition();
67
-
68
- // Mark state update as non-urgent — keeps input responsive
69
- startTransition(() => setSearchQuery(inputValue));
70
- ```
71
-
72
- Use for filtering, sorting, navigation — updates that can briefly lag without hurting UX.
73
-
74
- ## Quick Reference
75
-
76
- | Pattern | Use Case | Skip When |
77
- |---------|----------|-----------|
78
- | `memo` | Pure component in updating tree | Almost always re-renders anyway |
79
- | `useMemo` | Expensive calculation | Fast computation (< 1ms) |
80
- | `useCallback` | Stable dep for memo/effect | Recipient is not memoized |
81
- | `Suspense` | Slow async data in subtree | Synchronous rendering |
82
- | `useTransition` | Non-urgent state updates | Critical/immediate feedback |
1
+ # React Performance Patterns
2
+
3
+ ## memo — Skip Re-render
4
+
5
+ Wrap components that receive stable props but re-render from parent updates.
6
+
7
+ ```typescript
8
+ const ItemRow = memo(function ItemRow({ item }: { item: Item }) {
9
+ return <tr>{item.name}</tr>;
10
+ });
11
+ ```
12
+
13
+ **When to use**: Pure display components in long lists, or children of frequently-updating parents.
14
+ **When NOT to use**: Components that almost always re-render anyway (memo check costs CPU too).
15
+
16
+ ## useMemo — Cache Expensive Computation
17
+
18
+ ```typescript
19
+ // Expensive filter/sort that depends on list + query
20
+ const filtered = useMemo(
21
+ () => items.filter(i => i.name.includes(query)).sort(byDate),
22
+ [items, query]
23
+ );
24
+ ```
25
+
26
+ **Rule**: Only memoize when the computation is genuinely expensive (> 1ms). Measuring before adding is best practice.
27
+
28
+ **Gotcha**: Object/array deps break memoization — use primitive values:
29
+
30
+ ```typescript
31
+ // Bad: new object reference every render breaks memo
32
+ useMemo(() => compute(config), [config]);
33
+
34
+ // Good: primitive values stay stable
35
+ useMemo(() => compute(config), [config.id, config.mode]);
36
+ ```
37
+
38
+ ## useCallback — Stable Function References
39
+
40
+ ```typescript
41
+ // Without useCallback: new function ref → effect re-runs every render
42
+ const handleSubmit = useCallback(
43
+ (e: FormEvent) => { submitForm(formData); },
44
+ [formData]
45
+ );
46
+ ```
47
+
48
+ **Use when**: passing callbacks to memo-wrapped children, or as useEffect dependencies.
49
+ **Skip when**: the component receiving it is not memoized (no benefit).
50
+
51
+ ## Suspense — Stream Slow Components
52
+
53
+ ```tsx
54
+ // Without Suspense: entire page waits for slowComponent
55
+ // With Suspense: page streams, slot renders when ready
56
+ <Suspense fallback={<Skeleton />}>
57
+ <SlowDataComponent /> {/* server component with slow fetch */}
58
+ </Suspense>
59
+ ```
60
+
61
+ **Gotcha**: Suspense boundaries must be placed at the **component that fetches**, not a parent.
62
+
63
+ ## useTransition — Keep UI Responsive
64
+
65
+ ```typescript
66
+ const [isPending, startTransition] = useTransition();
67
+
68
+ // Mark state update as non-urgent — keeps input responsive
69
+ startTransition(() => setSearchQuery(inputValue));
70
+ ```
71
+
72
+ Use for filtering, sorting, navigation — updates that can briefly lag without hurting UX.
73
+
74
+ ## Quick Reference
75
+
76
+ | Pattern | Use Case | Skip When |
77
+ |---------|----------|-----------|
78
+ | `memo` | Pure component in updating tree | Almost always re-renders anyway |
79
+ | `useMemo` | Expensive calculation | Fast computation (< 1ms) |
80
+ | `useCallback` | Stable dep for memo/effect | Recipient is not memoized |
81
+ | `Suspense` | Slow async data in subtree | Synchronous rendering |
82
+ | `useTransition` | Non-urgent state updates | Critical/immediate feedback |
@@ -1,86 +1,86 @@
1
- # Server vs Client Component Decision Guide
2
-
3
- ## Decision Tree
4
-
5
- ```
6
- Does this component need any of the following?
7
-
8
- ├─ useState / useReducer → Client
9
- ├─ useEffect / lifecycle hooks → Client
10
- ├─ Browser APIs (window, document, localStorage) → Client
11
- ├─ Event handlers (onClick, onChange, onSubmit) → Client
12
- ├─ Third-party hooks (useRouter, useForm, etc.) → Client
13
-
14
- └─ None of the above? → Server (default)
15
- ```
16
-
17
- ## Default: Server Component
18
-
19
- Next.js App Router defaults all components to Server. Only add `"use client"` when required.
20
-
21
- **Server components can:**
22
- - Fetch data directly (no useEffect needed)
23
- - Access backend resources (DB, filesystem, env secrets)
24
- - Reduce client bundle size (zero JS shipped)
25
- - Use `async/await` at the component level
26
-
27
- ```tsx
28
- // Server component — no directive needed
29
- async function UserProfile({ id }: { id: string }) {
30
- const user = await db.user.findUnique({ where: { id } });
31
- return <div>{user?.name}</div>;
32
- }
33
- ```
34
-
35
- ## Client Component
36
-
37
- Add `"use client"` at the top of the file.
38
-
39
- ```tsx
40
- "use client";
41
- import { useState } from "react";
42
-
43
- export function Counter() {
44
- const [count, setCount] = useState(0);
45
- return <button onClick={() => setCount(c => c + 1)}>{count}</button>;
46
- }
47
- ```
48
-
49
- ## Composition Pattern: Push Client Down
50
-
51
- Keep client boundary as low as possible. Wrap only the interactive slice, not the whole page.
52
-
53
- ```tsx
54
- // Bad: entire section becomes client
55
- "use client";
56
- async function ProductPage({ id }: { id: string }) { ... }
57
-
58
- // Good: server fetches, client handles interaction
59
- async function ProductPage({ id }: { id: string }) {
60
- const product = await getProduct(id);
61
- return (
62
- <div>
63
- <ProductDetails product={product} /> {/* server */}
64
- <AddToCartButton productId={id} /> {/* client — small, isolated */}
65
- </div>
66
- );
67
- }
68
- ```
69
-
70
- ## Gotchas
71
-
72
- | Mistake | Effect | Fix |
73
- |---------|--------|-----|
74
- | Importing a Client component into a Server component that passes a non-serializable prop | Runtime error | Only pass serializable data (string, number, plain object) |
75
- | `"use client"` on a file that only uses server features | Unnecessary client bundle | Remove directive |
76
- | `async` component without Suspense wrapper | Blocks entire parent render | Wrap in `<Suspense fallback={...}>` |
77
- | Calling `React.cache()` in a Client component | No effect — cache is server-only | Move data fetching to Server component |
78
- | Secrets in Client component | Exposed to browser | Move fetch to Server component or API route |
79
-
80
- ## Data Fetching Boundary
81
-
82
- | Where | Pattern |
83
- |-------|---------|
84
- | Server component | `await fetch()` / direct DB call |
85
- | Client component | `useEffect` + fetch, or SWR/React Query |
86
- | Shared across server components | Wrap with `React.cache()` for per-request dedup |
1
+ # Server vs Client Component Decision Guide
2
+
3
+ ## Decision Tree
4
+
5
+ ```
6
+ Does this component need any of the following?
7
+
8
+ ├─ useState / useReducer → Client
9
+ ├─ useEffect / lifecycle hooks → Client
10
+ ├─ Browser APIs (window, document, localStorage) → Client
11
+ ├─ Event handlers (onClick, onChange, onSubmit) → Client
12
+ ├─ Third-party hooks (useRouter, useForm, etc.) → Client
13
+
14
+ └─ None of the above? → Server (default)
15
+ ```
16
+
17
+ ## Default: Server Component
18
+
19
+ Next.js App Router defaults all components to Server. Only add `"use client"` when required.
20
+
21
+ **Server components can:**
22
+ - Fetch data directly (no useEffect needed)
23
+ - Access backend resources (DB, filesystem, env secrets)
24
+ - Reduce client bundle size (zero JS shipped)
25
+ - Use `async/await` at the component level
26
+
27
+ ```tsx
28
+ // Server component — no directive needed
29
+ async function UserProfile({ id }: { id: string }) {
30
+ const user = await db.user.findUnique({ where: { id } });
31
+ return <div>{user?.name}</div>;
32
+ }
33
+ ```
34
+
35
+ ## Client Component
36
+
37
+ Add `"use client"` at the top of the file.
38
+
39
+ ```tsx
40
+ "use client";
41
+ import { useState } from "react";
42
+
43
+ export function Counter() {
44
+ const [count, setCount] = useState(0);
45
+ return <button onClick={() => setCount(c => c + 1)}>{count}</button>;
46
+ }
47
+ ```
48
+
49
+ ## Composition Pattern: Push Client Down
50
+
51
+ Keep client boundary as low as possible. Wrap only the interactive slice, not the whole page.
52
+
53
+ ```tsx
54
+ // Bad: entire section becomes client
55
+ "use client";
56
+ async function ProductPage({ id }: { id: string }) { ... }
57
+
58
+ // Good: server fetches, client handles interaction
59
+ async function ProductPage({ id }: { id: string }) {
60
+ const product = await getProduct(id);
61
+ return (
62
+ <div>
63
+ <ProductDetails product={product} /> {/* server */}
64
+ <AddToCartButton productId={id} /> {/* client — small, isolated */}
65
+ </div>
66
+ );
67
+ }
68
+ ```
69
+
70
+ ## Gotchas
71
+
72
+ | Mistake | Effect | Fix |
73
+ |---------|--------|-----|
74
+ | Importing a Client component into a Server component that passes a non-serializable prop | Runtime error | Only pass serializable data (string, number, plain object) |
75
+ | `"use client"` on a file that only uses server features | Unnecessary client bundle | Remove directive |
76
+ | `async` component without Suspense wrapper | Blocks entire parent render | Wrap in `<Suspense fallback={...}>` |
77
+ | Calling `React.cache()` in a Client component | No effect — cache is server-only | Move data fetching to Server component |
78
+ | Secrets in Client component | Exposed to browser | Move fetch to Server component or API route |
79
+
80
+ ## Data Fetching Boundary
81
+
82
+ | Where | Pattern |
83
+ |-------|---------|
84
+ | Server component | `await fetch()` / direct DB call |
85
+ | Client component | `useEffect` + fetch, or SWR/React Query |
86
+ | Shared across server components | Wrap with `React.cache()` for per-request dedup |