@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,211 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Korean payments — vendor selection and integration UX
4
+ applies_to: [korean-market, fintech, e-commerce, payments]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Korean payments
11
+
12
+ Designing for Korean payments means choosing among a unique vendor landscape, then integrating each correctly. This is a decision document — pick a path, document why, ship.
13
+
14
+ ## The vendor landscape
15
+
16
+ | Vendor | Type | Strengths | Notes |
17
+ | --- | --- | --- | --- |
18
+ | **Toss Payments** | PG (payment gateway) | Modern API, best DX, default for new fintech/SaaS | Toss the company, widely trusted brand |
19
+ | **NHN KCP** | PG | Enterprise-grade, deep B2B presence | Older API; more setup |
20
+ | **INICIS** (이니시스) | PG | Largest market share for traditional commerce | Legacy patterns; many Korean stores still default |
21
+ | **NICE Payments** | PG | Deep ESCROW + identity infrastructure | Common in finance, 본인인증 |
22
+ | **KakaoPay** | Wallet (간편결제) | Massive adoption (Kakao ecosystem) | Customer pays via KakaoPay app — UX shift |
23
+ | **NaverPay** | Wallet | Strong in commerce, Naver shopping | Similar UX shift |
24
+ | **Toss** (the wallet, not Toss Payments) | Wallet | Younger demographic, finance-first | Increasingly used as a payment method, separate from Toss Payments PG |
25
+ | **Samsung Pay** | Wallet | OEM card-on-device | Less common in standalone apps; embedded in Samsung phones |
26
+ | **PayPal Korea** | International gateway | When you need to accept overseas cards | Niche |
27
+ | **휴대폰결제 (Carrier billing)** | Telco-billed | Quick small-amount, no card needed | Mobile-game / digital-content category |
28
+ | **무통장입금 (Bank transfer)** | Direct deposit | Older demographics, distrust of cards | Shows virtual account; user transfers from bank app |
29
+ | **계좌이체 (Real-time bank transfer)** | Direct ACH | Lower fees than cards, common in B2B/large amounts | Friction: bank app handoff |
30
+
31
+ ## Decision tree — which to integrate
32
+
33
+ ```
34
+ Is the product:
35
+ ├── Consumer mobile app (B2C)?
36
+ │ └── Required: Toss Payments PG (cards) + KakaoPay + NaverPay
37
+ │ Optional: Toss wallet, Samsung Pay
38
+ ├── B2B / Enterprise?
39
+ │ └── Required: NHN KCP or NICE (legacy PG) + 무통장입금
40
+ │ Optional: 계좌이체 for invoiced amounts
41
+ ├── Subscription SaaS?
42
+ │ └── Required: Toss Payments PG (best subscription API)
43
+ │ Optional: KakaoPay (recurring), NaverPay
44
+ ├── Digital content / Game?
45
+ │ └── Required: 휴대폰결제 + Toss Payments PG
46
+ │ Optional: KakaoPay
47
+ ├── E-commerce?
48
+ │ └── Required: Toss Payments + KakaoPay + NaverPay + 무통장입금
49
+ │ Optional: 계좌이체 for high-value, ESCROW for marketplace
50
+ └── Cross-border / Tourism?
51
+ └── Required: PayPal + Toss Payments
52
+ Optional: Alipay+ (for Chinese visitors)
53
+ ```
54
+
55
+ **Rule of thumb for new B2C apps**: Toss Payments PG as the foundation (handles cards, subscriptions, virtual accounts). Add KakaoPay and NaverPay as one-tap shortcuts. That's ~95% of the market.
56
+
57
+ ## Integration UX patterns
58
+
59
+ ### The payment method selector
60
+
61
+ The order of payment methods on the selector screen carries weight in Korea:
62
+
63
+ ```
64
+ [ ─ Recommended order for B2C consumer ─ ]
65
+ 1. KakaoPay (yellow brand button) ← top — most-used wallet
66
+ 2. NaverPay (green brand button) ← second wallet
67
+ 3. Toss (blue) ← if your audience skews younger
68
+ ─────────────────────
69
+ 4. 신용/체크카드 (credit/debit card) ← break, then cards
70
+ 5. 휴대폰결제 ← if applicable
71
+ 6. 무통장입금 ← always last for B2C
72
+ ```
73
+
74
+ For older / B2B audiences:
75
+ ```
76
+ 1. 신용/체크카드
77
+ 2. 무통장입금
78
+ 3. 계좌이체
79
+ 4. 휴대폰결제 (if applicable)
80
+ 5. KakaoPay / NaverPay (below the fold)
81
+ ```
82
+
83
+ Brand buttons (KakaoPay yellow, NaverPay green, Toss blue) carry recognition. Use the official assets — vendors require it as part of their brand guidelines.
84
+
85
+ ### One-tap wallets vs card form
86
+
87
+ When a user picks KakaoPay/NaverPay:
88
+ - **Don't show a card form afterwards.** They've already chosen the wallet — switch to the wallet handoff immediately.
89
+ - Wallet flow: SDK opens an in-app browser or native wallet app → user authenticates → returns to your app with success/fail.
90
+ - Loading state while waiting on wallet callback: spinner + "결제 진행 중…" (do not show "Loading…" English).
91
+
92
+ When a user picks "신용/체크카드":
93
+ - Show card form: 카드번호, 유효기간, CVC, 카드명의자명.
94
+ - Toss Payments offers `requestPayment` SDK that renders this form with their UX — recommended over building it yourself.
95
+ - For first-time entry, ask for `이름` (cardholder name) per regulation.
96
+ - Save card option: present **after** successful first payment, not before. Korean users are wary of pre-checked save-card.
97
+
98
+ ### Subscription disclosure (legal requirement)
99
+
100
+ E-commerce law mandates clear disclosure **before** the subscribe button:
101
+
102
+ ```
103
+ ┌─────────────────────────────────────┐
104
+ │ 구독 정보 (subscription details) │
105
+ │ │
106
+ │ 월 ₩9,900 자동 결제 │
107
+ │ 매월 7일에 결제됩니다 │
108
+ │ 카드: KB국민카드 ****-1234 │
109
+ │ │
110
+ │ [언제든 해지 가능 · 해지 방법 보기] │
111
+ │ │
112
+ │ □ 위 내용에 동의합니다 │
113
+ │ │
114
+ │ [구독 시작] │
115
+ └─────────────────────────────────────┘
116
+ ```
117
+
118
+ - Price in ₩, period explicit.
119
+ - Next billing date shown.
120
+ - Cancellation method explicitly stated and linked.
121
+ - **Consent checkbox required** — pre-checked is illegal under e-commerce law.
122
+ - After subscription, send a confirmation email (legal requirement) summarizing the same info.
123
+
124
+ ### Refund / 청약철회
125
+
126
+ Korean e-commerce law gives consumers a **7-day cooldown** for digital goods (with caveats — opened software, used services may be excluded). UX must:
127
+ - Disclose this period at point of purchase.
128
+ - Provide an in-app refund/cancel path.
129
+ - Document exclusions clearly (e.g., "이미 다운로드한 콘텐츠는 환불 불가").
130
+
131
+ ### Failed payment
132
+
133
+ Common Korean failure modes and the right error message:
134
+
135
+ | Cause | English equivalent | Korean message |
136
+ | --- | --- | --- |
137
+ | Card declined by issuer | Card declined | "카드사에서 거절되었습니다. 다른 카드를 시도해 주세요." |
138
+ | Insufficient funds | Insufficient funds | "잔액이 부족합니다." |
139
+ | Daily limit exceeded | Over daily limit | "1일 결제 한도를 초과했습니다." |
140
+ | Foreign card not allowed | International card blocked | "해외 카드는 이 결제에서 사용할 수 없습니다." |
141
+ | Wallet auth timeout | KakaoPay/NaverPay timed out | "인증 시간이 만료되었습니다. 다시 시도해 주세요." |
142
+ | Network | Connection lost | "네트워크 연결이 불안정합니다." |
143
+ | 본인인증 mismatch | Identity check failed | "본인 정보가 일치하지 않습니다. 입력 정보를 확인해 주세요." |
144
+
145
+ **Always provide a "다시 시도" (retry) button**, except for `본인인증` failures (which require user to fix the underlying data).
146
+
147
+ ## 본인인증 (Identity verification)
148
+
149
+ Required for:
150
+ - Financial transactions over ~₩500,000 (varies by use case)
151
+ - Age-gated content
152
+ - Account creation in some categories (mobile carriers, securities)
153
+ - Real-name verified accounts (실명인증)
154
+
155
+ Vendors:
156
+ - **PASS app** — most modern, used by all 3 carriers (SKT/KT/LGU+). Native app handoff.
157
+ - **NICE 본인인증** — SMS-based or PASS-based, integrated into NICE's PG.
158
+ - **KCB 본인인증** — alternative to NICE.
159
+
160
+ **Never roll your own.** It requires real-name database integration only available via licensed vendors.
161
+
162
+ UX flow:
163
+ ```
164
+ [현재 화면: 본인인증 필요]
165
+
166
+ 본인인증이 필요합니다
167
+ 안전한 결제를 위해 본인인증을 진행해주세요.
168
+
169
+ [PASS 앱으로 인증]
170
+ [SMS로 인증]
171
+ [공동인증서로 인증] ← rare, falling out of use
172
+
173
+ > 본인인증은 약 1분 소요됩니다.
174
+ ```
175
+
176
+ After success, return to the payment flow with `verificationToken` in the user's session.
177
+
178
+ ## ESCROW (필수 in some categories)
179
+
180
+ Marketplaces (peer-to-peer commerce) and certain product categories legally require ESCROW — payment held by a 3rd party until the buyer confirms receipt.
181
+
182
+ - Vendor: NICE Payments, KCP, INICIS all offer ESCROW APIs.
183
+ - UX: buyer pays → ESCROW holds → seller ships → buyer confirms (or auto-confirms after N days) → ESCROW releases.
184
+ - Display "ESCROW 보호 거래" badge on listing/payment screen — Korean buyers look for it.
185
+
186
+ ## Cost structure (high-level)
187
+
188
+ | Method | Typical fee | Notes |
189
+ | --- | --- | --- |
190
+ | Cards (PG) | 2.5–3.5% | Negotiable at scale; chargebacks possible |
191
+ | KakaoPay | 2.5–3.0% | Some products have lower wallet fees |
192
+ | NaverPay | 2.5–3.0% | |
193
+ | Bank transfer (계좌이체) | 0.5–1.0% | Cheapest; friction higher |
194
+ | 휴대폰결제 | 5–7% | Highest fee but trivial UX for small amounts |
195
+ | 무통장입금 | ~₩400 / transaction | Flat, near-zero percentage; manual reconciliation overhead |
196
+ | 본인인증 | ~₩70–200 / verification | Per-call vendor fee |
197
+
198
+ For a typical B2C consumer app with ~3% blended payment cost: assume **2.8%** as a planning number after KakaoPay/NaverPay/card mix.
199
+
200
+ ## What designers (not just engineers) need to know
201
+
202
+ - Brand button colors and shapes are **regulated by the wallet vendors**. KakaoPay's button must be yellow with the official KakaoPay logo at the official aspect ratio. NaverPay must be green with the N. Don't restyle.
203
+ - The wallet handoff flow (in-app browser or native app) takes ~3–10 seconds. Design a clear loading state.
204
+ - "결제 완료" confirmation screens are expected — don't auto-navigate away. Show order/payment ID, copy-to-clipboard affordance, and a primary "내역 보기" / "주문 확인" CTA.
205
+ - For subscriptions, design the **cancel flow** as a first-class UI. Korean users expect to find "구독 해지" within 2 taps from settings.
206
+
207
+ ## Cross-reference
208
+
209
+ - [knowledge/i18n/korean-product-conventions.md](korean-product-conventions.md) — broader Korean UX conventions
210
+ - [knowledge/i18n/korean-publishing.md](korean-publishing.md) — store submission requirements (privacy, marketing consent)
211
+ - [knowledge/patterns/form-design.md](../patterns/form-design.md) — payment form patterns (card, address)
@@ -0,0 +1,96 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Korean product UX conventions
4
+ applies_to: [korean-market, mobile, web, payments]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Korean product UX conventions
11
+
12
+ Patterns Korean users expect from local apps. Designs that ignore these read as "translated foreign apps" and lose trust.
13
+
14
+ ## Authentication
15
+
16
+ | Pattern | Korean expectation |
17
+ | --- | --- |
18
+ | Phone-first signup | Most consumer apps require **phone number + SMS verification** as the primary identity. Email is secondary or optional. |
19
+ | KakaoTalk login | The dominant social login in Korea. Treat it like Apple/Google ID elsewhere. Place above email login. |
20
+ | Naver login | Second most common. Used in news/portal/shopping. |
21
+ | Apple/Google login | Required for app store policy compliance, but place below Kakao/Naver in the visual order for Korean apps. |
22
+ | 본인인증 (Identity verification) | Real-name verification via PASS app or SMS. Required for finance, ticketing, certain age-gated content. **Never implement this yourself** — use a vendor (KCB, NICE, Toss). |
23
+
24
+ ## Payments
25
+
26
+ | Pattern | Korean expectation |
27
+ | --- | --- |
28
+ | **Toss / KakaoPay / NaverPay** | One-tap payment apps. Most consumer flows show these as primary tabs in the payment selector. |
29
+ | Credit card | Local cards (BC, Shinhan, KB, etc.). Stripe ≠ payment processor here — use Toss Payments, NHN KCP, INICIS, KakaoPay for Business. |
30
+ | 무통장입금 (Bank transfer) | Still common for older demographics, certain B2C. Provide a virtual account. |
31
+ | 휴대폰결제 (Mobile carrier billing) | Small-amount purchases (< ~₩500K). Common in mobile gaming, digital content. |
32
+ | Subscription disclosures | Korea's e-commerce law requires explicit recurring charge disclosure with all prices in ₩, before the subscribe button. |
33
+ | 청약철회 (Right to withdraw) | 7-day cooldown for digital goods is legally required to be disclosed. |
34
+
35
+ ## Forms
36
+
37
+ - **Address**: Korean addresses use postal-code lookup (도로명주소 / 지번주소) — never free-form. Use the **Daum Postcode API** (free, ubiquitous). Never ask the user to type their full address.
38
+ - **Birth date**: 6-digit `YYMMDD` with regional/gender suffix (resident registration number) — **don't ever ask for the full RRN**. For age, ask for birth year only or full DOB.
39
+ - **Name**: single field "이름". Do not split first/last — Korean names are written 성 + 이름 (family-given) without space. Don't apply Western "first/last" splitting.
40
+ - **Phone**: 11-digit mobile (`010-####-####`). Validate with regex `/^01[0-9]-?\d{3,4}-?\d{4}$/`.
41
+ - **Email**: standard. Korean users frequently use Naver (`@naver.com`) and Daum (`@hanmail.net`); make sure your validator accepts both common patterns.
42
+
43
+ ## Navigation patterns
44
+
45
+ - **Bottom tab bar (mobile)**: 4–5 tabs. Korean apps frequently use **icon + Korean label** — labels are not optional.
46
+ - **Hamburger menu**: less common as a primary nav in Korean consumer apps. Korean users prefer visible tabs.
47
+ - **Back button**: respect device-native back. Custom back buttons in headers are still common (left-positioned chevron) but don't replace the system gesture.
48
+ - **Search**: prominent, often as a top-bar icon or persistent input. Korean users search more than browse compared to Western patterns.
49
+
50
+ ## Content density
51
+
52
+ Korean consumer apps tend toward **higher density** than Western apps:
53
+ - More items per screen (lists, feeds, dashboards).
54
+ - Smaller padding between elements.
55
+ - More text per card.
56
+
57
+ This is not "cluttered design" — it matches reading pace and screen-time habits. When porting a Western design, be prepared to reduce padding by 15–25% and increase items-per-fold.
58
+
59
+ Reference: see how Coupang, Naver, KakaoTalk, Toss differ from Amazon, Google, WhatsApp, Robinhood.
60
+
61
+ ## Color associations
62
+
63
+ Different from Western color symbolism:
64
+
65
+ | Color | Korean association | Use for |
66
+ | --- | --- | --- |
67
+ | Red | Risk, sale, **but not death** | error, sale price, urgency. Korean ecommerce "할인" (sale) badges are red. |
68
+ | Blue | Trust, finance | primary CTAs, fintech, banking |
69
+ | Green | Growth, "go" | success, environmental, **not money** (unlike US green=$) |
70
+ | Yellow | KakaoTalk-coded | branded only — most users associate yellow with Kakao. Use cautiously as a primary brand color. |
71
+ | Black + gold | Luxury, premium | high-end shopping, premium tiers |
72
+ | Pink / coral | Beauty, fashion, K-beauty | cosmetics, lifestyle apps |
73
+
74
+ ## Error and empty states
75
+
76
+ - Tone: be apologetic, not casual. "오류가 발생했습니다" (an error occurred) over "Oops!"
77
+ - Provide a recovery action — Korean users expect a "다시 시도" (retry) button or contact path.
78
+ - "Empty cart" / "no results" should suggest next steps (popular items, recommendations).
79
+
80
+ ## Customer service expectations
81
+
82
+ - 1:1 inquiry (1:1 문의) is a standard pattern — a chat or form within the app.
83
+ - Phone customer service hours (KST) are commonly displayed.
84
+ - "고객센터" (customer center) is the standard term for support.
85
+
86
+ ## Compliance notes
87
+
88
+ - **개인정보처리방침 (Privacy policy)** — required link, often in app settings.
89
+ - **이용약관 (Terms of service)** — required, must be agreed at signup with separate checkboxes for required vs marketing-opt-in items.
90
+ - **마케팅 수신 동의** (Marketing consent) — must be a separate opt-in from required terms. Pre-checked is illegal.
91
+ - **앱 권한 안내** (App permissions disclosure) — Google Play Korea requires a clear in-app disclosure of why each permission is requested.
92
+
93
+ ## Cross-reference
94
+
95
+ - [knowledge/i18n/korean-typography.md](korean-typography.md)
96
+ - (TODO) [knowledge/i18n/korean-publishing.md](korean-publishing.md) — store-listing rules
@@ -0,0 +1,139 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Korean app store & publishing requirements
4
+ applies_to: [korean-market, ios, android, app-store-connect, google-play, onestore]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Korean app store & publishing requirements
11
+
12
+ What designers need to know to ship into the Korean market without rejections or last-minute scrambles. This is a pre-flight checklist, not legal advice.
13
+
14
+ ## The three Korean stores
15
+
16
+ | Store | Why it exists | Designer impact |
17
+ | --- | --- | --- |
18
+ | **App Store (iOS)** | Required for iPhone | Korean metadata in App Store Connect; KCC age rating |
19
+ | **Google Play Korea** | Default for Android | Korean store listing, KOPECO age rating, in-app permission disclosure popup |
20
+ | **ONE store (원스토어)** | KT/SKT/LG U+ joint platform; required for some carrier promotions and game/finance categories | Separate store listing, separate APK, separate review queue |
21
+
22
+ Most consumer apps publish to App Store + Google Play. Games + finance + telecom-bundled apps add ONE store.
23
+
24
+ ## Mandatory metadata (Korean store listings)
25
+
26
+ ### Names and descriptions
27
+ - **App name**: ≤ 30 characters Korean. Trademark-safe (Korea's trademark database is hostile to generic English names).
28
+ - **Subtitle / Promo text**: must be in Korean.
29
+ - **Description**: write Korean-native, not machine-translated. Include 5–7 keywords naturally for App Store search.
30
+
31
+ ### Screenshots
32
+ | Spec | iPhone 6.5" / 6.7" / 6.9" | Android |
33
+ | --- | --- | --- |
34
+ | Resolution | 1290×2796, 1284×2778, 1242×2688 | 1080×1920+ |
35
+ | Count | 3–10, **first 3 are critical** (visible without scroll) | 2–8 |
36
+ | Korean text | **Required.** Translated screenshots only — do not ship English-text screenshots to Korean storefront. |
37
+ | Density | High — Korean stores expect 50–70% of screen area to be feature copy + UI, not blank backgrounds. |
38
+
39
+ Korean screenshot conventions:
40
+ - Bold, high-contrast typography.
41
+ - 1–2 lines of bold benefit copy per screenshot.
42
+ - App UI partially shown (cropped) under the copy.
43
+ - Often with a phone-frame mockup.
44
+
45
+ ### App icon
46
+ - 1024×1024 master.
47
+ - Test at 60×60 — Korean store grids are dense; the icon must read at thumbnail size.
48
+ - Hangul "글자" inside icon is acceptable and common (e.g., 토스 = "T", 카카오톡 = "톡"). Use only when the brand is the letter.
49
+ - Avoid: photos, gradients with text overlay, complex illustrations.
50
+
51
+ ## Age ratings (필수)
52
+
53
+ ### iOS — App Store Connect
54
+ - Standard 4+ / 9+ / 12+ / 17+ ratings apply.
55
+ - Korea also enforces the **GRAC (게임물관리위원회)** rating for **games specifically**. If your app is categorized as a game, it must have a separate Korean GRAC rating displayed.
56
+
57
+ ### Android — Google Play
58
+ - Uses **KOPECO** (한국게임정책자율기구) rating for games or **KMRB (영상물등급위원회)** for video content.
59
+ - Non-game apps use Google's standard IARC rating.
60
+
61
+ For games:
62
+ - Get the GRAC rating before submission. The number must appear in the listing.
63
+ - Categories: 전체이용가 (All), 12세이용가, 15세이용가, 청소년이용불가 (18+).
64
+
65
+ ## In-app required disclosures
66
+
67
+ Korean law and store policy require these to be **in-app**, not just in store:
68
+
69
+ ### Privacy
70
+ - Privacy policy link in **app settings or sign-up flow**, not just the store listing.
71
+ - 개인정보처리방침 (privacy policy) must be Korean and disclose: data types collected, purpose, retention period, third-party sharing.
72
+
73
+ ### Terms
74
+ - 이용약관 must be agreed at sign-up via a checkbox. Can be a single combined agreement, but marketing consent must be a **separate, opt-in** checkbox.
75
+
76
+ ### Permissions (Android, Google Play Korea-specific)
77
+ - Before requesting any sensitive permission (location, camera, mic, contacts, storage), show an in-app dialog explaining:
78
+ - Which permission is being requested.
79
+ - Why it's needed for which feature.
80
+ - Whether it's required vs optional.
81
+ - This is in addition to the OS prompt. Google Play Korea will reject without this in-app disclosure.
82
+
83
+ ### Subscriptions / IAP
84
+ - Show price in ₩ before purchase.
85
+ - Show recurring schedule (월 / 연 / 회).
86
+ - Show cancellation method explicitly: "구독은 [iOS Settings / Google Play] 에서 해지할 수 있습니다."
87
+
88
+ ## Common rejection reasons (App Store, KR)
89
+
90
+ 1. **Missing Korean screenshots** — English screenshots in Korean storefront.
91
+ 2. **Missing Korean privacy policy URL** — must resolve to a Korean-language page.
92
+ 3. **Permission requested without in-app explanation** — Apple's "Why does your app need this?" string is per-permission and must be Korean.
93
+ 4. **Login required to demo without test credentials** — provide test account for review team.
94
+ 5. **Subscription without restore-purchase** — required for paid apps.
95
+ 6. **External payment links** — apps targeting Korea got an exemption (2023+) but still must use approved alternative-payment flow if not using Apple IAP.
96
+
97
+ ## Common rejection reasons (Google Play, KR)
98
+
99
+ 1. **No in-app permission explanation popup** before requesting sensitive permissions.
100
+ 2. **Sensitive content without age gate** — even text/article apps with adult content need explicit age verification.
101
+ 3. **Misleading screenshots** — Korean store reviewers check screenshots match actual UI more strictly than US.
102
+ 4. **Inadequate Korean translation** — partial Korean (some screens English, some Korean) is grounds for rejection.
103
+
104
+ ## ONE store specifics (원스토어)
105
+
106
+ If publishing to ONE store:
107
+ - Separate APK signing (different signing key allowed; many devs use the same as Play).
108
+ - Separate app icon (same asset acceptable).
109
+ - ONE store has its own in-app billing SDK — separate from Google Play Billing.
110
+ - Smaller share of market but required for some carrier-bundled placements.
111
+ - Approval queue is 5–7 business days; typically less strict than Google Play KR.
112
+
113
+ ## Localization reminders
114
+
115
+ - **Currency**: ₩ everywhere. Localize prices for KRW market — `$1.99` → `₩2,500` (round to natural Korean price tiers, not direct conversion).
116
+ - **Date / time**: Korea Standard Time (KST, UTC+9). No DST.
117
+ - **Phone**: 010-####-####.
118
+ - **Address**: Daum Postcode API for forms.
119
+ - **Customer service**: business hours stated on contact pages, in KST.
120
+
121
+ ## Pre-submission checklist
122
+
123
+ - [ ] App name reserved on App Store Connect / Play Console / ONE store.
124
+ - [ ] Korean app description (not machine-translated).
125
+ - [ ] All screenshots include Korean text overlays.
126
+ - [ ] Privacy policy URL resolves to Korean-language page.
127
+ - [ ] Terms of service in-app, separate marketing-consent checkbox.
128
+ - [ ] Permission rationale strings localized to Korean.
129
+ - [ ] In-app permission disclosure popup (Android).
130
+ - [ ] GRAC age rating obtained (games only).
131
+ - [ ] Test account credentials provided to reviewer.
132
+ - [ ] All currency formatted ₩ with comma separator.
133
+ - [ ] Subscription cancellation path stated in-app.
134
+ - [ ] Customer service contact path in-app (1:1 inquiry, email, or phone).
135
+
136
+ ## Cross-reference
137
+
138
+ - [knowledge/i18n/korean-typography.md](korean-typography.md)
139
+ - [knowledge/i18n/korean-product-conventions.md](korean-product-conventions.md)
@@ -0,0 +1,123 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Korean (Hangul) typography for product UI
4
+ applies_to: [korean-market, hangul, cjk, web, mobile]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Korean (Hangul) typography for product UI
11
+
12
+ Designing for Korean users requires deliberate adjustments. Latin defaults from MUI, Ant Design, or Tailwind do not translate. This is the floor.
13
+
14
+ ## Why Hangul is different
15
+
16
+ - **Glyph shape**: Hangul is composed of jamo blocks stacked in roughly square cells. Latin glyphs sit on a baseline; Hangul fills the cell.
17
+ - **Vertical metrics**: descenders (받침, batchim) reach noticeably lower than Latin descenders. Default Latin `line-height` truncates them or makes adjacent lines feel cramped.
18
+ - **Optical weight**: Korean fonts at the same numeric weight (e.g., 400) read **lighter** than Latin sans-serif. A "regular" Hangul body looks thin next to "regular" Inter.
19
+ - **Width**: Hangul characters are roughly fixed-width per syllable block. Reading speed depends more on line length than on tracking.
20
+ - **No italics**: traditional Hangul has no italic form. Italicized Hangul looks broken and is non-idiomatic. Use weight or color for emphasis instead.
21
+
22
+ ## Type scale adjustments
23
+
24
+ Start from your Latin scale, then apply:
25
+
26
+ | Property | Latin default | Korean adjustment |
27
+ | --- | --- | --- |
28
+ | `line-height` (body) | 1.5 | **1.6–1.7** |
29
+ | `line-height` (headings 24+px) | 1.3 | **1.4** |
30
+ | `letter-spacing` (body) | `0` or `-0.005em` | **`0`** (don't tighten) |
31
+ | `letter-spacing` (caps/labels) | `0.05em` | **`0`** — no all-caps in Hangul anyway |
32
+ | `font-weight` (body emphasis) | 500 (Medium) | **600** (SemiBold) — 500 reads too light |
33
+ | `font-weight` (UI labels) | 500 | **500–600** depending on font |
34
+
35
+ ## Recommended typefaces
36
+
37
+ ### Free / open-source (Korean-only)
38
+
39
+ | Font | License | Best for | Notes |
40
+ | --- | --- | --- | --- |
41
+ | **Pretendard** | OFL | Universal — body, UI, headings | De facto Korean Inter. Excellent variable. Pairs with itself for Latin (Pretendard mixes Inter glyphs). **Default recommendation.** |
42
+ | **Noto Sans Korean** (Noto Sans KR) | OFL | Body, system fallback | Google's pan-CJK. Heavy file size in static; use variable. |
43
+ | **Spoqa Han Sans Neo** | OFL | UI, formal product | Spoqa's UI-focused face. 7 weights. Slightly more rigid than Pretendard. |
44
+ | **Apple SD Gothic Neo** | system | iOS / macOS only | iOS native. Use for native apps only. |
45
+
46
+ ### Free fonts to avoid for product UI
47
+
48
+ - **Nanum Gothic** — designed for print legibility, lower x-height, looks dated in product UIs.
49
+ - **Malgun Gothic** — Windows system. Renders inconsistently across platforms.
50
+ - **Black Han Sans** etc. — display-only, not for body.
51
+
52
+ ### Pairing strategy
53
+
54
+ For Korean-primary products with English secondary content:
55
+
56
+ ```css
57
+ font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, 'Segoe UI',
58
+ 'Apple SD Gothic Neo', 'Noto Sans KR', sans-serif;
59
+ ```
60
+
61
+ Pretendard's design covers Latin and Hangul in matched proportions, so a single stack handles both. **Do not** pair `Inter` (Latin) + `Spoqa Han Sans` (Hangul) — the Latin x-heights mismatch.
62
+
63
+ For Korean-secondary products (English-primary with KR locale):
64
+
65
+ ```css
66
+ font-family: Inter, -apple-system, 'Apple SD Gothic Neo',
67
+ 'Noto Sans KR', sans-serif;
68
+ ```
69
+
70
+ Inter is Latin-only. The OS / Noto fallback handles Hangul. This is acceptable but the size-mismatch between Inter and Noto KR will be visible — tune `font-size-adjust: 0.5` (browser support 2024+) or accept the small inconsistency.
71
+
72
+ ## Numerical readout
73
+
74
+ Korean readers expect:
75
+ - **Numbers in Latin glyphs** (`1234`), not Hangul number words.
76
+ - **Comma thousands separator** (`1,234,567`) — same as US.
77
+ - **Won symbol**: `₩` prefix or `원` suffix. `₩1,200` is more "fintech/Western"; `1,200원` is more "consumer/local". Pick one and be consistent.
78
+ - **Date format**: `2026년 5월 7일` (formal), `2026.05.07` (compact), `2026-05-07` (technical). Default to `YYYY.MM.DD` for most product UIs.
79
+ - **Phone**: `010-1234-5678` (mobile), `02-1234-5678` (Seoul landline). Hyphenated, never spaces.
80
+
81
+ ## Common product UI strings — bar for tone
82
+
83
+ | Action | Casual / friendly | Polite / formal |
84
+ | --- | --- | --- |
85
+ | Save | 저장 | 저장하기 |
86
+ | Delete | 삭제 | 삭제하기 |
87
+ | Cancel | 취소 | 취소 |
88
+ | Confirm | 확인 | 확인 |
89
+ | Sign in | 로그인 | 로그인 |
90
+ | Sign out | 로그아웃 | 로그아웃 |
91
+ | Sign up | 가입 | 회원가입 |
92
+ | Submit | 제출 | 제출하기 |
93
+ | Loading | 로딩 중 | 불러오는 중 |
94
+ | Error | 오류 | 오류가 발생했습니다 |
95
+
96
+ Casual tone fits B2C, social, fintech consumer apps. Polite/formal fits enterprise, healthcare, finance B2B.
97
+
98
+ Avoid:
99
+ - Mixing tones within a screen.
100
+ - Direct translation of "Submit" (use 등록/저장 depending on context, rarely 제출 outside formal forms).
101
+ - Loanword preference where a clean Korean exists (저장 over 세이브).
102
+
103
+ ## Layout adjustments
104
+
105
+ - **Form labels**: above inputs (not beside) — Korean labels often run longer than English equivalents.
106
+ - **Button width**: minimum padding inline 16px. Korean labels like "회원가입하기" need width; tight buttons crop awkwardly.
107
+ - **Truncation**: Korean truncation with `…` reads cleanly per syllable; mid-word break is rare. CSS `text-overflow: ellipsis` works.
108
+ - **Word break**: avoid `word-break: break-all` for Hangul — it breaks mid-syllable. Use `word-break: keep-all` (browser-supported, prevents breaking inside a Hangul syllable cluster).
109
+ - **Justified text**: `text-align: justify` rarely looks good with Hangul; whitespace gaps are jarring. Stick to `left`.
110
+
111
+ ## Readability check
112
+
113
+ A Korean body paragraph is readable when:
114
+ - 14–16 px font-size on web, 15–17 pt on mobile native.
115
+ - Line length ≈ 35–40 Hangul characters per line (vs ~70 Latin characters).
116
+ - 1.6+ line-height.
117
+ - Sufficient `paragraph-spacing` (≥ 1em) — Hangul paragraphs blur together without it.
118
+
119
+ ## Cross-reference
120
+
121
+ - [knowledge/typography/type-scale-fundamentals.md](../typography/type-scale-fundamentals.md) — base scale knowledge
122
+ - [knowledge/typography/font-pairings.md](../typography/font-pairings.md) — Latin pairings (apply Korean adjustments on top)
123
+ - [knowledge/i18n/korean-publishing.md](korean-publishing.md) — store-listing / submission considerations