@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.
- package/.claude-plugin/plugin.json +164 -0
- package/AGENTS.ko.md +126 -0
- package/AGENTS.md +182 -0
- package/CHANGELOG.md +6883 -0
- package/CLAUDE.md +39 -0
- package/LICENSE +21 -0
- package/README.ko.md +245 -0
- package/README.md +277 -0
- package/agents/README.md +14 -0
- package/agents/a11y-reviewer.md +121 -0
- package/agents/component-architect.md +57 -0
- package/agents/design-critic.md +46 -0
- package/agents/token-extractor.md +63 -0
- package/cli/bin/design-ai-mcp.mjs +6 -0
- package/cli/bin/design-ai.mjs +40 -0
- package/cli/commands/audit.mjs +111 -0
- package/cli/commands/check.mjs +226 -0
- package/cli/commands/doctor.mjs +141 -0
- package/cli/commands/examples.mjs +58 -0
- package/cli/commands/help.mjs +271 -0
- package/cli/commands/install.mjs +161 -0
- package/cli/commands/learn.mjs +1871 -0
- package/cli/commands/list.mjs +143 -0
- package/cli/commands/mcp.mjs +27 -0
- package/cli/commands/pack.mjs +211 -0
- package/cli/commands/prompt.mjs +199 -0
- package/cli/commands/route.mjs +247 -0
- package/cli/commands/search.mjs +60 -0
- package/cli/commands/show.mjs +52 -0
- package/cli/commands/site.mjs +558 -0
- package/cli/commands/status.mjs +161 -0
- package/cli/commands/uninstall.mjs +119 -0
- package/cli/commands/update.mjs +184 -0
- package/cli/commands/version.mjs +94 -0
- package/cli/commands/workspace.mjs +176 -0
- package/cli/lib/brief.mjs +52 -0
- package/cli/lib/check.mjs +642 -0
- package/cli/lib/dispatch.mjs +109 -0
- package/cli/lib/doctor.mjs +505 -0
- package/cli/lib/examples.mjs +258 -0
- package/cli/lib/exec.mjs +63 -0
- package/cli/lib/help-flags.mjs +5 -0
- package/cli/lib/learn.mjs +3694 -0
- package/cli/lib/log.mjs +47 -0
- package/cli/lib/mcp-server.mjs +426 -0
- package/cli/lib/output.mjs +101 -0
- package/cli/lib/pack.mjs +599 -0
- package/cli/lib/paths.mjs +63 -0
- package/cli/lib/prompt.mjs +603 -0
- package/cli/lib/route.mjs +740 -0
- package/cli/lib/search.mjs +158 -0
- package/cli/lib/show.mjs +161 -0
- package/cli/lib/signals.mjs +2337 -0
- package/cli/lib/site.mjs +6617 -0
- package/cli/lib/skill-proposals.mjs +2046 -0
- package/cli/lib/suggest.mjs +66 -0
- package/cli/lib/workspace.mjs +1056 -0
- package/commands/README.md +25 -0
- package/commands/component-spec.md +34 -0
- package/commands/conversational.md +44 -0
- package/commands/design-from-brief.md +141 -0
- package/commands/design-review.md +62 -0
- package/commands/document-from-brief.md +47 -0
- package/commands/extract-tokens.md +38 -0
- package/commands/game-ui.md +40 -0
- package/commands/illustration.md +37 -0
- package/commands/iterate.md +167 -0
- package/commands/motion-design.md +54 -0
- package/commands/palette-from-brand.md +50 -0
- package/commands/print.md +49 -0
- package/commands/slide-deck.md +46 -0
- package/commands/spatial.md +47 -0
- package/commands/stability-review.md +74 -0
- package/commands/video.md +42 -0
- package/commands/website-improvement.md +77 -0
- package/docs/AGENT-DEVELOPMENT.md +658 -0
- package/docs/AI-LEARNING.md +429 -0
- package/docs/AIDER-INTEGRATION.md +224 -0
- package/docs/ARCHITECTURE.ko.md +183 -0
- package/docs/ARCHITECTURE.md +105 -0
- package/docs/CODEX-INTEGRATION.md +311 -0
- package/docs/COMPANY-WEBSITE-DOGFOOD.ko.md +144 -0
- package/docs/COMPANY-WEBSITE-DOGFOOD.md +150 -0
- package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.ko.md +153 -0
- package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.md +154 -0
- package/docs/CONTRIBUTING.ko.md +203 -0
- package/docs/CONTRIBUTING.md +242 -0
- package/docs/CURSOR-INTEGRATION.md +220 -0
- package/docs/DISTRIBUTION.ko.md +248 -0
- package/docs/DISTRIBUTION.md +253 -0
- package/docs/DOGFOOD-FINDINGS.md +180 -0
- package/docs/DOGFOOD-V4-FINDINGS.md +139 -0
- package/docs/DOGFOOD-V4-MKDOCS-FINDINGS.md +233 -0
- package/docs/DOGFOOD-V4-NPM-FINDINGS.md +157 -0
- package/docs/DOGFOOD-V4-VSCODE-FINDINGS.md +135 -0
- package/docs/FIGMA-INTEGRATION.md +222 -0
- package/docs/MCP-INTEGRATION.md +243 -0
- package/docs/MIGRATION-v4.md +121 -0
- package/docs/PLUGIN-PACKAGING.md +240 -0
- package/docs/PRODUCT-READINESS.md +66 -0
- package/docs/QUICKSTART.ko.md +178 -0
- package/docs/QUICKSTART.md +179 -0
- package/docs/RELEASE-CHECKLIST.md +292 -0
- package/docs/ROADMAP.md +19495 -0
- package/docs/SESSION-LOG.md +940 -0
- package/docs/TOKEN-SYNC.md +237 -0
- package/docs/USING.ko.md +206 -0
- package/docs/USING.md +218 -0
- package/docs/WEBSITE-IMPROVEMENT.ko.md +75 -0
- package/docs/WEBSITE-IMPROVEMENT.md +89 -0
- package/docs/announcements/README.md +56 -0
- package/docs/announcements/dev-to-korea.md +206 -0
- package/docs/announcements/hashnode-post.ko.md +232 -0
- package/docs/announcements/okky-post.ko.md +158 -0
- package/docs/announcements/press-kit.md +101 -0
- package/docs/announcements/reddit-r-korea.md +196 -0
- package/docs/announcements/show-hn.md +114 -0
- package/docs/announcements/twitter-thread.md +255 -0
- package/docs/external-status.md +34 -0
- package/docs/integrations/aider-walkthrough.ko.md +275 -0
- package/docs/integrations/aider-walkthrough.md +274 -0
- package/docs/integrations/codex-walkthrough.ko.md +297 -0
- package/docs/integrations/codex-walkthrough.md +297 -0
- package/docs/integrations/cursor-walkthrough.ko.md +281 -0
- package/docs/integrations/cursor-walkthrough.md +284 -0
- package/docs/integrations/design-ai-mcp-server.md +169 -0
- package/docs/integrations/figma-mcp.md +149 -0
- package/docs/integrations/github-mcp.md +178 -0
- package/docs/integrations/linear-mcp.md +215 -0
- package/docs/integrations/notion-mcp.md +174 -0
- package/docs/integrations/sdk-walkthrough.ko.md +375 -0
- package/docs/integrations/sdk-walkthrough.md +375 -0
- package/docs/integrations/slack-mcp.md +208 -0
- package/docs/integrations/vscode-walkthrough.ko.md +202 -0
- package/docs/integrations/vscode-walkthrough.md +205 -0
- package/docs/requirements.txt +16 -0
- package/docs/site-overrides/extra.css +83 -0
- package/docs/site-overrides/favicon.svg +4 -0
- package/docs/site-overrides/logo.svg +10 -0
- package/docs/site-overrides/main.html +18 -0
- package/docs/website-console/app.js +2540 -0
- package/docs/website-console/index.html +24 -0
- package/docs/website-console/styles.css +975 -0
- package/examples/README.md +252 -0
- package/examples/cases/dogfood-v4-korean-hr-onboarding.md +356 -0
- package/examples/component-accordion-actions.md +153 -0
- package/examples/component-accordion-details.md +147 -0
- package/examples/component-accordion-summary.md +180 -0
- package/examples/component-accordion.md +229 -0
- package/examples/component-account-card.md +284 -0
- package/examples/component-address-input.md +260 -0
- package/examples/component-affix.md +190 -0
- package/examples/component-alert-dialog.md +210 -0
- package/examples/component-alert-title.md +77 -0
- package/examples/component-alert.md +192 -0
- package/examples/component-amount-input.md +278 -0
- package/examples/component-anchor.md +198 -0
- package/examples/component-app-bar.md +249 -0
- package/examples/component-aspect-ratio.md +156 -0
- package/examples/component-auto-complete.md +199 -0
- package/examples/component-avatar-group.md +170 -0
- package/examples/component-avatar.md +191 -0
- package/examples/component-back-top.md +123 -0
- package/examples/component-backdrop.md +148 -0
- package/examples/component-badge.md +181 -0
- package/examples/component-banner.md +237 -0
- package/examples/component-biometric-gate.md +281 -0
- package/examples/component-blockquote.md +153 -0
- package/examples/component-border-beam.md +207 -0
- package/examples/component-bottom-navigation.md +226 -0
- package/examples/component-box.md +112 -0
- package/examples/component-breadcrumb.md +222 -0
- package/examples/component-button-base.md +190 -0
- package/examples/component-button-group.md +117 -0
- package/examples/component-button.md +213 -0
- package/examples/component-calendar.md +280 -0
- package/examples/component-callout.md +131 -0
- package/examples/component-card-actions.md +101 -0
- package/examples/component-card-content.md +90 -0
- package/examples/component-card-header.md +122 -0
- package/examples/component-card-media.md +79 -0
- package/examples/component-card.md +233 -0
- package/examples/component-carousel.md +266 -0
- package/examples/component-cascader.md +135 -0
- package/examples/component-category-picker.md +271 -0
- package/examples/component-chart.md +237 -0
- package/examples/component-chat-interface.md +399 -0
- package/examples/component-checkbox.md +149 -0
- package/examples/component-click-away-listener.md +87 -0
- package/examples/component-code.md +213 -0
- package/examples/component-collapsible.md +219 -0
- package/examples/component-color-picker.md +110 -0
- package/examples/component-combobox.md +267 -0
- package/examples/component-command.md +299 -0
- package/examples/component-config-provider.md +190 -0
- package/examples/component-context-menu.md +179 -0
- package/examples/component-css-baseline.md +148 -0
- package/examples/component-date-picker.md +249 -0
- package/examples/component-descriptions.md +242 -0
- package/examples/component-dialog-actions.md +111 -0
- package/examples/component-dialog-content-text.md +76 -0
- package/examples/component-dialog-content.md +105 -0
- package/examples/component-dialog-title.md +104 -0
- package/examples/component-dialog.md +176 -0
- package/examples/component-divider.md +182 -0
- package/examples/component-doc-page.md +217 -0
- package/examples/component-drawer.md +257 -0
- package/examples/component-dropdown.md +220 -0
- package/examples/component-email-layout.md +253 -0
- package/examples/component-empty-state.md +269 -0
- package/examples/component-empty.md +172 -0
- package/examples/component-fade.md +87 -0
- package/examples/component-feature-grid.md +201 -0
- package/examples/component-field.md +266 -0
- package/examples/component-filled-input.md +114 -0
- package/examples/component-flex.md +117 -0
- package/examples/component-float-button.md +214 -0
- package/examples/component-form-control-label.md +134 -0
- package/examples/component-form-control.md +113 -0
- package/examples/component-form-controls.md +251 -0
- package/examples/component-form-group.md +86 -0
- package/examples/component-form-helper-text.md +95 -0
- package/examples/component-form-label.md +98 -0
- package/examples/component-form.md +291 -0
- package/examples/component-game-hud.md +362 -0
- package/examples/component-game-menu.md +327 -0
- package/examples/component-grid.md +140 -0
- package/examples/component-grow.md +79 -0
- package/examples/component-hero-block.md +252 -0
- package/examples/component-hover-card.md +211 -0
- package/examples/component-icon-button.md +142 -0
- package/examples/component-icon.md +102 -0
- package/examples/component-illustration.md +280 -0
- package/examples/component-image-list.md +107 -0
- package/examples/component-image.md +282 -0
- package/examples/component-input-adornment.md +101 -0
- package/examples/component-input-base.md +134 -0
- package/examples/component-input-number.md +141 -0
- package/examples/component-input-otp.md +271 -0
- package/examples/component-input.md +213 -0
- package/examples/component-item.md +243 -0
- package/examples/component-kbd.md +197 -0
- package/examples/component-krw-amount.md +219 -0
- package/examples/component-label.md +118 -0
- package/examples/component-layout.md +217 -0
- package/examples/component-link.md +223 -0
- package/examples/component-list-item-avatar.md +72 -0
- package/examples/component-list-item-button.md +139 -0
- package/examples/component-list-item-icon.md +82 -0
- package/examples/component-list-item-text.md +98 -0
- package/examples/component-list-item.md +116 -0
- package/examples/component-list-subheader.md +70 -0
- package/examples/component-list.md +198 -0
- package/examples/component-loading-button.md +125 -0
- package/examples/component-loading-sequence.md +254 -0
- package/examples/component-lottie-player.md +279 -0
- package/examples/component-masonry.md +191 -0
- package/examples/component-mentions.md +189 -0
- package/examples/component-menu-item.md +102 -0
- package/examples/component-menu-list.md +98 -0
- package/examples/component-menu.md +139 -0
- package/examples/component-menubar.md +259 -0
- package/examples/component-message.md +162 -0
- package/examples/component-mobile-stepper.md +155 -0
- package/examples/component-modal.md +220 -0
- package/examples/component-navigation-menu.md +295 -0
- package/examples/component-notification.md +166 -0
- package/examples/component-otp-countdown.md +245 -0
- package/examples/component-outlined-input.md +145 -0
- package/examples/component-page-transition.md +281 -0
- package/examples/component-pagination.md +226 -0
- package/examples/component-paper.md +199 -0
- package/examples/component-pass-auth.md +265 -0
- package/examples/component-payment-brand-button.md +253 -0
- package/examples/component-payment-method-selector.md +272 -0
- package/examples/component-payment-receipt.md +277 -0
- package/examples/component-popconfirm.md +144 -0
- package/examples/component-popover.md +239 -0
- package/examples/component-popper.md +129 -0
- package/examples/component-pricing-cards.md +247 -0
- package/examples/component-progress.md +195 -0
- package/examples/component-qr-code.md +201 -0
- package/examples/component-radio.md +167 -0
- package/examples/component-rate.md +202 -0
- package/examples/component-resizable.md +163 -0
- package/examples/component-result.md +270 -0
- package/examples/component-scroll-area.md +199 -0
- package/examples/component-scroll-reveal.md +320 -0
- package/examples/component-segmented.md +178 -0
- package/examples/component-select.md +258 -0
- package/examples/component-separator.md +177 -0
- package/examples/component-sheet.md +277 -0
- package/examples/component-sidebar.md +257 -0
- package/examples/component-skeleton.md +178 -0
- package/examples/component-slide.md +89 -0
- package/examples/component-slider.md +208 -0
- package/examples/component-snackbar-content.md +92 -0
- package/examples/component-snackbar.md +121 -0
- package/examples/component-sonner.md +165 -0
- package/examples/component-space.md +125 -0
- package/examples/component-spatial-locomotion.md +373 -0
- package/examples/component-spatial-panel.md +330 -0
- package/examples/component-speed-dial-action.md +78 -0
- package/examples/component-speed-dial.md +177 -0
- package/examples/component-spin.md +173 -0
- package/examples/component-spinner.md +204 -0
- package/examples/component-splitter.md +210 -0
- package/examples/component-stack.md +130 -0
- package/examples/component-statistic.md +282 -0
- package/examples/component-step-button.md +157 -0
- package/examples/component-step-connector.md +157 -0
- package/examples/component-step-content.md +121 -0
- package/examples/component-step-icon.md +115 -0
- package/examples/component-step-label.md +101 -0
- package/examples/component-step.md +84 -0
- package/examples/component-steps.md +264 -0
- package/examples/component-stock-chart.md +251 -0
- package/examples/component-swipeable-drawer.md +149 -0
- package/examples/component-switch.md +99 -0
- package/examples/component-tab-scroll-button.md +180 -0
- package/examples/component-tab.md +120 -0
- package/examples/component-table-body.md +82 -0
- package/examples/component-table-cell.md +118 -0
- package/examples/component-table-container.md +75 -0
- package/examples/component-table-footer.md +72 -0
- package/examples/component-table-head.md +78 -0
- package/examples/component-table-pagination.md +137 -0
- package/examples/component-table-row.md +113 -0
- package/examples/component-table-sort-label.md +109 -0
- package/examples/component-table.md +202 -0
- package/examples/component-tabs.md +184 -0
- package/examples/component-tag-badge.md +309 -0
- package/examples/component-tag.md +102 -0
- package/examples/component-testimonial-carousel.md +218 -0
- package/examples/component-textarea-autosize.md +114 -0
- package/examples/component-textarea.md +173 -0
- package/examples/component-time-picker.md +205 -0
- package/examples/component-timeline.md +170 -0
- package/examples/component-toast.md +224 -0
- package/examples/component-toggle-button.md +129 -0
- package/examples/component-toggle.md +220 -0
- package/examples/component-toolbar.md +104 -0
- package/examples/component-tooltip.md +178 -0
- package/examples/component-tour.md +176 -0
- package/examples/component-transaction-list-item.md +243 -0
- package/examples/component-transfer.md +156 -0
- package/examples/component-tree-select.md +202 -0
- package/examples/component-tree.md +297 -0
- package/examples/component-typography.md +215 -0
- package/examples/component-upload.md +295 -0
- package/examples/component-video-hero.md +409 -0
- package/examples/component-video-player.md +340 -0
- package/examples/component-voice-input.md +408 -0
- package/examples/component-watermark.md +217 -0
- package/examples/component-zoom.md +92 -0
- package/examples/doc-explanation-example.md +196 -0
- package/examples/doc-how-to-example.md +205 -0
- package/examples/doc-tutorial-example.md +162 -0
- package/examples/dogfood-korean-fintech-system.md +433 -0
- package/examples/email-transactional-example.md +259 -0
- package/examples/palette-saas-violet.md +235 -0
- package/examples/print-business-card-spec.md +205 -0
- package/examples/print-packaging-spec.md +285 -0
- package/examples/report-example.md +228 -0
- package/examples/slide-deck-example.md +237 -0
- package/examples/website-improvement-report.md +128 -0
- package/examples/website-improvement-workspace.json +126 -0
- package/install.sh +189 -0
- package/knowledge/COVERAGE.md +740 -0
- package/knowledge/PRINCIPLES.md +108 -0
- package/knowledge/a11y/contrast.md +70 -0
- package/knowledge/a11y/keyboard-and-focus.md +108 -0
- package/knowledge/colors/color-theory.md +90 -0
- package/knowledge/colors/mui-palette-structure.md +105 -0
- package/knowledge/colors/palettes-by-product-type.md +876 -0
- package/knowledge/components/INDEX.md +231 -0
- package/knowledge/components/index.json +1470 -0
- package/knowledge/components/shadcn-registry.md +159 -0
- package/knowledge/conversational/ai-chat-interfaces.md +323 -0
- package/knowledge/conversational/chatbot-design.md +312 -0
- package/knowledge/conversational/conversational-ui-fundamentals.md +299 -0
- package/knowledge/conversational/korean-voice-conventions.md +281 -0
- package/knowledge/conversational/voice-ui-patterns.md +297 -0
- package/knowledge/design-tokens/ant-design.md +124 -0
- package/knowledge/design-tokens/material-3.md +235 -0
- package/knowledge/design-tokens/polaris-and-carbon.md +231 -0
- package/knowledge/design-tokens/tailwind-v4.md +284 -0
- package/knowledge/game-ui/game-accessibility.md +317 -0
- package/knowledge/game-ui/game-ui-fundamentals.md +281 -0
- package/knowledge/game-ui/hud-design.md +324 -0
- package/knowledge/game-ui/korean-gaming-conventions.md +312 -0
- package/knowledge/game-ui/menu-systems.md +388 -0
- package/knowledge/i18n/korean-app-store-visual.md +223 -0
- package/knowledge/i18n/korean-document-style.md +301 -0
- package/knowledge/i18n/korean-payments.md +211 -0
- package/knowledge/i18n/korean-product-conventions.md +96 -0
- package/knowledge/i18n/korean-publishing.md +139 -0
- package/knowledge/i18n/korean-typography.md +123 -0
- package/knowledge/icons/curated-sets.md +225 -0
- package/knowledge/illustration/hero-illustrations.md +234 -0
- package/knowledge/illustration/illustration-systems.md +221 -0
- package/knowledge/illustration/mascot-design.md +208 -0
- package/knowledge/illustration/spot-illustrations.md +246 -0
- package/knowledge/illustration/svg-optimization.md +308 -0
- package/knowledge/layout/spacing-and-grid.md +119 -0
- package/knowledge/motion/app-loading-sequences.md +277 -0
- package/knowledge/motion/choreography-depth.md +297 -0
- package/knowledge/motion/marketing-motion.md +223 -0
- package/knowledge/motion/micro-interactions.md +266 -0
- package/knowledge/motion/motion-tools.md +281 -0
- package/knowledge/motion/principles.md +126 -0
- package/knowledge/patterns/auth-flow-design.md +316 -0
- package/knowledge/patterns/b2b-onboarding-flows.md +182 -0
- package/knowledge/patterns/brand-identity.md +238 -0
- package/knowledge/patterns/brand-references.md +97 -0
- package/knowledge/patterns/chart-color-encoding.md +269 -0
- package/knowledge/patterns/chart-types.md +344 -0
- package/knowledge/patterns/dashboard-composition.md +299 -0
- package/knowledge/patterns/design-system-qa.md +356 -0
- package/knowledge/patterns/document-typography.md +248 -0
- package/knowledge/patterns/email-design.md +338 -0
- package/knowledge/patterns/empty-states.md +263 -0
- package/knowledge/patterns/error-states.md +318 -0
- package/knowledge/patterns/form-design.md +237 -0
- package/knowledge/patterns/information-architecture.md +341 -0
- package/knowledge/patterns/landing-hero-design.md +283 -0
- package/knowledge/patterns/landing-page-patterns.md +681 -0
- package/knowledge/patterns/list-and-feed.md +371 -0
- package/knowledge/patterns/mobile-navigation.md +278 -0
- package/knowledge/patterns/money-and-amount.md +301 -0
- package/knowledge/patterns/onboarding.md +300 -0
- package/knowledge/patterns/pricing-page-design.md +261 -0
- package/knowledge/patterns/realtime-data.md +280 -0
- package/knowledge/patterns/report-design.md +330 -0
- package/knowledge/patterns/search-ux.md +373 -0
- package/knowledge/patterns/settings-page.md +325 -0
- package/knowledge/patterns/slide-deck-design.md +316 -0
- package/knowledge/patterns/styles-catalog.md +2599 -0
- package/knowledge/patterns/technical-writing.md +306 -0
- package/knowledge/patterns/ui-reasoning.md +1853 -0
- package/knowledge/patterns/ux-guidelines.md +1454 -0
- package/knowledge/platforms/react-native.md +395 -0
- package/knowledge/print/brochures-and-flyers.md +276 -0
- package/knowledge/print/korean-print-conventions.md +284 -0
- package/knowledge/print/packaging.md +321 -0
- package/knowledge/print/print-fundamentals.md +238 -0
- package/knowledge/print/signage-and-posters.md +235 -0
- package/knowledge/print/stationery.md +262 -0
- package/knowledge/spatial/ar-patterns.md +253 -0
- package/knowledge/spatial/comfort-and-accessibility.md +245 -0
- package/knowledge/spatial/spatial-design-fundamentals.md +346 -0
- package/knowledge/spatial/spatial-ui-elements.md +343 -0
- package/knowledge/spatial/vr-patterns.md +302 -0
- package/knowledge/typography/font-pairings.md +332 -0
- package/knowledge/typography/mui-type-scale.md +57 -0
- package/knowledge/typography/type-scale-fundamentals.md +105 -0
- package/knowledge/video/in-product-video.md +277 -0
- package/knowledge/video/korean-video-conventions.md +247 -0
- package/knowledge/video/marketing-video.md +258 -0
- package/knowledge/video/social-and-short-form.md +257 -0
- package/knowledge/video/video-fundamentals.md +296 -0
- package/package.json +106 -0
- package/skills/README.md +39 -0
- package/skills/color-palette/PLAYBOOK.md +175 -0
- package/skills/color-palette/SKILL.md +6 -0
- package/skills/color-palette/TEMPLATE.md +103 -0
- package/skills/component-spec-writer/PLAYBOOK.md +169 -0
- package/skills/component-spec-writer/SKILL.md +6 -0
- package/skills/component-spec-writer/TEMPLATE.md +115 -0
- package/skills/conversational-ui-designer/PLAYBOOK.md +231 -0
- package/skills/conversational-ui-designer/SKILL.md +6 -0
- package/skills/design-broadcast/PLAYBOOK.md +146 -0
- package/skills/design-broadcast/SKILL.md +6 -0
- package/skills/design-critique/PLAYBOOK.md +137 -0
- package/skills/design-critique/SKILL.md +6 -0
- package/skills/design-pr-review/PLAYBOOK.md +171 -0
- package/skills/design-pr-review/SKILL.md +6 -0
- package/skills/design-system-builder/PLAYBOOK.md +218 -0
- package/skills/design-system-builder/SKILL.md +6 -0
- package/skills/design-system-qa/PLAYBOOK.md +163 -0
- package/skills/design-system-qa/SKILL.md +6 -0
- package/skills/document-author/PLAYBOOK.md +167 -0
- package/skills/document-author/SKILL.md +6 -0
- package/skills/figma-token-sync/PLAYBOOK.md +149 -0
- package/skills/figma-token-sync/SKILL.md +6 -0
- package/skills/game-ui-designer/PLAYBOOK.md +209 -0
- package/skills/game-ui-designer/SKILL.md +6 -0
- package/skills/handoff-spec/PLAYBOOK.md +170 -0
- package/skills/handoff-spec/SKILL.md +6 -0
- package/skills/illustration-designer/PLAYBOOK.md +166 -0
- package/skills/illustration-designer/SKILL.md +6 -0
- package/skills/motion-designer/PLAYBOOK.md +223 -0
- package/skills/motion-designer/SKILL.md +6 -0
- package/skills/print-designer/PLAYBOOK.md +209 -0
- package/skills/print-designer/SKILL.md +6 -0
- package/skills/slide-deck-author/PLAYBOOK.md +198 -0
- package/skills/slide-deck-author/SKILL.md +6 -0
- package/skills/spatial-designer/PLAYBOOK.md +238 -0
- package/skills/spatial-designer/SKILL.md +6 -0
- package/skills/ux-audit/PLAYBOOK.md +142 -0
- package/skills/ux-audit/SKILL.md +6 -0
- package/skills/video-designer/PLAYBOOK.md +240 -0
- package/skills/video-designer/SKILL.md +6 -0
- package/skills/website-improvement/PLAYBOOK.md +118 -0
- package/skills/website-improvement/SKILL.md +6 -0
- package/skills/website-improvement/TEMPLATE.md +103 -0
- package/tools/audit/changelog-generate.py +176 -0
- package/tools/audit/check-coverage.py +483 -0
- package/tools/audit/doctor_assertions.py +256 -0
- package/tools/audit/example-qa.py +108 -0
- package/tools/audit/frontmatter-check.py +199 -0
- package/tools/audit/integration-check.py +95 -0
- package/tools/audit/korean-copy-check.py +161 -0
- package/tools/audit/link-check.py +146 -0
- package/tools/audit/local-ci.py +558 -0
- package/tools/audit/package-contents.py +723 -0
- package/tools/audit/package-smoke.py +22443 -0
- package/tools/audit/raw-hex-check.py +252 -0
- package/tools/audit/registry-smoke.py +8188 -0
- package/tools/audit/release-metadata.py +9832 -0
- package/tools/audit/run-all.py +351 -0
- package/tools/audit/smoke_assertions.py +12742 -0
- package/tools/audit/stability-review.py +332 -0
- package/tools/audit/stale-check.py +156 -0
- package/tools/migrations/add-version-frontmatter.py +132 -0
- package/tools/migrations/bump-last-updated.py +131 -0
- package/tools/migrations/promote-stability.py +172 -0
- package/tools/preview/README.md +58 -0
- 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
|