@su-record/vibe 2.9.23 → 2.9.24

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 (461) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +105 -105
  3. package/LICENSE +21 -21
  4. package/README.en.md +220 -0
  5. package/README.md +75 -124
  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/teams/debug-team.md +70 -70
  53. package/agents/teams/dev-team.md +88 -88
  54. package/agents/teams/docs-team.md +80 -80
  55. package/agents/teams/figma/figma-analyst.md +52 -52
  56. package/agents/teams/figma/figma-architect.md +112 -112
  57. package/agents/teams/figma/figma-auditor.md +82 -82
  58. package/agents/teams/figma/figma-builder.md +100 -100
  59. package/agents/teams/figma-team.md +85 -85
  60. package/agents/teams/fullstack-team.md +83 -83
  61. package/agents/teams/lite-team.md +69 -69
  62. package/agents/teams/migration-team.md +78 -78
  63. package/agents/teams/refactor-team.md +94 -94
  64. package/agents/teams/research-team.md +86 -86
  65. package/agents/teams/review-debate-team.md +125 -125
  66. package/agents/teams/security-team.md +81 -81
  67. package/agents/tester.md +49 -49
  68. package/agents/ui/ui-a11y-auditor.md +93 -93
  69. package/agents/ui/ui-antipattern-detector.md +102 -102
  70. package/agents/ui/ui-dataviz-advisor.md +69 -69
  71. package/agents/ui/ui-design-system-gen.md +57 -57
  72. package/agents/ui/ui-industry-analyzer.md +49 -49
  73. package/agents/ui/ui-layout-architect.md +65 -65
  74. package/agents/ui/ui-stack-implementer.md +68 -68
  75. package/agents/ui/ux-compliance-reviewer.md +81 -81
  76. package/agents/ui-previewer.md +258 -258
  77. package/commands/vibe.analyze.md +533 -533
  78. package/commands/vibe.contract.md +105 -105
  79. package/commands/vibe.docs.md +33 -33
  80. package/commands/vibe.event.md +163 -163
  81. package/commands/vibe.figma.md +584 -584
  82. package/commands/vibe.harness.md +177 -177
  83. package/commands/vibe.regress.md +73 -73
  84. package/commands/vibe.review.md +624 -624
  85. package/commands/vibe.run.md +1940 -1940
  86. package/commands/vibe.scaffold.md +195 -195
  87. package/commands/vibe.spec.md +577 -577
  88. package/commands/vibe.test.md +96 -96
  89. package/commands/vibe.trace.md +276 -276
  90. package/commands/vibe.utils.md +413 -413
  91. package/commands/vibe.verify.md +550 -550
  92. package/dist/cli/collaborator.js +52 -52
  93. package/dist/cli/commands/codex-proxy.js +15 -15
  94. package/dist/cli/commands/config.js +9 -9
  95. package/dist/cli/commands/evolution.js +12 -12
  96. package/dist/cli/commands/figma.js +20 -20
  97. package/dist/cli/commands/info.js +52 -52
  98. package/dist/cli/commands/init.js +5 -5
  99. package/dist/cli/commands/remove.js +14 -14
  100. package/dist/cli/commands/sentinel.js +27 -27
  101. package/dist/cli/commands/skills.js +5 -5
  102. package/dist/cli/commands/slack.js +10 -10
  103. package/dist/cli/commands/stats.js +6 -6
  104. package/dist/cli/commands/telegram.js +12 -12
  105. package/dist/cli/detect.js +32 -32
  106. package/dist/cli/index.js +33 -33
  107. package/dist/cli/llm/claude-commands.js +16 -16
  108. package/dist/cli/llm/config.js +18 -18
  109. package/dist/cli/llm/gemini-commands.js +16 -16
  110. package/dist/cli/llm/gpt-commands.js +19 -19
  111. package/dist/cli/llm/help.js +21 -21
  112. package/dist/cli/postinstall/cursor-agents.js +32 -32
  113. package/dist/cli/postinstall/cursor-rules.js +83 -83
  114. package/dist/cli/postinstall/cursor-skills.js +743 -743
  115. package/dist/cli/setup/Provisioner.js +42 -42
  116. package/dist/infra/lib/DeepInit.js +24 -24
  117. package/dist/infra/lib/IterationTracker.js +11 -11
  118. package/dist/infra/lib/PythonParser.js +108 -108
  119. package/dist/infra/lib/ReviewRace.js +96 -96
  120. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  121. package/dist/infra/lib/SkillQualityGate.js +9 -9
  122. package/dist/infra/lib/SkillRepository.js +159 -159
  123. package/dist/infra/lib/UltraQA.js +99 -99
  124. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  125. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  126. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  127. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  128. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  129. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  130. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  131. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  132. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  133. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  134. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  135. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  136. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  137. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  138. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  139. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  140. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  141. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  142. package/dist/infra/lib/gemini/orchestration.js +5 -5
  143. package/dist/infra/lib/gpt/orchestration.js +4 -4
  144. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  145. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  146. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  147. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  148. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  149. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  150. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  151. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  152. package/dist/infra/orchestrator/AgentManager.js +12 -12
  153. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  154. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  155. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  156. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  157. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  158. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  159. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  160. package/dist/tools/memory/getMemoryGraph.js +12 -12
  161. package/dist/tools/memory/getSessionContext.js +9 -9
  162. package/dist/tools/memory/linkMemories.js +14 -14
  163. package/dist/tools/memory/listMemories.js +4 -4
  164. package/dist/tools/memory/recallMemory.js +4 -4
  165. package/dist/tools/memory/saveMemory.js +4 -4
  166. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  167. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  168. package/dist/tools/semantic/astGrep.test.js +6 -6
  169. package/dist/tools/spec/prdParser.test.js +171 -171
  170. package/dist/tools/spec/specGenerator.js +169 -169
  171. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  172. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  173. package/hooks/gemini-hooks.json +73 -73
  174. package/hooks/hooks.json +126 -126
  175. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  176. package/hooks/scripts/__tests__/pre-tool-guard.test.js +368 -368
  177. package/hooks/scripts/__tests__/sentinel-guard.test.js +208 -208
  178. package/hooks/scripts/auto-commit.js +97 -97
  179. package/hooks/scripts/auto-format.js +64 -64
  180. package/hooks/scripts/auto-test.js +81 -81
  181. package/hooks/scripts/code-check.js +271 -268
  182. package/hooks/scripts/codex-detect.js +46 -46
  183. package/hooks/scripts/codex-review-gate.js +80 -80
  184. package/hooks/scripts/command-log.js +32 -32
  185. package/hooks/scripts/context-save.js +353 -353
  186. package/hooks/scripts/evolution-engine.js +91 -91
  187. package/hooks/scripts/figma-extract.js +635 -635
  188. package/hooks/scripts/figma-guard.js +219 -219
  189. package/hooks/scripts/figma-refine.js +315 -315
  190. package/hooks/scripts/figma-to-scss.js +394 -394
  191. package/hooks/scripts/figma-validate.js +353 -353
  192. package/hooks/scripts/hud-status.js +321 -321
  193. package/hooks/scripts/keyword-detector.js +214 -214
  194. package/hooks/scripts/llm-orchestrate.js +645 -645
  195. package/hooks/scripts/post-edit.js +35 -32
  196. package/hooks/scripts/pr-test-gate.js +52 -52
  197. package/hooks/scripts/pre-tool-guard.js +254 -254
  198. package/hooks/scripts/prompt-dispatcher.js +190 -190
  199. package/hooks/scripts/sentinel-guard.js +130 -130
  200. package/hooks/scripts/session-start.js +186 -186
  201. package/hooks/scripts/skill-injector.js +83 -83
  202. package/hooks/scripts/stop-notify.js +209 -209
  203. package/hooks/scripts/utils.js +257 -257
  204. package/languages/csharp-unity.md +515 -515
  205. package/languages/gdscript-godot.md +470 -470
  206. package/languages/ruby-rails.md +489 -489
  207. package/languages/typescript-angular.md +433 -433
  208. package/languages/typescript-astro.md +416 -416
  209. package/languages/typescript-electron.md +406 -406
  210. package/languages/typescript-nestjs.md +524 -524
  211. package/languages/typescript-svelte.md +407 -407
  212. package/languages/typescript-tauri.md +365 -365
  213. package/package.json +1 -1
  214. package/skills/agents-md/SKILL.md +121 -121
  215. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  216. package/skills/agents-md/templates/agents-md.md +36 -36
  217. package/skills/arch-guard/SKILL.md +181 -181
  218. package/skills/arch-guard/agents/detector.md +48 -48
  219. package/skills/arch-guard/agents/reporter.md +48 -48
  220. package/skills/arch-guard/agents/rule-generator.md +49 -49
  221. package/skills/arch-guard/agents/violation-checker.md +51 -51
  222. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  223. package/skills/arch-guard/frameworks/solid.md +102 -102
  224. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  225. package/skills/arch-guard/templates/arch-rules.json +47 -47
  226. package/skills/arch-guard/templates/violation-report.md +53 -53
  227. package/skills/brand-assets/SKILL.md +147 -147
  228. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  229. package/skills/brand-assets/templates/brand-guide.md +161 -161
  230. package/skills/capability-loop/SKILL.md +272 -272
  231. package/skills/capability-loop/agents/capability-designer.md +61 -61
  232. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  233. package/skills/capability-loop/agents/implementer.md +50 -50
  234. package/skills/capability-loop/agents/tester.md +53 -53
  235. package/skills/capability-loop/templates/capability-spec.md +118 -118
  236. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  237. package/skills/characterization-test/SKILL.md +207 -207
  238. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  239. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  240. package/skills/characterization-test/agents/reporter.md +50 -50
  241. package/skills/characterization-test/agents/test-writer.md +49 -49
  242. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  243. package/skills/characterization-test/templates/test-template.ts +101 -101
  244. package/skills/chub-usage/SKILL.md +139 -139
  245. package/skills/claude-md-guide/SKILL.md +351 -351
  246. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  247. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  248. package/skills/commerce-patterns/SKILL.md +64 -64
  249. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  250. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  251. package/skills/commit-push-pr/SKILL.md +77 -77
  252. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  253. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  254. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  255. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  256. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  257. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  258. package/skills/context7-usage/SKILL.md +106 -106
  259. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  260. package/skills/create-prd/SKILL.md +90 -90
  261. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  262. package/skills/create-prd/agents/prioritizer.md +60 -60
  263. package/skills/create-prd/agents/requirements-writer.md +48 -48
  264. package/skills/create-prd/agents/researcher.md +55 -55
  265. package/skills/create-prd/agents/reviewer.md +54 -54
  266. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  267. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  268. package/skills/create-prd/orchestrator.md +70 -70
  269. package/skills/create-prd/rubrics/completeness.md +58 -58
  270. package/skills/create-prd/templates/prd.md +139 -139
  271. package/skills/design-audit/SKILL.md +152 -152
  272. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  273. package/skills/design-audit/agents/performance-auditor.md +46 -46
  274. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  275. package/skills/design-audit/agents/scorer.md +47 -47
  276. package/skills/design-audit/agents/slop-detector.md +47 -47
  277. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  278. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  279. package/skills/design-audit/orchestrator.md +64 -64
  280. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  281. package/skills/design-audit/rubrics/scoring.md +63 -63
  282. package/skills/design-audit/templates/report.md +88 -88
  283. package/skills/design-critique/SKILL.md +139 -139
  284. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  285. package/skills/design-critique/templates/critique-report.md +86 -86
  286. package/skills/design-distill/SKILL.md +130 -130
  287. package/skills/design-distill/templates/design-system.md +132 -132
  288. package/skills/design-normalize/SKILL.md +133 -133
  289. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  290. package/skills/design-normalize/templates/token-audit.md +89 -89
  291. package/skills/design-polish/SKILL.md +131 -131
  292. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  293. package/skills/design-polish/templates/polish-report.md +64 -64
  294. package/skills/design-teach/SKILL.md +182 -182
  295. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  296. package/skills/design-teach/templates/design-context.json +36 -36
  297. package/skills/devlog/SKILL.md +143 -143
  298. package/skills/e2e-commerce/SKILL.md +62 -62
  299. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  300. package/skills/event-comms/SKILL.md +172 -172
  301. package/skills/event-comms/templates/email-invite.md +99 -99
  302. package/skills/event-comms/templates/sns-post.md +133 -133
  303. package/skills/event-ops/SKILL.md +207 -207
  304. package/skills/event-ops/rubrics/contingency.md +85 -85
  305. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  306. package/skills/event-planning/SKILL.md +144 -144
  307. package/skills/event-planning/rubrics/timeline.md +70 -70
  308. package/skills/event-planning/templates/event-plan.md +91 -91
  309. package/skills/exec-plan/SKILL.md +149 -149
  310. package/skills/exec-plan/agents/decomposer.md +47 -47
  311. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  312. package/skills/exec-plan/agents/estimator.md +43 -43
  313. package/skills/exec-plan/agents/validator.md +55 -55
  314. package/skills/exec-plan/orchestrator.md +70 -70
  315. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  316. package/skills/exec-plan/templates/plan.md +147 -147
  317. package/skills/git-worktree/SKILL.md +73 -73
  318. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  319. package/skills/handoff/SKILL.md +110 -110
  320. package/skills/handoff/agents/context-summarizer.md +51 -51
  321. package/skills/handoff/agents/document-writer.md +63 -63
  322. package/skills/handoff/agents/state-collector.md +53 -53
  323. package/skills/handoff/agents/verifier.md +48 -48
  324. package/skills/handoff/rubrics/completeness.md +62 -62
  325. package/skills/handoff/templates/handoff.md +107 -107
  326. package/skills/parallel-research/SKILL.md +104 -104
  327. package/skills/parallel-research/agents/best-practices.md +43 -43
  328. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  329. package/skills/parallel-research/agents/framework-docs.md +45 -45
  330. package/skills/parallel-research/agents/security-advisory.md +46 -46
  331. package/skills/parallel-research/agents/synthesizer.md +57 -57
  332. package/skills/parallel-research/experts/best-practices.md +50 -50
  333. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  334. package/skills/parallel-research/experts/framework-docs.md +65 -65
  335. package/skills/parallel-research/experts/security-advisory.md +69 -69
  336. package/skills/parallel-research/orchestrator.md +79 -79
  337. package/skills/parallel-research/templates/awesome-list.md +32 -32
  338. package/skills/parallel-research/templates/paper.md +88 -88
  339. package/skills/parallel-research/templates/synthesis.md +101 -101
  340. package/skills/prioritization-frameworks/SKILL.md +87 -87
  341. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  342. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  343. package/skills/priority-todos/SKILL.md +64 -64
  344. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  345. package/skills/priority-todos/templates/todo-board.md +59 -59
  346. package/skills/seo-checklist/SKILL.md +58 -58
  347. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  348. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  349. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  350. package/skills/techdebt/SKILL.md +124 -124
  351. package/skills/techdebt/agents/analyzer.md +50 -50
  352. package/skills/techdebt/agents/fixer.md +41 -41
  353. package/skills/techdebt/agents/reviewer.md +47 -47
  354. package/skills/techdebt/agents/scanner.md +44 -44
  355. package/skills/techdebt/orchestrator.md +70 -70
  356. package/skills/techdebt/rubrics/severity.md +51 -51
  357. package/skills/techdebt/scripts/scan.js +90 -90
  358. package/skills/techdebt/templates/report.md +86 -86
  359. package/skills/tool-fallback/SKILL.md +104 -104
  360. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  361. package/skills/typescript-advanced-types/SKILL.md +67 -67
  362. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  363. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  364. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  365. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  366. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  367. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  368. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  369. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  370. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  371. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  372. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  373. package/skills/user-personas/SKILL.md +75 -75
  374. package/skills/user-personas/rubrics/research-methods.md +56 -56
  375. package/skills/user-personas/templates/persona.md +89 -89
  376. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  377. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  378. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  379. package/skills/vibe-contract/SKILL.md +166 -166
  380. package/skills/vibe-docs/templates/architecture.md +80 -80
  381. package/skills/vibe-docs/templates/readme.md +84 -84
  382. package/skills/vibe-docs/templates/release-notes.md +74 -74
  383. package/skills/vibe-figma/SKILL.md +363 -363
  384. package/skills/vibe-figma/rubrics/extraction-checklist.md +51 -51
  385. package/skills/vibe-figma/templates/component-index.md +126 -126
  386. package/skills/vibe-figma/templates/component-spec.md +168 -168
  387. package/skills/vibe-figma/templates/figma-handoff.md +100 -100
  388. package/skills/vibe-figma/templates/remapped-tree.md +277 -277
  389. package/skills/vibe-figma-convert/SKILL.md +235 -235
  390. package/skills/vibe-figma-convert/rubrics/conversion-rules.md +141 -141
  391. package/skills/vibe-figma-convert/templates/component.md +140 -140
  392. package/skills/vibe-figma-extract/SKILL.md +219 -219
  393. package/skills/vibe-figma-extract/rubrics/image-rules.md +157 -157
  394. package/skills/vibe-interview/SKILL.md +358 -358
  395. package/skills/vibe-interview/checklists/api.md +101 -101
  396. package/skills/vibe-interview/checklists/feature.md +88 -88
  397. package/skills/vibe-interview/checklists/library.md +95 -95
  398. package/skills/vibe-interview/checklists/mobile.md +89 -89
  399. package/skills/vibe-interview/checklists/webapp.md +97 -97
  400. package/skills/vibe-interview/checklists/website.md +99 -99
  401. package/skills/vibe-plan/SKILL.md +254 -254
  402. package/skills/vibe-regress/SKILL.md +174 -174
  403. package/skills/vibe-regress/templates/bug.md +44 -44
  404. package/skills/vibe-regress/templates/test-jest.md +29 -29
  405. package/skills/vibe-regress/templates/test-vitest.md +30 -30
  406. package/skills/vibe-spec/SKILL.md +1195 -1195
  407. package/skills/vibe-spec-review/SKILL.md +726 -726
  408. package/skills/vibe-test/SKILL.md +247 -247
  409. package/skills/video-production/SKILL.md +52 -52
  410. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  411. package/skills/video-production/templates/production-plan.md +104 -104
  412. package/vibe/config.json +29 -29
  413. package/vibe/constitution.md +227 -227
  414. package/vibe/rules/principles/communication-guide.md +98 -98
  415. package/vibe/rules/principles/development-philosophy.md +52 -52
  416. package/vibe/rules/principles/quick-start.md +102 -102
  417. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  418. package/vibe/rules/quality/checklist.md +276 -276
  419. package/vibe/rules/quality/performance.md +236 -236
  420. package/vibe/rules/quality/testing-strategy.md +440 -440
  421. package/vibe/rules/standards/anti-patterns.md +541 -541
  422. package/vibe/rules/standards/code-structure.md +291 -291
  423. package/vibe/rules/standards/complexity-metrics.md +313 -313
  424. package/vibe/rules/standards/git-workflow.md +237 -237
  425. package/vibe/rules/standards/naming-conventions.md +198 -198
  426. package/vibe/rules/standards/security.md +305 -305
  427. package/vibe/rules/writing/document-style.md +74 -74
  428. package/vibe/setup.sh +31 -31
  429. package/vibe/templates/claudemd-template.md +74 -74
  430. package/vibe/templates/constitution-template.md +267 -267
  431. package/vibe/templates/contract-backend-template.md +526 -526
  432. package/vibe/templates/contract-frontend-template.md +599 -599
  433. package/vibe/templates/feature-template.md +96 -96
  434. package/vibe/templates/plan-template.md +194 -194
  435. package/vibe/templates/spec-template.md +221 -221
  436. package/vibe/ui-ux-data/charts.csv +26 -26
  437. package/vibe/ui-ux-data/colors.csv +97 -97
  438. package/vibe/ui-ux-data/icons.csv +101 -101
  439. package/vibe/ui-ux-data/landing.csv +31 -31
  440. package/vibe/ui-ux-data/products.csv +96 -96
  441. package/vibe/ui-ux-data/react-performance.csv +45 -45
  442. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  443. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  444. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  445. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  446. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  447. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  448. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  449. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  450. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  451. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  452. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  453. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  454. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  455. package/vibe/ui-ux-data/styles.csv +68 -68
  456. package/vibe/ui-ux-data/typography.csv +57 -57
  457. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  458. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  459. package/vibe/ui-ux-data/version.json +31 -31
  460. package/vibe/ui-ux-data/web-interface.csv +31 -31
  461. package/README.ko.md +0 -171
@@ -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 |