@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,395 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: React Native — platform-specific design notes
4
+ applies_to: [react-native, mobile, ios, android, expo]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # React Native platform notes
11
+
12
+ The web ↔ React Native gap is wider than it looks. Specs and tokens that work on web don't always translate. This is the bridge.
13
+
14
+ ## Use this knowledge when
15
+
16
+ - Component spec or skill is being applied to a React Native project.
17
+ - Design tokens generated by `color-palette` skill need RN consumption.
18
+ - Designer is hand-off-ing to an RN engineer.
19
+ - Spec mentions `:hover`, `cursor`, `box-shadow` — those need translation.
20
+
21
+ ## Core differences
22
+
23
+ | Concept | Web | React Native |
24
+ | --- | --- | --- |
25
+ | **Layout default** | `block` (flex none) | `flex` (column direction) |
26
+ | **Box model** | content + padding + border + margin | flex-based; no margin collapse |
27
+ | **Cursor** | yes (`cursor: pointer`) | no — feedback via `Pressable` press states |
28
+ | **Hover** | yes (`:hover`) | **no** — no hover on touch. Use press states + long-press where applicable |
29
+ | **Focus** | `:focus`, `:focus-visible` | partial — Pressable has `focused` state for keyboard nav (mostly desktop tvOS) |
30
+ | **Scroll** | native to most elements | only `ScrollView`, `FlatList`, `SectionList` scroll |
31
+ | **Z-index** | works everywhere | works on iOS, partial on Android (use `elevation`) |
32
+ | **Shadows** | `box-shadow` | `shadowColor`, `shadowOffset`, `shadowOpacity`, `shadowRadius` (iOS) + `elevation` (Android) |
33
+ | **Borders** | per-side | per-side, but border-radius corner-specific is iOS-only on Android <12 |
34
+ | **Animations** | CSS transitions, `@keyframes` | `Animated`, `Reanimated`, or `LayoutAnimation` |
35
+ | **Media queries** | `@media (min-width: ...)` | `Dimensions.get('window')` + Platform.OS, or `useWindowDimensions` |
36
+ | **Text** | inherits styles | does **not** inherit — every `<Text>` starts fresh |
37
+ | **Default text in non-Text** | renders | crashes (`<View>some string</View>` errors) |
38
+
39
+ ## Tokens — translation
40
+
41
+ Code-side (CSS variables → RN constants):
42
+
43
+ ```css
44
+ /* Web (CSS) */
45
+ :root {
46
+ --color-primary-default: #0D9488;
47
+ --color-bg-default: #FFFFFF;
48
+ --space-md: 12px;
49
+ --radius-md: 10px;
50
+ --shadow-card: 0 1px 2px rgba(15, 23, 42, 0.04);
51
+ }
52
+ ```
53
+
54
+ ```ts
55
+ // RN (constants)
56
+ export const tokens = {
57
+ color: {
58
+ primary: { default: '#0D9488', hover: '#0F766E', active: '#115E59' },
59
+ bg: { default: '#FFFFFF', elevated: '#F8FAFC' },
60
+ },
61
+ space: { xs: 4, sm: 8, md: 12, base: 16, lg: 20 }, // numbers, NOT '12px'
62
+ radius: { sm: 6, md: 10, lg: 16, full: 9999 },
63
+ shadow: {
64
+ card: {
65
+ // iOS:
66
+ shadowColor: '#0F172A',
67
+ shadowOffset: { width: 0, height: 1 },
68
+ shadowOpacity: 0.04,
69
+ shadowRadius: 2,
70
+ // Android:
71
+ elevation: 1,
72
+ },
73
+ },
74
+ };
75
+ ```
76
+
77
+ Notes:
78
+ - **Numbers, not strings**: RN expects raw numbers for `padding`, `margin`, `borderRadius`. `12` not `'12px'`.
79
+ - **Shadow is two systems**: iOS uses 4 props; Android uses `elevation` (a single number 0–24 mapping to Material elevation). Provide both in every shadow token.
80
+ - **Color references**: RN doesn't support CSS variable references at runtime (without NativeWind/Tailwind). Use a JS theme object accessed via `useTheme()`.
81
+
82
+ ### NativeWind / Tailwind RN
83
+
84
+ If using NativeWind, keep tokens as CSS-flavored variables in a `tailwind.config.js`. NativeWind translates them to platform-specific styles at compile.
85
+
86
+ ```js
87
+ // tailwind.config.js (NativeWind compatible)
88
+ module.exports = {
89
+ theme: {
90
+ extend: {
91
+ colors: {
92
+ 'primary-default': '#0D9488',
93
+ 'bg-default': '#FFFFFF',
94
+ },
95
+ spacing: {
96
+ 'md': '12px', // NativeWind handles px → number
97
+ },
98
+ },
99
+ },
100
+ };
101
+ ```
102
+
103
+ NativeWind has gaps (no shadow utility on Android, no certain pseudo-classes). Document these in your project's `STYLES.md`.
104
+
105
+ ## Pressable — the universal interactive primitive
106
+
107
+ There is **no `<Button>` component in core RN**. Use `Pressable` and design your own Button.
108
+
109
+ ```tsx
110
+ <Pressable
111
+ style={({ pressed, hovered, focused }) => [
112
+ styles.button,
113
+ pressed && styles.buttonPressed,
114
+ hovered && styles.buttonHovered, // tvOS / desktop only
115
+ focused && styles.buttonFocused, // keyboard / tvOS
116
+ ]}
117
+ onPress={handlePress}
118
+ android_ripple={{ color: rippleColor }} // Android-native ripple
119
+ accessibilityRole="button"
120
+ accessibilityLabel="Save changes"
121
+ >
122
+ <Text style={styles.buttonText}>Save</Text>
123
+ </Pressable>
124
+ ```
125
+
126
+ Press feedback options:
127
+ - **iOS-style**: scale to 0.97 on press, fade to 0.7 opacity. Smooth.
128
+ - **Android-style**: ripple (use `android_ripple` prop). Native to platform.
129
+ - **Cross-platform compromise**: opacity 0.7 on press (works both, doesn't feel native to either).
130
+
131
+ Best practice: use platform-specific feedback.
132
+ ```ts
133
+ import { Platform } from 'react-native';
134
+
135
+ const pressStyle = Platform.select({
136
+ ios: { transform: [{ scale: 0.97 }], opacity: 0.85 },
137
+ android: {}, // ripple handles it
138
+ });
139
+ ```
140
+
141
+ ## Touch targets
142
+
143
+ | Standard | Minimum |
144
+ | --- | --- |
145
+ | iOS HIG | 44×44 pt |
146
+ | Android Material | 48×48 dp |
147
+ | **Practical default** | **44 (iOS) / 48 (Android)** |
148
+
149
+ In RN, point/dp coordinates map cleanly. A `Pressable` with `style={{ width: 44, height: 44 }}` is correct on both.
150
+
151
+ If the visual element is smaller (e.g., a 24x24 icon button), **extend the hit area** without growing the visual:
152
+
153
+ ```tsx
154
+ <Pressable
155
+ hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}
156
+ style={{ width: 24, height: 24 }}
157
+ >
158
+ <Icon />
159
+ </Pressable>
160
+ ```
161
+
162
+ `hitSlop` extends the touch zone outside the visual. Native and free.
163
+
164
+ ## Safe area
165
+
166
+ iOS notch + home indicator, Android system bars. Always wrap your screen content in `SafeAreaView` or use `useSafeAreaInsets`:
167
+
168
+ ```tsx
169
+ import { SafeAreaView } from 'react-native-safe-area-context';
170
+
171
+ <SafeAreaView style={{ flex: 1, backgroundColor: tokens.color.bg.default }}>
172
+ <ScreenContent />
173
+ </SafeAreaView>
174
+ ```
175
+
176
+ For full-bleed designs (image hero), don't wrap in SafeAreaView; use `useSafeAreaInsets()` to read inset values and apply only where needed (e.g., `paddingTop: insets.top` on the back button).
177
+
178
+ ```tsx
179
+ const insets = useSafeAreaInsets();
180
+ <View style={{ paddingTop: insets.top, paddingBottom: insets.bottom }}>...</View>
181
+ ```
182
+
183
+ ## Keyboard handling
184
+
185
+ Software keyboard appears → covers form. iOS uses `KeyboardAvoidingView` with `behavior="padding"`; Android uses `windowSoftInputMode="adjustResize"` in `AndroidManifest.xml`. Cross-platform pattern:
186
+
187
+ ```tsx
188
+ import { KeyboardAvoidingView, Platform } from 'react-native';
189
+
190
+ <KeyboardAvoidingView
191
+ behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
192
+ style={{ flex: 1 }}
193
+ >
194
+ <ScrollView>
195
+ <Form />
196
+ </ScrollView>
197
+ </KeyboardAvoidingView>
198
+ ```
199
+
200
+ For sticky footer buttons (e.g., "Save" at bottom): use `keyboardVerticalOffset` to push the footer above the keyboard, not the whole screen.
201
+
202
+ ## Animations
203
+
204
+ Three options:
205
+
206
+ | Tool | Best for | Notes |
207
+ | --- | --- | --- |
208
+ | **`Animated` API** (built-in) | Simple animations | Imperative, verbose |
209
+ | **`react-native-reanimated`** | Production-grade, runs on UI thread | **Default for new projects.** Best perf. |
210
+ | **`LayoutAnimation`** | Layout transitions (e.g., list reorder) | Easy but limited control |
211
+
212
+ Reanimated v3 example:
213
+
214
+ ```tsx
215
+ import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated';
216
+
217
+ function Card() {
218
+ const scale = useSharedValue(1);
219
+ const animatedStyle = useAnimatedStyle(() => ({
220
+ transform: [{ scale: scale.value }],
221
+ }));
222
+
223
+ return (
224
+ <Pressable
225
+ onPressIn={() => (scale.value = withSpring(0.97))}
226
+ onPressOut={() => (scale.value = withSpring(1))}
227
+ >
228
+ <Animated.View style={[styles.card, animatedStyle]}>...</Animated.View>
229
+ </Pressable>
230
+ );
231
+ }
232
+ ```
233
+
234
+ Reduced motion: `AccessibilityInfo.isReduceMotionEnabled()` — gate animations.
235
+
236
+ ## Typography
237
+
238
+ ```tsx
239
+ // All text MUST be in <Text>
240
+ <View>
241
+ <Text style={styles.heading}>Title</Text>
242
+ <Text style={styles.body}>Body content</Text>
243
+ </View>
244
+
245
+ // This CRASHES:
246
+ <View>Plain text</View> // ✗
247
+ ```
248
+
249
+ Font loading (Pretendard for Korean):
250
+
251
+ ```tsx
252
+ import * as Font from 'expo-font';
253
+ import { useEffect, useState } from 'react';
254
+
255
+ await Font.loadAsync({
256
+ 'Pretendard-Regular': require('./assets/fonts/Pretendard-Regular.otf'),
257
+ 'Pretendard-Medium': require('./assets/fonts/Pretendard-Medium.otf'),
258
+ 'Pretendard-SemiBold': require('./assets/fonts/Pretendard-SemiBold.otf'),
259
+ 'Pretendard-Bold': require('./assets/fonts/Pretendard-Bold.otf'),
260
+ });
261
+ ```
262
+
263
+ Reference fonts in styles by **string name** matching the loaded family:
264
+
265
+ ```tsx
266
+ fontFamily: 'Pretendard-Regular', // exact match
267
+ ```
268
+
269
+ For variable fonts (Pretendard Variable), use:
270
+
271
+ ```tsx
272
+ fontFamily: 'Pretendard-Variable',
273
+ fontWeight: '500', // axis instance
274
+ ```
275
+
276
+ Variable font support varies — test on both platforms before committing.
277
+
278
+ ### iOS-only: SF Pro
279
+
280
+ iOS system font is `San Francisco`. To use it explicitly: `fontFamily: undefined` or omit `fontFamily`. iOS picks SF Pro by weight/style.
281
+
282
+ For Korean primary apps targeting iOS users: prefer Pretendard over SF Pro (Pretendard handles Hangul + Latin matched). For Western-coded apps: use system font.
283
+
284
+ ## Lists — `FlatList` over `ScrollView`
285
+
286
+ For long lists (> 20 items), **never use ScrollView**. Use `FlatList`:
287
+
288
+ ```tsx
289
+ <FlatList
290
+ data={transactions}
291
+ renderItem={({ item }) => <TransactionRow item={item} />}
292
+ keyExtractor={(item) => item.id}
293
+ ItemSeparatorComponent={() => <View style={styles.separator} />}
294
+ contentContainerStyle={{ padding: tokens.space.md }}
295
+ // Performance:
296
+ windowSize={11}
297
+ maxToRenderPerBatch={10}
298
+ removeClippedSubviews
299
+ // Pull to refresh:
300
+ refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onRefresh} />}
301
+ />
302
+ ```
303
+
304
+ For sectioned lists: `SectionList`.
305
+
306
+ ## Navigation
307
+
308
+ There is **no built-in navigation in RN**. The de-facto standard is **`@react-navigation/native`** with stack/tab/drawer navigators.
309
+
310
+ Token-aware setup:
311
+ ```tsx
312
+ import { ThemeProvider } from '@react-navigation/native';
313
+
314
+ const navigationTheme = {
315
+ dark: false,
316
+ colors: {
317
+ primary: tokens.color.primary.default,
318
+ background: tokens.color.bg.default,
319
+ card: tokens.color.bg.elevated,
320
+ text: tokens.color.text.primary,
321
+ border: tokens.color.border.default,
322
+ notification: tokens.color.error,
323
+ },
324
+ };
325
+
326
+ <NavigationContainer theme={navigationTheme}>
327
+ <Stack.Navigator>...</Stack.Navigator>
328
+ </NavigationContainer>
329
+ ```
330
+
331
+ For mobile patterns (bottom-tab-bar, etc.), see [knowledge/patterns/mobile-navigation.md](../patterns/mobile-navigation.md).
332
+
333
+ ## Platform-specific code
334
+
335
+ ```tsx
336
+ import { Platform } from 'react-native';
337
+
338
+ // Branching
339
+ if (Platform.OS === 'ios') { ... }
340
+ if (Platform.OS === 'android') { ... }
341
+
342
+ // Selecting values
343
+ const padding = Platform.select({
344
+ ios: 16,
345
+ android: 12,
346
+ default: 16,
347
+ });
348
+
349
+ // Version-specific
350
+ if (Platform.OS === 'ios' && parseFloat(Platform.Version) >= 17) { ... }
351
+ ```
352
+
353
+ For files that diverge significantly: name files `MyComponent.ios.tsx` and `MyComponent.android.tsx` — Metro bundler picks per platform automatically.
354
+
355
+ ## Common pitfalls (designers should know)
356
+
357
+ - **Borders inside flex children render with weird spacing**: setting `borderWidth: 1` adds visual height that flex doesn't account for. Plan layouts assuming this.
358
+ - **Text doesn't word-wrap correctly with absolute width**: use `flex: 1` on parent, `flexShrink: 1` on text, or `numberOfLines` with `ellipsizeMode`.
359
+ - **Image performance**: large images crash on low-end Android. Use `react-native-fast-image` or properly sized assets (don't ship 4K thumbnails).
360
+ - **Modal vs Dialog**: RN's built-in `<Modal>` covers full screen by default. For card-style dialogs, use a library like `react-native-modal` or `react-native-bottom-sheet`.
361
+ - **Font scaling (accessibility)**: iOS/Android both let users scale system text. By default, RN respects this (`<Text>` scales). For fixed-size UI text (like a logo), set `allowFontScaling={false}` — but use sparingly.
362
+ - **iOS focus ring on text inputs**: there isn't one by default. Build it via `onFocus`/`onBlur` state + border color change.
363
+ - **Android `elevation` doesn't show shadow on transparent backgrounds**: set a `backgroundColor` even if it matches the parent.
364
+ - **Status bar**: customize via `<StatusBar>` from RN — light or dark content based on the screen's background.
365
+
366
+ ## Tokens that don't translate cleanly
367
+
368
+ | Token type | Web | RN status |
369
+ | --- | --- | --- |
370
+ | Color | trivial | trivial |
371
+ | Spacing | trivial (px → number) | trivial |
372
+ | Radius | trivial | trivial; per-corner partial on Android <12 |
373
+ | Border | mostly | mostly; dashed/dotted spotty on Android |
374
+ | Shadow | one prop | **5 props (4 iOS + elevation)** |
375
+ | Motion duration | `transition: 200ms` | requires Animated/Reanimated config |
376
+ | Motion easing | `cubic-bezier(...)` | use `Easing.bezier(0, 0, 0.2, 1)` from `react-native` |
377
+ | Z-index | works | iOS-only above Android <11 |
378
+ | Transition | CSS | requires animation library |
379
+ | Hover | `:hover` | **no equivalent** — design without it |
380
+ | Cursor | `cursor: pointer` | no equivalent — feedback via Pressable |
381
+
382
+ When porting a web design system to RN: budget time for re-authoring shadows and motion specifically.
383
+
384
+ ## Testing
385
+
386
+ - **Detox** for E2E (industry standard for RN).
387
+ - **Maestro** for simpler, declarative E2E (newer, easier setup).
388
+ - **React Native Testing Library** for component tests.
389
+
390
+ ## Cross-reference
391
+
392
+ - [knowledge/i18n/korean-typography.md](../i18n/korean-typography.md) — Pretendard loading on RN
393
+ - [knowledge/patterns/mobile-navigation.md](../patterns/mobile-navigation.md) — bottom-tab-bar, top-app-bar
394
+ - [knowledge/motion/principles.md](../motion/principles.md) — durations and easings (translate to Reanimated)
395
+ - [knowledge/a11y/keyboard-and-focus.md](../a11y/keyboard-and-focus.md) — touch targets, focus management
@@ -0,0 +1,276 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Brochures, leaflets, and flyers
4
+ applies_to: [print, brochure, flyer, marketing]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Brochures and flyers
11
+
12
+ Multi-page or folded marketing collateral. Read [`print-fundamentals.md`](print-fundamentals.md) first.
13
+
14
+ ## Categories
15
+
16
+ | Type | Pages / folds | Use |
17
+ | --- | --- | --- |
18
+ | **Flyer / 전단지** | 1 page, single-sided or double | Quick marketing message, event promo |
19
+ | **Postcard** | 1 page, double-sided | Direct mail, save-the-date |
20
+ | **Bi-fold** | 1 sheet folded once → 4 panels | Compact brochure, menu |
21
+ | **Tri-fold** | 1 sheet folded twice → 6 panels | Most common brochure |
22
+ | **Z-fold** | 1 sheet zigzag-folded → 6 panels | Step-by-step content |
23
+ | **Gate-fold** | Outer panels fold inward → 4-6 panels | Premium brand reveal |
24
+ | **Booklet / 소책자** | Multi-sheet stitched | 8+ pages, catalog, magazine |
25
+ | **Saddle-stitched** | Folded + center-stapled | Magazines, programs |
26
+
27
+ Pick by content volume + budget. Tri-fold is the workhorse.
28
+
29
+ ## Flyer (1-page)
30
+
31
+ ### Sizes
32
+
33
+ - **A5** (148 × 210mm) — most common Korean marketing flyer.
34
+ - **A4** (210 × 297mm) — when more content needed.
35
+ - **DL** (99 × 210mm) — fits in letter envelope, slim.
36
+ - **A6** (105 × 148mm) — postcard size, mailable.
37
+
38
+ ### Layout
39
+
40
+ ```
41
+ ┌──────────────────────────────────┐
42
+ │ [HEADLINE] │ ← biggest, top
43
+ │ │
44
+ │ [Visual / illustration] │ ← supports headline
45
+ │ │
46
+ │ Sub-message │
47
+ │ - Bullet 1 │
48
+ │ - Bullet 2 │
49
+ │ - Bullet 3 │
50
+ │ │
51
+ │ ── Footer ── │
52
+ │ [Logo] [CTA] [Contact] │
53
+ └──────────────────────────────────┘
54
+ ```
55
+
56
+ The headline does 80% of the work. If a passerby reads only the headline, they should know:
57
+ 1. What's being offered.
58
+ 2. Why they should care.
59
+ 3. Where to act.
60
+
61
+ ### One message rule
62
+
63
+ A flyer is read in 3-5 seconds. **One message. One CTA.** Don't try to say five things.
64
+
65
+ | ✗ Bad | ✓ Good |
66
+ | --- | --- |
67
+ | "여러 서비스 소개 + 특가 + 신규 가입 + 멤버십" | "신규 가입 시 30% 할인" |
68
+
69
+ ### Korean flyer conventions
70
+
71
+ - **Big, bold headline** — Korean reads well in heavy weights (Pretendard 800-900).
72
+ - **Clear price / discount** — Korean marketing leans on price clarity.
73
+ - **QR code or 카카오톡 채널 ID** — primary call to action for digital handoff.
74
+ - **Date + location prominent** for event flyers.
75
+
76
+ ## Bi-fold brochure
77
+
78
+ 1 sheet of paper folded once = 4 panels (front cover, inside left, inside right, back cover).
79
+
80
+ ```
81
+ Outer side (when closed):
82
+ ┌─────────┬─────────┐
83
+ │ │ │
84
+ │ Back │ Front │
85
+ │ cover │ cover │
86
+ │ │ │
87
+ └─────────┴─────────┘
88
+
89
+ Inside (when opened):
90
+ ┌─────────┬─────────┐
91
+ │ │ │
92
+ │ Inside │ Inside │
93
+ │ left │ right │
94
+ │ │ │
95
+ └─────────┴─────────┘
96
+ ```
97
+
98
+ | Panel | Use |
99
+ | --- | --- |
100
+ | Front cover | Headline + visual; one message |
101
+ | Inside left | Story / feature 1 |
102
+ | Inside right | Story / feature 2 |
103
+ | Back cover | Contact, CTA, smaller closing message |
104
+
105
+ ## Tri-fold brochure (the workhorse)
106
+
107
+ 1 sheet folded twice = 6 panels. Most common marketing brochure.
108
+
109
+ ### Layout (A4 tri-fold, 99mm × 210mm panels)
110
+
111
+ ```
112
+ Outer side (closed): Inside (opened flat):
113
+ ┌──────┬──────┬──────┐ ┌──────┬──────┬──────┐
114
+ │ │ │ │ │ │ │ │
115
+ │ Inner│ Back │ Front│ │ Panel│ Panel│ Panel│
116
+ │ flap │ cover│ cover│ │ 4 │ 5 │ 6 │
117
+ │ 3 │ 2 │ 1 │ │ │ │ │
118
+ └──────┴──────┴──────┘ └──────┴──────┴──────┘
119
+ ```
120
+
121
+ ### Reading order matters
122
+
123
+ Westerners + Koreans both fold open and read left → right. So:
124
+ - **Panel 1 (front cover)**: hook, brand identity.
125
+ - **Panel 4 (first inside panel after opening)**: opening message / "what we do".
126
+ - **Panel 5 (middle inside)**: features / details.
127
+ - **Panel 6 (right inside)**: deeper feature / second message.
128
+ - **Panel 3 (inner flap, visible when partially opening)**: bridge / CTA / preview.
129
+ - **Panel 2 (back cover)**: contact, address, closing CTA.
130
+
131
+ Each panel should make sense **as it's revealed**, not require the user to re-fold to interpret.
132
+
133
+ ### Inner flap consideration
134
+
135
+ Panel 3 is **slightly narrower** than the others (it folds inside, ~2-3mm shorter). Don't put critical content close to the inner edge of panel 3 — it'll be obscured by the fold.
136
+
137
+ ### Tri-fold mistakes
138
+
139
+ - **Treating as 6 separate pages** instead of a flowing reveal.
140
+ - **Inner flap content too close to edge** — gets folded under.
141
+ - **Front cover with no hook** — flyer ignored.
142
+ - **Back cover with no contact** — wasted space.
143
+ - **Gutter (fold lines) cutting through visuals** — design across panels OR within them, not awkwardly cut.
144
+
145
+ ## Z-fold
146
+
147
+ Zig-zag folded — accordion-style. 6 panels read sequentially as user pulls open:
148
+
149
+ ```
150
+ Panel 1 → Panel 2 → Panel 3 → Panel 4 → Panel 5 → Panel 6
151
+ [hook] [problem] [step 1] [step 2] [result] [CTA]
152
+ ```
153
+
154
+ Use for: step-by-step processes, how-to guides, journey storytelling.
155
+
156
+ ## Booklet / saddle-stitched magazine
157
+
158
+ Multi-page (8+) folded + stapled at the spine.
159
+
160
+ ### Page count must be a multiple of 4
161
+
162
+ Saddle-stitched magazines must have page counts in multiples of 4 (each sheet of paper folds into 4 pages). Common: 8, 12, 16, 20, 24, 32 pages.
163
+
164
+ If you have content for 13 pages, you ship 12 (cut content) or 16 (add 3 blank/filler) — not 13.
165
+
166
+ ### Imposition
167
+
168
+ The print pages don't print in reading order. Page 1 prints next to page 16 (last page), page 2 next to page 15, etc. Most printers handle imposition automatically when given a print-order PDF, but for complex layouts: ask the printer.
169
+
170
+ ### Spread design
171
+
172
+ A booklet is read as **spreads** (two facing pages). Design spreads as a unit:
173
+
174
+ ```
175
+ ┌──────┬──────┐
176
+ │ │ │
177
+ │ Page │ Page │
178
+ │ 4 │ 5 │
179
+ │ │ │
180
+ └──────┴──────┘
181
+ ```
182
+
183
+ Page 4 (verso, left) and page 5 (recto, right) form a unified visual. Don't design pages as isolated rectangles.
184
+
185
+ ### Gutter
186
+
187
+ The center fold has a **gutter** (5-10mm where the fold compresses content). Don't put critical content (text, faces) in the gutter — it gets eaten.
188
+
189
+ For perfect-bound (glued spine, like books): gutter is wider (10-15mm) because pages don't lay flat.
190
+
191
+ ## Margins (universal print)
192
+
193
+ For A4 brochure pages:
194
+ - **Outer margin**: 12-20mm
195
+ - **Inner / gutter margin**: 15-25mm (always larger; account for fold/bind)
196
+ - **Top margin**: 15-25mm
197
+ - **Bottom margin**: 15-25mm
198
+
199
+ Less margin = denser, more cramped. More margin = airy, premium-feeling.
200
+
201
+ ## Color in brochures
202
+
203
+ - **4-color (CMYK)** is standard.
204
+ - **Spot color (Pantone) + CMYK** for brand-critical accents.
205
+ - Color photography fits naturally; CMYK loses some vibrance vs RGB but it's expected.
206
+
207
+ For Korean glossy lifestyle brochures: high-saturation imagery, warm neutrals, brand-color accents.
208
+ For B2B / financial: more restrained, off-white background, brand-color CTAs only.
209
+
210
+ ## Photography vs illustration
211
+
212
+ | Photography | Illustration |
213
+ | --- | --- |
214
+ | Authentic feel | Branded feel |
215
+ | Date-sensitive | Timeless |
216
+ | Higher production cost | Predictable cost |
217
+ | Limited control | Total control |
218
+
219
+ Use photography for:
220
+ - Real product photos (for product brochures).
221
+ - Authentic team / story (for company brochures).
222
+
223
+ Use illustration for:
224
+ - Abstract concepts (process, value).
225
+ - Brand consistency across many pieces.
226
+ - Avoiding stock-photo-cliché.
227
+
228
+ See [`knowledge/illustration/illustration-systems.md`](../illustration/illustration-systems.md).
229
+
230
+ ## Typography in brochures
231
+
232
+ - **Headlines**: 24-72pt depending on size + drama.
233
+ - **Sub-headlines**: 14-18pt.
234
+ - **Body**: 9-11pt for brochures (slightly smaller than letterhead because reading distance is closer when held).
235
+ - **Captions**: 7-9pt.
236
+ - **Footer**: 6-8pt.
237
+
238
+ Korean: Pretendard 600-700 weight for headlines, 400-500 for body. Don't go below 9pt for body.
239
+
240
+ For mixed Korean + English in body: Pretendard handles both at the same size, leading aside.
241
+
242
+ ## Production tips
243
+
244
+ - **Order quantities** for flyers / brochures: 500-1000 minimum at most printers.
245
+ - **Cost per unit drops** at 1000+ then again at 5000+.
246
+ - **Storage** — printed brochures take physical space. Order what you'll distribute in 6-12 months; reorder as needed.
247
+ - **Revisions** — every reprint is full cost. Lock content + design before printing.
248
+ - **Versioning** — for multiple language versions: print as small batches, not all at once. Translation often has bugs that show only after first print.
249
+
250
+ ## Sustainability considerations
251
+
252
+ - **Paper choice**: FSC-certified paper for environmentally-conscious brands.
253
+ - **Recycled content**: 30%+ recycled paper available in most weights.
254
+ - **Soy-based ink** vs petroleum ink — lower environmental impact.
255
+ - **Local printing** — reduces shipping carbon.
256
+
257
+ For 2024+ Korean B2B: sustainability messaging is increasing. FSC certification on the brochure is increasingly expected by ESG-conscious clients.
258
+
259
+ ## Don't
260
+
261
+ - Don't pack a brochure with content. White space sells.
262
+ - Don't ignore the cover. The cover is what makes someone open it.
263
+ - Don't design a tri-fold like 6 isolated pages. It's one continuous experience.
264
+ - Don't put critical content in the gutter / inner flap fold.
265
+ - Don't print before content is final. Reprints are expensive.
266
+ - Don't use 4 fonts in one brochure. 1-2 max.
267
+ - Don't ship without a CTA. What do you want the reader to do next?
268
+
269
+ ## Cross-reference
270
+
271
+ - [`knowledge/print/print-fundamentals.md`](print-fundamentals.md) — CMYK, bleed, DPI
272
+ - [`knowledge/print/stationery.md`](stationery.md) — business cards
273
+ - [`knowledge/print/signage-and-posters.md`](signage-and-posters.md) — large format
274
+ - [`knowledge/print/korean-print-conventions.md`](korean-print-conventions.md) — KR conventions
275
+ - [`knowledge/illustration/illustration-systems.md`](../illustration/illustration-systems.md) — illustration use
276
+ - [`knowledge/typography/font-pairings.md`](../typography/font-pairings.md) — Pretendard pairings