agemon 0.1.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/README.md +983 -30
  2. package/assets/skills/architecture/agemon-architecture/LICENSE +21 -0
  3. package/assets/skills/architecture/agemon-architecture/NOTICE.md +9 -0
  4. package/assets/skills/architecture/agemon-architecture/SKILL.md +275 -0
  5. package/assets/skills/code-quality/agemon-clean-code/LICENSE +21 -0
  6. package/assets/skills/code-quality/agemon-clean-code/NOTICE.md +9 -0
  7. package/assets/skills/code-quality/agemon-clean-code/SKILL.md +78 -0
  8. package/assets/skills/code-quality/agemon-house-rules/SKILL.md +103 -0
  9. package/assets/skills/commit/agemon-commit/SKILL.md +87 -0
  10. package/assets/skills/design/agemon-design/LICENSE +21 -0
  11. package/assets/skills/design/agemon-design/NOTICE.md +43 -0
  12. package/assets/skills/design/agemon-design/SKILL.md +128 -0
  13. package/assets/skills/design/agemon-design/references/accessibility.md +182 -0
  14. package/assets/skills/design/agemon-design/references/actions.md +215 -0
  15. package/assets/skills/design/agemon-design/references/ai-chat.md +158 -0
  16. package/assets/skills/design/agemon-design/references/brief.md +190 -0
  17. package/assets/skills/design/agemon-design/references/color.md +216 -0
  18. package/assets/skills/design/agemon-design/references/components.md +91 -0
  19. package/assets/skills/design/agemon-design/references/copy.md +300 -0
  20. package/assets/skills/design/agemon-design/references/core-rules.md +166 -0
  21. package/assets/skills/design/agemon-design/references/craft-intent.md +162 -0
  22. package/assets/skills/design/agemon-design/references/dashboard.md +131 -0
  23. package/assets/skills/design/agemon-design/references/dataviz.md +197 -0
  24. package/assets/skills/design/agemon-design/references/finish-bar.md +243 -0
  25. package/assets/skills/design/agemon-design/references/forms.md +192 -0
  26. package/assets/skills/design/agemon-design/references/heuristics.md +319 -0
  27. package/assets/skills/design/agemon-design/references/inspiration.md +287 -0
  28. package/assets/skills/design/agemon-design/references/layout.md +236 -0
  29. package/assets/skills/design/agemon-design/references/loops.md +155 -0
  30. package/assets/skills/design/agemon-design/references/metadata.md +98 -0
  31. package/assets/skills/design/agemon-design/references/modern-css.md +448 -0
  32. package/assets/skills/design/agemon-design/references/motion.md +434 -0
  33. package/assets/skills/design/agemon-design/references/personas.md +206 -0
  34. package/assets/skills/design/agemon-design/references/preset-dashboard.md +109 -0
  35. package/assets/skills/design/agemon-design/references/preset-editorial.md +94 -0
  36. package/assets/skills/design/agemon-design/references/preset-minimal.md +93 -0
  37. package/assets/skills/design/agemon-design/references/principles-catalog.md +299 -0
  38. package/assets/skills/design/agemon-design/references/recipe-auth.md +88 -0
  39. package/assets/skills/design/agemon-design/references/recipe-dashboard.md +130 -0
  40. package/assets/skills/design/agemon-design/references/recipe-landing.md +120 -0
  41. package/assets/skills/design/agemon-design/references/responsive.md +168 -0
  42. package/assets/skills/design/agemon-design/references/review.md +340 -0
  43. package/assets/skills/design/agemon-design/references/routing.md +143 -0
  44. package/assets/skills/design/agemon-design/references/sound.md +150 -0
  45. package/assets/skills/design/agemon-design/references/spec.md +123 -0
  46. package/assets/skills/design/agemon-design/references/stack.md +522 -0
  47. package/assets/skills/design/agemon-design/references/stage-assets.md +106 -0
  48. package/assets/skills/design/agemon-design/references/stage-build.md +46 -0
  49. package/assets/skills/design/agemon-design/references/stage-critique.md +34 -0
  50. package/assets/skills/design/agemon-design/references/stage-directions.md +44 -0
  51. package/assets/skills/design/agemon-design/references/stage-intake.md +34 -0
  52. package/assets/skills/design/agemon-design/references/stage-verify.md +44 -0
  53. package/assets/skills/design/agemon-design/references/state-design.md +188 -0
  54. package/assets/skills/design/agemon-design/references/tells-2026-11.md +32 -0
  55. package/assets/skills/design/agemon-design/references/themes.md +233 -0
  56. package/assets/skills/design/agemon-design/references/third-party-licenses.md +323 -0
  57. package/assets/skills/design/agemon-design/references/tokens.md +350 -0
  58. package/assets/skills/design/agemon-design/references/typography.md +248 -0
  59. package/assets/skills/design/agemon-design/scripts/audit-page.js +532 -0
  60. package/assets/skills/design/agemon-design/scripts/check-source.mjs +358 -0
  61. package/assets/skills/design/agemon-design/scripts/deal.mjs +231 -0
  62. package/assets/skills/design/agemon-design/scripts/inventory.mjs +676 -0
  63. package/assets/skills/essentials/web-design-guidelines/LICENSE +21 -0
  64. package/assets/skills/essentials/web-design-guidelines/NOTICE.md +14 -0
  65. package/assets/skills/essentials/web-design-guidelines/SKILL.md +18 -0
  66. package/assets/skills/essentials/web-design-guidelines/references/guidelines.md +184 -0
  67. package/assets/skills/essentials/writing-guidelines/LICENSE +21 -0
  68. package/assets/skills/essentials/writing-guidelines/NOTICE.md +14 -0
  69. package/assets/skills/essentials/writing-guidelines/SKILL.md +18 -0
  70. package/assets/skills/essentials/writing-guidelines/references/guidelines.md +250 -0
  71. package/assets/skills/founder/agemon-founder-board/LICENSE +21 -0
  72. package/assets/skills/founder/agemon-founder-board/NOTICE.md +11 -0
  73. package/assets/skills/founder/agemon-founder-board/SKILL.md +111 -0
  74. package/assets/skills/founder/agemon-founder-board/lenses.md +84 -0
  75. package/assets/skills/founder/agemon-founder-brand/LICENSE +21 -0
  76. package/assets/skills/founder/agemon-founder-brand/NOTICE.md +12 -0
  77. package/assets/skills/founder/agemon-founder-brand/SKILL.md +77 -0
  78. package/assets/skills/founder/agemon-founder-cfo/LICENSE +21 -0
  79. package/assets/skills/founder/agemon-founder-cfo/NOTICE.md +12 -0
  80. package/assets/skills/founder/agemon-founder-cfo/SKILL.md +109 -0
  81. package/assets/skills/founder/agemon-founder-cfo/example.json +27 -0
  82. package/assets/skills/founder/agemon-founder-cfo/unit_economics.py +270 -0
  83. package/assets/skills/founder/agemon-founder-competitors/LICENSE +21 -0
  84. package/assets/skills/founder/agemon-founder-competitors/NOTICE.md +12 -0
  85. package/assets/skills/founder/agemon-founder-competitors/SKILL.md +84 -0
  86. package/assets/skills/founder/agemon-founder-consumer/LICENSE +21 -0
  87. package/assets/skills/founder/agemon-founder-consumer/NOTICE.md +11 -0
  88. package/assets/skills/founder/agemon-founder-consumer/SKILL.md +126 -0
  89. package/assets/skills/founder/agemon-founder-consumer/customer.example.json +34 -0
  90. package/assets/skills/founder/agemon-founder-consumer/panel.py +424 -0
  91. package/assets/skills/founder/agemon-founder-consumer/pitch.example.md +3 -0
  92. package/assets/skills/founder/agemon-founder-launch/LICENSE +21 -0
  93. package/assets/skills/founder/agemon-founder-launch/NOTICE.md +11 -0
  94. package/assets/skills/founder/agemon-founder-launch/SKILL.md +65 -0
  95. package/assets/skills/founder/agemon-founder-marketing/LICENSE +21 -0
  96. package/assets/skills/founder/agemon-founder-marketing/NOTICE.md +11 -0
  97. package/assets/skills/founder/agemon-founder-marketing/SKILL.md +80 -0
  98. package/assets/skills/founder/agemon-founder-offer/LICENSE +21 -0
  99. package/assets/skills/founder/agemon-founder-offer/NOTICE.md +11 -0
  100. package/assets/skills/founder/agemon-founder-offer/SKILL.md +75 -0
  101. package/assets/skills/founder/agemon-founder-ops/LICENSE +21 -0
  102. package/assets/skills/founder/agemon-founder-ops/NOTICE.md +12 -0
  103. package/assets/skills/founder/agemon-founder-ops/SKILL.md +77 -0
  104. package/assets/skills/founder/agemon-founder-plan/LICENSE +21 -0
  105. package/assets/skills/founder/agemon-founder-plan/NOTICE.md +11 -0
  106. package/assets/skills/founder/agemon-founder-plan/SKILL.md +88 -0
  107. package/assets/skills/founder/agemon-founder-plan/compile.py +178 -0
  108. package/assets/skills/founder/agemon-founder-pricing/LICENSE +21 -0
  109. package/assets/skills/founder/agemon-founder-pricing/NOTICE.md +12 -0
  110. package/assets/skills/founder/agemon-founder-pricing/SKILL.md +92 -0
  111. package/assets/skills/founder/agemon-founder-pricing/van_westendorp.py +172 -0
  112. package/assets/skills/geo-seo/geo/LICENSE +21 -0
  113. package/assets/skills/geo-seo/geo/NOTICE.md +18 -0
  114. package/assets/skills/geo-seo/geo/SKILL.md +145 -0
  115. package/assets/skills/geo-seo/geo-audit/LICENSE +21 -0
  116. package/assets/skills/geo-seo/geo-audit/NOTICE.md +17 -0
  117. package/assets/skills/geo-seo/geo-audit/SKILL.md +371 -0
  118. package/assets/skills/geo-seo/geo-audit/references/ai-visibility.md +233 -0
  119. package/assets/skills/geo-seo/geo-audit/references/content.md +329 -0
  120. package/assets/skills/geo-seo/geo-audit/references/platform-analysis.md +294 -0
  121. package/assets/skills/geo-seo/geo-audit/references/schema.md +383 -0
  122. package/assets/skills/geo-seo/geo-audit/references/technical.md +368 -0
  123. package/assets/skills/geo-seo/geo-brand-mentions/LICENSE +21 -0
  124. package/assets/skills/geo-seo/geo-brand-mentions/NOTICE.md +15 -0
  125. package/assets/skills/geo-seo/geo-brand-mentions/SKILL.md +459 -0
  126. package/assets/skills/geo-seo/geo-citability/LICENSE +21 -0
  127. package/assets/skills/geo-seo/geo-citability/NOTICE.md +14 -0
  128. package/assets/skills/geo-seo/geo-citability/SKILL.md +320 -0
  129. package/assets/skills/geo-seo/geo-content/LICENSE +21 -0
  130. package/assets/skills/geo-seo/geo-content/NOTICE.md +14 -0
  131. package/assets/skills/geo-seo/geo-content/SKILL.md +352 -0
  132. package/assets/skills/geo-seo/geo-crawlers/LICENSE +21 -0
  133. package/assets/skills/geo-seo/geo-crawlers/NOTICE.md +15 -0
  134. package/assets/skills/geo-seo/geo-crawlers/SKILL.md +388 -0
  135. package/assets/skills/geo-seo/geo-llmstxt/LICENSE +21 -0
  136. package/assets/skills/geo-seo/geo-llmstxt/NOTICE.md +14 -0
  137. package/assets/skills/geo-seo/geo-llmstxt/SKILL.md +433 -0
  138. package/assets/skills/geo-seo/geo-platform-optimizer/LICENSE +21 -0
  139. package/assets/skills/geo-seo/geo-platform-optimizer/NOTICE.md +14 -0
  140. package/assets/skills/geo-seo/geo-platform-optimizer/SKILL.md +282 -0
  141. package/assets/skills/geo-seo/geo-report/LICENSE +21 -0
  142. package/assets/skills/geo-seo/geo-report/NOTICE.md +14 -0
  143. package/assets/skills/geo-seo/geo-report/SKILL.md +406 -0
  144. package/assets/skills/geo-seo/geo-report-pdf/LICENSE +21 -0
  145. package/assets/skills/geo-seo/geo-report-pdf/NOTICE.md +20 -0
  146. package/assets/skills/geo-seo/geo-report-pdf/SKILL.md +153 -0
  147. package/assets/skills/geo-seo/geo-report-pdf/templates/geo-report-template.html +548 -0
  148. package/assets/skills/geo-seo/geo-schema/LICENSE +21 -0
  149. package/assets/skills/geo-seo/geo-schema/NOTICE.md +16 -0
  150. package/assets/skills/geo-seo/geo-schema/SKILL.md +396 -0
  151. package/assets/skills/geo-seo/geo-technical/LICENSE +21 -0
  152. package/assets/skills/geo-seo/geo-technical/NOTICE.md +15 -0
  153. package/assets/skills/geo-seo/geo-technical/SKILL.md +566 -0
  154. package/assets/skills/output-style/agemon-adhd/LICENSE +21 -0
  155. package/assets/skills/output-style/agemon-adhd/NOTICE.md +13 -0
  156. package/assets/skills/output-style/agemon-adhd/SKILL.md +138 -0
  157. package/assets/skills/performance/agemon-performance/NOTICE.md +1 -0
  158. package/assets/skills/performance/agemon-performance/SKILL.md +76 -0
  159. package/assets/skills/security/agemon-security/LICENSE +21 -0
  160. package/assets/skills/security/agemon-security/NOTICE.md +8 -0
  161. package/assets/skills/security/agemon-security/SKILL.md +356 -0
  162. package/assets/skills/security/agemon-security-audit/AI-AND-LLM.md +83 -0
  163. package/assets/skills/security/agemon-security-audit/ATTACK-CLASSES.md +130 -0
  164. package/assets/skills/security/agemon-security-audit/CLIENT-SIDE.md +83 -0
  165. package/assets/skills/security/agemon-security-audit/CLOUD-AND-DEPLOYMENT.md +86 -0
  166. package/assets/skills/security/agemon-security-audit/DATA-ISOLATION-AND-LIFECYCLE.md +84 -0
  167. package/assets/skills/security/agemon-security-audit/DESKTOP-MOBILE-AND-LOCAL-IPC.md +89 -0
  168. package/assets/skills/security/agemon-security-audit/HUNTING.md +251 -0
  169. package/assets/skills/security/agemon-security-audit/LICENSE +21 -0
  170. package/assets/skills/security/agemon-security-audit/MEMORY-SAFETY-AND-BINARY.md +101 -0
  171. package/assets/skills/security/agemon-security-audit/NOTICE.md +12 -0
  172. package/assets/skills/security/agemon-security-audit/PROTOCOLS-RPC-AND-MESSAGING.md +81 -0
  173. package/assets/skills/security/agemon-security-audit/RECONNAISSANCE.md +156 -0
  174. package/assets/skills/security/agemon-security-audit/RESOURCE-EXHAUSTION-AND-AVAILABILITY.md +78 -0
  175. package/assets/skills/security/agemon-security-audit/SKILL.md +192 -0
  176. package/assets/skills/security/agemon-security-audit/SUPPLY-CHAIN-AND-RELEASE.md +73 -0
  177. package/assets/skills/security/agemon-security-audit/VALIDATION-AND-REPORTING.md +186 -0
  178. package/assets/skills/security/agemon-security-audit/WEB-PROTOCOL-AND-AUTH.md +105 -0
  179. package/assets/skills/security/agemon-security-audit/report-schema.json +461 -0
  180. package/assets/skills/security/agemon-security-audit/validate-coverage-ledger.cjs +872 -0
  181. package/assets/skills/security/agemon-security-audit/validate-findings.cjs +773 -0
  182. package/assets/skills/self-review/agemon-review-intake/LICENSE +21 -0
  183. package/assets/skills/self-review/agemon-review-intake/NOTICE.md +9 -0
  184. package/assets/skills/self-review/agemon-review-intake/SKILL.md +205 -0
  185. package/assets/skills/self-review/agemon-review-request/LICENSE +21 -0
  186. package/assets/skills/self-review/agemon-review-request/NOTICE.md +9 -0
  187. package/assets/skills/self-review/agemon-review-request/SKILL.md +104 -0
  188. package/assets/skills/self-review/agemon-review-request/code-reviewer.md +188 -0
  189. package/assets/skills/self-review/agemon-root-cause/LICENSE +21 -0
  190. package/assets/skills/self-review/agemon-root-cause/NOTICE.md +10 -0
  191. package/assets/skills/self-review/agemon-root-cause/SKILL.md +283 -0
  192. package/assets/skills/self-review/agemon-root-cause/condition-based-waiting-example.ts +158 -0
  193. package/assets/skills/self-review/agemon-root-cause/condition-based-waiting.md +115 -0
  194. package/assets/skills/self-review/agemon-root-cause/defense-in-depth.md +122 -0
  195. package/assets/skills/self-review/agemon-root-cause/find-polluter.sh +72 -0
  196. package/assets/skills/self-review/agemon-root-cause/root-cause-tracing.md +169 -0
  197. package/assets/skills/self-review/agemon-root-cause/test-academic.md +14 -0
  198. package/assets/skills/self-review/agemon-root-cause/test-pressure-1.md +58 -0
  199. package/assets/skills/self-review/agemon-root-cause/test-pressure-2.md +68 -0
  200. package/assets/skills/self-review/agemon-root-cause/test-pressure-3.md +69 -0
  201. package/assets/skills/self-review/agemon-verify-before-done/LICENSE +21 -0
  202. package/assets/skills/self-review/agemon-verify-before-done/NOTICE.md +9 -0
  203. package/assets/skills/self-review/agemon-verify-before-done/SKILL.md +120 -0
  204. package/assets/skills/team-lead/agemon-plan-rfc/SKILL.md +317 -0
  205. package/assets/skills/team-lead/prd-generator/SKILL.md +437 -0
  206. package/assets/skills/team-lead/skill-headofit-audit/SKILL.md +72 -0
  207. package/assets/skills/team-lead/skill-incident-rca/SKILL.md +66 -0
  208. package/assets/skills/team-lead/skill-meeting-lifecycle/SKILL.md +63 -0
  209. package/assets/skills/team-lead/skill-obsidian-vault-sync/SKILL.md +69 -0
  210. package/assets/skills/team-lead/skill-prd-decomposer/SKILL.md +71 -0
  211. package/assets/skills/team-lead/skill-sec-check/SKILL.md +70 -0
  212. package/assets/skills/team-lead/skill-task-extractor/SKILL.md +79 -0
  213. package/assets/skills/team-lead/skill-tech-spike/SKILL.md +57 -0
  214. package/assets/skills/team-lead/skill-techlead-reviewer/SKILL.md +81 -0
  215. package/assets/skills/workflow/agemon-brainstorming/LICENSE +21 -0
  216. package/assets/skills/workflow/agemon-brainstorming/NOTICE.md +14 -0
  217. package/assets/skills/workflow/agemon-brainstorming/SKILL.md +287 -0
  218. package/assets/skills/workflow/agemon-brainstorming/builder-check-prompt.md +23 -0
  219. package/assets/skills/workflow/agemon-dispatching-parallel-agents/LICENSE +21 -0
  220. package/assets/skills/workflow/agemon-dispatching-parallel-agents/NOTICE.md +13 -0
  221. package/assets/skills/workflow/agemon-dispatching-parallel-agents/SKILL.md +167 -0
  222. package/assets/skills/workflow/agemon-executing-plans/LICENSE +21 -0
  223. package/assets/skills/workflow/agemon-executing-plans/NOTICE.md +15 -0
  224. package/assets/skills/workflow/agemon-executing-plans/SKILL.md +322 -0
  225. package/assets/skills/workflow/agemon-executing-plans/scripts/task-done +55 -0
  226. package/assets/skills/workflow/agemon-executing-plans/scripts/task-start +32 -0
  227. package/assets/skills/workflow/agemon-finishing-a-development-branch/LICENSE +21 -0
  228. package/assets/skills/workflow/agemon-finishing-a-development-branch/NOTICE.md +13 -0
  229. package/assets/skills/workflow/agemon-finishing-a-development-branch/SKILL.md +225 -0
  230. package/assets/skills/workflow/agemon-subagent-driven-development/LICENSE +21 -0
  231. package/assets/skills/workflow/agemon-subagent-driven-development/NOTICE.md +15 -0
  232. package/assets/skills/workflow/agemon-subagent-driven-development/SKILL.md +339 -0
  233. package/assets/skills/workflow/agemon-subagent-driven-development/code-reviewer.md +198 -0
  234. package/assets/skills/workflow/agemon-subagent-driven-development/implementer-prompt.md +154 -0
  235. package/assets/skills/workflow/agemon-subagent-driven-development/re-review-prompt.md +116 -0
  236. package/assets/skills/workflow/agemon-subagent-driven-development/references/batching.md +11 -0
  237. package/assets/skills/workflow/agemon-subagent-driven-development/references/cannot-verify.md +10 -0
  238. package/assets/skills/workflow/agemon-subagent-driven-development/references/final-review.md +49 -0
  239. package/assets/skills/workflow/agemon-subagent-driven-development/references/fix-loop.md +77 -0
  240. package/assets/skills/workflow/agemon-subagent-driven-development/references/handling-reports.md +15 -0
  241. package/assets/skills/workflow/agemon-subagent-driven-development/references/preflight.md +26 -0
  242. package/assets/skills/workflow/agemon-subagent-driven-development/references/resuming.md +12 -0
  243. package/assets/skills/workflow/agemon-subagent-driven-development/references/role-scout.md +18 -0
  244. package/assets/skills/workflow/agemon-subagent-driven-development/references/role-worker.md +19 -0
  245. package/assets/skills/workflow/agemon-subagent-driven-development/scripts/review-package +64 -0
  246. package/assets/skills/workflow/agemon-subagent-driven-development/scripts/sdd-repo +54 -0
  247. package/assets/skills/workflow/agemon-subagent-driven-development/scripts/sdd-workspace +110 -0
  248. package/assets/skills/workflow/agemon-subagent-driven-development/scripts/task-brief +108 -0
  249. package/assets/skills/workflow/agemon-subagent-driven-development/task-reviewer-prompt.md +209 -0
  250. package/assets/skills/workflow/agemon-test-driven-development/LICENSE +21 -0
  251. package/assets/skills/workflow/agemon-test-driven-development/NOTICE.md +14 -0
  252. package/assets/skills/workflow/agemon-test-driven-development/SKILL.md +330 -0
  253. package/assets/skills/workflow/agemon-test-driven-development/writing-good-tests.md +198 -0
  254. package/assets/skills/workflow/agemon-using-git-worktrees/LICENSE +21 -0
  255. package/assets/skills/workflow/agemon-using-git-worktrees/NOTICE.md +13 -0
  256. package/assets/skills/workflow/agemon-using-git-worktrees/SKILL.md +167 -0
  257. package/assets/skills/workflow/agemon-writing-plans/LICENSE +21 -0
  258. package/assets/skills/workflow/agemon-writing-plans/NOTICE.md +13 -0
  259. package/assets/skills/workflow/agemon-writing-plans/SKILL.md +204 -0
  260. package/assets/tools/code-review-graph-constraints.txt +1418 -0
  261. package/assets/tools/package-lock.json +111 -0
  262. package/assets/tools/package.json +6 -0
  263. package/dist/chunk-ZZBF3GOV.js +3451 -0
  264. package/dist/chunk-ZZBF3GOV.js.map +1 -0
  265. package/dist/fake-subprocess-IV4ML77S.js +636 -0
  266. package/dist/fake-subprocess-IV4ML77S.js.map +1 -0
  267. package/dist/index.js +23836 -1945
  268. package/dist/index.js.map +1 -1
  269. package/package.json +37 -17
@@ -0,0 +1,162 @@
1
+ # Craft Intent — Read, Variance, Signature
2
+
3
+ Load on every `/agemon-design build`, default Build mode, and when the user asks for a full surface without naming a command. This file is the **generative front door** — declare intent before writing code.
4
+
5
+ ---
6
+
7
+ ## 1. Craft Read (mandatory before code)
8
+
9
+ Before tokens or layout, output **one line** the user can react to:
10
+
11
+ > **Craft Read:** *[surface kind] for [audience], [product | marketing] language, [theme/accent hint], variance [N], signature bet: [choice].*
12
+
13
+ **Infer from:** page/app kind, vibe words ("minimal", "editorial", "dense", "playful"), references the user named, existing brand tokens, audience.
14
+
15
+ **Examples:**
16
+
17
+ - *Craft Read: invoice-matching dashboard for finance admins, product language, the client's navy and a pale ledger-paper ground, variance 4, signature bet: the oldest unmatched invoice pinned first in the queue, with its age shown as a ruled tally.*
18
+ - *Craft Read: build-tool launch page for platform engineers, marketing language, the logo's orange on a light ground, variance 7, signature bet: a recorded first build replayed in the hero, cropped at the fold.*
19
+ - *Craft Read: ceramicist's portfolio for gallery buyers, marketing language, unglazed-clay neutrals with one glaze-blue accent, variance 8, signature bet: a strip of glaze swatches that doubles as the project index.*
20
+
21
+ Each bet comes from something in the subject (a ledger, a build, a glaze), not from a layout pattern. Worked examples get imitated: derive yours from the brief's subject instead of copying one of these.
22
+
23
+ If the brief is ambiguous, ask **one** clarifying question — never a questionnaire. If inferable, declare the Craft Read and proceed.
24
+
25
+ **Anti-default discipline:** Generated design without a committed read clusters into three defaults — (1) warm cream background (~`#F4F1EA`) + serif display + terracotta/brass accent; (2) near-black background + one bright acid-green or vermilion accent; (3) broadsheet layout — hairline rules, zero border-radius, dense columns. Each is legitimate only *when the brief asks for it*, never as a default answer to "no brand direction" — same goes for purple mesh gradients, symmetric three-icon-card heroes, full-black sidebars, and Inter-on-everything without a reason. The fuller, dated list is [tells-2026-11.md](tells-2026-11.md).
26
+
27
+ **Second-order check (marketing surfaces):** name the aesthetic lane before building ("editorial type", "terminal-dark devtool", "warm-craft artisan"), then ask if someone could guess it from the domain alone — "devtool → dark mode + mono" is the first reflex, "AI tool that's not-purple → editorial serif restraint" is the same reflex one tier deeper. If the lane, or any default above, is guessable from the category, rework it until it isn't — the brand's specifics should pick the lane, not the category. Self-test: "would a similar brief for a *different* brand in this category produce this same plan?" If yes for any axis, that's a reflex, not a decision — revise it and state what changed.
28
+
29
+ ---
30
+
31
+ ## 2. DESIGN_VARIANCE knob (1–10)
32
+
33
+ Separate from **VISUAL_DENSITY** (how much fits) and **CRAFT_LEVEL** (how refined). Variance controls **layout risk and creative amplitude**.
34
+
35
+ | Variance | Product surfaces | Marketing surfaces |
36
+ |----------|------------------|-------------------|
37
+ | **1–3** | Symmetric grids, safe hierarchy | Centered hero OK only with asymmetric support |
38
+ | **4–6** | Split layouts, metric hierarchy, one layout break | Split/bento heroes, alternating feature rows |
39
+ | **7–8** | Strong typographic moments in shell (empty state, onboarding) | Asymmetric offsets, scroll-linked logo strip, display scale drama |
40
+ | **9–10** | Rare — one experimental shell moment only | Kinetic type, scroll choreography — **explicit brief or user asks "experimental"** |
41
+
42
+ **Defaults when user doesn't specify:**
43
+
44
+ | Surface | Default variance |
45
+ |---------|------------------|
46
+ | Dashboard, settings, auth, tables | **4** |
47
+ | Landing (live product) | **7** |
48
+ | Landing (waitlist / pre-launch) | **6** |
49
+ | Portfolio, case-study, launch event | **8** |
50
+
51
+ "Bolder" raises variance (+1–2, cap 10) and motion (+1, cap 10). "Quieter" lowers both. Honor `prefers-reduced-motion` always.
52
+
53
+ ---
54
+
55
+ ## 3. Signature bet (mandatory — not polish-gated)
56
+
57
+ Every `/agemon-design build` ships **exactly one** memorable decision, chosen at plan time and built in Step 3 — not deferred to `/agemon-design polish`.
58
+
59
+ ### Product surfaces (pick one)
60
+
61
+ 1. Custom empty-state motif (simple SVG tied to domain)
62
+ 2. Distinctive nav active indicator (left bar, pill, or dot) — system-wide
63
+ 3. Welcome / first-run panel — dismissible, value-focused
64
+ 4. Primary table row hover (subtle lift + shadow on the main table only)
65
+ 5. Command palette or keyboard hint (`⌘K`) when search/actions warrant it
66
+
67
+ ### Auth surfaces (pick one — load [recipe-auth.md](recipe-auth.md))
68
+
69
+ 1. Panel proof asset — one believable proof figure **or** one attributed quote (not both)
70
+ 2. Trust footer line — compliance / data residency in tertiary text at panel foot
71
+ 3. Domain-specific welcome line — verb tied to product ("Pick up where you left off"), not generic filler
72
+ 4. Real provider marks on SSO row — equal-weight neutral outlines, no fake icons
73
+ 5. Subtle panel motif — simple SVG tied to domain on the tinted panel only
74
+
75
+ ### Marketing surfaces (pick one)
76
+
77
+ 1. Hero crop — product visual cut mid-element at fold edge
78
+ 2. A detail taken from the subject — a real artifact, material or sample of the product's work, shown at true scale
79
+ 3. Section markers drawn from the domain's own vocabulary (only if the content is actually a sequence or a set)
80
+ 4. Distinctive CTA copy — specific verb, not "Get started"
81
+ 5. One scroll moment — logo strip or restrained headline entrance (variance ≥7)
82
+
83
+ Name the bet in the Craft Read. Build it in the first pass.
84
+
85
+ ---
86
+
87
+ ## 4. Product surface patterns (apps, dashboards, settings)
88
+
89
+ Apply on dashboard, auth, settings, onboarding, admin — load with [recipe-dashboard.md](recipe-dashboard.md).
90
+
91
+ **Shell:** Tinted sidebar (not full black). Active nav = accent/10 + accent text. Page header row: title + context + primary action aligned.
92
+
93
+ **Data:** One hero metric (larger, accent tint); secondaries neutral. Sparklines only in dashboard cards that answer a real trend question; leave them off cards where the current value is the point. Table rows with context (avatar, status dot, proportion bar) — not plain grids. Ghost buttons in filter toolbars; primary CTA lives outside the toolbar.
94
+
95
+ **Type & color:** `tabular-nums` on numbers. Sentence case on nav and headers. Tinted surfaces (`accent/5` on primary card). Semantic green/red only when the domain expects it.
96
+
97
+ **Motion:** Optimistic UI where saves matter. Skeletons match final layout. `:active` micro-push (`scale(0.98)`). One staggered entrance per section max, `once: true`.
98
+
99
+ **States:** Empty states with icon + one sentence + CTA. Errors with retry/copy path. Onboarding checklists 3–5 steps, dismissible.
100
+
101
+ **Avoid in product shells:** scroll pinning, kinetic body copy, mesh backgrounds behind tables, glass on dense forms, decorative carousels.
102
+
103
+ **Ecosystem briefs use the official system.** When the brief names a platform with a mandated or expected design system, install and use the official package and its tokens instead of hand-rolling a lookalike — recreating a known system's CSS by hand is both more work and instantly off. One system per project; don't mix component libraries in the same tree.
104
+
105
+ Naming the platform is not enough to act on. Install what the row says:
106
+
107
+ | Brief reads as… | Install | Ships as |
108
+ |---|---|---|
109
+ | Microsoft 365 / Fluent-flavoured | `@fluentui/react-components` | React |
110
+ | Atlassian-suite companion | `@atlaskit/button`, `@atlaskit/textfield`, … | React, one package per component |
111
+ | Shopify app or admin surface | `@shopify/polaris` | React |
112
+ | Material-flavoured product | `@material/web` | Web components — any framework |
113
+ | IBM-style B2B / enterprise analytics | `@carbon/react` | React (`@carbon/styles` for the CSS alone) |
114
+ | Salesforce / Lightning | `@salesforce-ux/design-system` | CSS — any framework |
115
+ | Adobe-flavoured | `@adobe/react-spectrum` | React |
116
+ | GitHub-flavoured developer tooling | `@primer/react` | React (`@primer/primitives` for tokens alone) |
117
+ | UK public sector | `govuk-frontend` | Plain CSS + JS |
118
+ | US federal / state service | `@uswds/uswds` | Plain CSS + JS |
119
+
120
+ Check the third column against the project before adding a dependency. Most of these ship as React and installing one into a Vue, Svelte or Angular codebase is worse than hand-rolling: take the system's tokens and CSS instead, which is the part that makes it recognisable. Atlassian has no meta-package — install the components the surface actually uses.
121
+
122
+ No row matches → this rule does not apply. Proceed with the normal token flow rather than reaching for the nearest big component library.
123
+
124
+ ---
125
+
126
+ ## 5. Marketing surface patterns (landings, portfolios)
127
+
128
+ Apply on landing, portfolio, waitlist — load with [recipe-landing.md](recipe-landing.md) and [inspiration.md](inspiration.md) hero archetypes.
129
+
130
+ **Composition:** Pick one hero archetype (product-forward, message-forward, proof-forward, bento, editorial figure, social proof strip). **No two adjacent sections share the same layout.**
131
+
132
+ **Type:** Display 48–80px H1, tight tracking, sentence case. Font pairing from theme preset or brief — body + optional display. Keep type to one or two families; if you emphasize a headline word at all, make it because the content calls for it, not as a habit ([tells-2026-11.md](tells-2026-11.md)).
133
+
134
+ **Color:** Pick a commitment strategy first ([color.md](color.md) Commitment Axis — restrained / committed / full palette / drenched, gated by variance); restrained (mostly neutral, one accent) is one option, not the default; rotate accent family when no brand (indigo, teal, rose, amber, forest). No default warm-beige + brass "premium" palette unless the brief names it.
135
+
136
+ **Imagery:** marketing surfaces are visual products, not text-only pages — asset priority order, the div-built-screenshot ban, and the logo-wall rule live in [recipe-landing.md](recipe-landing.md) (Imagery is not optional).
137
+
138
+ **Motion:** Hero stagger 50–80ms; one scroll reveal per section; multi-property hover on **one** featured block. No bounce, confetti, or idle float. Every animation must answer "what does this communicate?" in one sentence (hierarchy, sequence, feedback, state change) — "it looked cool" fails.
139
+
140
+ **Portfolio:** Variable grid aspects; one hero project above fold; asymmetric about/contact — not centered template.
141
+
142
+ ---
143
+
144
+ ## 6. Rotation (when no brand direction)
145
+
146
+ Rotate **one axis per build** so outputs don't converge:
147
+
148
+ | Axis | Pool (pick 1) |
149
+ |------|----------------|
150
+ | Theme direction | Derive from the brief; a preset (Graphite, Porcelain, Signal, Carbon — [themes.md](themes.md)) only when the user asks or no direction exists |
151
+ | Accent family | indigo, teal, rose, amber, forest (OKLCH-safe) |
152
+ | Signature bet | from §3 lists |
153
+
154
+ Declare the axis in the Craft Read so the user can say "warmer accent" on iteration.
155
+
156
+ **Premium/artisan briefs must rotate palette families** — the default warm-beige + brass + espresso "premium" look is a convergence tell the moment the brief doesn't name those colors. Full family list and the never-twice-in-a-row rule: [themes.md](themes.md) Premium palette families.
157
+
158
+ ---
159
+
160
+ ## Cross-refs
161
+
162
+ [recipe-dashboard.md](recipe-dashboard.md) · [recipe-landing.md](recipe-landing.md) · [recipe-auth.md](recipe-auth.md) · [inspiration.md](inspiration.md) · [themes.md](themes.md) · [dashboard.md](dashboard.md) · [review.md](review.md)
@@ -0,0 +1,131 @@
1
+ # Dashboard Patterns
2
+
3
+ Detailed guidance for building data-heavy dashboards that feel designed, not generated.
4
+
5
+ ## Layout Structure
6
+
7
+ A dashboard needs a sidebar + main content area. The sidebar is the navigation spine.
8
+
9
+ **Sidebar navigation:**
10
+ - Subtle background tint (e.g., `background: #f8fafc` / Tailwind: `bg-slate-50`, or `background: #030712` / Tailwind: `bg-gray-950`) — NOT full black unless Dark Premium style. A dark sidebar is a common AI pattern; prefer a subtle tint that complements the content area.
11
+ - Muted nav text that brightens on hover/active. Active item gets accent background at low opacity (`background: oklch(var(--accent) / 0.1)` / Tailwind: `bg-accent/10`) + accent text.
12
+ - Brand/logo at top, user profile at bottom.
13
+ - `aria-label="Main navigation"` on `<nav>`, `aria-current="page"` on active item.
14
+ - `overscroll-behavior: contain` on the sidebar if it scrolls independently.
15
+
16
+ **Main content area:**
17
+ - Filter/toolbar row at the top: ghost buttons for filters, active state uses accent bg at low opacity. Always include a date range selector for any time-series surface. **Why:** time-series data without an interactive range silently encodes the assumption that the default window is correct — when it isn't (and it usually isn't for power users), the dashboard becomes a screenshot. **When it breaks:** real-time monitoring surfaces with a fixed last-N-minutes window — the range is the affordance, not the picker.
18
+ - Content grid below filters: metric cards → charts → tables/lists.
19
+ - Minimum 3 different content types visible per viewport (e.g., metric cards + chart + table).
20
+
21
+ ## Metric Card Hierarchy
22
+
23
+ Never show 4+ identical metric cards. Differentiate the primary metric. **Why:** a uniform grid of equal-weight cards triggers the AI-template tell — variety signals editorial decision; uniformity signals defaulted-out. It also fails the squint test: the eye can't lock on a primary at first glance. **How to differentiate:** primary card gets accent tint, slightly larger number, optional sparkline; secondaries are neutral with smaller type. See Signal-to-Noise Hierarchy section below.
24
+
25
+ **Primary metric card:**
26
+ - Accent-tinted background (`background: oklch(var(--accent) / 0.05)` / Tailwind: `bg-accent/5`) with accent-colored number, OR solid accent background with white text.
27
+ - Slightly larger number (36px vs 28px for others).
28
+
29
+ **Secondary metric cards:**
30
+ - White background, subtle border (`1px solid oklch(92% 0.005 250)`).
31
+ - Black number, secondary-color label.
32
+
33
+ **All metric cards should include:**
34
+ - Sparklines: 32px tall, polyline SVG, accent color with faded fill underneath.
35
+ - Change text: "+2,149 from last month" in `var(--text-tertiary)`. **Never green arrows for positive, red for negative.** **Why:** color implies judgment that may not match user context — a 30% increase in costs is "positive" by sign and "bad" by goal; the green arrow encodes the wrong story. Render the magnitude in neutral and let the user's interpretation supply meaning. **When it breaks:** financial trading surfaces where positive/negative is universally tied to goal (gains green, losses red is the domain convention) — match the user's domain, don't fight it.
36
+ - Label: sentence case, 12-13px, `font-weight: 500`, secondary color.
37
+ - Value: 28-36px, `font-weight: 700`, `font-variant-numeric: tabular-nums`, `letter-spacing: -0.02em`.
38
+ - NO colored top/left borders. NO colored change text. NO arrow icons next to percentages.
39
+
40
+ ## Chart Type Decision Matrix
41
+
42
+ | Data story | Best chart | Why | Avoid |
43
+ |-----------|-----------|-----|-------|
44
+ | Trend over time | Area chart with gradient fill | Shows direction + volume | Vertical bar chart |
45
+ | Comparing categories | Horizontal bar chart | Labels are readable, easy to scan | Vertical bar with rotated labels |
46
+ | Comparing discrete values | Vertical bar chart | Natural for small sets (3-7 items) | Too many bars (>8) |
47
+ | Part-of-whole | Donut/ring chart (use sparingly) | Center text shows total | Pie chart — harder to compare |
48
+ | Inline trend in a card | Sparkline (32px polyline) | Minimal, contextual | Full chart crammed into a card |
49
+ | Conversion/funnel | Progressive bars with stage labels | Shows drop-off clearly | Donut chart |
50
+ | Never use | — | — | Pie charts, 3D charts of any kind |
51
+
52
+ **Why never pie charts:** Cleveland-McGill perceptual hierarchy ranks angle (pie) below position (bar). Humans compare bar lengths to within a few percent; pie wedges fail at 4+ slices. **Why never 3D:** depth occludes data points and foreshortens position-based comparison. No 2D chart benefits from a third dimension. **When a two-segment donut is acceptable:** a donut with center label for binary proportions (used vs free, paid vs free) — only one comparison to make.
53
+
54
+ ## Chart Styling
55
+
56
+ - **Single accent hue at varying opacities** for multi-series: `accent/100`, `accent/60`, `accent/30`. **Never rainbow colors.** **Why:** hue does not encode ordering — readers can't rank red vs green by magnitude. Single-hue opacity ramps preserve perceptual ordering and remain colorblind-safe. See `dataviz.md` for full palette guidance.
57
+ - **Gradient fill underneath area lines**: line at full opacity, fill fades from ~15% at line to 0% at bottom.
58
+ - **Label placement**: axis labels in secondary text, 11-12px. Data point labels only on hover (tooltip), not permanently displayed.
59
+ - **Grid lines**: horizontal only, very subtle (`border-color: oklch(95% 0 0)` / Tailwind: `border-gray-100`). No vertical grid lines.
60
+ - **No chart chrome**: skip legends when there's only one series. Put context in the card title instead.
61
+
62
+ ## Data Tables
63
+
64
+ Tables are the workhorse of dashboards. Make them earn their space.
65
+
66
+ - **Row context**: tiny avatars (24px), colored status dots (6px, not badges), flag icons, or proportion bars. Plain text tables feel like spreadsheets.
67
+ - **Status indicators**: small colored dots (6-8px) inline with text. "Active" with a green dot, not a green badge/pill. The dot conveys status; the text provides the label. Badges add visual noise and are an AI-slop pattern.
68
+ - **Proportion bars**: show relative values as width-proportional bars within cells. More visual than raw numbers.
69
+ - **Row hover**: subtle background highlight (`background: #f9fafb` / Tailwind: `hover:bg-gray-50`).
70
+ - **Headers**: sentence case, `font-weight: 500`, secondary color. **Never uppercase table headers.** **Why:** uppercase removes the lowercase letterforms that aid scan-pattern recognition; readers process uppercase ~13-20% slower than sentence case (Tinker 1969). Uppercase also reads as decorative-template, not data-functional.
71
+ - **Alignment**: text left, numbers right, status center.
72
+ - **Wrap every table in `overflow-x: auto`.** Horizontal, not `overflow-y` and not `overflow-hidden`. **Why:** a table is the one layout that cannot reflow — columns have minimum content widths, so at ~320px it either clips at the viewport edge or forces the whole page to scroll sideways. Vertical overflow solves a different problem and leaves this one intact.
73
+ - **Put `position: sticky; top: 0` on `thead` past ~15 rows.** **Why:** once the header scrolls out of view every cell below it is an unlabelled string, and the user scrolls back up to remember which column is which. On an operator surface the table *is* the product, so this is not polish.
74
+ - **Virtualize past 200 rows.** **Why:** every row is DOM the browser lays out, styles, and paints on each scroll frame — a 2,000-row table blows the 16ms budget before any of your CSS is at fault, and the fix is never "optimize the row component". Render a window (TanStack Virtual, `react-window`) or paginate. **When it breaks:** the table must be Cmd+F-searchable or printable in full — then paginate instead of virtualizing, since a virtual window hides rows from find-in-page.
75
+ - **`scrollbar-gutter: stable` on every scroll container.** **Why:** on overlay-scrollbar platforms the track appears only on scroll, and the content reflows by its width at that moment — column edges jump the instant the user touches the wheel. Reserving the gutter costs nothing and removes the shift.
76
+
77
+ ## Filter & Toolbar Patterns
78
+
79
+ - Ghost buttons for all filter controls — **never solid primary buttons in a toolbar.** **Why:** a toolbar holds 5-15 tertiary actions (filter, sort, group, export, refresh). Each solid primary button competes for the user's primary-action attention budget; the dashboard's actual primary action (drill-in, edit, alert config) gets buried. Hick's Law applied to visual weight.
80
+ - Active filter state: accent background at low opacity + accent text, or subtle border change.
81
+ - Group related filters visually. Date range selector deserves more prominence (slightly larger or separated).
82
+ - "Reset filters" appears only when filters are active, as a text link — not a button.
83
+
84
+ ## Content Density
85
+
86
+ Dashboards value density over breathing room (opposite of landing pages).
87
+
88
+ - Metric cards: tight padding (16-20px), not the generous 32-48px of landing page cards.
89
+ - Charts: minimize whitespace around the chart area. The data should fill the container.
90
+ - Tables: compact row height (40-48px). Dense but scannable.
91
+ - A dashboard should show enough data that a user can make a decision without scrolling. If the first viewport is just 4 large metric cards, you've wasted space.
92
+ - Aim for: 3-4 metric cards + at least one chart + start of a table/list — all above the fold.
93
+
94
+ ---
95
+
96
+ ## Signal-to-Noise Hierarchy
97
+
98
+ The most common AI-generated dashboard failure isn't any single bad choice — it's that every KPI, every chart, every card looks equally important. The user doesn't know where to look. Signal-to-noise hierarchy is the fix.
99
+
100
+ ### Tiers
101
+
102
+ **Tier 1 — The hero metric.** One per dashboard. The number that answers "am I winning today?". Largest visual weight. Accent color is allowed here, and here only. Trend indicator adjacent (up/down + delta). Context micro-text below: "vs last 7 days" or "of monthly quota."
103
+
104
+ **Tier 2 — Supporting metrics (2-4).** The breakdown of the hero — if the hero is revenue, supports are revenue by channel, by region, by segment. Neutral colors. Smaller type. Grouped visually with the hero (shared container, aligned baseline).
105
+
106
+ **Tier 3 — Context (0-3 charts).** Trends, time series, comparisons. Chart type matches data shape (see `dataviz.md` and the Chart Type Decision Matrix above). Sparklines for micro-context inside cards. No large charts competing with the hero's visual weight.
107
+
108
+ **Tier 4 — Deep-dive.** Tables, filters, raw data. Accessible but not crowding the viewport. Often collapsed by default, or lives on a separate tab / route. The user drills in when they need it.
109
+
110
+ ### The anti-pattern: "grid of 8 KPI cards with equal weight"
111
+
112
+ Every card the same size, same color, same layout → the user's eye has nowhere to land → the user scrolls looking for meaning → the user leaves. This is the single most recognizable AI-generated dashboard shape.
113
+
114
+ ### The rule
115
+
116
+ One hero. 2-4 supports. Context behind. Deep-dive one click away. Test by squinting at the dashboard: your eye should land on ONE thing first. If it lands everywhere, the hierarchy is broken.
117
+
118
+ ### Ranking decisions to document per dashboard
119
+
120
+ Before building, answer these:
121
+
122
+ - **What's the hero metric for this surface?** Different for exec view (revenue) vs operator view (tickets open) vs customer view (usage vs limit). See `personas.md` to ground this in concrete archetypes.
123
+ - **What supporting metrics contextualize the hero?** The 2-4 that make the hero actionable, not the 8 you could show.
124
+ - **What's deep-dive, not surface?** Everything the user needs once a week, not once a minute.
125
+ - **Who's the user and what decision are they making in the next 60 seconds?** If you can't name the decision, the dashboard has no job.
126
+
127
+ ### Cross-references
128
+
129
+ - `dataviz.md` — chart selection by data shape; Cleveland-McGill perceptual hierarchy (position-on-common-scale is most accurate — use it for the hero).
130
+ - `heuristics.md` — Cleveland-McGill and Hick's Law checks for filter/nav choices.
131
+ - `personas.md` — concrete user archetypes to ground "who's the user" in reality, not abstraction.
@@ -0,0 +1,197 @@
1
+ # Dataviz — Perceptual Accuracy
2
+
3
+ Most AI-generated charts are rainbow 3-D pies on grid backgrounds with shouting legends. That's not dataviz — that's decoration. Dataviz is a science with names attached: Cleveland, McGill, Tufte, Bostock, Brewer. This file is the perceptual layer — `dashboard.md` handles dashboard chrome (sidebar, metric cards, toolbar); this handles what actually encodes information accurately.
4
+
5
+ ---
6
+
7
+ ## Cleveland-McGill Perceptual Hierarchy
8
+
9
+ Source: Cleveland, W. S. & McGill, R. (1984). "Graphical Perception: Theory, Experimentation, and Application to the Development of Graphical Methods." JASA.
10
+
11
+ Humans decode visual encodings with predictable, measurable accuracy. Ordered from most → least accurate:
12
+
13
+ 1. **Position on a common scale** — e.g., dot plot, aligned bar chart. Highest precision.
14
+ 2. **Position on unaligned scales** — e.g., small multiples with different baselines.
15
+ 3. **Length** — e.g., bar chart, progress bar.
16
+ 4. **Angle / slope** — e.g., line chart slopes, pie wedges.
17
+ 5. **Area** — e.g., bubble chart, treemap.
18
+ 6. **Volume** — e.g., 3-D bar (and yes, this is already worse than area).
19
+ 7. **Color saturation / lightness** — e.g., heatmap.
20
+ 8. **Color hue** — e.g., categorical colors. Lowest precision for quantities.
21
+
22
+ **Implication:** if a numeric comparison is load-bearing, prefer bar over pie, line over stacked area, dot plot over heatmap. Color hue is for categories, not quantities.
23
+
24
+ ---
25
+
26
+ ## Chart Selection Matrix
27
+
28
+ Match the data shape and analytical question to a chart. Fallbacks listed when the default isn't possible.
29
+
30
+ | Data shape + question | Default | Fallback | Avoid |
31
+ |----------------------|---------|----------|-------|
32
+ | Time series, one metric | Line | Area (sparingly, single series) | Vertical bars per day |
33
+ | Time series, categorical breakdown, totals | Stacked bar or stacked area | — | 100% stacked (hides totals) |
34
+ | Time series, categorical breakdown, individual trends | Small multiples (one line per panel) | Multi-line (≤ 4 series) | Spaghetti line chart (> 5 series) |
35
+ | Categorical, one metric | Horizontal bar (sorted) | Dot plot | Pie, unless n ≤ 3 and parts-of-whole is the story |
36
+ | Parts of a whole | Stacked bar (100%) with labels | Donut (n ≤ 5) | Pie with n > 5; donut without center total |
37
+ | Distribution of one variable | Histogram | Density / violin | Mean-only bar |
38
+ | Distribution across groups | Box plot or violin | Strip plot with jitter | Mean + error bar alone |
39
+ | Correlation of two variables | Scatter + trend line | Hex-bin (high n) | A correlation coefficient printed as a single number |
40
+ | Ranking | Horizontal bar sorted desc | Dot plot with reference line | Vertical bar with rotated labels |
41
+ | Geographic (regional) | Choropleth, **per-capita normalized** | Symbol map | Raw-count choropleth (shows population, not signal) |
42
+ | Flow / transition | Sankey (sparingly) | Cohort table, small multiples | Chord diagram for > 8 categories |
43
+ | Hierarchy | Tree / indented list | Treemap (area ≫ precision) | Sunburst for > 3 levels |
44
+
45
+ **Rule of thumb:** if you can't name the question the chart answers, remove it.
46
+
47
+ ---
48
+
49
+ ## Color for Data
50
+
51
+ Three families. Choose by the data's semantics, not by taste.
52
+
53
+ ### Sequential — one direction (low → high)
54
+
55
+ For ordinal or continuous magnitude: revenue, count, score. Use perceptually uniform palettes.
56
+
57
+ - **viridis, cividis** (perceptually uniform sequential — available in every charting stack) — colorblind-safe, print-safe.
58
+ - **YlGnBu, YlOrRd** (ColorBrewer) — classic sequential, works on light backgrounds.
59
+
60
+ Never use a rainbow (hue-only) palette for sequential data. Hue is not ordered — the eye cannot rank red vs green by magnitude. Ordered magnitude needs a luminance ramp (viridis, cividis, YlOrRd). Hue-only is also colorblind-hostile: red-green deficiency affects approximately 8% of men and 0.5% of women (Birch 2012; Sharpe et al. 1999) — exactly the mid-spectrum of a rainbow.
61
+
62
+ ### Diverging — centered on a meaningful midpoint
63
+
64
+ For values with a neutral zero: surplus/deficit, above/below average, net promoter score.
65
+
66
+ - **RdBu, PiYG, BrBG** (ColorBrewer).
67
+ - The midpoint must be semantic, not arbitrary. Don't use diverging for "low to high" — that's sequential.
68
+
69
+ ### Categorical — nominal classes
70
+
71
+ For discrete groups with no order: regions, departments, products.
72
+
73
+ - **Okabe-Ito** (Okabe & Ito 2008, colorblind-safe, 8 hues). Values, in series order:
74
+ `#E69F00` orange, `#56B4E9` sky blue, `#009E73` bluish green, `#F0E442` yellow, `#0072B2` blue, `#D55E00` vermillion, `#CC79A7` reddish purple, `#000000` black.
75
+ - **Cap at 7 hues.** After that, hues become indistinguishable. Options: (a) group remainder into "Other", (b) repeat hues with patterns, (c) direct-label each series and drop the legend.
76
+
77
+ ### Never-defaults
78
+
79
+ - **Pie chart with > 5 slices** — Cleveland-McGill: angle is the fourth-lowest encoding in the perceptual hierarchy; humans cannot accurately compare more than 4–5 angular wedges. Use a horizontal bar chart sorted by magnitude instead.
80
+ - **Rainbow / HSL-rotation palette for sequential or ordinal data** — hue carries no perceptual ordering; the eye cannot rank hues by magnitude without trial-and-error. Diverging data needs a two-direction luminance ramp (RdBu, PiYG); sequential data needs a single-direction luminance ramp (viridis, YlOrRd). Hue-only is also colorblind-hostile: red-green deficiency affects approximately 8% of men and 0.5% of women (Birch 2012; Sharpe et al. 1999). Test every palette with a colorblind simulator (Color Oracle, Coblis) — non-negotiable for status colors.
81
+ - **Red and green as the only signal** — pair color with shape, icon, or text label; color alone fails for red-green deficient users (same citation above).
82
+ - **3-D charts of any kind** — depth occludes data points; foreshortening distorts position-based comparison (Cleveland-McGill: volume is second-lowest in the hierarchy). No 2-D chart benefits from a third dimension.
83
+ - **Chart library defaults without a palette override** — built-in palettes (Chart.js, Recharts) are designed for demos, not perceptual accuracy; always override with a named, colorblind-safe palette.
84
+ - **Default grid at every tick** — Tufte's data-ink ratio: a dense grid is chartjunk. Use sparse grid lines (every 2nd or 3rd tick), or baseline + target lines only.
85
+
86
+ ---
87
+
88
+ ## Tufte Principles, Distilled
89
+
90
+ Source: Tufte, E. R. (1983, 2001). *The Visual Display of Quantitative Information*.
91
+
92
+ - **Data-ink ratio** — maximize ink spent on data, minimize ink spent on chrome. Every gridline, tick, border, legend box must earn its space.
93
+ - **No chartjunk** — no 3-D, no gradients as decoration, no drop shadows on bars, no textures.
94
+ - **Small multiples over animated dashboards** — the eye compares adjacent panels faster than it compares across a timeline.
95
+ - **Annotation beats legend** — label the line, not a color swatch 200px away (see "Direct labeling" below).
96
+ - **Bar charts start at zero.** Length encodes magnitude; truncating the axis lies.
97
+ - **Line charts do NOT have to start at zero.** Position encodes change; a zero baseline can obscure the signal. Use judgment — when the story is "rose from 98 to 102", starting at zero hides it.
98
+
99
+ ---
100
+
101
+ ## Direct Labeling — the Quiet Superpower
102
+
103
+ A legend forces: read color, look 200px away, match, remember, come back. Direct labels collapse that into one saccade.
104
+
105
+ ```jsx
106
+ // Bad — legend + color lookup + cognitive hop
107
+ <LineChart data={data}>
108
+ <Line dataKey="revenue" stroke="#1f77b4" />
109
+ <Line dataKey="costs" stroke="#ff7f0e" />
110
+ <Legend />
111
+ </LineChart>
112
+
113
+ // Good — label at the end of each line, legend gone
114
+ <LineChart data={data}>
115
+ <Line dataKey="revenue" stroke="#1f77b4">
116
+ <LabelList dataKey="revenue" position="right" />
117
+ </Line>
118
+ <Line dataKey="costs" stroke="#ff7f0e">
119
+ <LabelList dataKey="costs" position="right" />
120
+ </Line>
121
+ </LineChart>
122
+ ```
123
+
124
+ Works for: bar charts (label inside or at end of bar), scatter (label the outlier dots), small multiples (title per panel replaces legend).
125
+
126
+ ---
127
+
128
+ ## Small Multiples
129
+
130
+ Use when comparing the same metric across a dimension — 8 regions, 6 products, 12 months. The eye compares adjacent panels instantly; a single overlaid chart with 8 lines is a mess.
131
+
132
+ **Layout rules:**
133
+ - **Consistent axes across panels** — same x-scale, same y-scale. If scales differ, the comparison breaks.
134
+ - **Consistent chart type** — all lines, all bars; never mix.
135
+ - **One title explaining the one thing that varies** ("Revenue by region, Jan-Dec"), plus a small subtitle per panel naming that panel's dimension value.
136
+ - **3-6 columns** typically. 10+ panels = let it wrap; keep row heights equal.
137
+ - **Sort panels** by a meaningful order (magnitude, geography, alphabetical) — not by insertion order.
138
+
139
+ ---
140
+
141
+ ## Animated Transitions for Dataset Changes
142
+
143
+ Animate to reveal change, not for decoration. The D3 enter / update / exit pattern — now standard in Recharts, VisX, Framer Motion, and Observable Plot:
144
+
145
+ - **Enter** — new data points fade in and slide to position (200-300ms, `ease-out`).
146
+ - **Update** — existing points tween to new values (300-500ms, `ease-in-out`). The tween is the insight — the user's eye tracks which point moved where.
147
+ - **Exit** — removed points fade out and collapse (150-200ms, `ease-in`).
148
+
149
+ **Rules:**
150
+ - Tween values, not colors — category color stays stable so the eye can track a specific series.
151
+ - Respect `prefers-reduced-motion` — collapse to instant transitions.
152
+ - Never animate on mount just for the entrance. A dashboard loading is not a moment for choreography.
153
+
154
+ See `references/motion.md` for easing curves and the duration scale.
155
+
156
+ ---
157
+
158
+ ## Anti-Slop Checklist (Dataviz)
159
+
160
+ Ten items a reviewer will flag immediately. Fix before shipping.
161
+
162
+ - [ ] 3-D charts of any kind. Zero exceptions.
163
+ - [ ] Pie chart with > 5 slices, or any pie where parts-of-whole isn't the story.
164
+ - [ ] Rainbow / HSL-rotation palette for sequential or numeric data.
165
+ - [ ] Red and green as the only differentiator (color-blind failure — add shape or label).
166
+ - [ ] Truncated y-axis on a bar chart (bars lie about magnitude).
167
+ - [ ] Dense gridlines at every tick. Prefer sparse grid (every 2nd or 3rd), or baseline + target lines only.
168
+ - [ ] Axis labels in scientific notation (`1.2e6`) when `1.2M` or `1,200,000` is readable.
169
+ - [ ] Missing units on axes ("Revenue" vs "Revenue (USD, thousands)").
170
+ - [ ] Legend with > 7 entries without direct labeling.
171
+ - [ ] Choropleth of raw counts instead of per-capita / rate normalization.
172
+
173
+ ---
174
+
175
+ ## Triaging a Chart That Looks Wrong
176
+
177
+ Where to look in this file:
178
+ - More than five pie slices: § Cleveland-McGill + § Chart Selection Matrix
179
+ - 3D effects: § Anti-Slop Checklist
180
+ - A rainbow scale for ordered data: § Color for Data → Sequential
181
+ - A legend where direct labels would fit: § Direct Labeling
182
+ - A bar axis that does not start at zero: § Tufte Principles
183
+
184
+ Cross-reference when a chart looks wrong.
185
+
186
+ ---
187
+
188
+ ## Sources
189
+
190
+ - Cleveland, W. S. & McGill, R. (1984). "Graphical Perception." *JASA*.
191
+ - Tufte, E. R. (2001). *The Visual Display of Quantitative Information*, 2nd ed.
192
+ - Bostock, M. et al. (2011). "D3: Data-Driven Documents." *IEEE TVCG*.
193
+ - Brewer, C. A. ColorBrewer 2.0 — [colorbrewer2.org](https://colorbrewer2.org/).
194
+ - Okabe, M. & Ito, K. (2008). "Color Universal Design."
195
+ - Wilke, C. O. (2019). *Fundamentals of Data Visualization*. O'Reilly.
196
+ - Birch, J. (2012). "Worldwide prevalence of red-green color deficiency." *Journal of the Optical Society of America A*.
197
+ - Sharpe, L. T. et al. (1999). "A new and popular explanation of colour blindness." In *Colour Vision: From Genes to Perception*. Cambridge University Press.