@design-ai/cli 4.55.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 (529) hide show
  1. package/.claude-plugin/plugin.json +164 -0
  2. package/AGENTS.ko.md +126 -0
  3. package/AGENTS.md +182 -0
  4. package/CHANGELOG.md +6883 -0
  5. package/CLAUDE.md +39 -0
  6. package/LICENSE +21 -0
  7. package/README.ko.md +245 -0
  8. package/README.md +277 -0
  9. package/agents/README.md +14 -0
  10. package/agents/a11y-reviewer.md +121 -0
  11. package/agents/component-architect.md +57 -0
  12. package/agents/design-critic.md +46 -0
  13. package/agents/token-extractor.md +63 -0
  14. package/cli/bin/design-ai-mcp.mjs +6 -0
  15. package/cli/bin/design-ai.mjs +40 -0
  16. package/cli/commands/audit.mjs +111 -0
  17. package/cli/commands/check.mjs +226 -0
  18. package/cli/commands/doctor.mjs +141 -0
  19. package/cli/commands/examples.mjs +58 -0
  20. package/cli/commands/help.mjs +271 -0
  21. package/cli/commands/install.mjs +161 -0
  22. package/cli/commands/learn.mjs +1871 -0
  23. package/cli/commands/list.mjs +143 -0
  24. package/cli/commands/mcp.mjs +27 -0
  25. package/cli/commands/pack.mjs +211 -0
  26. package/cli/commands/prompt.mjs +199 -0
  27. package/cli/commands/route.mjs +247 -0
  28. package/cli/commands/search.mjs +60 -0
  29. package/cli/commands/show.mjs +52 -0
  30. package/cli/commands/site.mjs +558 -0
  31. package/cli/commands/status.mjs +161 -0
  32. package/cli/commands/uninstall.mjs +119 -0
  33. package/cli/commands/update.mjs +184 -0
  34. package/cli/commands/version.mjs +94 -0
  35. package/cli/commands/workspace.mjs +176 -0
  36. package/cli/lib/brief.mjs +52 -0
  37. package/cli/lib/check.mjs +642 -0
  38. package/cli/lib/dispatch.mjs +109 -0
  39. package/cli/lib/doctor.mjs +505 -0
  40. package/cli/lib/examples.mjs +258 -0
  41. package/cli/lib/exec.mjs +63 -0
  42. package/cli/lib/help-flags.mjs +5 -0
  43. package/cli/lib/learn.mjs +3694 -0
  44. package/cli/lib/log.mjs +47 -0
  45. package/cli/lib/mcp-server.mjs +426 -0
  46. package/cli/lib/output.mjs +101 -0
  47. package/cli/lib/pack.mjs +599 -0
  48. package/cli/lib/paths.mjs +63 -0
  49. package/cli/lib/prompt.mjs +603 -0
  50. package/cli/lib/route.mjs +740 -0
  51. package/cli/lib/search.mjs +158 -0
  52. package/cli/lib/show.mjs +161 -0
  53. package/cli/lib/signals.mjs +2337 -0
  54. package/cli/lib/site.mjs +6617 -0
  55. package/cli/lib/skill-proposals.mjs +2046 -0
  56. package/cli/lib/suggest.mjs +66 -0
  57. package/cli/lib/workspace.mjs +1056 -0
  58. package/commands/README.md +25 -0
  59. package/commands/component-spec.md +34 -0
  60. package/commands/conversational.md +44 -0
  61. package/commands/design-from-brief.md +141 -0
  62. package/commands/design-review.md +62 -0
  63. package/commands/document-from-brief.md +47 -0
  64. package/commands/extract-tokens.md +38 -0
  65. package/commands/game-ui.md +40 -0
  66. package/commands/illustration.md +37 -0
  67. package/commands/iterate.md +167 -0
  68. package/commands/motion-design.md +54 -0
  69. package/commands/palette-from-brand.md +50 -0
  70. package/commands/print.md +49 -0
  71. package/commands/slide-deck.md +46 -0
  72. package/commands/spatial.md +47 -0
  73. package/commands/stability-review.md +74 -0
  74. package/commands/video.md +42 -0
  75. package/commands/website-improvement.md +77 -0
  76. package/docs/AGENT-DEVELOPMENT.md +658 -0
  77. package/docs/AI-LEARNING.md +429 -0
  78. package/docs/AIDER-INTEGRATION.md +224 -0
  79. package/docs/ARCHITECTURE.ko.md +183 -0
  80. package/docs/ARCHITECTURE.md +105 -0
  81. package/docs/CODEX-INTEGRATION.md +311 -0
  82. package/docs/COMPANY-WEBSITE-DOGFOOD.ko.md +144 -0
  83. package/docs/COMPANY-WEBSITE-DOGFOOD.md +150 -0
  84. package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.ko.md +153 -0
  85. package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.md +154 -0
  86. package/docs/CONTRIBUTING.ko.md +203 -0
  87. package/docs/CONTRIBUTING.md +242 -0
  88. package/docs/CURSOR-INTEGRATION.md +220 -0
  89. package/docs/DISTRIBUTION.ko.md +248 -0
  90. package/docs/DISTRIBUTION.md +253 -0
  91. package/docs/DOGFOOD-FINDINGS.md +180 -0
  92. package/docs/DOGFOOD-V4-FINDINGS.md +139 -0
  93. package/docs/DOGFOOD-V4-MKDOCS-FINDINGS.md +233 -0
  94. package/docs/DOGFOOD-V4-NPM-FINDINGS.md +157 -0
  95. package/docs/DOGFOOD-V4-VSCODE-FINDINGS.md +135 -0
  96. package/docs/FIGMA-INTEGRATION.md +222 -0
  97. package/docs/MCP-INTEGRATION.md +243 -0
  98. package/docs/MIGRATION-v4.md +121 -0
  99. package/docs/PLUGIN-PACKAGING.md +240 -0
  100. package/docs/PRODUCT-READINESS.md +66 -0
  101. package/docs/QUICKSTART.ko.md +178 -0
  102. package/docs/QUICKSTART.md +179 -0
  103. package/docs/RELEASE-CHECKLIST.md +292 -0
  104. package/docs/ROADMAP.md +19495 -0
  105. package/docs/SESSION-LOG.md +940 -0
  106. package/docs/TOKEN-SYNC.md +237 -0
  107. package/docs/USING.ko.md +206 -0
  108. package/docs/USING.md +218 -0
  109. package/docs/WEBSITE-IMPROVEMENT.ko.md +75 -0
  110. package/docs/WEBSITE-IMPROVEMENT.md +89 -0
  111. package/docs/announcements/README.md +56 -0
  112. package/docs/announcements/dev-to-korea.md +206 -0
  113. package/docs/announcements/hashnode-post.ko.md +232 -0
  114. package/docs/announcements/okky-post.ko.md +158 -0
  115. package/docs/announcements/press-kit.md +101 -0
  116. package/docs/announcements/reddit-r-korea.md +196 -0
  117. package/docs/announcements/show-hn.md +114 -0
  118. package/docs/announcements/twitter-thread.md +255 -0
  119. package/docs/external-status.md +34 -0
  120. package/docs/integrations/aider-walkthrough.ko.md +275 -0
  121. package/docs/integrations/aider-walkthrough.md +274 -0
  122. package/docs/integrations/codex-walkthrough.ko.md +297 -0
  123. package/docs/integrations/codex-walkthrough.md +297 -0
  124. package/docs/integrations/cursor-walkthrough.ko.md +281 -0
  125. package/docs/integrations/cursor-walkthrough.md +284 -0
  126. package/docs/integrations/design-ai-mcp-server.md +169 -0
  127. package/docs/integrations/figma-mcp.md +149 -0
  128. package/docs/integrations/github-mcp.md +178 -0
  129. package/docs/integrations/linear-mcp.md +215 -0
  130. package/docs/integrations/notion-mcp.md +174 -0
  131. package/docs/integrations/sdk-walkthrough.ko.md +375 -0
  132. package/docs/integrations/sdk-walkthrough.md +375 -0
  133. package/docs/integrations/slack-mcp.md +208 -0
  134. package/docs/integrations/vscode-walkthrough.ko.md +202 -0
  135. package/docs/integrations/vscode-walkthrough.md +205 -0
  136. package/docs/requirements.txt +16 -0
  137. package/docs/site-overrides/extra.css +83 -0
  138. package/docs/site-overrides/favicon.svg +4 -0
  139. package/docs/site-overrides/logo.svg +10 -0
  140. package/docs/site-overrides/main.html +18 -0
  141. package/docs/website-console/app.js +2540 -0
  142. package/docs/website-console/index.html +24 -0
  143. package/docs/website-console/styles.css +975 -0
  144. package/examples/README.md +252 -0
  145. package/examples/cases/dogfood-v4-korean-hr-onboarding.md +356 -0
  146. package/examples/component-accordion-actions.md +153 -0
  147. package/examples/component-accordion-details.md +147 -0
  148. package/examples/component-accordion-summary.md +180 -0
  149. package/examples/component-accordion.md +229 -0
  150. package/examples/component-account-card.md +284 -0
  151. package/examples/component-address-input.md +260 -0
  152. package/examples/component-affix.md +190 -0
  153. package/examples/component-alert-dialog.md +210 -0
  154. package/examples/component-alert-title.md +77 -0
  155. package/examples/component-alert.md +192 -0
  156. package/examples/component-amount-input.md +278 -0
  157. package/examples/component-anchor.md +198 -0
  158. package/examples/component-app-bar.md +249 -0
  159. package/examples/component-aspect-ratio.md +156 -0
  160. package/examples/component-auto-complete.md +199 -0
  161. package/examples/component-avatar-group.md +170 -0
  162. package/examples/component-avatar.md +191 -0
  163. package/examples/component-back-top.md +123 -0
  164. package/examples/component-backdrop.md +148 -0
  165. package/examples/component-badge.md +181 -0
  166. package/examples/component-banner.md +237 -0
  167. package/examples/component-biometric-gate.md +281 -0
  168. package/examples/component-blockquote.md +153 -0
  169. package/examples/component-border-beam.md +207 -0
  170. package/examples/component-bottom-navigation.md +226 -0
  171. package/examples/component-box.md +112 -0
  172. package/examples/component-breadcrumb.md +222 -0
  173. package/examples/component-button-base.md +190 -0
  174. package/examples/component-button-group.md +117 -0
  175. package/examples/component-button.md +213 -0
  176. package/examples/component-calendar.md +280 -0
  177. package/examples/component-callout.md +131 -0
  178. package/examples/component-card-actions.md +101 -0
  179. package/examples/component-card-content.md +90 -0
  180. package/examples/component-card-header.md +122 -0
  181. package/examples/component-card-media.md +79 -0
  182. package/examples/component-card.md +233 -0
  183. package/examples/component-carousel.md +266 -0
  184. package/examples/component-cascader.md +135 -0
  185. package/examples/component-category-picker.md +271 -0
  186. package/examples/component-chart.md +237 -0
  187. package/examples/component-chat-interface.md +399 -0
  188. package/examples/component-checkbox.md +149 -0
  189. package/examples/component-click-away-listener.md +87 -0
  190. package/examples/component-code.md +213 -0
  191. package/examples/component-collapsible.md +219 -0
  192. package/examples/component-color-picker.md +110 -0
  193. package/examples/component-combobox.md +267 -0
  194. package/examples/component-command.md +299 -0
  195. package/examples/component-config-provider.md +190 -0
  196. package/examples/component-context-menu.md +179 -0
  197. package/examples/component-css-baseline.md +148 -0
  198. package/examples/component-date-picker.md +249 -0
  199. package/examples/component-descriptions.md +242 -0
  200. package/examples/component-dialog-actions.md +111 -0
  201. package/examples/component-dialog-content-text.md +76 -0
  202. package/examples/component-dialog-content.md +105 -0
  203. package/examples/component-dialog-title.md +104 -0
  204. package/examples/component-dialog.md +176 -0
  205. package/examples/component-divider.md +182 -0
  206. package/examples/component-doc-page.md +217 -0
  207. package/examples/component-drawer.md +257 -0
  208. package/examples/component-dropdown.md +220 -0
  209. package/examples/component-email-layout.md +253 -0
  210. package/examples/component-empty-state.md +269 -0
  211. package/examples/component-empty.md +172 -0
  212. package/examples/component-fade.md +87 -0
  213. package/examples/component-feature-grid.md +201 -0
  214. package/examples/component-field.md +266 -0
  215. package/examples/component-filled-input.md +114 -0
  216. package/examples/component-flex.md +117 -0
  217. package/examples/component-float-button.md +214 -0
  218. package/examples/component-form-control-label.md +134 -0
  219. package/examples/component-form-control.md +113 -0
  220. package/examples/component-form-controls.md +251 -0
  221. package/examples/component-form-group.md +86 -0
  222. package/examples/component-form-helper-text.md +95 -0
  223. package/examples/component-form-label.md +98 -0
  224. package/examples/component-form.md +291 -0
  225. package/examples/component-game-hud.md +362 -0
  226. package/examples/component-game-menu.md +327 -0
  227. package/examples/component-grid.md +140 -0
  228. package/examples/component-grow.md +79 -0
  229. package/examples/component-hero-block.md +252 -0
  230. package/examples/component-hover-card.md +211 -0
  231. package/examples/component-icon-button.md +142 -0
  232. package/examples/component-icon.md +102 -0
  233. package/examples/component-illustration.md +280 -0
  234. package/examples/component-image-list.md +107 -0
  235. package/examples/component-image.md +282 -0
  236. package/examples/component-input-adornment.md +101 -0
  237. package/examples/component-input-base.md +134 -0
  238. package/examples/component-input-number.md +141 -0
  239. package/examples/component-input-otp.md +271 -0
  240. package/examples/component-input.md +213 -0
  241. package/examples/component-item.md +243 -0
  242. package/examples/component-kbd.md +197 -0
  243. package/examples/component-krw-amount.md +219 -0
  244. package/examples/component-label.md +118 -0
  245. package/examples/component-layout.md +217 -0
  246. package/examples/component-link.md +223 -0
  247. package/examples/component-list-item-avatar.md +72 -0
  248. package/examples/component-list-item-button.md +139 -0
  249. package/examples/component-list-item-icon.md +82 -0
  250. package/examples/component-list-item-text.md +98 -0
  251. package/examples/component-list-item.md +116 -0
  252. package/examples/component-list-subheader.md +70 -0
  253. package/examples/component-list.md +198 -0
  254. package/examples/component-loading-button.md +125 -0
  255. package/examples/component-loading-sequence.md +254 -0
  256. package/examples/component-lottie-player.md +279 -0
  257. package/examples/component-masonry.md +191 -0
  258. package/examples/component-mentions.md +189 -0
  259. package/examples/component-menu-item.md +102 -0
  260. package/examples/component-menu-list.md +98 -0
  261. package/examples/component-menu.md +139 -0
  262. package/examples/component-menubar.md +259 -0
  263. package/examples/component-message.md +162 -0
  264. package/examples/component-mobile-stepper.md +155 -0
  265. package/examples/component-modal.md +220 -0
  266. package/examples/component-navigation-menu.md +295 -0
  267. package/examples/component-notification.md +166 -0
  268. package/examples/component-otp-countdown.md +245 -0
  269. package/examples/component-outlined-input.md +145 -0
  270. package/examples/component-page-transition.md +281 -0
  271. package/examples/component-pagination.md +226 -0
  272. package/examples/component-paper.md +199 -0
  273. package/examples/component-pass-auth.md +265 -0
  274. package/examples/component-payment-brand-button.md +253 -0
  275. package/examples/component-payment-method-selector.md +272 -0
  276. package/examples/component-payment-receipt.md +277 -0
  277. package/examples/component-popconfirm.md +144 -0
  278. package/examples/component-popover.md +239 -0
  279. package/examples/component-popper.md +129 -0
  280. package/examples/component-pricing-cards.md +247 -0
  281. package/examples/component-progress.md +195 -0
  282. package/examples/component-qr-code.md +201 -0
  283. package/examples/component-radio.md +167 -0
  284. package/examples/component-rate.md +202 -0
  285. package/examples/component-resizable.md +163 -0
  286. package/examples/component-result.md +270 -0
  287. package/examples/component-scroll-area.md +199 -0
  288. package/examples/component-scroll-reveal.md +320 -0
  289. package/examples/component-segmented.md +178 -0
  290. package/examples/component-select.md +258 -0
  291. package/examples/component-separator.md +177 -0
  292. package/examples/component-sheet.md +277 -0
  293. package/examples/component-sidebar.md +257 -0
  294. package/examples/component-skeleton.md +178 -0
  295. package/examples/component-slide.md +89 -0
  296. package/examples/component-slider.md +208 -0
  297. package/examples/component-snackbar-content.md +92 -0
  298. package/examples/component-snackbar.md +121 -0
  299. package/examples/component-sonner.md +165 -0
  300. package/examples/component-space.md +125 -0
  301. package/examples/component-spatial-locomotion.md +373 -0
  302. package/examples/component-spatial-panel.md +330 -0
  303. package/examples/component-speed-dial-action.md +78 -0
  304. package/examples/component-speed-dial.md +177 -0
  305. package/examples/component-spin.md +173 -0
  306. package/examples/component-spinner.md +204 -0
  307. package/examples/component-splitter.md +210 -0
  308. package/examples/component-stack.md +130 -0
  309. package/examples/component-statistic.md +282 -0
  310. package/examples/component-step-button.md +157 -0
  311. package/examples/component-step-connector.md +157 -0
  312. package/examples/component-step-content.md +121 -0
  313. package/examples/component-step-icon.md +115 -0
  314. package/examples/component-step-label.md +101 -0
  315. package/examples/component-step.md +84 -0
  316. package/examples/component-steps.md +264 -0
  317. package/examples/component-stock-chart.md +251 -0
  318. package/examples/component-swipeable-drawer.md +149 -0
  319. package/examples/component-switch.md +99 -0
  320. package/examples/component-tab-scroll-button.md +180 -0
  321. package/examples/component-tab.md +120 -0
  322. package/examples/component-table-body.md +82 -0
  323. package/examples/component-table-cell.md +118 -0
  324. package/examples/component-table-container.md +75 -0
  325. package/examples/component-table-footer.md +72 -0
  326. package/examples/component-table-head.md +78 -0
  327. package/examples/component-table-pagination.md +137 -0
  328. package/examples/component-table-row.md +113 -0
  329. package/examples/component-table-sort-label.md +109 -0
  330. package/examples/component-table.md +202 -0
  331. package/examples/component-tabs.md +184 -0
  332. package/examples/component-tag-badge.md +309 -0
  333. package/examples/component-tag.md +102 -0
  334. package/examples/component-testimonial-carousel.md +218 -0
  335. package/examples/component-textarea-autosize.md +114 -0
  336. package/examples/component-textarea.md +173 -0
  337. package/examples/component-time-picker.md +205 -0
  338. package/examples/component-timeline.md +170 -0
  339. package/examples/component-toast.md +224 -0
  340. package/examples/component-toggle-button.md +129 -0
  341. package/examples/component-toggle.md +220 -0
  342. package/examples/component-toolbar.md +104 -0
  343. package/examples/component-tooltip.md +178 -0
  344. package/examples/component-tour.md +176 -0
  345. package/examples/component-transaction-list-item.md +243 -0
  346. package/examples/component-transfer.md +156 -0
  347. package/examples/component-tree-select.md +202 -0
  348. package/examples/component-tree.md +297 -0
  349. package/examples/component-typography.md +215 -0
  350. package/examples/component-upload.md +295 -0
  351. package/examples/component-video-hero.md +409 -0
  352. package/examples/component-video-player.md +340 -0
  353. package/examples/component-voice-input.md +408 -0
  354. package/examples/component-watermark.md +217 -0
  355. package/examples/component-zoom.md +92 -0
  356. package/examples/doc-explanation-example.md +196 -0
  357. package/examples/doc-how-to-example.md +205 -0
  358. package/examples/doc-tutorial-example.md +162 -0
  359. package/examples/dogfood-korean-fintech-system.md +433 -0
  360. package/examples/email-transactional-example.md +259 -0
  361. package/examples/palette-saas-violet.md +235 -0
  362. package/examples/print-business-card-spec.md +205 -0
  363. package/examples/print-packaging-spec.md +285 -0
  364. package/examples/report-example.md +228 -0
  365. package/examples/slide-deck-example.md +237 -0
  366. package/examples/website-improvement-report.md +128 -0
  367. package/examples/website-improvement-workspace.json +126 -0
  368. package/install.sh +189 -0
  369. package/knowledge/COVERAGE.md +740 -0
  370. package/knowledge/PRINCIPLES.md +108 -0
  371. package/knowledge/a11y/contrast.md +70 -0
  372. package/knowledge/a11y/keyboard-and-focus.md +108 -0
  373. package/knowledge/colors/color-theory.md +90 -0
  374. package/knowledge/colors/mui-palette-structure.md +105 -0
  375. package/knowledge/colors/palettes-by-product-type.md +876 -0
  376. package/knowledge/components/INDEX.md +231 -0
  377. package/knowledge/components/index.json +1470 -0
  378. package/knowledge/components/shadcn-registry.md +159 -0
  379. package/knowledge/conversational/ai-chat-interfaces.md +323 -0
  380. package/knowledge/conversational/chatbot-design.md +312 -0
  381. package/knowledge/conversational/conversational-ui-fundamentals.md +299 -0
  382. package/knowledge/conversational/korean-voice-conventions.md +281 -0
  383. package/knowledge/conversational/voice-ui-patterns.md +297 -0
  384. package/knowledge/design-tokens/ant-design.md +124 -0
  385. package/knowledge/design-tokens/material-3.md +235 -0
  386. package/knowledge/design-tokens/polaris-and-carbon.md +231 -0
  387. package/knowledge/design-tokens/tailwind-v4.md +284 -0
  388. package/knowledge/game-ui/game-accessibility.md +317 -0
  389. package/knowledge/game-ui/game-ui-fundamentals.md +281 -0
  390. package/knowledge/game-ui/hud-design.md +324 -0
  391. package/knowledge/game-ui/korean-gaming-conventions.md +312 -0
  392. package/knowledge/game-ui/menu-systems.md +388 -0
  393. package/knowledge/i18n/korean-app-store-visual.md +223 -0
  394. package/knowledge/i18n/korean-document-style.md +301 -0
  395. package/knowledge/i18n/korean-payments.md +211 -0
  396. package/knowledge/i18n/korean-product-conventions.md +96 -0
  397. package/knowledge/i18n/korean-publishing.md +139 -0
  398. package/knowledge/i18n/korean-typography.md +123 -0
  399. package/knowledge/icons/curated-sets.md +225 -0
  400. package/knowledge/illustration/hero-illustrations.md +234 -0
  401. package/knowledge/illustration/illustration-systems.md +221 -0
  402. package/knowledge/illustration/mascot-design.md +208 -0
  403. package/knowledge/illustration/spot-illustrations.md +246 -0
  404. package/knowledge/illustration/svg-optimization.md +308 -0
  405. package/knowledge/layout/spacing-and-grid.md +119 -0
  406. package/knowledge/motion/app-loading-sequences.md +277 -0
  407. package/knowledge/motion/choreography-depth.md +297 -0
  408. package/knowledge/motion/marketing-motion.md +223 -0
  409. package/knowledge/motion/micro-interactions.md +266 -0
  410. package/knowledge/motion/motion-tools.md +281 -0
  411. package/knowledge/motion/principles.md +126 -0
  412. package/knowledge/patterns/auth-flow-design.md +316 -0
  413. package/knowledge/patterns/b2b-onboarding-flows.md +182 -0
  414. package/knowledge/patterns/brand-identity.md +238 -0
  415. package/knowledge/patterns/brand-references.md +97 -0
  416. package/knowledge/patterns/chart-color-encoding.md +269 -0
  417. package/knowledge/patterns/chart-types.md +344 -0
  418. package/knowledge/patterns/dashboard-composition.md +299 -0
  419. package/knowledge/patterns/design-system-qa.md +356 -0
  420. package/knowledge/patterns/document-typography.md +248 -0
  421. package/knowledge/patterns/email-design.md +338 -0
  422. package/knowledge/patterns/empty-states.md +263 -0
  423. package/knowledge/patterns/error-states.md +318 -0
  424. package/knowledge/patterns/form-design.md +237 -0
  425. package/knowledge/patterns/information-architecture.md +341 -0
  426. package/knowledge/patterns/landing-hero-design.md +283 -0
  427. package/knowledge/patterns/landing-page-patterns.md +681 -0
  428. package/knowledge/patterns/list-and-feed.md +371 -0
  429. package/knowledge/patterns/mobile-navigation.md +278 -0
  430. package/knowledge/patterns/money-and-amount.md +301 -0
  431. package/knowledge/patterns/onboarding.md +300 -0
  432. package/knowledge/patterns/pricing-page-design.md +261 -0
  433. package/knowledge/patterns/realtime-data.md +280 -0
  434. package/knowledge/patterns/report-design.md +330 -0
  435. package/knowledge/patterns/search-ux.md +373 -0
  436. package/knowledge/patterns/settings-page.md +325 -0
  437. package/knowledge/patterns/slide-deck-design.md +316 -0
  438. package/knowledge/patterns/styles-catalog.md +2599 -0
  439. package/knowledge/patterns/technical-writing.md +306 -0
  440. package/knowledge/patterns/ui-reasoning.md +1853 -0
  441. package/knowledge/patterns/ux-guidelines.md +1454 -0
  442. package/knowledge/platforms/react-native.md +395 -0
  443. package/knowledge/print/brochures-and-flyers.md +276 -0
  444. package/knowledge/print/korean-print-conventions.md +284 -0
  445. package/knowledge/print/packaging.md +321 -0
  446. package/knowledge/print/print-fundamentals.md +238 -0
  447. package/knowledge/print/signage-and-posters.md +235 -0
  448. package/knowledge/print/stationery.md +262 -0
  449. package/knowledge/spatial/ar-patterns.md +253 -0
  450. package/knowledge/spatial/comfort-and-accessibility.md +245 -0
  451. package/knowledge/spatial/spatial-design-fundamentals.md +346 -0
  452. package/knowledge/spatial/spatial-ui-elements.md +343 -0
  453. package/knowledge/spatial/vr-patterns.md +302 -0
  454. package/knowledge/typography/font-pairings.md +332 -0
  455. package/knowledge/typography/mui-type-scale.md +57 -0
  456. package/knowledge/typography/type-scale-fundamentals.md +105 -0
  457. package/knowledge/video/in-product-video.md +277 -0
  458. package/knowledge/video/korean-video-conventions.md +247 -0
  459. package/knowledge/video/marketing-video.md +258 -0
  460. package/knowledge/video/social-and-short-form.md +257 -0
  461. package/knowledge/video/video-fundamentals.md +296 -0
  462. package/package.json +106 -0
  463. package/skills/README.md +39 -0
  464. package/skills/color-palette/PLAYBOOK.md +175 -0
  465. package/skills/color-palette/SKILL.md +6 -0
  466. package/skills/color-palette/TEMPLATE.md +103 -0
  467. package/skills/component-spec-writer/PLAYBOOK.md +169 -0
  468. package/skills/component-spec-writer/SKILL.md +6 -0
  469. package/skills/component-spec-writer/TEMPLATE.md +115 -0
  470. package/skills/conversational-ui-designer/PLAYBOOK.md +231 -0
  471. package/skills/conversational-ui-designer/SKILL.md +6 -0
  472. package/skills/design-broadcast/PLAYBOOK.md +146 -0
  473. package/skills/design-broadcast/SKILL.md +6 -0
  474. package/skills/design-critique/PLAYBOOK.md +137 -0
  475. package/skills/design-critique/SKILL.md +6 -0
  476. package/skills/design-pr-review/PLAYBOOK.md +171 -0
  477. package/skills/design-pr-review/SKILL.md +6 -0
  478. package/skills/design-system-builder/PLAYBOOK.md +218 -0
  479. package/skills/design-system-builder/SKILL.md +6 -0
  480. package/skills/design-system-qa/PLAYBOOK.md +163 -0
  481. package/skills/design-system-qa/SKILL.md +6 -0
  482. package/skills/document-author/PLAYBOOK.md +167 -0
  483. package/skills/document-author/SKILL.md +6 -0
  484. package/skills/figma-token-sync/PLAYBOOK.md +149 -0
  485. package/skills/figma-token-sync/SKILL.md +6 -0
  486. package/skills/game-ui-designer/PLAYBOOK.md +209 -0
  487. package/skills/game-ui-designer/SKILL.md +6 -0
  488. package/skills/handoff-spec/PLAYBOOK.md +170 -0
  489. package/skills/handoff-spec/SKILL.md +6 -0
  490. package/skills/illustration-designer/PLAYBOOK.md +166 -0
  491. package/skills/illustration-designer/SKILL.md +6 -0
  492. package/skills/motion-designer/PLAYBOOK.md +223 -0
  493. package/skills/motion-designer/SKILL.md +6 -0
  494. package/skills/print-designer/PLAYBOOK.md +209 -0
  495. package/skills/print-designer/SKILL.md +6 -0
  496. package/skills/slide-deck-author/PLAYBOOK.md +198 -0
  497. package/skills/slide-deck-author/SKILL.md +6 -0
  498. package/skills/spatial-designer/PLAYBOOK.md +238 -0
  499. package/skills/spatial-designer/SKILL.md +6 -0
  500. package/skills/ux-audit/PLAYBOOK.md +142 -0
  501. package/skills/ux-audit/SKILL.md +6 -0
  502. package/skills/video-designer/PLAYBOOK.md +240 -0
  503. package/skills/video-designer/SKILL.md +6 -0
  504. package/skills/website-improvement/PLAYBOOK.md +118 -0
  505. package/skills/website-improvement/SKILL.md +6 -0
  506. package/skills/website-improvement/TEMPLATE.md +103 -0
  507. package/tools/audit/changelog-generate.py +176 -0
  508. package/tools/audit/check-coverage.py +483 -0
  509. package/tools/audit/doctor_assertions.py +256 -0
  510. package/tools/audit/example-qa.py +108 -0
  511. package/tools/audit/frontmatter-check.py +199 -0
  512. package/tools/audit/integration-check.py +95 -0
  513. package/tools/audit/korean-copy-check.py +161 -0
  514. package/tools/audit/link-check.py +146 -0
  515. package/tools/audit/local-ci.py +558 -0
  516. package/tools/audit/package-contents.py +723 -0
  517. package/tools/audit/package-smoke.py +22443 -0
  518. package/tools/audit/raw-hex-check.py +252 -0
  519. package/tools/audit/registry-smoke.py +8188 -0
  520. package/tools/audit/release-metadata.py +9832 -0
  521. package/tools/audit/run-all.py +351 -0
  522. package/tools/audit/smoke_assertions.py +12742 -0
  523. package/tools/audit/stability-review.py +332 -0
  524. package/tools/audit/stale-check.py +156 -0
  525. package/tools/migrations/add-version-frontmatter.py +132 -0
  526. package/tools/migrations/bump-last-updated.py +131 -0
  527. package/tools/migrations/promote-stability.py +172 -0
  528. package/tools/preview/README.md +58 -0
  529. package/tools/preview/render-tokens.py +454 -0
@@ -0,0 +1,235 @@
1
+ # Palette: B2B SaaS — violet primary
2
+
3
+ > Seed: `#7C3AED` (violet-600) · Mood: modern, trustworthy, mildly creative · Target: Tailwind v4 + shadcn-ui CSS vars
4
+ > Generated by: `skills/color-palette` skill
5
+
6
+ ## Why this palette
7
+
8
+ A B2B SaaS analytics product needs to read as **competent** (cool blue-violet hue), **modern** (contemporary chroma) and **calm** (low-chroma neutrals). Violet over blue differentiates from the default-Tailwind-blue trap that 60% of SaaS sites are stuck in, while staying in the "trustworthy cool" family.
9
+
10
+ Tradeoff: violet at chroma 0.28 is slightly punchier than the safest indigo. Acceptable for a product that wants brand recognition; if "boring/safe" is the goal, swap to `indigo-600` (`#4F46E5`).
11
+
12
+ ## Tokens
13
+
14
+ ### Brand ramps (OKLCH-derived)
15
+
16
+ | Step | Primary (violet) | Accent (amber) | Neutral (cool gray) |
17
+ | --- | --- | --- | --- |
18
+ | 50 | `#F5F3FF` | `#FFFBEB` | `#F8FAFC` |
19
+ | 100 | `#EDE9FE` | `#FEF3C7` | `#F1F5F9` |
20
+ | 200 | `#DDD6FE` | `#FDE68A` | `#E2E8F0` |
21
+ | 300 | `#C4B5FD` | `#FCD34D` | `#CBD5E1` |
22
+ | 400 | `#A78BFA` | `#FBBF24` | `#94A3B8` |
23
+ | 500 | `#8B5CF6` | `#F59E0B` | `#64748B` |
24
+ | 600 | **`#7C3AED`** | `#D97706` | `#475569` |
25
+ | 700 | `#6D28D9` | `#B45309` | `#334155` |
26
+ | 800 | `#5B21B6` | `#92400E` | `#1E293B` |
27
+ | 900 | `#4C1D95` | `#78350F` | `#0F172A` |
28
+ | 950 | `#2E1065` | `#451A03` | `#020617` |
29
+
30
+ (Sourced from Tailwind v4 OKLCH-derived ramps — `violet`, `amber`, `slate`. Each step is computed in OKLCH for perceptually uniform lightness.)
31
+
32
+ ### Semantic aliases — light mode
33
+
34
+ | Token | Value | Notes |
35
+ | --- | --- | --- |
36
+ | `--color-primary-default` | `#7C3AED` | violet-600 — 5.27:1 on white ✓ |
37
+ | `--color-primary-hover` | `#6D28D9` | violet-700 |
38
+ | `--color-primary-active` | `#5B21B6` | violet-800 |
39
+ | `--color-primary-subtle-bg` | `#F5F3FF` | violet-50 — for hover backgrounds, badges |
40
+ | `--color-on-primary` | `#FFFFFF` | white text on primary |
41
+ | `--color-bg-default` | `#FFFFFF` | |
42
+ | `--color-bg-elevated` | `#F8FAFC` | slate-50 — cards, popovers |
43
+ | `--color-bg-subtle` | `#F1F5F9` | slate-100 — section backgrounds |
44
+ | `--color-text-primary` | `#0F172A` | slate-900 — 18.7:1 on white |
45
+ | `--color-text-secondary` | `#475569` | slate-600 — 7.4:1 |
46
+ | `--color-text-tertiary` | `#64748B` | slate-500 — 4.9:1 (passes AA body) |
47
+ | `--color-text-disabled` | `#94A3B8` | slate-400 — 2.7:1 (intentional, with `aria-disabled`) |
48
+ | `--color-border-default` | `#E2E8F0` | slate-200 |
49
+ | `--color-border-strong` | `#CBD5E1` | slate-300 |
50
+ | `--color-focus-ring` | `#A78BFA` | violet-400 — clears 3:1 on white AND on violet-600 |
51
+ | `--color-success` | `#16A34A` | green-600 — 4.5:1 on white |
52
+ | `--color-success-subtle-bg` | `#F0FDF4` | green-50 |
53
+ | `--color-warning` | `#D97706` | amber-600 — 4.7:1 on white |
54
+ | `--color-warning-subtle-bg` | `#FFFBEB` | amber-50 |
55
+ | `--color-error` | `#DC2626` | red-600 — 4.8:1 on white |
56
+ | `--color-error-subtle-bg` | `#FEF2F2` | red-50 |
57
+ | `--color-info` | `#7C3AED` | matches primary |
58
+
59
+ ### Semantic aliases — dark mode
60
+
61
+ Recomputed, not inverted. Increased chroma on accents (low-light eye is less saturated). Background uses near-black with cool tint.
62
+
63
+ | Token | Value | Notes |
64
+ | --- | --- | --- |
65
+ | `--color-primary-default` | `#A78BFA` | violet-400 — reads against dark bg |
66
+ | `--color-primary-hover` | `#C4B5FD` | violet-300 |
67
+ | `--color-primary-active` | `#DDD6FE` | violet-200 |
68
+ | `--color-primary-subtle-bg` | `#2E1065` | violet-950 |
69
+ | `--color-on-primary` | `#1E1B4B` | very dark violet |
70
+ | `--color-bg-default` | `#020617` | slate-950 |
71
+ | `--color-bg-elevated` | `#0F172A` | slate-900 — for cards |
72
+ | `--color-bg-subtle` | `#1E293B` | slate-800 |
73
+ | `--color-text-primary` | `#F8FAFC` | slate-50 — 17.4:1 on bg-default |
74
+ | `--color-text-secondary` | `#CBD5E1` | slate-300 — 11.6:1 |
75
+ | `--color-text-tertiary` | `#94A3B8` | slate-400 — 6.5:1 |
76
+ | `--color-text-disabled` | `#64748B` | slate-500 — 3.4:1 |
77
+ | `--color-border-default` | `#334155` | slate-700 |
78
+ | `--color-border-strong` | `#475569` | slate-600 |
79
+ | `--color-focus-ring` | `#A78BFA` | violet-400 |
80
+ | `--color-success` | `#4ADE80` | green-400 |
81
+ | `--color-warning` | `#FBBF24` | amber-400 |
82
+ | `--color-error` | `#F87171` | red-400 |
83
+ | `--color-info` | `#A78BFA` | violet-400 |
84
+
85
+ ## Contrast matrix (light)
86
+
87
+ | Pair | Ratio | AA body | AA UI | AAA |
88
+ | --- | --- | --- | --- | --- |
89
+ | text-primary on bg-default | 18.7:1 | ✓ | — | ✓ |
90
+ | text-secondary on bg-default | 7.4:1 | ✓ | — | ✓ |
91
+ | text-tertiary on bg-default | 4.9:1 | ✓ | — | — |
92
+ | primary-default on bg-default | 5.27:1 | ✓ | — | — |
93
+ | on-primary on primary-default | 8.0:1 | ✓ | — | ✓ |
94
+ | border-default on bg-default | 1.6:1 | — | (decorative) | — |
95
+ | border-strong on bg-default | 2.0:1 | — | (decorative) | — |
96
+ | focus-ring on bg-default | 3.4:1 | — | ✓ | — |
97
+ | focus-ring on primary-default | 3.1:1 | — | ✓ | — |
98
+ | success on bg-default | 4.5:1 | ✓ | — | — |
99
+ | warning on bg-default | 4.7:1 | ✓ | — | — |
100
+ | error on bg-default | 4.8:1 | ✓ | — | — |
101
+
102
+ ## Contrast matrix (dark)
103
+
104
+ | Pair | Ratio | AA body | AA UI |
105
+ | --- | --- | --- | --- |
106
+ | text-primary on bg-default | 17.4:1 | ✓ | — |
107
+ | text-secondary on bg-default | 11.6:1 | ✓ | — |
108
+ | text-tertiary on bg-default | 6.5:1 | ✓ | — |
109
+ | primary-default on bg-default | 6.7:1 | ✓ | — |
110
+ | on-primary on primary-default | 8.6:1 | ✓ | — |
111
+ | border-default on bg-default | 4.0:1 | — | ✓ |
112
+ | focus-ring on bg-default | 8.7:1 | — | ✓ |
113
+
114
+ ## Output: Tailwind v4
115
+
116
+ ```css
117
+ @import "tailwindcss";
118
+
119
+ @theme {
120
+ /* Brand */
121
+ --color-primary-50: oklch(0.969 0.016 293.756);
122
+ --color-primary-100: oklch(0.943 0.029 294.588);
123
+ --color-primary-200: oklch(0.894 0.057 293.283);
124
+ --color-primary-300: oklch(0.811 0.111 293.571);
125
+ --color-primary-400: oklch(0.702 0.183 293.541);
126
+ --color-primary-500: oklch(0.606 0.250 292.717);
127
+ --color-primary-600: oklch(0.541 0.281 293.009);
128
+ --color-primary-700: oklch(0.491 0.270 292.581);
129
+ --color-primary-800: oklch(0.432 0.232 292.759);
130
+ --color-primary-900: oklch(0.381 0.176 293.745);
131
+ --color-primary-950: oklch(0.283 0.141 291.089);
132
+
133
+ /* Accent */
134
+ --color-accent-50: oklch(0.987 0.022 95.277);
135
+ --color-accent-500: oklch(0.769 0.188 70.080);
136
+ --color-accent-600: oklch(0.666 0.179 58.318);
137
+
138
+ /* Neutrals */
139
+ --color-neutral-50: oklch(0.984 0.003 247.858);
140
+ --color-neutral-200: oklch(0.929 0.013 255.508);
141
+ --color-neutral-500: oklch(0.554 0.046 257.417);
142
+ --color-neutral-900: oklch(0.208 0.042 265.755);
143
+ --color-neutral-950: oklch(0.129 0.042 264.695);
144
+ }
145
+ ```
146
+
147
+ ## Output: shadcn-ui CSS vars
148
+
149
+ ```css
150
+ :root {
151
+ --background: 0 0% 100%;
152
+ --foreground: 222 47% 11%;
153
+ --card: 210 40% 98%;
154
+ --card-foreground: 222 47% 11%;
155
+ --popover: 0 0% 100%;
156
+ --popover-foreground: 222 47% 11%;
157
+ --primary: 263 70% 50%;
158
+ --primary-foreground: 0 0% 100%;
159
+ --secondary: 210 40% 96%;
160
+ --secondary-foreground: 222 47% 11%;
161
+ --muted: 210 40% 96%;
162
+ --muted-foreground: 215 16% 47%;
163
+ --accent: 32 95% 44%;
164
+ --accent-foreground: 0 0% 100%;
165
+ --destructive: 0 72% 51%;
166
+ --destructive-foreground: 0 0% 100%;
167
+ --border: 214 32% 91%;
168
+ --input: 214 32% 91%;
169
+ --ring: 258 90% 66%;
170
+ --radius: 0.5rem;
171
+ }
172
+
173
+ .dark {
174
+ --background: 222 47% 4%;
175
+ --foreground: 210 40% 98%;
176
+ --card: 222 47% 11%;
177
+ --card-foreground: 210 40% 98%;
178
+ --primary: 258 90% 76%;
179
+ --primary-foreground: 247 67% 20%;
180
+ --muted: 217 33% 17%;
181
+ --muted-foreground: 215 20% 65%;
182
+ --accent: 38 92% 50%;
183
+ --destructive: 0 84% 70%;
184
+ --border: 217 33% 22%;
185
+ --ring: 258 90% 76%;
186
+ }
187
+ ```
188
+
189
+ ## Output: Style Dictionary (JSON)
190
+
191
+ ```json
192
+ {
193
+ "color": {
194
+ "brand": {
195
+ "primary": {
196
+ "50": { "value": "#F5F3FF", "type": "color" },
197
+ "500": { "value": "#8B5CF6", "type": "color" },
198
+ "600": { "value": "#7C3AED", "type": "color" },
199
+ "700": { "value": "#6D28D9", "type": "color" }
200
+ }
201
+ },
202
+ "semantic": {
203
+ "primary": { "value": "{color.brand.primary.600}", "type": "color" },
204
+ "primary-hover": { "value": "{color.brand.primary.700}", "type": "color" },
205
+ "text-primary": { "value": "#0F172A", "type": "color" },
206
+ "bg-default": { "value": "#FFFFFF", "type": "color" }
207
+ }
208
+ }
209
+ }
210
+ ```
211
+
212
+ ## Use guidance
213
+
214
+ - Reach for **primary** for: primary CTAs, links in body, active nav, brand emphasis. **One** primary CTA per surface.
215
+ - Reach for **accent (amber)** for: warning states, "new feature" callouts, secondary CTAs that should attract attention without competing with primary. Avoid using as a third brand color.
216
+ - Reach for **neutrals** for: every non-brand surface. Cards, borders, body text, dividers. The system should feel ~80% neutral.
217
+ - **Do not**: use `accent-600` and `primary-600` as adjacent buttons — they fight. If both are needed, make one ghost (transparent bg + colored text).
218
+ - **Do not**: use `text-disabled` for live content. Disabled means "not interactable now"; if it's readable info, use `text-tertiary`.
219
+
220
+ ## Responsive usage
221
+
222
+ - Mobile surfaces use `--color-bg-default` plus one primary action; avoid stacking primary and accent CTAs inside the same 360px viewport.
223
+ - Desktop dashboards may use `--color-bg-elevated` cards on `--color-bg-subtle`, but chart/category color usage still caps at the same palette rules.
224
+ - Breakpoint changes must not change semantic token meaning: `--color-primary-default` stays the primary action color on mobile, tablet, and desktop.
225
+
226
+ ## Figma variable sync
227
+
228
+ Figma variables mirror the semantic token layer, not the raw Tailwind ramp. Use `color.primary.default`, `color.text.primary`, and `color.bg.default` as the source of truth, then export/import through the token sync workflow so code and Figma stay aligned.
229
+
230
+ ## Cited sources
231
+
232
+ - [knowledge/colors/color-theory.md](../knowledge/colors/color-theory.md) — OKLCH rationale, ramp construction
233
+ - [knowledge/colors/palettes-by-product-type.md](../knowledge/colors/palettes-by-product-type.md) — SaaS row used as reference shape
234
+ - [knowledge/a11y/contrast.md](../knowledge/a11y/contrast.md) — WCAG ratios
235
+ - Tailwind v4 OKLCH ramps (verified upstream)
@@ -0,0 +1,205 @@
1
+ <!-- hand-written -->
2
+ # Print spec: business card (Korean 명함, premium tier)
3
+
4
+ > Worked example: spec for a Korean fintech startup's business card. Covers dimensions, paper, finish, color, typography, file delivery. Pairs with [`knowledge/print/stationery.md`](../knowledge/print/stationery.md) and [`knowledge/print/korean-print-conventions.md`](../knowledge/print/korean-print-conventions.md).
5
+
6
+ ## Brief
7
+
8
+ - **Brand**: Aera (가상의 한국 핀테크 스타트업)
9
+ - **Audience**: Korean B2B (banks, partners), occasional international
10
+ - **Tier**: Premium (founder + senior staff cards)
11
+ - **Quantity**: 200 per person, 5 people
12
+ - **Budget**: 200,000 KRW total budget for 1000 cards
13
+
14
+ ## Specs
15
+
16
+ | Spec | Value |
17
+ | --- | --- |
18
+ | **Size** | 90mm × 50mm (Korean 명함 standard) |
19
+ | **Bleed** | 3mm all sides → working size 96mm × 56mm |
20
+ | **Safe area** | 5mm inside trim → 80mm × 40mm |
21
+ | **Sides** | Double-sided (앞면 한국어, 뒷면 영어) |
22
+ | **Color mode** | CMYK + 1 spot Pantone (brand color) |
23
+ | **Paper** | 350gsm uncoated white card |
24
+ | **Finish** | Soft-touch lamination (front + back) |
25
+ | **Special** | Spot UV on logo (front only) |
26
+ | **File format** | PDF/X-1a, fonts outlined, 3mm bleed, crop marks |
27
+
28
+ ### Color tokens used
29
+
30
+ ```
31
+ --brand-primary: PANTONE 2728 C (CMYK 100/72/0/0 fallback)
32
+ --brand-text: 100% K (pure black)
33
+ --brand-meta: 80% K (dark gray for secondary)
34
+ ```
35
+
36
+ No other colors. Brand discipline.
37
+
38
+ ### Typography
39
+
40
+ | Element | Font | Size | Weight | Color |
41
+ | --- | --- | --- | --- | --- |
42
+ | 이름 (KR) | Pretendard | 11pt | 700 (Bold) | 100K |
43
+ | Name (EN) | Pretendard | 10pt | 700 | 100K |
44
+ | 직책 (KR) | Pretendard | 8.5pt | 500 | 80K |
45
+ | Title (EN) | Pretendard | 8pt | 500 | 80K |
46
+ | 회사 / Company | Pretendard | 8.5pt | 600 | Brand-primary |
47
+ | Contact info | Pretendard | 7.5pt | 400 | 80K |
48
+
49
+ Pretendard handles both Korean + English at the same size — no font-pair complexity.
50
+
51
+ ## Layout
52
+
53
+ ### Front (Korean primary)
54
+
55
+ ```
56
+ ┌─────────────────────────────────────┐
57
+ │ │
58
+ │ ▣ AERA │ ← logo, top-left, 14mm wide
59
+ │ │ spot UV applied here only
60
+ │ │
61
+ │ │
62
+ │ 김철수 │ ← 11pt 700
63
+ │ 대표 / CEO │ ← 8.5pt 500
64
+ │ │
65
+ │ ───── │ ← 0.5pt rule, brand-primary
66
+ │ │
67
+ │ Aera Inc. │ ← 8.5pt 600
68
+ │ 010-1234-5678 │ ← 7.5pt
69
+ │ cheolsu@aera.kr │
70
+ │ 서울시 강남구 테헤란로 ... │
71
+ │ │
72
+ └─────────────────────────────────────┘
73
+ ```
74
+
75
+ ### Back (English mirror)
76
+
77
+ ```
78
+ ┌─────────────────────────────────────┐
79
+ │ │
80
+ │ ▣ AERA │
81
+ │ │
82
+ │ │
83
+ │ │
84
+ │ Cheolsu Kim │
85
+ │ CEO │
86
+ │ │
87
+ │ ───── │
88
+ │ │
89
+ │ Aera Inc. │
90
+ │ +82 10 1234 5678 │
91
+ │ cheolsu@aera.kr │
92
+ │ Tehran-ro, Gangnam, Seoul │
93
+ │ │
94
+ └─────────────────────────────────────┘
95
+ ```
96
+
97
+ Back follows same grid; symmetric, brand-feeling consistent.
98
+
99
+ ## Production rationale
100
+
101
+ | Decision | Why |
102
+ | --- | --- |
103
+ | 90×50 (KR size) | Primary audience is Korean; KR wallets fit this size cleanly |
104
+ | 350gsm uncoated | Premium tactile feel without going luxury |
105
+ | Soft-touch lamination | Velvety, premium-modern feel; protects against finger oils |
106
+ | Spot UV on logo only | Tactile contrast (matte field + glossy logo); subtle premium signal |
107
+ | Pantone + CMYK | Pantone for brand-color consistency across runs; CMYK for everything else |
108
+ | Pretendard | Open-source, free commercial use, handles KR+EN, modern feel |
109
+ | Same font for KR and EN | Visual cohesion; avoids font-pairing complexity |
110
+ | Bilingual (KR front, EN back) | Primary audience KR; international fallback EN; not crammed onto one side |
111
+
112
+ ## Cost estimate
113
+
114
+ | Item | KRW |
115
+ | --- | --- |
116
+ | 1000 cards, 350gsm uncoated, soft-touch + spot UV | 150,000-180,000 |
117
+ | Press proof (1 card, color check) | 10,000-20,000 |
118
+ | Total | 160,000-200,000 |
119
+
120
+ Within budget.
121
+
122
+ ## Delivery
123
+
124
+ 1. **Final PDF/X-1a** with:
125
+ - 3mm bleed
126
+ - Crop marks
127
+ - Bleed marks
128
+ - Fonts outlined
129
+ - All images embedded
130
+ - CMYK + Pantone 2728 C as spot
131
+ - ICC profile: Japan Color 2001 Coated
132
+ 2. **Source AI file** (Adobe Illustrator native) for printer's reference
133
+ 3. **Spec sheet** (this document) included with delivery
134
+ 4. **Press proof approval** required before bulk run
135
+
136
+ ## Pre-press checklist
137
+
138
+ - [ ] Color mode: CMYK + 1 spot Pantone defined
139
+ - [ ] All RGB removed from artwork
140
+ - [ ] Pantone 2728 C defined as spot color (not converted to CMYK silently)
141
+ - [ ] All fonts outlined
142
+ - [ ] All images 300+ DPI at print size
143
+ - [ ] All images embedded (no linked external files)
144
+ - [ ] Bleed: 3mm all sides
145
+ - [ ] Crop marks + bleed marks visible in export
146
+ - [ ] Safe area: critical content stays 5mm inside trim
147
+ - [ ] Total ink coverage: ≤ 280%
148
+ - [ ] Black: pure 100K for body text (not rich black)
149
+ - [ ] PDF/X-1a export with embedded ICC
150
+ - [ ] Spell check: KR + EN
151
+ - [ ] Layout check at 100% size and 200% zoom
152
+ - [ ] Test print on 350gsm paper (home printer or quick-print) for layout sanity check
153
+
154
+ ## Press proof approval
155
+
156
+ Before approving the press proof:
157
+
158
+ - [ ] Color matches brand spec (Pantone 2728 C visually correct)
159
+ - [ ] Type is crisp; no fuzzy edges
160
+ - [ ] Spot UV is correctly positioned (only on logo)
161
+ - [ ] Soft-touch finish feels right
162
+ - [ ] Trim is precise; no white edges from cut tolerance
163
+ - [ ] Both sides align (symmetric layout)
164
+ - [ ] No printing artifacts (banding, ink spread)
165
+
166
+ Sign-off in writing only after all of the above.
167
+
168
+ ## Accessibility note for digital proofing
169
+
170
+ The printed card itself has no keyboard focus behavior, but the approval workflow still does. The PDF proof review page must keep the approve / request changes controls keyboard reachable, show a visible 2px focus ring with at least 3:1 contrast, and preserve logical tab order from front preview → back preview → approval actions.
171
+
172
+ Digital proof preview should be responsive across mobile and desktop review contexts, because founders often approve proofs from phones while printers inspect them on desktop. Screen reader labels must identify "front side", "back side", and "request changes" actions so non-visual approval is not blocked.
173
+
174
+ ## What can go wrong
175
+
176
+ - **Pantone mismatch** — spot color prints duller than expected. Solution: press proof before bulk; brand QC sign-off.
177
+ - **Soft-touch wears unevenly** — cheap soft-touch films flake. Solution: specify quality lamination film grade.
178
+ - **Spot UV registration off** — UV varnish slightly offset from logo edge. Solution: tight specification of UV registration tolerance.
179
+ - **Cut crops content** — content too close to safe area. Solution: keep critical content 5mm inside trim minimum.
180
+
181
+ ## Reorder considerations
182
+
183
+ This spec is good for 12-18 months. Reorder triggers:
184
+ - Personnel changes (anyone leaves, gets promoted, role changes).
185
+ - Address change.
186
+ - Brand color update.
187
+ - Logo update.
188
+
189
+ Reorders should match the original spec exactly. Don't make small "improvements" on each reorder — fragments the brand.
190
+
191
+ ## Don't
192
+
193
+ - Don't switch to international 85×55mm size to "save cost" — the savings are minimal and KR audiences notice.
194
+ - Don't add personal social handles (Twitter, Instagram) on B2B cards. Phone + email is enough.
195
+ - Don't use 9pt or smaller for Korean primary copy — Hangul becomes hard to read at small sizes.
196
+ - Don't print without press proof for premium tier — color shifts can be visible.
197
+ - Don't use rich black (60/40/40/100) for body text — registration shifts cause colored edges. Pure 100K only.
198
+
199
+ ## Cross-reference
200
+
201
+ - [`knowledge/print/print-fundamentals.md`](../knowledge/print/print-fundamentals.md) — CMYK, bleed, DPI
202
+ - [`knowledge/print/stationery.md`](../knowledge/print/stationery.md) — full stationery system
203
+ - [`knowledge/print/korean-print-conventions.md`](../knowledge/print/korean-print-conventions.md) — KR specifics
204
+ - [`knowledge/typography/font-pairings.md`](../knowledge/typography/font-pairings.md) — Pretendard pairings
205
+ - [`knowledge/patterns/brand-identity.md`](../knowledge/patterns/brand-identity.md) — brand foundation