@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,316 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: Authentication flow design
4
+ applies_to: [signup, login, password-reset, 2fa, all-auth]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # Authentication flow design
11
+
12
+ The auth flow is the most-tested screen path in any product. Conversions die here. This is the floor.
13
+
14
+ ## The four flows
15
+
16
+ | Flow | Purpose |
17
+ | --- | --- |
18
+ | **Signup** | New user creates account |
19
+ | **Login** | Returning user authenticates |
20
+ | **Password reset** | User forgot password, recover |
21
+ | **2FA / verification** | Confirm identity (SMS / authenticator / 본인인증) |
22
+
23
+ Each is its own design challenge. Common mistake: treating them as one flow.
24
+
25
+ ## Signup — the highest-stakes screen
26
+
27
+ The user has chosen to commit. **Don't make them work harder than necessary.**
28
+
29
+ ### Length matters
30
+
31
+ Each field added to signup costs ~5–10% conversion. Cut everything that isn't critical:
32
+
33
+ | Cut | Defer to |
34
+ | --- | --- |
35
+ | Phone number | First time it's needed (2FA setup, SMS receipt) |
36
+ | Address | First checkout |
37
+ | Profile photo | Profile completion later |
38
+ | Birth date | First age-gated feature |
39
+ | Bio | Profile setup later |
40
+
41
+ ### Signup minimum
42
+
43
+ Korean fintech / consumer:
44
+ - Phone (with SMS verification) OR KakaoTalk login
45
+ - Optional email
46
+ - Required terms checkbox + separate marketing-consent (legal)
47
+
48
+ Western SaaS:
49
+ - Email
50
+ - Password (or magic-link / Google OAuth)
51
+ - Optional name
52
+
53
+ For Korean SaaS B2B:
54
+ - Email + password OR SSO
55
+
56
+ ### Form structure
57
+
58
+ Single column. Cite [`knowledge/patterns/form-design.md`](form-design.md):
59
+ - Labels above inputs.
60
+ - One field per row (mobile-first; can two-column in desktop for email/password).
61
+ - Required fields marked clearly; optionals tagged `(선택)`.
62
+
63
+ ### Social login order (Korea)
64
+
65
+ For Korean consumer apps:
66
+
67
+ ```
68
+ 1. KakaoTalk 로그인 ← top, yellow brand button
69
+ 2. NaverPay (or 네이버 로그인)
70
+ 3. Apple로 로그인 ← legally required for iOS
71
+ 4. Google로 로그인 ← required for Android distribution
72
+ ─────────────────
73
+ 또는
74
+ ─────────────────
75
+ 이메일 / 휴대폰으로 가입
76
+ ```
77
+
78
+ KakaoTalk login dominates Korean B2C. Burying it below email = 30%+ conversion loss.
79
+
80
+ For B2B SaaS in Korea: email/password first, then Google / Microsoft SSO. Kakao optional.
81
+
82
+ ### Honest defaults
83
+
84
+ - Marketing consent: **unchecked** by default (legal in Korea — see [`korean-publishing.md`](../i18n/korean-publishing.md)).
85
+ - "Subscribe to newsletter": separate from required terms.
86
+ - "Remember me": opt-in.
87
+ - Country: detect from IP, allow override.
88
+
89
+ ### Error handling
90
+
91
+ | Error | Message |
92
+ | --- | --- |
93
+ | Email taken | "이미 가입된 이메일입니다. [로그인하기]" with link |
94
+ | Phone taken | "이미 가입된 휴대폰입니다." |
95
+ | Weak password | "비밀번호는 8자 이상이어야 합니다." (during input, not on submit) |
96
+ | Network | "네트워크 연결을 확인해 주세요." |
97
+ | Vendor down (Kakao OAuth) | "카카오 로그인이 일시적으로 불가능합니다. 다른 방법으로 가입해 주세요." |
98
+
99
+ Cite [`knowledge/patterns/form-design.md`](form-design.md) for validation timing.
100
+
101
+ ## Login — fast path
102
+
103
+ Returning users want **speed**. Get out of their way.
104
+
105
+ ### Layout
106
+
107
+ ```
108
+ ┌──────────────────────────────────────┐
109
+ │ [Logo] │
110
+ │ │
111
+ │ 로그인 │
112
+ │ │
113
+ │ ┌─────────────────────────────┐ │
114
+ │ │ 이메일 │ │
115
+ │ └─────────────────────────────┘ │
116
+ │ ┌─────────────────────────────┐ │
117
+ │ │ 비밀번호 👁 │ │
118
+ │ └─────────────────────────────┘ │
119
+ │ │
120
+ │ ☐ 자동 로그인 비밀번호 찾기 → │
121
+ │ │
122
+ │ [로그인] │
123
+ │ │
124
+ │ ── 또는 ── │
125
+ │ │
126
+ │ [KakaoTalk으로 로그인] │
127
+ │ [Google로 로그인] │
128
+ │ │
129
+ │ 계정이 없으신가요? 가입하기 → │
130
+ └──────────────────────────────────────┘
131
+ ```
132
+
133
+ ### Best practices
134
+
135
+ - **Email and password autofill**: `autocomplete="email"`, `autocomplete="current-password"`. Enables password manager + browser save.
136
+ - **Show password toggle** (eye icon).
137
+ - **Caps Lock indicator** (when password field focused) — small UI win.
138
+ - **"Remember me" checkbox** — extends session beyond default.
139
+ - **"Forgot password" link** prominent — beside or below the password field.
140
+ - **"Sign up" link** at the bottom for users who landed on login by mistake.
141
+
142
+ ### Korean fintech specifics
143
+
144
+ - **KakaoTalk login** as fast-path button (often above email/password for B2C).
145
+ - **Biometric quick-login** (Face ID / fingerprint) for return visits — see [`examples/component-biometric-gate.md`](../../examples/component-biometric-gate.md).
146
+ - **PIN-only login** for fast access (after initial setup) — common in finance apps.
147
+
148
+ ## Password reset — the rescue
149
+
150
+ User is locked out. The flow must be:
151
+ 1. Frictionless to start
152
+ 2. Secure
153
+ 3. Clear about timing
154
+
155
+ ### Three-step flow
156
+
157
+ ```
158
+ [Email input] → [Email sent screen] → [User clicks link in email] → [New password screen] → [Login automatically]
159
+ ```
160
+
161
+ ### Step 1: Email input
162
+
163
+ Minimum: just email field + submit. Don't ask for security questions; they're 2010-coded.
164
+
165
+ ```
166
+ ┌──────────────────────────────────────┐
167
+ │ 비밀번호 찾기 │
168
+ │ │
169
+ │ 가입한 이메일을 입력하시면 재설정 링크를│
170
+ │ 보내드립니다. │
171
+ │ │
172
+ │ ┌─────────────────────────────┐ │
173
+ │ │ 이메일 │ │
174
+ │ └─────────────────────────────┘ │
175
+ │ │
176
+ │ [재설정 링크 보내기] │
177
+ └──────────────────────────────────────┘
178
+ ```
179
+
180
+ ### Step 2: Email sent confirmation
181
+
182
+ Show same message regardless of whether email exists (security):
183
+
184
+ ```
185
+ ┌──────────────────────────────────────┐
186
+ │ 이메일을 확인하세요 │
187
+ │ │
188
+ │ 입력한 이메일로 비밀번호 재설정 링크를 │
189
+ │ 보내드렸습니다. 메일이 오지 않으면 │
190
+ │ 스팸함을 확인해 주세요. │
191
+ │ │
192
+ │ [메일 다시 보내기] │
193
+ └──────────────────────────────────────┘
194
+ ```
195
+
196
+ **Don't reveal**: "이 이메일로 가입된 계정이 없습니다." — this leaks user enumeration data.
197
+
198
+ ### Step 3: New password
199
+
200
+ Link in email opens new-password screen:
201
+
202
+ ```
203
+ ┌──────────────────────────────────────┐
204
+ │ 새 비밀번호 설정 │
205
+ │ │
206
+ │ 새 비밀번호 │
207
+ │ ┌─────────────────────────────┐ │
208
+ │ │ •••••••• 👁 │ │
209
+ │ └─────────────────────────────┘ │
210
+ │ ✓ 8자 이상 │
211
+ │ ✓ 숫자 포함 │
212
+ │ │
213
+ │ [비밀번호 변경] │
214
+ └──────────────────────────────────────┘
215
+ ```
216
+
217
+ After success: log them in automatically. Don't ask them to log in again.
218
+
219
+ ### Token expiration
220
+
221
+ Reset links must expire (typical: 1 hour). Show the user when expired:
222
+
223
+ > "이 링크는 만료되었습니다. 다시 비밀번호 찾기를 해주세요."
224
+
225
+ ## 2FA / verification
226
+
227
+ After password (or as primary auth via magic link), confirm identity.
228
+
229
+ ### Methods
230
+
231
+ | Method | Strength | Use |
232
+ | --- | --- | --- |
233
+ | **SMS code** | Medium (sim swap risk) | Most consumer apps; Korean default |
234
+ | **Authenticator app** (Google Authenticator, Authy) | High | Power users, B2B |
235
+ | **Email code** | Low | Fallback |
236
+ | **Hardware key** (YubiKey, etc.) | Highest | Enterprise / dev tools |
237
+ | **Biometric** (FaceID/Fingerprint) | High (device) | Mobile re-auth |
238
+ | **본인인증 (PASS)** | High (Korea-specific) | Korean fintech / banking |
239
+
240
+ For Korean fintech: SMS + 본인인증 are required by law for many transactions.
241
+
242
+ ### SMS verification flow
243
+
244
+ Cite [`examples/component-input-otp.md`](../../examples/component-input-otp.md) and [`examples/component-otp-countdown.md`](../../examples/component-otp-countdown.md).
245
+
246
+ ```
247
+ [Enter phone] → SMS sent → [Enter 6-digit code] (with 3-min expiry + 30s resend cooldown) → [Verified]
248
+ ```
249
+
250
+ ### TOTP (authenticator app) setup
251
+
252
+ ```
253
+ [Show QR code] → User scans with authenticator → [Confirm with first code] → [Save backup codes]
254
+ ```
255
+
256
+ Provide:
257
+ - QR code (with manual key fallback for older authenticators)
258
+ - Backup codes (10 codes, single-use, downloadable)
259
+ - "Did this work?" verification step
260
+
261
+ ### Recovery
262
+
263
+ Always provide a recovery path:
264
+ - Backup codes (TOTP)
265
+ - "Use a different method" (fallback chain)
266
+ - Customer support contact (last resort)
267
+
268
+ ## Magic-link auth (passwordless)
269
+
270
+ Increasingly common alternative:
271
+
272
+ 1. User enters email
273
+ 2. App sends one-time login link
274
+ 3. User clicks link → logged in
275
+
276
+ Pros: no password to forget, no password storage on your side.
277
+ Cons: depends on email reliability; slow if email is delayed.
278
+
279
+ For Korean: less common than KakaoTalk login but rising.
280
+
281
+ ## Korean-specific patterns
282
+
283
+ Per [`knowledge/i18n/korean-product-conventions.md`](../i18n/korean-product-conventions.md):
284
+
285
+ | Pattern | Use |
286
+ | --- | --- |
287
+ | Phone-first auth | Default for consumer |
288
+ | KakaoTalk OAuth | Fastest path for B2C |
289
+ | 본인인증 (PASS) | High-value fintech / banking transactions |
290
+ | 휴대폰 인증 + 6자리 SMS code | Most common 2FA |
291
+ | 자동 로그인 (remember me) | Default opt-in for fintech (with biometric backup) |
292
+ | 보안 카드 / 공동인증서 | Legacy banking — falling out of use |
293
+
294
+ ## Anti-patterns
295
+
296
+ - **Password complexity rules that block password managers**: "must include 1 uppercase, 1 lowercase, 1 digit, 1 special char, no spaces, max 16 chars" — password managers can't generate or accept this. Allow long passphrases.
297
+ - **Hidden password field with no toggle**: users mistype constantly. Show toggle (eye icon).
298
+ - **Captcha at the end of long signup**: blocks valid users. Use invisible reCAPTCHA / hCaptcha.
299
+ - **Force email verification before any product use**: lets the user explore first; nag for verification on trigger.
300
+ - **"Are you human?" check on every login**: friction adds up. Reserve for suspicious activity.
301
+ - **Login redirect breaks deep links**: user clicks `/orders/123` → redirected to login → after login goes to home (not /orders/123). Always preserve intended URL.
302
+ - **No error message** when login fails — user can't tell if email is wrong, password is wrong, or account is locked.
303
+ - **Marketing-consent default-checked** (legal violation in Korea).
304
+ - **Mixed honorific level** in error messages (~합니다 in some, ~해요 in others).
305
+
306
+ ## Cross-reference
307
+
308
+ - [`knowledge/patterns/form-design.md`](form-design.md) — form orchestration
309
+ - [`knowledge/patterns/error-states.md`](error-states.md) — auth-specific errors
310
+ - [`knowledge/patterns/onboarding.md`](onboarding.md) — what comes after signup
311
+ - [`knowledge/i18n/korean-product-conventions.md`](../i18n/korean-product-conventions.md) — KR auth conventions
312
+ - [`knowledge/i18n/korean-payments.md`](../i18n/korean-payments.md) — 본인인증 details
313
+ - [`examples/component-input-otp.md`](../../examples/component-input-otp.md) — SMS code input
314
+ - [`examples/component-otp-countdown.md`](../../examples/component-otp-countdown.md) — timer
315
+ - [`examples/component-pass-auth.md`](../../examples/component-pass-auth.md) — Korean 본인인증
316
+ - [`examples/component-biometric-gate.md`](../../examples/component-biometric-gate.md) — biometric
@@ -0,0 +1,182 @@
1
+ <!-- hand-written -->
2
+ ---
3
+ title: B2B onboarding flows — pacing, sensitive data, bilingual
4
+ applies_to: [onboarding, forms, b2b, korean]
5
+ version: 1.0.0
6
+ last_updated: 2026-05
7
+ stability: stable
8
+ ---
9
+
10
+ # B2B onboarding flows
11
+
12
+ Onboarding for B2B SaaS — especially HR / payroll / finance products handling sensitive employee data — has constraints that consumer onboarding doesn't. This file covers the decisions that recur across Korean B2B onboarding products.
13
+
14
+ This file emerged from the v4.7 dogfood test (Korean HR onboarding scenario). Pairs with [`onboarding.md`](onboarding.md) (general) and [`form-design.md`](form-design.md).
15
+
16
+ ## What's different from B2C
17
+
18
+ | Concern | B2C | B2B (especially HR / fintech) |
19
+ | --- | --- | --- |
20
+ | Data sensitivity | Email / name | 주민등록번호 / 통장 사본 / 계약서 |
21
+ | Verification flow | Self-driven | HR mediates; admin approves |
22
+ | Multi-step pacing | 2-3 steps | 5-9 steps (legal disclosures) |
23
+ | Auto-save | Optional | Required (long flows; resume next day) |
24
+ | Locale | Single | Often KR primary + EN toggle (international hires) |
25
+ | Audit trail | Light | Required (when, who, what changed) |
26
+ | Dropout cost | User abandons app | HR has to re-onboard (high cost per drop) |
27
+
28
+ ## Pacing
29
+
30
+ ### 5-9 steps is the band
31
+
32
+ Fewer than 5: typically missing legal disclosures. More than 9: completion drops sharply.
33
+
34
+ Standard Korean HR onboarding sequence:
35
+
36
+ 1. **계정 생성 / 본인 확인** — email + password OR SSO via company IdP. Usually pre-set by HR.
37
+ 2. **기본 정보** — 이름 / 사번 / 입사일 / 부서.
38
+ 3. **연락처 / 주소** — phone, address, emergency contact.
39
+ 4. **신분증 업로드** — 주민등록증 or 운전면허증 (필수). Front + back.
40
+ 5. **계좌 정보** — 통장 사본 + 계좌번호 (for payroll). Bank verification API where available.
41
+ 6. **계약서 확인 + 서명** — read PDF, e-signature. 청약철회 disclosure.
42
+ 7. **세무 / 보험** — 4대보험 가입, 부양가족 등록 (if applicable).
43
+ 8. **IT 계정 / 장비 신청** — laptop model, software access requests.
44
+ 9. **입사 첫 주 체크리스트** — onboarding tasks scheduled with manager.
45
+
46
+ ### Pace markers
47
+
48
+ Show "X / N" prominently. New hires *will* abandon mid-flow if they can't see the end.
49
+
50
+ ```tsx
51
+ <Stack direction="row" alignItems="center" gap={1}>
52
+ <Typography variant="caption" color="text.secondary">
53
+ 3 / 9
54
+ </Typography>
55
+ <LinearProgress value={(3/9)*100} sx={{ flex: 1 }} />
56
+ </Stack>
57
+ ```
58
+
59
+ Not "Step 3 of 9" in English on Korean UI. Use "3 / 9" or "3단계 / 9단계".
60
+
61
+ ## Auto-save
62
+
63
+ ### Why required, not optional
64
+
65
+ A new hire fills out their info Friday afternoon. They get pulled into orientation. They don't return until Monday. If their work was lost: they're frustrated, HR is frustrated, and it leaks into the new-job experience.
66
+
67
+ ### Strategy
68
+
69
+ - **Auto-save on field blur** — Fire a debounced save (500ms after last change). Show a subtle "저장됨 5분 전" indicator.
70
+ - **Server-side draft state** — Persist to DB, not just localStorage. Cross-device resume.
71
+ - **Resume notification** — On return, show a Dialog: "이전에 작성한 내용이 있어요. 이어서 할까요?"
72
+
73
+ ### Don't
74
+
75
+ - Don't auto-submit. Auto-save is "we won't lose your work"; submit is explicit user intent.
76
+ - Don't show "Saving..." every 2 seconds. Aggregate to a single subtle indicator.
77
+
78
+ ## Sensitive data fields
79
+
80
+ ### 주민등록번호 (Resident Registration Number)
81
+
82
+ - 13 digits, two parts (6-7 with hyphen).
83
+ - **Mask after first 6 digits** in the UI (`123456-*******`). Show full only when actively editing AND the field has focus.
84
+ - **Don't autocomplete** (`autocomplete="off"`).
85
+ - **Don't log** in any audit / analytics. Server-side: hash before storage; never log plain.
86
+ - For non-Korean hires, provide alternate "Tax ID" / passport number flow.
87
+
88
+ ### 통장 사본 (Bankbook copy)
89
+
90
+ - Upload accepts PDF / JPG / PNG.
91
+ - Max size 5 MB.
92
+ - Show preview after upload (privacy: blur account number partially).
93
+ - Provide "사진 다시 찍기" button — phone uploads often have glare.
94
+
95
+ ### Address (주소)
96
+
97
+ - Use 도로명 주소 (road name address) — government standard since 2014.
98
+ - Integrate Daum Postcode API or KakaoMap address search. Free for most use cases; cite [`knowledge/i18n/korean-product-conventions.md`](../i18n/korean-product-conventions.md).
99
+ - Don't require apartment / dong / ho — accept text input.
100
+
101
+ ### Required disclosures
102
+
103
+ Korean labor law (근로기준법) + 개인정보보호법:
104
+
105
+ - **개인정보 수집 / 이용 동의** — checkbox + link to full text. Not pre-checked.
106
+ - **민감정보 (주민번호 / 계좌) 처리 동의** — separate checkbox.
107
+ - **마케팅 수신 동의** — opt-in (NOT opt-out). Default unchecked.
108
+ - **3rd-party data sharing** — list each recipient + purpose.
109
+
110
+ Cite [`knowledge/patterns/auth-flow-design.md`](auth-flow-design.md) for consent UX patterns.
111
+
112
+ ## Bilingual KR + EN flows
113
+
114
+ ### When to support both
115
+
116
+ - International hires (foreign nationals at Korean companies).
117
+ - Korean expats returning.
118
+ - Korean companies with English working language (some scaleups).
119
+
120
+ ### Strategy
121
+
122
+ - **Toggle at top of every onboarding step**.
123
+ - **Default to KR** for `.kr` domain access; default to EN for non-KR locale.
124
+ - **Mirrored translation, not parallel screens** — same flow, just UI strings swapped.
125
+ - **Don't auto-translate** form labels. Hire a Korean-fluent EN translator who understands HR terminology (사번 → "employee ID" not "company number"; 부서 → "department" not "branch").
126
+
127
+ ### Mixed-locale data
128
+
129
+ - Names: accept both Hangul AND Latin. Capture both ("English name (영문명)" optional field).
130
+ - Phone: KR format primary; international format for foreign hires (+82-10-...).
131
+ - Bank: KR banks always; some companies allow international account for foreign hires.
132
+
133
+ ## State recovery / error recovery
134
+
135
+ ### "Submit failed" on the final screen
136
+
137
+ Worst-case scenario in long onboarding. User has filled 9 screens, hits submit, network errors.
138
+
139
+ **Strategy**:
140
+ 1. Don't reset any form state on error.
141
+ 2. Surface error inline + as toast.
142
+ 3. "다시 시도" button — re-submits the saved draft.
143
+ 4. If repeated failures: "관리자에게 알리기" — sends the draft to HR via different channel.
144
+
145
+ ### Mid-flow validation errors
146
+
147
+ Validate per-step (not per-field), AT submit click of "다음 단계":
148
+ - If invalid: highlight all bad fields at once. Don't drip them out one-at-a-time as user fixes each.
149
+ - Scroll to first invalid field. Focus it. Cite [`knowledge/a11y/keyboard-and-focus.md`](../a11y/keyboard-and-focus.md).
150
+
151
+ ## What HR sees vs new hire sees
152
+
153
+ Two views of the same flow:
154
+
155
+ | New hire screen | HR admin view |
156
+ | --- | --- |
157
+ | Fill form | See completion % + flagged items |
158
+ | Upload documents | Review uploads + approve/reject |
159
+ | Sign contract | See timestamp + IP + signature image |
160
+ | Submit | Get notified; can edit on behalf of hire |
161
+
162
+ Build the HR side AFTER the hire side has been dogfooded with 5+ real users. The temptation is to build them together — but HR features need real flow understanding first.
163
+
164
+ ## Don't
165
+
166
+ - Don't put 주민등록번호 in step 1. It's high-friction; ease in with name + email first.
167
+ - Don't show "0% complete" — show "1 / 9" so users feel progress immediately.
168
+ - Don't make the cancel button hard to find — users will close the tab if Esc doesn't work, losing draft state.
169
+ - Don't auto-translate KR ↔ EN — use a real translator.
170
+ - Don't ship without auto-save. Period.
171
+ - Don't log sensitive fields in any analytics, ever.
172
+ - Don't put marketing opt-in on the same screen as legal-required consents — separate, optional, unchecked.
173
+
174
+ ## Cross-reference
175
+
176
+ - [`knowledge/patterns/onboarding.md`](onboarding.md) — general onboarding patterns
177
+ - [`knowledge/patterns/form-design.md`](form-design.md) — form pacing + validation
178
+ - [`knowledge/patterns/auth-flow-design.md`](auth-flow-design.md) — consent UX
179
+ - [`knowledge/i18n/korean-product-conventions.md`](../i18n/korean-product-conventions.md) — Korean form conventions
180
+ - [`knowledge/i18n/korean-payments.md`](../i18n/korean-payments.md) — bank account capture
181
+ - [`knowledge/a11y/keyboard-and-focus.md`](../a11y/keyboard-and-focus.md) — focus management
182
+ - [`examples/cases/dogfood-v4-korean-hr-onboarding.md`](../../examples/cases/dogfood-v4-korean-hr-onboarding.md) — worked example using this knowledge