@su-record/vibe 2.9.32 → 2.9.34

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 (487) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +109 -109
  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 -600
  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 -1946
  86. package/commands/vibe.scaffold.md +195 -195
  87. package/commands/vibe.spec.md +577 -577
  88. package/commands/vibe.test.md +49 -49
  89. package/commands/vibe.trace.md +276 -276
  90. package/commands/vibe.utils.md +413 -413
  91. package/commands/vibe.verify.md +572 -572
  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.d.ts.map +1 -1
  98. package/dist/cli/commands/info.js +48 -46
  99. package/dist/cli/commands/info.js.map +1 -1
  100. package/dist/cli/commands/init.d.ts +6 -3
  101. package/dist/cli/commands/init.d.ts.map +1 -1
  102. package/dist/cli/commands/init.js +60 -30
  103. package/dist/cli/commands/init.js.map +1 -1
  104. package/dist/cli/commands/remove.js +14 -14
  105. package/dist/cli/commands/sentinel.js +27 -27
  106. package/dist/cli/commands/skills.js +5 -5
  107. package/dist/cli/commands/slack.js +10 -10
  108. package/dist/cli/commands/stats.js +6 -6
  109. package/dist/cli/commands/telegram.js +12 -12
  110. package/dist/cli/commands/update.d.ts.map +1 -1
  111. package/dist/cli/commands/update.js +29 -11
  112. package/dist/cli/commands/update.js.map +1 -1
  113. package/dist/cli/detect.js +32 -32
  114. package/dist/cli/index.js +40 -34
  115. package/dist/cli/index.js.map +1 -1
  116. package/dist/cli/llm/claude-commands.js +16 -16
  117. package/dist/cli/llm/config.js +18 -18
  118. package/dist/cli/llm/gemini-commands.js +16 -16
  119. package/dist/cli/llm/gpt-commands.js +19 -19
  120. package/dist/cli/llm/help.js +21 -21
  121. package/dist/cli/postinstall/cursor-agents.js +32 -32
  122. package/dist/cli/postinstall/cursor-rules.js +83 -83
  123. package/dist/cli/postinstall/cursor-skills.js +743 -743
  124. package/dist/cli/postinstall/main.d.ts.map +1 -1
  125. package/dist/cli/postinstall/main.js +15 -1
  126. package/dist/cli/postinstall/main.js.map +1 -1
  127. package/dist/cli/setup/ProjectSetup.d.ts +25 -6
  128. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  129. package/dist/cli/setup/ProjectSetup.js +132 -80
  130. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  131. package/dist/cli/setup/Provisioner.js +42 -42
  132. package/dist/cli/setup.d.ts +1 -1
  133. package/dist/cli/setup.d.ts.map +1 -1
  134. package/dist/cli/setup.js +1 -1
  135. package/dist/cli/setup.js.map +1 -1
  136. package/dist/infra/lib/DeepInit.js +24 -24
  137. package/dist/infra/lib/IterationTracker.js +11 -11
  138. package/dist/infra/lib/PythonParser.js +108 -108
  139. package/dist/infra/lib/ReviewRace.js +96 -96
  140. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  141. package/dist/infra/lib/SkillQualityGate.js +9 -9
  142. package/dist/infra/lib/SkillRepository.js +159 -159
  143. package/dist/infra/lib/UltraQA.js +99 -99
  144. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  145. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  146. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  147. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  148. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  149. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  150. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  151. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  152. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  153. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  154. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  155. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  156. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  157. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  158. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  159. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  160. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  161. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  162. package/dist/infra/lib/gemini/orchestration.js +5 -5
  163. package/dist/infra/lib/gpt/orchestration.js +4 -4
  164. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  165. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  166. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  167. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  168. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  169. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  170. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  171. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  172. package/dist/infra/orchestrator/AgentManager.js +12 -12
  173. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  174. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  175. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  176. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  177. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  178. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  179. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  180. package/dist/tools/memory/getMemoryGraph.js +12 -12
  181. package/dist/tools/memory/getSessionContext.js +9 -9
  182. package/dist/tools/memory/linkMemories.js +14 -14
  183. package/dist/tools/memory/listMemories.js +4 -4
  184. package/dist/tools/memory/recallMemory.js +4 -4
  185. package/dist/tools/memory/saveMemory.js +4 -4
  186. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  187. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  188. package/dist/tools/semantic/astGrep.test.js +6 -6
  189. package/dist/tools/spec/prdParser.test.js +171 -171
  190. package/dist/tools/spec/specGenerator.js +169 -169
  191. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  192. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  193. package/hooks/gemini-hooks.json +73 -73
  194. package/hooks/hooks.json +134 -134
  195. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  196. package/hooks/scripts/__tests__/pre-tool-guard.test.js +409 -409
  197. package/hooks/scripts/__tests__/sentinel-guard.test.js +208 -208
  198. package/hooks/scripts/auto-commit.js +97 -97
  199. package/hooks/scripts/auto-format.js +64 -64
  200. package/hooks/scripts/auto-test.js +81 -81
  201. package/hooks/scripts/code-check.js +271 -271
  202. package/hooks/scripts/codex-detect.js +46 -46
  203. package/hooks/scripts/codex-review-gate.js +80 -80
  204. package/hooks/scripts/command-log.js +32 -32
  205. package/hooks/scripts/context-save.js +353 -353
  206. package/hooks/scripts/evolution-engine.js +91 -91
  207. package/hooks/scripts/figma-extract.js +768 -768
  208. package/hooks/scripts/figma-guard.js +219 -219
  209. package/hooks/scripts/figma-refine.js +315 -315
  210. package/hooks/scripts/figma-to-scss.js +394 -394
  211. package/hooks/scripts/figma-validate.js +353 -353
  212. package/hooks/scripts/hud-status.js +321 -321
  213. package/hooks/scripts/keyword-detector.js +214 -214
  214. package/hooks/scripts/lib/dispatcher.js +95 -87
  215. package/hooks/scripts/lib/scope-from-spec.js +276 -276
  216. package/hooks/scripts/llm-orchestrate.js +645 -645
  217. package/hooks/scripts/post-edit-dispatcher.js +9 -6
  218. package/hooks/scripts/post-edit.js +35 -35
  219. package/hooks/scripts/pr-test-gate.js +52 -52
  220. package/hooks/scripts/pre-tool-dispatcher.js +9 -1
  221. package/hooks/scripts/pre-tool-guard.js +259 -259
  222. package/hooks/scripts/prompt-dispatcher.js +200 -192
  223. package/hooks/scripts/scope-guard.js +145 -145
  224. package/hooks/scripts/sentinel-guard.js +130 -130
  225. package/hooks/scripts/session-start.js +186 -186
  226. package/hooks/scripts/skill-injector.js +83 -83
  227. package/hooks/scripts/step-counter.js +45 -45
  228. package/hooks/scripts/stop-dispatcher.js +9 -6
  229. package/hooks/scripts/stop-notify.js +209 -209
  230. package/hooks/scripts/utils.js +315 -315
  231. package/languages/csharp-unity.md +515 -515
  232. package/languages/gdscript-godot.md +470 -470
  233. package/languages/ruby-rails.md +489 -489
  234. package/languages/typescript-angular.md +433 -433
  235. package/languages/typescript-astro.md +416 -416
  236. package/languages/typescript-electron.md +406 -406
  237. package/languages/typescript-nestjs.md +524 -524
  238. package/languages/typescript-svelte.md +407 -407
  239. package/languages/typescript-tauri.md +365 -365
  240. package/package.json +106 -106
  241. package/skills/agents-md/SKILL.md +121 -121
  242. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  243. package/skills/agents-md/templates/agents-md.md +36 -36
  244. package/skills/arch-guard/SKILL.md +181 -181
  245. package/skills/arch-guard/agents/detector.md +48 -48
  246. package/skills/arch-guard/agents/reporter.md +48 -48
  247. package/skills/arch-guard/agents/rule-generator.md +49 -49
  248. package/skills/arch-guard/agents/violation-checker.md +51 -51
  249. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  250. package/skills/arch-guard/frameworks/solid.md +102 -102
  251. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  252. package/skills/arch-guard/templates/arch-rules.json +47 -47
  253. package/skills/arch-guard/templates/violation-report.md +53 -53
  254. package/skills/brand-assets/SKILL.md +147 -147
  255. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  256. package/skills/brand-assets/templates/brand-guide.md +161 -161
  257. package/skills/capability-loop/SKILL.md +272 -272
  258. package/skills/capability-loop/agents/capability-designer.md +61 -61
  259. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  260. package/skills/capability-loop/agents/implementer.md +50 -50
  261. package/skills/capability-loop/agents/tester.md +53 -53
  262. package/skills/capability-loop/templates/capability-spec.md +118 -118
  263. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  264. package/skills/characterization-test/SKILL.md +207 -207
  265. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  266. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  267. package/skills/characterization-test/agents/reporter.md +50 -50
  268. package/skills/characterization-test/agents/test-writer.md +49 -49
  269. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  270. package/skills/characterization-test/templates/test-template.ts +101 -101
  271. package/skills/chub-usage/SKILL.md +139 -139
  272. package/skills/claude-md-guide/SKILL.md +351 -351
  273. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  274. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  275. package/skills/commerce-patterns/SKILL.md +64 -64
  276. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  277. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  278. package/skills/commit-push-pr/SKILL.md +77 -77
  279. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  280. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  281. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  282. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  283. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  284. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  285. package/skills/context7-usage/SKILL.md +106 -106
  286. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  287. package/skills/create-prd/SKILL.md +90 -90
  288. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  289. package/skills/create-prd/agents/prioritizer.md +60 -60
  290. package/skills/create-prd/agents/requirements-writer.md +48 -48
  291. package/skills/create-prd/agents/researcher.md +55 -55
  292. package/skills/create-prd/agents/reviewer.md +54 -54
  293. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  294. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  295. package/skills/create-prd/orchestrator.md +70 -70
  296. package/skills/create-prd/rubrics/completeness.md +58 -58
  297. package/skills/create-prd/templates/prd.md +139 -139
  298. package/skills/design-audit/SKILL.md +152 -152
  299. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  300. package/skills/design-audit/agents/performance-auditor.md +46 -46
  301. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  302. package/skills/design-audit/agents/scorer.md +47 -47
  303. package/skills/design-audit/agents/slop-detector.md +47 -47
  304. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  305. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  306. package/skills/design-audit/orchestrator.md +64 -64
  307. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  308. package/skills/design-audit/rubrics/scoring.md +63 -63
  309. package/skills/design-audit/templates/report.md +88 -88
  310. package/skills/design-critique/SKILL.md +139 -139
  311. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  312. package/skills/design-critique/templates/critique-report.md +86 -86
  313. package/skills/design-distill/SKILL.md +130 -130
  314. package/skills/design-distill/templates/design-system.md +132 -132
  315. package/skills/design-normalize/SKILL.md +133 -133
  316. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  317. package/skills/design-normalize/templates/token-audit.md +89 -89
  318. package/skills/design-polish/SKILL.md +131 -131
  319. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  320. package/skills/design-polish/templates/polish-report.md +64 -64
  321. package/skills/design-teach/SKILL.md +182 -182
  322. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  323. package/skills/design-teach/templates/design-context.json +36 -36
  324. package/skills/devlog/SKILL.md +143 -143
  325. package/skills/e2e-commerce/SKILL.md +62 -62
  326. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  327. package/skills/event-comms/SKILL.md +172 -172
  328. package/skills/event-comms/templates/email-invite.md +99 -99
  329. package/skills/event-comms/templates/sns-post.md +133 -133
  330. package/skills/event-ops/SKILL.md +207 -207
  331. package/skills/event-ops/rubrics/contingency.md +85 -85
  332. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  333. package/skills/event-planning/SKILL.md +144 -144
  334. package/skills/event-planning/rubrics/timeline.md +70 -70
  335. package/skills/event-planning/templates/event-plan.md +91 -91
  336. package/skills/exec-plan/SKILL.md +149 -149
  337. package/skills/exec-plan/agents/decomposer.md +47 -47
  338. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  339. package/skills/exec-plan/agents/estimator.md +43 -43
  340. package/skills/exec-plan/agents/validator.md +55 -55
  341. package/skills/exec-plan/orchestrator.md +70 -70
  342. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  343. package/skills/exec-plan/templates/plan.md +147 -147
  344. package/skills/git-worktree/SKILL.md +73 -73
  345. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  346. package/skills/handoff/SKILL.md +110 -110
  347. package/skills/handoff/agents/context-summarizer.md +51 -51
  348. package/skills/handoff/agents/document-writer.md +63 -63
  349. package/skills/handoff/agents/state-collector.md +53 -53
  350. package/skills/handoff/agents/verifier.md +48 -48
  351. package/skills/handoff/rubrics/completeness.md +62 -62
  352. package/skills/handoff/templates/handoff.md +107 -107
  353. package/skills/parallel-research/SKILL.md +104 -104
  354. package/skills/parallel-research/agents/best-practices.md +43 -43
  355. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  356. package/skills/parallel-research/agents/framework-docs.md +45 -45
  357. package/skills/parallel-research/agents/security-advisory.md +46 -46
  358. package/skills/parallel-research/agents/synthesizer.md +57 -57
  359. package/skills/parallel-research/experts/best-practices.md +50 -50
  360. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  361. package/skills/parallel-research/experts/framework-docs.md +65 -65
  362. package/skills/parallel-research/experts/security-advisory.md +69 -69
  363. package/skills/parallel-research/orchestrator.md +79 -79
  364. package/skills/parallel-research/templates/awesome-list.md +32 -32
  365. package/skills/parallel-research/templates/paper.md +88 -88
  366. package/skills/parallel-research/templates/synthesis.md +101 -101
  367. package/skills/prioritization-frameworks/SKILL.md +87 -87
  368. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  369. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  370. package/skills/priority-todos/SKILL.md +64 -64
  371. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  372. package/skills/priority-todos/templates/todo-board.md +59 -59
  373. package/skills/seo-checklist/SKILL.md +58 -58
  374. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  375. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  376. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  377. package/skills/techdebt/SKILL.md +124 -124
  378. package/skills/techdebt/agents/analyzer.md +50 -50
  379. package/skills/techdebt/agents/fixer.md +41 -41
  380. package/skills/techdebt/agents/reviewer.md +47 -47
  381. package/skills/techdebt/agents/scanner.md +44 -44
  382. package/skills/techdebt/orchestrator.md +70 -70
  383. package/skills/techdebt/rubrics/severity.md +51 -51
  384. package/skills/techdebt/scripts/scan.js +90 -90
  385. package/skills/techdebt/templates/report.md +86 -86
  386. package/skills/tool-fallback/SKILL.md +104 -104
  387. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  388. package/skills/typescript-advanced-types/SKILL.md +67 -67
  389. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  390. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  391. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  392. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  393. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  394. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  395. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  396. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  397. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  398. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  399. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  400. package/skills/user-personas/SKILL.md +75 -75
  401. package/skills/user-personas/rubrics/research-methods.md +56 -56
  402. package/skills/user-personas/templates/persona.md +89 -89
  403. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  404. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  405. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  406. package/skills/vibe-contract/SKILL.md +166 -166
  407. package/skills/vibe-docs/templates/architecture.md +80 -80
  408. package/skills/vibe-docs/templates/readme.md +84 -84
  409. package/skills/vibe-docs/templates/release-notes.md +74 -74
  410. package/skills/vibe-figma/SKILL.md +363 -363
  411. package/skills/vibe-figma/rubrics/extraction-checklist.md +51 -51
  412. package/skills/vibe-figma/templates/component-index.md +126 -126
  413. package/skills/vibe-figma/templates/component-spec.md +168 -168
  414. package/skills/vibe-figma/templates/figma-handoff.md +100 -100
  415. package/skills/vibe-figma/templates/remapped-tree.md +277 -277
  416. package/skills/vibe-figma-convert/SKILL.md +235 -235
  417. package/skills/vibe-figma-convert/rubrics/conversion-rules.md +141 -141
  418. package/skills/vibe-figma-convert/templates/component.md +140 -140
  419. package/skills/vibe-figma-extract/SKILL.md +241 -241
  420. package/skills/vibe-figma-extract/rubrics/image-rules.md +157 -157
  421. package/skills/vibe-interview/SKILL.md +358 -358
  422. package/skills/vibe-interview/checklists/api.md +101 -101
  423. package/skills/vibe-interview/checklists/feature.md +88 -88
  424. package/skills/vibe-interview/checklists/library.md +95 -95
  425. package/skills/vibe-interview/checklists/mobile.md +89 -89
  426. package/skills/vibe-interview/checklists/webapp.md +97 -97
  427. package/skills/vibe-interview/checklists/website.md +99 -99
  428. package/skills/vibe-plan/SKILL.md +254 -254
  429. package/skills/vibe-regress/SKILL.md +174 -174
  430. package/skills/vibe-regress/templates/bug.md +44 -44
  431. package/skills/vibe-regress/templates/test-jest.md +29 -29
  432. package/skills/vibe-regress/templates/test-vitest.md +30 -30
  433. package/skills/vibe-spec/SKILL.md +1195 -1195
  434. package/skills/vibe-spec-review/SKILL.md +726 -726
  435. package/skills/vibe-test/SKILL.md +140 -140
  436. package/skills/video-production/SKILL.md +52 -52
  437. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  438. package/skills/video-production/templates/production-plan.md +104 -104
  439. package/vibe/config.json +29 -29
  440. package/vibe/constitution.md +227 -227
  441. package/vibe/rules/principles/communication-guide.md +98 -98
  442. package/vibe/rules/principles/development-philosophy.md +52 -52
  443. package/vibe/rules/principles/quick-start.md +102 -102
  444. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  445. package/vibe/rules/quality/checklist.md +276 -276
  446. package/vibe/rules/quality/performance.md +236 -236
  447. package/vibe/rules/quality/testing-strategy.md +440 -440
  448. package/vibe/rules/standards/anti-patterns.md +541 -541
  449. package/vibe/rules/standards/code-structure.md +291 -291
  450. package/vibe/rules/standards/complexity-metrics.md +313 -313
  451. package/vibe/rules/standards/git-workflow.md +237 -237
  452. package/vibe/rules/standards/naming-conventions.md +198 -198
  453. package/vibe/rules/standards/security.md +305 -305
  454. package/vibe/rules/writing/document-style.md +74 -74
  455. package/vibe/setup.sh +31 -31
  456. package/vibe/templates/claudemd-template.md +74 -74
  457. package/vibe/templates/constitution-template.md +267 -267
  458. package/vibe/templates/contract-backend-template.md +526 -526
  459. package/vibe/templates/contract-frontend-template.md +599 -599
  460. package/vibe/templates/feature-template.md +96 -96
  461. package/vibe/templates/plan-template.md +194 -194
  462. package/vibe/templates/spec-template.md +221 -221
  463. package/vibe/ui-ux-data/charts.csv +26 -26
  464. package/vibe/ui-ux-data/colors.csv +97 -97
  465. package/vibe/ui-ux-data/icons.csv +101 -101
  466. package/vibe/ui-ux-data/landing.csv +31 -31
  467. package/vibe/ui-ux-data/products.csv +96 -96
  468. package/vibe/ui-ux-data/react-performance.csv +45 -45
  469. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  470. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  471. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  472. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  473. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  474. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  475. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  476. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  477. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  478. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  479. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  480. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  481. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  482. package/vibe/ui-ux-data/styles.csv +68 -68
  483. package/vibe/ui-ux-data/typography.csv +57 -57
  484. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  485. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  486. package/vibe/ui-ux-data/version.json +31 -31
  487. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -1,390 +1,390 @@
1
- # Spatial Design Reference
2
-
3
- Spacing, layout, and visual hierarchy systems for production UI.
4
-
5
- ---
6
-
7
- ## The 4pt Spacing System
8
-
9
- Every spacing value in your UI should come from a single geometric scale. The 4pt system (also called the 8pt system with half-steps) gives you a predictable set of increments that compose cleanly across all screen densities.
10
-
11
- **The scale:**
12
-
13
- | Token | px | Tailwind class | Use case |
14
- |-------|-----|----------------|----------|
15
- | space-1 | 4 | `p-1` | Tight internal padding, icon nudges |
16
- | space-2 | 8 | `p-2` | Default inline padding, compact components |
17
- | space-3 | 12 | `p-3` | Form field padding, small card insets |
18
- | space-4 | 16 | `p-4` | Standard component padding |
19
- | space-6 | 24 | `p-6` | Section spacing within a card |
20
- | space-8 | 32 | `p-8` | Card padding, modal insets |
21
- | space-12 | 48 | `p-12` | Section separators, large layout gaps |
22
- | space-16 | 64 | `p-16` | Page section padding |
23
- | space-24 | 96 | `p-24` | Hero sections, full-bleed separators |
24
-
25
- The rule is simple: if a value is not on this scale, do not use it. A spacing value of 20px or 28px is a red flag — it means someone eyeballed it. Arbitrary values fragment the visual rhythm and make future changes brittle.
26
-
27
- **Why 4pt works:** On 1x, 2x, and 3x displays, 4px always divides evenly. A 3px gap renders at 6px on retina — still crisp. A 5px gap renders at 10px — fine. A 4px gap renders at exactly 8px — perfect. The scale is screen-density safe.
28
-
29
- **Applying it in Tailwind:**
30
-
31
- ```tsx
32
- // Compact list item
33
- <div className="flex items-center gap-2 px-3 py-2">
34
- <Icon className="w-4 h-4" />
35
- <span>List item</span>
36
- </div>
37
-
38
- // Standard card
39
- <div className="p-6 rounded-xl space-y-4">
40
- <h2 className="text-lg font-semibold">Card title</h2>
41
- <p className="text-sm text-zinc-500">Card body copy goes here.</p>
42
- </div>
43
-
44
- // Section separator
45
- <section className="py-16 px-8">
46
- <div className="max-w-5xl mx-auto space-y-12">
47
- {/* content */}
48
- </div>
49
- </section>
50
- ```
51
-
52
- ### DO / DON'T
53
-
54
- **DO** define spacing tokens in your design system config so Tailwind's preset enforces them.
55
-
56
- ```js
57
- // tailwind.config.ts
58
- theme: {
59
- spacing: {
60
- '1': '4px',
61
- '2': '8px',
62
- '3': '12px',
63
- '4': '16px',
64
- '6': '24px',
65
- '8': '32px',
66
- '12': '48px',
67
- '16': '64px',
68
- '24': '96px',
69
- }
70
- }
71
- ```
72
-
73
- **DON'T** use arbitrary values in Tailwind classes unless you have an exceptional reason, and document it.
74
-
75
- ```tsx
76
- // Bad — arbitrary, breaks rhythm
77
- <div className="p-[18px] mt-[22px]">
78
-
79
- // Good — on-scale, predictable
80
- <div className="p-4 mt-6">
81
- ```
82
-
83
- ---
84
-
85
- ## Grid Systems
86
-
87
- ### 12-Column Layouts
88
-
89
- The 12-column grid is the standard for page-level layout because 12 divides evenly into 2, 3, 4, and 6 — covering most content splits without custom math.
90
-
91
- ```tsx
92
- // 12-column CSS Grid
93
- <div className="grid grid-cols-12 gap-6">
94
- <aside className="col-span-3">Sidebar</aside>
95
- <main className="col-span-9">Main content</main>
96
- </div>
97
-
98
- // Responsive: full-width mobile, sidebar on desktop
99
- <div className="grid grid-cols-1 lg:grid-cols-12 gap-6">
100
- <aside className="lg:col-span-3">Sidebar</aside>
101
- <main className="lg:col-span-9">Main content</main>
102
- </div>
103
- ```
104
-
105
- ### Auto-Fit Fluid Grids
106
-
107
- For card grids and galleries where you do not know the exact column count at design time, `auto-fit` with `minmax` is the correct pattern. It eliminates the need for breakpoint-specific column counts.
108
-
109
- ```css
110
- .card-grid {
111
- display: grid;
112
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
113
- gap: 1.5rem; /* 24px = space-6 */
114
- }
115
- ```
116
-
117
- ```tsx
118
- // React component version
119
- <div
120
- className="grid gap-6"
121
- style={{ gridTemplateColumns: 'repeat(auto-fit, minmax(280px, 1fr))' }}
122
- >
123
- {cards.map(card => <Card key={card.id} {...card} />)}
124
- </div>
125
- ```
126
-
127
- The `minmax(280px, 1fr)` instruction means: "each column must be at least 280px wide, but can grow to fill available space." The browser automatically determines how many columns fit without a media query.
128
-
129
- **Column count at common widths:**
130
- - 320px viewport: 1 column
131
- - 640px viewport: 2 columns
132
- - 960px viewport: 3 columns
133
- - 1280px viewport: 4 columns
134
-
135
- ### DO / DON'T
136
-
137
- **DO** use `auto-fit` for homogeneous content (cards, thumbnails, product tiles).
138
-
139
- **DON'T** use `auto-fill` when you want columns to expand to fill space — `auto-fill` keeps empty column tracks and does not expand existing ones.
140
-
141
- ```css
142
- /* auto-fill — may leave empty tracks at wide viewports */
143
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
144
-
145
- /* auto-fit — always expands columns to fill the row */
146
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
147
- ```
148
-
149
- **DO** set a `max-width` on the grid container to prevent cards from becoming uncomfortably wide on ultrawide screens.
150
-
151
- ```tsx
152
- <div className="max-w-7xl mx-auto px-6">
153
- <div className="grid gap-6" style={{ gridTemplateColumns: 'repeat(auto-fit, minmax(280px, 1fr))' }}>
154
- {/* cards */}
155
- </div>
156
- </div>
157
- ```
158
-
159
- ---
160
-
161
- ## Visual Hierarchy
162
-
163
- Visual hierarchy tells the user what to look at first, second, and third. It is not about aesthetics — it is about guiding attention to reduce cognitive load.
164
-
165
- ### The Three Levels
166
-
167
- **Primary** — One element per view. The action or information you most need the user to see. Largest text, highest contrast, most whitespace around it.
168
-
169
- **Secondary** — Supporting context. Labels, descriptions, secondary actions. Smaller, lower contrast.
170
-
171
- **Tertiary** — Metadata, timestamps, fine print. Subdued, visually quiet.
172
-
173
- ```tsx
174
- // Three-level hierarchy in a card
175
- <div className="p-6 space-y-1">
176
- {/* Primary */}
177
- <h2 className="text-2xl font-bold text-zinc-900">$129/mo</h2>
178
- {/* Secondary */}
179
- <p className="text-base text-zinc-600">Pro plan — billed annually</p>
180
- {/* Tertiary */}
181
- <p className="text-xs text-zinc-400">Renews March 31, 2027</p>
182
- </div>
183
- ```
184
-
185
- ### Gestalt Proximity Principle
186
-
187
- The proximity principle states that elements placed close together are perceived as belonging to the same group. This means spacing is not decoration — it encodes relationships.
188
-
189
- **Tighter spacing = stronger relationship. Looser spacing = weaker relationship.**
190
-
191
- ```tsx
192
- // Form field: label and input are tightly related
193
- // Input and next field are loosely related
194
- <div className="space-y-6"> {/* loose — between fields */}
195
- <div className="space-y-1"> {/* tight — label to input */}
196
- <label className="text-sm font-medium text-zinc-700">Email</label>
197
- <input className="w-full px-3 py-2 border rounded-lg" type="email" />
198
- </div>
199
- <div className="space-y-1">
200
- <label className="text-sm font-medium text-zinc-700">Password</label>
201
- <input className="w-full px-3 py-2 border rounded-lg" type="password" />
202
- </div>
203
- </div>
204
- ```
205
-
206
- The `space-y-1` (4px) between label and input signals they are one unit. The `space-y-6` (24px) between field groups signals separation. This is six times more space — the ratio matters.
207
-
208
- ### DO / DON'T
209
-
210
- **DO** use dramatically different spacing ratios to signal relationships. A 4:1 ratio (tight vs. loose) reads clearly. A 1.5:1 ratio looks like a mistake.
211
-
212
- **DON'T** add equal spacing between all elements. Equal spacing destroys proximity grouping and makes the layout look like an unsorted list.
213
-
214
- ```tsx
215
- // Bad — all spacing equal, no grouping signal
216
- <div className="space-y-4">
217
- <label>Email</label>
218
- <input />
219
- <label>Password</label>
220
- <input />
221
- </div>
222
-
223
- // Good — spacing encodes relationships
224
- <div className="space-y-6">
225
- <div className="space-y-1">
226
- <label>Email</label>
227
- <input />
228
- </div>
229
- <div className="space-y-1">
230
- <label>Password</label>
231
- <input />
232
- </div>
233
- </div>
234
- ```
235
-
236
- ---
237
-
238
- ## Container Queries
239
-
240
- Media queries respond to the viewport. Container queries respond to the component's parent. For component libraries and design systems, container queries are almost always the right tool.
241
-
242
- ### The Problem With Media Queries for Components
243
-
244
- A card component placed in a sidebar looks different from the same card in a main content area. With media queries, both respond to the same viewport width — so at 1280px the sidebar card explodes into a wide layout it was never designed for.
245
-
246
- Container queries solve this: the card responds to the width of its container, not the screen.
247
-
248
- ### Setup
249
-
250
- ```css
251
- /* Mark the container */
252
- .card-wrapper {
253
- container-type: inline-size;
254
- container-name: card;
255
- }
256
- ```
257
-
258
- ```tsx
259
- // In Tailwind (v3.3+ with @tailwindcss/container-queries plugin)
260
- <div className="@container">
261
- <div className="flex flex-col @md:flex-row gap-4 p-4">
262
- <img className="w-full @md:w-32 rounded-lg" src={src} alt={alt} />
263
- <div>
264
- <h3 className="font-semibold">{title}</h3>
265
- <p className="text-sm text-zinc-500">{description}</p>
266
- </div>
267
- </div>
268
- </div>
269
- ```
270
-
271
- At narrow container widths the image stacks above text. At medium container widths the layout becomes a horizontal row. This works correctly whether the component is in a sidebar, a modal, or a full-width section.
272
-
273
- ### Named Containers
274
-
275
- When nesting containers, use names to target the right ancestor.
276
-
277
- ```css
278
- .page-layout { container-type: inline-size; container-name: layout; }
279
- .sidebar { container-type: inline-size; container-name: sidebar; }
280
- ```
281
-
282
- ```css
283
- @container sidebar (min-width: 240px) {
284
- .nav-item { flex-direction: row; }
285
- }
286
- ```
287
-
288
- ### DO / DON'T
289
-
290
- **DO** use container queries for reusable components that appear in multiple layout contexts.
291
-
292
- **DON'T** use container queries for page-level layout decisions (header, nav, footer) — viewport width is the correct signal there.
293
-
294
- ---
295
-
296
- ## The Squint Test
297
-
298
- The squint test is a rapid validation technique for visual hierarchy. Squint (or blur) your design until text becomes unreadable. What remains visible is your hierarchy — the shapes of contrast.
299
-
300
- A well-structured layout squints down to:
301
- 1. One dominant shape (the primary action or headline)
302
- 2. A cluster of medium shapes (content body)
303
- 3. Quiet texture in the background (tertiary content, metadata)
304
-
305
- If everything looks equally weighted when blurred, your hierarchy is flat. Increase the contrast differential between primary, secondary, and tertiary levels.
306
-
307
- **How to run it in practice:**
308
- - CSS filter: `filter: blur(4px)` on a screenshot
309
- - Figma: select all layers, reduce opacity to 50%
310
- - Physical: step back from monitor until text is unreadable
311
-
312
- **Common failures the squint test reveals:**
313
- - Too many buttons with equal visual weight
314
- - Hero headline same size as section headings
315
- - Cards without clear focal points
316
- - Equal contrast on primary and supporting text
317
-
318
- ---
319
-
320
- ## Whitespace as a Design Material
321
-
322
- Whitespace is not empty space — it is a design material with real effects on perceived quality, readability, and trust.
323
-
324
- **More space = more premium feel.** Compare the density of a fast-food menu to a high-end restaurant menu. The expensive one has more white space. The same principle applies to UI.
325
-
326
- **Breathing room reduces cognitive load.** When elements have room to breathe, the user's eye can focus on one thing at a time. Cramped layouts force the eye to parse everything simultaneously.
327
-
328
- **Practical guidelines:**
329
- - Minimum 16px (space-4) padding inside any interactive component
330
- - Minimum 24px (space-6) between distinct content sections
331
- - At least 48px (space-12) of vertical space between major page sections
332
- - Never let text touch the edge of a container — minimum 16px inset
333
-
334
- ```tsx
335
- // Cramped — feels cheap, stressful
336
- <div className="p-2">
337
- <h3 className="text-sm font-bold">Title</h3>
338
- <p className="text-xs">Description text</p>
339
- <button className="text-xs px-2 py-1 mt-1 bg-blue-500 text-white rounded">Action</button>
340
- </div>
341
-
342
- // Breathable — feels considered, premium
343
- <div className="p-6">
344
- <h3 className="text-base font-semibold">Title</h3>
345
- <p className="text-sm text-zinc-500 mt-1">Description text</p>
346
- <button className="text-sm px-4 py-2 mt-4 bg-blue-500 text-white rounded-lg">Action</button>
347
- </div>
348
- ```
349
-
350
- ---
351
-
352
- ## Consistency: Same Relationship, Same Spacing
353
-
354
- The most important rule of spatial design is consistency. If a label sits 4px above its input in one form, it must sit 4px above its input in every form. If cards have 24px internal padding, all cards have 24px internal padding.
355
-
356
- Inconsistency in spacing signals inconsistency in quality. Users do not consciously notice consistent spacing — but they immediately notice when something looks "off." That feeling of wrongness is almost always mismatched spacing.
357
-
358
- **Spacing tokens enforce this automatically.** When every spacing value comes from the 4pt scale and is referenced by token name, mismatches become impossible — you would have to choose a wrong token deliberately.
359
-
360
- ### Relationship Mapping
361
-
362
- Document the spacing relationships in your design system and enforce them in code:
363
-
364
- | Relationship | Spacing | Tailwind |
365
- |---|---|---|
366
- | Label → Input | 4px | `space-y-1` |
367
- | Input → Help text | 4px | `space-y-1` |
368
- | Field group → Field group | 24px | `space-y-6` |
369
- | Card inner padding | 24px | `p-6` |
370
- | Card → Card gap | 24px | `gap-6` |
371
- | Section → Section | 64px | `py-16` |
372
- | Heading → Body copy | 8px | `mt-2` |
373
- | Body copy → CTA | 32px | `mt-8` |
374
-
375
- Once you establish this map, apply it with zero exceptions. Every deviation is a bug, not a design decision.
376
-
377
- ### DO / DON'T
378
-
379
- **DO** extract spacing into named constants when building React component libraries.
380
-
381
- ```tsx
382
- const SPACING = {
383
- fieldGap: 'space-y-6',
384
- fieldInner: 'space-y-1',
385
- cardPadding: 'p-6',
386
- sectionGap: 'py-16',
387
- } as const;
388
- ```
389
-
390
- **DON'T** adjust spacing component-by-component based on "what looks right" — this produces an inconsistent system even when each individual component looks fine in isolation.
1
+ # Spatial Design Reference
2
+
3
+ Spacing, layout, and visual hierarchy systems for production UI.
4
+
5
+ ---
6
+
7
+ ## The 4pt Spacing System
8
+
9
+ Every spacing value in your UI should come from a single geometric scale. The 4pt system (also called the 8pt system with half-steps) gives you a predictable set of increments that compose cleanly across all screen densities.
10
+
11
+ **The scale:**
12
+
13
+ | Token | px | Tailwind class | Use case |
14
+ |-------|-----|----------------|----------|
15
+ | space-1 | 4 | `p-1` | Tight internal padding, icon nudges |
16
+ | space-2 | 8 | `p-2` | Default inline padding, compact components |
17
+ | space-3 | 12 | `p-3` | Form field padding, small card insets |
18
+ | space-4 | 16 | `p-4` | Standard component padding |
19
+ | space-6 | 24 | `p-6` | Section spacing within a card |
20
+ | space-8 | 32 | `p-8` | Card padding, modal insets |
21
+ | space-12 | 48 | `p-12` | Section separators, large layout gaps |
22
+ | space-16 | 64 | `p-16` | Page section padding |
23
+ | space-24 | 96 | `p-24` | Hero sections, full-bleed separators |
24
+
25
+ The rule is simple: if a value is not on this scale, do not use it. A spacing value of 20px or 28px is a red flag — it means someone eyeballed it. Arbitrary values fragment the visual rhythm and make future changes brittle.
26
+
27
+ **Why 4pt works:** On 1x, 2x, and 3x displays, 4px always divides evenly. A 3px gap renders at 6px on retina — still crisp. A 5px gap renders at 10px — fine. A 4px gap renders at exactly 8px — perfect. The scale is screen-density safe.
28
+
29
+ **Applying it in Tailwind:**
30
+
31
+ ```tsx
32
+ // Compact list item
33
+ <div className="flex items-center gap-2 px-3 py-2">
34
+ <Icon className="w-4 h-4" />
35
+ <span>List item</span>
36
+ </div>
37
+
38
+ // Standard card
39
+ <div className="p-6 rounded-xl space-y-4">
40
+ <h2 className="text-lg font-semibold">Card title</h2>
41
+ <p className="text-sm text-zinc-500">Card body copy goes here.</p>
42
+ </div>
43
+
44
+ // Section separator
45
+ <section className="py-16 px-8">
46
+ <div className="max-w-5xl mx-auto space-y-12">
47
+ {/* content */}
48
+ </div>
49
+ </section>
50
+ ```
51
+
52
+ ### DO / DON'T
53
+
54
+ **DO** define spacing tokens in your design system config so Tailwind's preset enforces them.
55
+
56
+ ```js
57
+ // tailwind.config.ts
58
+ theme: {
59
+ spacing: {
60
+ '1': '4px',
61
+ '2': '8px',
62
+ '3': '12px',
63
+ '4': '16px',
64
+ '6': '24px',
65
+ '8': '32px',
66
+ '12': '48px',
67
+ '16': '64px',
68
+ '24': '96px',
69
+ }
70
+ }
71
+ ```
72
+
73
+ **DON'T** use arbitrary values in Tailwind classes unless you have an exceptional reason, and document it.
74
+
75
+ ```tsx
76
+ // Bad — arbitrary, breaks rhythm
77
+ <div className="p-[18px] mt-[22px]">
78
+
79
+ // Good — on-scale, predictable
80
+ <div className="p-4 mt-6">
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Grid Systems
86
+
87
+ ### 12-Column Layouts
88
+
89
+ The 12-column grid is the standard for page-level layout because 12 divides evenly into 2, 3, 4, and 6 — covering most content splits without custom math.
90
+
91
+ ```tsx
92
+ // 12-column CSS Grid
93
+ <div className="grid grid-cols-12 gap-6">
94
+ <aside className="col-span-3">Sidebar</aside>
95
+ <main className="col-span-9">Main content</main>
96
+ </div>
97
+
98
+ // Responsive: full-width mobile, sidebar on desktop
99
+ <div className="grid grid-cols-1 lg:grid-cols-12 gap-6">
100
+ <aside className="lg:col-span-3">Sidebar</aside>
101
+ <main className="lg:col-span-9">Main content</main>
102
+ </div>
103
+ ```
104
+
105
+ ### Auto-Fit Fluid Grids
106
+
107
+ For card grids and galleries where you do not know the exact column count at design time, `auto-fit` with `minmax` is the correct pattern. It eliminates the need for breakpoint-specific column counts.
108
+
109
+ ```css
110
+ .card-grid {
111
+ display: grid;
112
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
113
+ gap: 1.5rem; /* 24px = space-6 */
114
+ }
115
+ ```
116
+
117
+ ```tsx
118
+ // React component version
119
+ <div
120
+ className="grid gap-6"
121
+ style={{ gridTemplateColumns: 'repeat(auto-fit, minmax(280px, 1fr))' }}
122
+ >
123
+ {cards.map(card => <Card key={card.id} {...card} />)}
124
+ </div>
125
+ ```
126
+
127
+ The `minmax(280px, 1fr)` instruction means: "each column must be at least 280px wide, but can grow to fill available space." The browser automatically determines how many columns fit without a media query.
128
+
129
+ **Column count at common widths:**
130
+ - 320px viewport: 1 column
131
+ - 640px viewport: 2 columns
132
+ - 960px viewport: 3 columns
133
+ - 1280px viewport: 4 columns
134
+
135
+ ### DO / DON'T
136
+
137
+ **DO** use `auto-fit` for homogeneous content (cards, thumbnails, product tiles).
138
+
139
+ **DON'T** use `auto-fill` when you want columns to expand to fill space — `auto-fill` keeps empty column tracks and does not expand existing ones.
140
+
141
+ ```css
142
+ /* auto-fill — may leave empty tracks at wide viewports */
143
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
144
+
145
+ /* auto-fit — always expands columns to fill the row */
146
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
147
+ ```
148
+
149
+ **DO** set a `max-width` on the grid container to prevent cards from becoming uncomfortably wide on ultrawide screens.
150
+
151
+ ```tsx
152
+ <div className="max-w-7xl mx-auto px-6">
153
+ <div className="grid gap-6" style={{ gridTemplateColumns: 'repeat(auto-fit, minmax(280px, 1fr))' }}>
154
+ {/* cards */}
155
+ </div>
156
+ </div>
157
+ ```
158
+
159
+ ---
160
+
161
+ ## Visual Hierarchy
162
+
163
+ Visual hierarchy tells the user what to look at first, second, and third. It is not about aesthetics — it is about guiding attention to reduce cognitive load.
164
+
165
+ ### The Three Levels
166
+
167
+ **Primary** — One element per view. The action or information you most need the user to see. Largest text, highest contrast, most whitespace around it.
168
+
169
+ **Secondary** — Supporting context. Labels, descriptions, secondary actions. Smaller, lower contrast.
170
+
171
+ **Tertiary** — Metadata, timestamps, fine print. Subdued, visually quiet.
172
+
173
+ ```tsx
174
+ // Three-level hierarchy in a card
175
+ <div className="p-6 space-y-1">
176
+ {/* Primary */}
177
+ <h2 className="text-2xl font-bold text-zinc-900">$129/mo</h2>
178
+ {/* Secondary */}
179
+ <p className="text-base text-zinc-600">Pro plan — billed annually</p>
180
+ {/* Tertiary */}
181
+ <p className="text-xs text-zinc-400">Renews March 31, 2027</p>
182
+ </div>
183
+ ```
184
+
185
+ ### Gestalt Proximity Principle
186
+
187
+ The proximity principle states that elements placed close together are perceived as belonging to the same group. This means spacing is not decoration — it encodes relationships.
188
+
189
+ **Tighter spacing = stronger relationship. Looser spacing = weaker relationship.**
190
+
191
+ ```tsx
192
+ // Form field: label and input are tightly related
193
+ // Input and next field are loosely related
194
+ <div className="space-y-6"> {/* loose — between fields */}
195
+ <div className="space-y-1"> {/* tight — label to input */}
196
+ <label className="text-sm font-medium text-zinc-700">Email</label>
197
+ <input className="w-full px-3 py-2 border rounded-lg" type="email" />
198
+ </div>
199
+ <div className="space-y-1">
200
+ <label className="text-sm font-medium text-zinc-700">Password</label>
201
+ <input className="w-full px-3 py-2 border rounded-lg" type="password" />
202
+ </div>
203
+ </div>
204
+ ```
205
+
206
+ The `space-y-1` (4px) between label and input signals they are one unit. The `space-y-6` (24px) between field groups signals separation. This is six times more space — the ratio matters.
207
+
208
+ ### DO / DON'T
209
+
210
+ **DO** use dramatically different spacing ratios to signal relationships. A 4:1 ratio (tight vs. loose) reads clearly. A 1.5:1 ratio looks like a mistake.
211
+
212
+ **DON'T** add equal spacing between all elements. Equal spacing destroys proximity grouping and makes the layout look like an unsorted list.
213
+
214
+ ```tsx
215
+ // Bad — all spacing equal, no grouping signal
216
+ <div className="space-y-4">
217
+ <label>Email</label>
218
+ <input />
219
+ <label>Password</label>
220
+ <input />
221
+ </div>
222
+
223
+ // Good — spacing encodes relationships
224
+ <div className="space-y-6">
225
+ <div className="space-y-1">
226
+ <label>Email</label>
227
+ <input />
228
+ </div>
229
+ <div className="space-y-1">
230
+ <label>Password</label>
231
+ <input />
232
+ </div>
233
+ </div>
234
+ ```
235
+
236
+ ---
237
+
238
+ ## Container Queries
239
+
240
+ Media queries respond to the viewport. Container queries respond to the component's parent. For component libraries and design systems, container queries are almost always the right tool.
241
+
242
+ ### The Problem With Media Queries for Components
243
+
244
+ A card component placed in a sidebar looks different from the same card in a main content area. With media queries, both respond to the same viewport width — so at 1280px the sidebar card explodes into a wide layout it was never designed for.
245
+
246
+ Container queries solve this: the card responds to the width of its container, not the screen.
247
+
248
+ ### Setup
249
+
250
+ ```css
251
+ /* Mark the container */
252
+ .card-wrapper {
253
+ container-type: inline-size;
254
+ container-name: card;
255
+ }
256
+ ```
257
+
258
+ ```tsx
259
+ // In Tailwind (v3.3+ with @tailwindcss/container-queries plugin)
260
+ <div className="@container">
261
+ <div className="flex flex-col @md:flex-row gap-4 p-4">
262
+ <img className="w-full @md:w-32 rounded-lg" src={src} alt={alt} />
263
+ <div>
264
+ <h3 className="font-semibold">{title}</h3>
265
+ <p className="text-sm text-zinc-500">{description}</p>
266
+ </div>
267
+ </div>
268
+ </div>
269
+ ```
270
+
271
+ At narrow container widths the image stacks above text. At medium container widths the layout becomes a horizontal row. This works correctly whether the component is in a sidebar, a modal, or a full-width section.
272
+
273
+ ### Named Containers
274
+
275
+ When nesting containers, use names to target the right ancestor.
276
+
277
+ ```css
278
+ .page-layout { container-type: inline-size; container-name: layout; }
279
+ .sidebar { container-type: inline-size; container-name: sidebar; }
280
+ ```
281
+
282
+ ```css
283
+ @container sidebar (min-width: 240px) {
284
+ .nav-item { flex-direction: row; }
285
+ }
286
+ ```
287
+
288
+ ### DO / DON'T
289
+
290
+ **DO** use container queries for reusable components that appear in multiple layout contexts.
291
+
292
+ **DON'T** use container queries for page-level layout decisions (header, nav, footer) — viewport width is the correct signal there.
293
+
294
+ ---
295
+
296
+ ## The Squint Test
297
+
298
+ The squint test is a rapid validation technique for visual hierarchy. Squint (or blur) your design until text becomes unreadable. What remains visible is your hierarchy — the shapes of contrast.
299
+
300
+ A well-structured layout squints down to:
301
+ 1. One dominant shape (the primary action or headline)
302
+ 2. A cluster of medium shapes (content body)
303
+ 3. Quiet texture in the background (tertiary content, metadata)
304
+
305
+ If everything looks equally weighted when blurred, your hierarchy is flat. Increase the contrast differential between primary, secondary, and tertiary levels.
306
+
307
+ **How to run it in practice:**
308
+ - CSS filter: `filter: blur(4px)` on a screenshot
309
+ - Figma: select all layers, reduce opacity to 50%
310
+ - Physical: step back from monitor until text is unreadable
311
+
312
+ **Common failures the squint test reveals:**
313
+ - Too many buttons with equal visual weight
314
+ - Hero headline same size as section headings
315
+ - Cards without clear focal points
316
+ - Equal contrast on primary and supporting text
317
+
318
+ ---
319
+
320
+ ## Whitespace as a Design Material
321
+
322
+ Whitespace is not empty space — it is a design material with real effects on perceived quality, readability, and trust.
323
+
324
+ **More space = more premium feel.** Compare the density of a fast-food menu to a high-end restaurant menu. The expensive one has more white space. The same principle applies to UI.
325
+
326
+ **Breathing room reduces cognitive load.** When elements have room to breathe, the user's eye can focus on one thing at a time. Cramped layouts force the eye to parse everything simultaneously.
327
+
328
+ **Practical guidelines:**
329
+ - Minimum 16px (space-4) padding inside any interactive component
330
+ - Minimum 24px (space-6) between distinct content sections
331
+ - At least 48px (space-12) of vertical space between major page sections
332
+ - Never let text touch the edge of a container — minimum 16px inset
333
+
334
+ ```tsx
335
+ // Cramped — feels cheap, stressful
336
+ <div className="p-2">
337
+ <h3 className="text-sm font-bold">Title</h3>
338
+ <p className="text-xs">Description text</p>
339
+ <button className="text-xs px-2 py-1 mt-1 bg-blue-500 text-white rounded">Action</button>
340
+ </div>
341
+
342
+ // Breathable — feels considered, premium
343
+ <div className="p-6">
344
+ <h3 className="text-base font-semibold">Title</h3>
345
+ <p className="text-sm text-zinc-500 mt-1">Description text</p>
346
+ <button className="text-sm px-4 py-2 mt-4 bg-blue-500 text-white rounded-lg">Action</button>
347
+ </div>
348
+ ```
349
+
350
+ ---
351
+
352
+ ## Consistency: Same Relationship, Same Spacing
353
+
354
+ The most important rule of spatial design is consistency. If a label sits 4px above its input in one form, it must sit 4px above its input in every form. If cards have 24px internal padding, all cards have 24px internal padding.
355
+
356
+ Inconsistency in spacing signals inconsistency in quality. Users do not consciously notice consistent spacing — but they immediately notice when something looks "off." That feeling of wrongness is almost always mismatched spacing.
357
+
358
+ **Spacing tokens enforce this automatically.** When every spacing value comes from the 4pt scale and is referenced by token name, mismatches become impossible — you would have to choose a wrong token deliberately.
359
+
360
+ ### Relationship Mapping
361
+
362
+ Document the spacing relationships in your design system and enforce them in code:
363
+
364
+ | Relationship | Spacing | Tailwind |
365
+ |---|---|---|
366
+ | Label → Input | 4px | `space-y-1` |
367
+ | Input → Help text | 4px | `space-y-1` |
368
+ | Field group → Field group | 24px | `space-y-6` |
369
+ | Card inner padding | 24px | `p-6` |
370
+ | Card → Card gap | 24px | `gap-6` |
371
+ | Section → Section | 64px | `py-16` |
372
+ | Heading → Body copy | 8px | `mt-2` |
373
+ | Body copy → CTA | 32px | `mt-8` |
374
+
375
+ Once you establish this map, apply it with zero exceptions. Every deviation is a bug, not a design decision.
376
+
377
+ ### DO / DON'T
378
+
379
+ **DO** extract spacing into named constants when building React component libraries.
380
+
381
+ ```tsx
382
+ const SPACING = {
383
+ fieldGap: 'space-y-6',
384
+ fieldInner: 'space-y-1',
385
+ cardPadding: 'p-6',
386
+ sectionGap: 'py-16',
387
+ } as const;
388
+ ```
389
+
390
+ **DON'T** adjust spacing component-by-component based on "what looks right" — this produces an inconsistent system even when each individual component looks fine in isolation.