@su-record/vibe 2.9.24 → 2.9.32

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