@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,92 @@
|
|
|
1
|
+
# `Zoom` — spec
|
|
2
|
+
|
|
3
|
+
> Synthesized from MUI `Zoom`. Transition primitive — wraps a child to fade-and-zoom in / out on mount / unmount. Sibling to `Fade`, `Grow`, `Slide`, `Collapse`.
|
|
4
|
+
|
|
5
|
+
## When to use
|
|
6
|
+
|
|
7
|
+
- Floating action button entrance / exit.
|
|
8
|
+
- Modal / Popover entrance.
|
|
9
|
+
- Notification card entrance.
|
|
10
|
+
- Anywhere "zoom + fade" feels right (vs "slide" or "fade").
|
|
11
|
+
|
|
12
|
+
When NOT to use:
|
|
13
|
+
- Page transitions (use `Slide` or fade).
|
|
14
|
+
- Scroll-into-view animations (use `ScrollReveal`).
|
|
15
|
+
|
|
16
|
+
## API
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
<Zoom in={open} timeout={250}>
|
|
20
|
+
<div className="floating-content">
|
|
21
|
+
Content here
|
|
22
|
+
</div>
|
|
23
|
+
</Zoom>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
| Prop | Type | Default | Description |
|
|
27
|
+
| --- | --- | --- | --- |
|
|
28
|
+
| `in` | `boolean` | required | Show / hide trigger |
|
|
29
|
+
| `timeout` | `number \| { enter, exit }` | `225` | Ms |
|
|
30
|
+
| `easing` | `string \| { enter, exit }` | per Material | CSS easing |
|
|
31
|
+
| `appear` | `boolean` | `false` | Animate on first mount |
|
|
32
|
+
| `mountOnEnter` | `boolean` | `false` | Don't render until first true |
|
|
33
|
+
| `unmountOnExit` | `boolean` | `false` | Remove from DOM after exit |
|
|
34
|
+
|
|
35
|
+
## CSS
|
|
36
|
+
|
|
37
|
+
```css
|
|
38
|
+
.zoom-enter { transform: scale(0); opacity: 0; }
|
|
39
|
+
.zoom-enter-active {
|
|
40
|
+
transform: scale(1); opacity: 1;
|
|
41
|
+
transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
42
|
+
opacity 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
43
|
+
}
|
|
44
|
+
.zoom-exit { transform: scale(1); opacity: 1; }
|
|
45
|
+
.zoom-exit-active {
|
|
46
|
+
transform: scale(0); opacity: 0;
|
|
47
|
+
transition: transform 195ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Reduced motion
|
|
52
|
+
|
|
53
|
+
```css
|
|
54
|
+
@media (prefers-reduced-motion: reduce) {
|
|
55
|
+
.zoom-enter-active, .zoom-exit-active {
|
|
56
|
+
transition: none;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Tokens consumed
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
--motion-medium (default duration)
|
|
65
|
+
--ease-out
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Code example — FAB entrance
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
<Zoom in={!loading} appear>
|
|
72
|
+
<SpeedDial ariaLabel="새로 만들기" icon={<PlusIcon />}>
|
|
73
|
+
<SpeedDial.Action ... />
|
|
74
|
+
</SpeedDial>
|
|
75
|
+
</Zoom>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Don't
|
|
79
|
+
|
|
80
|
+
- Don't zoom large content (jarring). Use Fade for big surfaces.
|
|
81
|
+
- Don't zoom from `scale(0.01)` to `scale(1)` — exits feel wrong. Stay near full scale (0.7-1).
|
|
82
|
+
- Don't ignore reduced motion.
|
|
83
|
+
|
|
84
|
+
## References
|
|
85
|
+
|
|
86
|
+
- MUI: [`Zoom`](../refs/mui/packages/mui-material/src/Zoom)
|
|
87
|
+
- Material Design: motion easing
|
|
88
|
+
|
|
89
|
+
## Cross-reference
|
|
90
|
+
|
|
91
|
+
- [`knowledge/motion/principles.md`](../knowledge/motion/principles.md)
|
|
92
|
+
- [`examples/component-spinner.md`](component-spinner.md)
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# Worked example: explanation
|
|
2
|
+
|
|
3
|
+
> Generated by `skills/document-author` with type=`explanation`. Demonstrates the canonical Diátaxis explanation format — discursive, motivation-driven, justifies design decisions.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
---
|
|
9
|
+
title: Why design-ai uses W3C DTCG token format (and not Tokens Studio's native format)
|
|
10
|
+
description: The decision behind design-ai's choice of W3C DTCG (Style Dictionary–compatible) for token serialization, the alternatives we considered, and the tradeoffs accepted.
|
|
11
|
+
type: explanation
|
|
12
|
+
audience: Engineers and designers extending design-ai or integrating it with another token system
|
|
13
|
+
last_updated: 2026.05.08
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Why design-ai uses W3C DTCG token format
|
|
17
|
+
|
|
18
|
+
## The problem
|
|
19
|
+
|
|
20
|
+
A design token is a key-value pair: `color.primary.600 = #7C3AED`. The data model is trivial. The hard part is **the format**: how do you serialize this so that it's:
|
|
21
|
+
|
|
22
|
+
1. Readable by humans
|
|
23
|
+
2. Convertible across platforms (CSS, iOS, Android, Figma)
|
|
24
|
+
3. Compatible with existing tooling
|
|
25
|
+
4. Stable as the token system evolves
|
|
26
|
+
|
|
27
|
+
Several formats exist. design-ai picks one — W3C DTCG (Design Tokens Community Group format). This doc explains why.
|
|
28
|
+
|
|
29
|
+
## What we considered
|
|
30
|
+
|
|
31
|
+
### Option A: Tokens Studio's native JSON
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"global": {
|
|
36
|
+
"color": {
|
|
37
|
+
"primary": {
|
|
38
|
+
"600": {
|
|
39
|
+
"value": "#7C3AED",
|
|
40
|
+
"type": "color",
|
|
41
|
+
"description": "Brand primary"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Pros: well-supported by the Tokens Studio Figma plugin. Has 5+ years of evolution. Many consumers.
|
|
50
|
+
|
|
51
|
+
Cons: vendor-specific. Tokens Studio has been promising migration to W3C DTCG. Format isn't a standard.
|
|
52
|
+
|
|
53
|
+
### Option B: Style Dictionary's traditional format
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"color": {
|
|
58
|
+
"primary": {
|
|
59
|
+
"600": {
|
|
60
|
+
"value": "#7C3AED",
|
|
61
|
+
"type": "color"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Pros: enormous tooling ecosystem. Style Dictionary is from 2018, widely adopted at Amazon/Salesforce/etc. Battle-tested transformations.
|
|
69
|
+
|
|
70
|
+
Cons: pre-dates the W3C effort. Not technically a standard. `type` is sometimes `attributes.category`.
|
|
71
|
+
|
|
72
|
+
### Option C: W3C DTCG format (the chosen one)
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"color": {
|
|
77
|
+
"primary": {
|
|
78
|
+
"600": {
|
|
79
|
+
"$value": "#7C3AED",
|
|
80
|
+
"$type": "color"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Note the `$value` / `$type` (with `$` prefix) — that's the W3C distinction.
|
|
88
|
+
|
|
89
|
+
Pros: emerging W3C standard. Tokens Studio is migrating to it. Style Dictionary v4 supports it natively. Future-proof.
|
|
90
|
+
|
|
91
|
+
Cons: less mature than Style Dictionary's traditional format. Some tools still in transition.
|
|
92
|
+
|
|
93
|
+
### Option D: Vendor formats (Material Tokens, Primer, etc.)
|
|
94
|
+
|
|
95
|
+
Each large design system (Material 3, Primer, Polaris, Carbon) has its own token format. For consumers of those systems, native is fine. For a generic system like design-ai? Wrong choice — locks consumers into the parent vendor.
|
|
96
|
+
|
|
97
|
+
## What we chose
|
|
98
|
+
|
|
99
|
+
**W3C DTCG format** (Option C).
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"color": {
|
|
104
|
+
"brand": {
|
|
105
|
+
"primary": {
|
|
106
|
+
"50": { "$value": "#F5F3FF", "$type": "color" },
|
|
107
|
+
"600": { "$value": "#7C3AED", "$type": "color" }
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"semantic": {
|
|
111
|
+
"primary": { "$value": "{color.brand.primary.600}", "$type": "color" }
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The reasoning:
|
|
118
|
+
|
|
119
|
+
1. **Standard track.** The W3C DTCG group includes Adobe, Figma, Atlassian, GitHub, and others. The format will likely become a real standard within 2 years.
|
|
120
|
+
|
|
121
|
+
2. **Tools converge here.** Style Dictionary v4 reads it. Tokens Studio is migrating to it. Custom tooling we write today will keep working.
|
|
122
|
+
|
|
123
|
+
3. **Distinguishable from JSON-data.** The `$value` prefix prevents collision with regular JSON keys. `{ "value": ... }` was ambiguous.
|
|
124
|
+
|
|
125
|
+
4. **Already widely supported.** The major upstream design systems are publishing tokens in this format.
|
|
126
|
+
|
|
127
|
+
## Tradeoffs accepted
|
|
128
|
+
|
|
129
|
+
### Tradeoff 1 — early-adopter ecosystem
|
|
130
|
+
|
|
131
|
+
Some Figma plugins haven't migrated yet. Specifically: older Tokens Studio versions still use the non-`$` format. Workaround: convert at the boundary using `tokens-studio-format` npm package.
|
|
132
|
+
|
|
133
|
+
**Impact**: minor. The Tokens Studio team has signaled migration.
|
|
134
|
+
|
|
135
|
+
### Tradeoff 2 — slightly more verbose
|
|
136
|
+
|
|
137
|
+
`$value` + `$type` adds 4 chars per entry over the bare `value` + `type`. For a 200-token system that's ~800 chars of bytes. Negligible.
|
|
138
|
+
|
|
139
|
+
**Impact**: nil.
|
|
140
|
+
|
|
141
|
+
### Tradeoff 3 — older docs reference the non-$ format
|
|
142
|
+
|
|
143
|
+
Some older Style Dictionary tutorials say `"value": ...`. New users may copy-paste and get the old format. Workaround: design-ai's docs explicitly use `$value` everywhere, with a "if you see `value`, that's the old format" note.
|
|
144
|
+
|
|
145
|
+
**Impact**: minor — primarily a docs / onboarding cost.
|
|
146
|
+
|
|
147
|
+
## What this means in practice
|
|
148
|
+
|
|
149
|
+
- design-ai's `tokens/source.json` examples use `$value` / `$type`.
|
|
150
|
+
- The Figma plugin (`tools/figma-plugin/`) reads `$value` directly.
|
|
151
|
+
- The `figma-token-sync` skill outputs `$value` format.
|
|
152
|
+
- Tokens Studio plugin: "When importing the JSON to Tokens Studio, use the W3C DTCG import option."
|
|
153
|
+
|
|
154
|
+
## What might change
|
|
155
|
+
|
|
156
|
+
If the W3C DTCG format diverges significantly from current expectations (e.g., dramatic schema changes), we'll re-evaluate. The transformation is mechanical — switching is a one-time change to the extractor scripts.
|
|
157
|
+
|
|
158
|
+
If Tokens Studio decides not to support W3C DTCG (unlikely as of mid-2025), we may need to bridge formats per consumer.
|
|
159
|
+
|
|
160
|
+
For now: **W3C DTCG is the bet**.
|
|
161
|
+
|
|
162
|
+
## Related decisions
|
|
163
|
+
|
|
164
|
+
- **Why nested vs flat**: nested matches the way tokens are reasoned about (hierarchy). Flat (`color.brand.primary.600 = #7C3AED`) loses that semantic.
|
|
165
|
+
- **Why JSON not YAML**: JSON has stronger machine-tooling. YAML's whitespace sensitivity bites here.
|
|
166
|
+
- **Why allow references**: `{color.brand.primary.600}` aliases let semantic tokens cleanly point to primitives without duplicating values.
|
|
167
|
+
|
|
168
|
+
## See also
|
|
169
|
+
|
|
170
|
+
- [W3C DTCG specification](https://design-tokens.github.io/community-group/format/)
|
|
171
|
+
- [Style Dictionary v4 docs](https://styledictionary.com/)
|
|
172
|
+
- [`docs/TOKEN-SYNC.md`](../docs/TOKEN-SYNC.md) — three-tier token strategy
|
|
173
|
+
- [`knowledge/design-tokens/ant-design.md`](../knowledge/design-tokens/ant-design.md) — token reference docs per upstream system
|
|
174
|
+
- `tools/figma-plugin/src/code.ts` — implementation
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Why this is a good explanation example
|
|
180
|
+
|
|
181
|
+
- **Problem stated up front** — frames the decision space.
|
|
182
|
+
- **Options enumerated** — A through D, each with pros + cons.
|
|
183
|
+
- **Choice declared, with reasoning** — not just "we chose C", but why.
|
|
184
|
+
- **Tradeoffs accepted** — what we gave up; honest.
|
|
185
|
+
- **What might change** — when this decision should be revisited.
|
|
186
|
+
- **Related decisions** — links the broader rationale.
|
|
187
|
+
- **Discursive but rigorous** — not preachy, not academic. Conversational with structure.
|
|
188
|
+
|
|
189
|
+
Cite [`knowledge/patterns/technical-writing.md`](../knowledge/patterns/technical-writing.md) — explanation voice is more discursive than tutorial / how-to.
|
|
190
|
+
|
|
191
|
+
## Cross-reference
|
|
192
|
+
|
|
193
|
+
- [`examples/doc-tutorial-example.md`](doc-tutorial-example.md)
|
|
194
|
+
- [`examples/doc-how-to-example.md`](doc-how-to-example.md)
|
|
195
|
+
- [`skills/document-author/PLAYBOOK.md`](../skills/document-author/PLAYBOOK.md)
|
|
196
|
+
- [`knowledge/patterns/information-architecture.md`](../knowledge/patterns/information-architecture.md) — Diátaxis 4 types
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Worked example: how-to
|
|
2
|
+
|
|
3
|
+
> Generated by `skills/document-author` with type=`how-to`. Demonstrates the canonical Diátaxis how-to format — direct, problem-driven, no fluff.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
---
|
|
9
|
+
title: How to add Korean copy to existing English-only components
|
|
10
|
+
description: Translate component copy to Korean while preserving design-ai conventions for honorific level, IME handling, and Daum Postcode integration.
|
|
11
|
+
type: how-to
|
|
12
|
+
audience: Developers shipping a Korean version of an English product
|
|
13
|
+
last_updated: 2026.05.08
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# How to add Korean copy to existing English-only components
|
|
17
|
+
|
|
18
|
+
When you need to: ship a Korean locale for a product currently in English only.
|
|
19
|
+
|
|
20
|
+
## TL;DR
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
// 1. Wrap copy in a t() function
|
|
24
|
+
<button>{t("Save")}</button>
|
|
25
|
+
|
|
26
|
+
// 2. Use Korean-aware t() with honorific level
|
|
27
|
+
import { t } from "@/lib/i18n";
|
|
28
|
+
t("Save"); // → "저장" (consumer) or "저장하기" (formal)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Set `LOCALE=ko` and `HONORIFIC=informal` (해요체) or `formal` (합쇼체) per app configuration. Default `formal` for fintech / B2B; `informal` for consumer.
|
|
32
|
+
|
|
33
|
+
## Steps
|
|
34
|
+
|
|
35
|
+
### 1. Inventory the copy
|
|
36
|
+
|
|
37
|
+
Find every literal string in your components. Tools:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Quick grep
|
|
41
|
+
grep -r "Save\|Cancel\|Submit" src/
|
|
42
|
+
|
|
43
|
+
# Better: use react-i18next's extractor
|
|
44
|
+
i18next-scanner --config i18next-scanner.config.js
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Output: a JSON file mapping every English string to a key.
|
|
48
|
+
|
|
49
|
+
### 2. Pick honorific level for your product
|
|
50
|
+
|
|
51
|
+
Use [`knowledge/i18n/korean-product-conventions.md`](../knowledge/i18n/korean-product-conventions.md) to decide:
|
|
52
|
+
|
|
53
|
+
- **Consumer mobile / friendly**: 해요체 (~해요)
|
|
54
|
+
- **B2B / formal / fintech / banking**: 합쇼체 (~합니다)
|
|
55
|
+
- **Government / legal / healthcare**: 합쇼체 always
|
|
56
|
+
|
|
57
|
+
Decision sticks for the entire app — don't mix.
|
|
58
|
+
|
|
59
|
+
### 3. Translate using design-ai conventions
|
|
60
|
+
|
|
61
|
+
For UI strings, use the canonical Korean per [`knowledge/i18n/korean-typography.md`](../knowledge/i18n/korean-typography.md):
|
|
62
|
+
|
|
63
|
+
| English | 해요체 | 합쇼체 |
|
|
64
|
+
| --- | --- | --- |
|
|
65
|
+
| Save | 저장 | 저장하기 |
|
|
66
|
+
| Cancel | 취소 | 취소 |
|
|
67
|
+
| Submit | 제출 / 등록 | 제출하기 |
|
|
68
|
+
| Delete | 삭제 | 삭제하기 |
|
|
69
|
+
| Sign in | 로그인 | 로그인 |
|
|
70
|
+
| Sign up | 가입 | 회원가입 |
|
|
71
|
+
| Loading | 로딩 중 | 불러오는 중 |
|
|
72
|
+
| Try again | 다시 시도 | 다시 시도해 주세요 |
|
|
73
|
+
|
|
74
|
+
Don't direct-translate — Korean has different defaults. Example: "Submit" rarely means 제출 in Korean apps; it usually means 등록 or 저장.
|
|
75
|
+
|
|
76
|
+
### 4. Replace English in components
|
|
77
|
+
|
|
78
|
+
For each component:
|
|
79
|
+
|
|
80
|
+
```diff
|
|
81
|
+
- <Button>Save</Button>
|
|
82
|
+
+ <Button>{t("save")}</Button>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Where `t()` reads from your locale JSON.
|
|
86
|
+
|
|
87
|
+
### 5. Handle Korean IME for input components
|
|
88
|
+
|
|
89
|
+
If your component has typeahead / autocomplete / mention features, IME composition must be respected. Update existing components:
|
|
90
|
+
|
|
91
|
+
```diff
|
|
92
|
+
+ const [isComposing, setIsComposing] = useState(false);
|
|
93
|
+
|
|
94
|
+
- <input onChange={(e) => onChange(e.target.value)} />
|
|
95
|
+
+ <input
|
|
96
|
+
+ onChange={(e) => !isComposing && onChange(e.target.value)}
|
|
97
|
+
+ onCompositionStart={() => setIsComposing(true)}
|
|
98
|
+
+ onCompositionEnd={(e) => {
|
|
99
|
+
+ setIsComposing(false);
|
|
100
|
+
+ onChange(e.target.value);
|
|
101
|
+
+ }}
|
|
102
|
+
+ />
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Cite [`examples/component-input.md`](component-input.md) for the full pattern.
|
|
106
|
+
|
|
107
|
+
### 6. Replace address inputs with Daum Postcode
|
|
108
|
+
|
|
109
|
+
Korean users won't tolerate free-form address. Replace any `<AddressInput>` with the Daum Postcode-integrated version:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Install
|
|
113
|
+
npm install react-daum-postcode
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
```tsx
|
|
117
|
+
import { DaumPostcode } from "react-daum-postcode";
|
|
118
|
+
// ...use the Daum widget; see knowledge/i18n/korean-product-conventions.md
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Cite [`examples/component-address-input.md`](component-address-input.md).
|
|
122
|
+
|
|
123
|
+
### 7. Apply Korean typography
|
|
124
|
+
|
|
125
|
+
Add Pretendard to your font stack:
|
|
126
|
+
|
|
127
|
+
```css
|
|
128
|
+
:root {
|
|
129
|
+
--font-family-base: 'Pretendard', -apple-system, BlinkMacSystemFont,
|
|
130
|
+
'Apple SD Gothic Neo', 'Noto Sans KR', sans-serif;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Bump body line-height to 1.6 (Korean +10% adjustment) per [`knowledge/i18n/korean-typography.md`](../knowledge/i18n/korean-typography.md):
|
|
135
|
+
|
|
136
|
+
```css
|
|
137
|
+
body { line-height: 1.6; }
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Contrast check: translated Korean body text must keep at least **4.5:1** against the page background, and focus indicators on locale switchers or copy controls must keep **3:1** per [`knowledge/a11y/contrast.md`](../knowledge/a11y/contrast.md). Screen reader output must announce the active locale and any language switcher state via `aria-current` or equivalent text.
|
|
141
|
+
|
|
142
|
+
### 8. Add Korean-specific patterns
|
|
143
|
+
|
|
144
|
+
If your app has:
|
|
145
|
+
- **Payment**: replace generic with Toss/KakaoPay/NaverPay buttons. See [`knowledge/i18n/korean-payments.md`](../knowledge/i18n/korean-payments.md).
|
|
146
|
+
- **Phone auth**: add SMS verification flow with InputOTP — see [`examples/component-input-otp.md`](component-input-otp.md).
|
|
147
|
+
- **Identity verification**: integrate PASS — see [`examples/component-pass-auth.md`](component-pass-auth.md).
|
|
148
|
+
- **Money display**: use KRWAmount or AmountInput — see [`examples/component-krw-amount.md`](component-krw-amount.md).
|
|
149
|
+
|
|
150
|
+
## Variations
|
|
151
|
+
|
|
152
|
+
### Just translation, no Korean-specific UX
|
|
153
|
+
|
|
154
|
+
If you're only translating words (e.g., a documentation site), skip steps 5–8. The result will work but won't feel native.
|
|
155
|
+
|
|
156
|
+
### Multi-locale (en + ko in one app)
|
|
157
|
+
|
|
158
|
+
Use a locale switcher in settings. Persist to localStorage + send via Accept-Language header.
|
|
159
|
+
|
|
160
|
+
```ts
|
|
161
|
+
const locale = useLocale(); // "en" | "ko"
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Korean-only product
|
|
165
|
+
|
|
166
|
+
Skip the en stage entirely. Don't ship english-strings-with-Korean-fallback — just write Korean directly.
|
|
167
|
+
|
|
168
|
+
## Common pitfalls
|
|
169
|
+
|
|
170
|
+
| Pitfall | Fix |
|
|
171
|
+
| --- | --- |
|
|
172
|
+
| Mixed 합쇼체 + 해요체 in same screen | Pick one. Document in style guide. |
|
|
173
|
+
| Translation breaks layout (Korean longer or shorter) | Use `flex-grow` not fixed widths; allow wrap. |
|
|
174
|
+
| Phone validation regex assumes US format | Update to Korean: `/^01[0-9]-?\d{3,4}-?\d{4}$/` |
|
|
175
|
+
| English error messages slip through | Add a CI check via `tools/audit/korean-copy-check.py`. |
|
|
176
|
+
| Date format mm/dd/yyyy | Switch to yyyy.MM.dd (KR convention). |
|
|
177
|
+
|
|
178
|
+
## See also
|
|
179
|
+
|
|
180
|
+
- [`knowledge/i18n/korean-product-conventions.md`](../knowledge/i18n/korean-product-conventions.md) — broader UX conventions
|
|
181
|
+
- [`knowledge/i18n/korean-typography.md`](../knowledge/i18n/korean-typography.md) — type rules
|
|
182
|
+
- [`knowledge/i18n/korean-payments.md`](../knowledge/i18n/korean-payments.md) — payment patterns
|
|
183
|
+
- [`knowledge/i18n/korean-publishing.md`](../knowledge/i18n/korean-publishing.md) — store submission
|
|
184
|
+
- `tools/audit/korean-copy-check.py` — automated check
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Why this is a good how-to example
|
|
190
|
+
|
|
191
|
+
- **Problem stated up front** ("when you need to…").
|
|
192
|
+
- **TL;DR with code snippet** — for the reader who'll only read 5 seconds.
|
|
193
|
+
- **Numbered steps with concrete actions.**
|
|
194
|
+
- **Variations section** for adjacent cases.
|
|
195
|
+
- **Common pitfalls** save debug time.
|
|
196
|
+
- **No motivation/background** — that's an explanation doc.
|
|
197
|
+
- **Imperative voice throughout** ("install", "replace", "switch").
|
|
198
|
+
|
|
199
|
+
Cite [`knowledge/patterns/technical-writing.md`](../knowledge/patterns/technical-writing.md) for voice rules.
|
|
200
|
+
|
|
201
|
+
## Cross-reference
|
|
202
|
+
|
|
203
|
+
- [`examples/doc-tutorial-example.md`](doc-tutorial-example.md) — tutorial format (different)
|
|
204
|
+
- [`skills/document-author/PLAYBOOK.md`](../skills/document-author/PLAYBOOK.md)
|
|
205
|
+
- [`knowledge/patterns/information-architecture.md`](../knowledge/patterns/information-architecture.md)
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Worked example: tutorial
|
|
2
|
+
|
|
3
|
+
> Generated by `skills/document-author` with type=`tutorial`. Demonstrates the canonical Diátaxis tutorial format.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
---
|
|
9
|
+
title: Build your first design token set
|
|
10
|
+
description: Learn the design-ai workflow by generating, customizing, and exporting a complete design token set in 15 minutes.
|
|
11
|
+
type: tutorial
|
|
12
|
+
audience: New users — designers or front-end developers familiar with their design system but new to design-ai
|
|
13
|
+
last_updated: 2026.05.08
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Build your first design token set
|
|
17
|
+
|
|
18
|
+
> Time: 15 minutes · Audience: New to design-ai
|
|
19
|
+
|
|
20
|
+
In this tutorial you'll generate a fintech-flavored color palette, customize it for your brand, and export it as Tailwind v4 + shadcn-ui tokens.
|
|
21
|
+
|
|
22
|
+
## What you'll build
|
|
23
|
+
|
|
24
|
+
By the end you'll have:
|
|
25
|
+
- A `tokens/source.json` with your brand palette
|
|
26
|
+
- A `src/styles/tokens.css` with CSS custom properties
|
|
27
|
+
- A working `palette.preview.html` you can open in a browser to verify
|
|
28
|
+
|
|
29
|
+
## Prerequisites
|
|
30
|
+
|
|
31
|
+
- Node 20+
|
|
32
|
+
- A terminal
|
|
33
|
+
- A brand color (or a mood — we'll pick one if you don't have one)
|
|
34
|
+
|
|
35
|
+
## Step 1 — Clone design-ai
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
git clone https://github.com/your-org/design-ai
|
|
39
|
+
cd design-ai
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
You should see `knowledge/`, `skills/`, `examples/` — the design-ai system layout.
|
|
43
|
+
|
|
44
|
+
## Step 2 — Generate a palette
|
|
45
|
+
|
|
46
|
+
Run the `palette-from-brand` command in your AI agent (Claude Code, Codex, or paste into a chat):
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
/palette-from-brand "B2C Korean fintech, calming + youthful, teal seed #0D9488"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The agent reads `skills/color-palette/PLAYBOOK.md` and generates a full palette spec at `examples/my-palette.md`.
|
|
53
|
+
|
|
54
|
+
Open it. You should see:
|
|
55
|
+
- An 11-step ramp (50–950) for primary, accent, and neutrals
|
|
56
|
+
- Light + dark mode semantic aliases
|
|
57
|
+
- A WCAG contrast matrix
|
|
58
|
+
- Code blocks for Tailwind v4 / shadcn-ui / Style Dictionary
|
|
59
|
+
|
|
60
|
+
> ℹ Note: if your contrast matrix shows ✗ for any pair, the palette needs adjustment. The agent should flag this.
|
|
61
|
+
|
|
62
|
+
## Step 3 — Visually verify
|
|
63
|
+
|
|
64
|
+
Generate the HTML preview:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
python3 tools/preview/render-tokens.py examples/my-palette.md
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Open `examples/my-palette.preview.html`. You'll see:
|
|
71
|
+
- Token swatches (light + dark)
|
|
72
|
+
- Live Button/Input/Alert/Card with your tokens
|
|
73
|
+
- A theme toggle at the top
|
|
74
|
+
|
|
75
|
+
Click the theme toggle. The whole preview switches. **If anything looks wrong** (low-contrast text, washed-out buttons), revise via `/iterate`.
|
|
76
|
+
|
|
77
|
+
## Step 4 — Export to Style Dictionary
|
|
78
|
+
|
|
79
|
+
Save the JSON code block from your palette doc to `tokens/source.json`:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Copy the JSON block from examples/my-palette.md → tokens/source.json
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Install Style Dictionary:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npm init -y
|
|
89
|
+
npm install -D style-dictionary
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Create `style-dictionary.config.json`:
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"source": ["tokens/source.json"],
|
|
97
|
+
"platforms": {
|
|
98
|
+
"css": {
|
|
99
|
+
"transformGroup": "css",
|
|
100
|
+
"buildPath": "src/styles/",
|
|
101
|
+
"files": [
|
|
102
|
+
{ "destination": "tokens.css", "format": "css/variables" }
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Build:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
npx style-dictionary build
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
You should see `src/styles/tokens.css` with your tokens as CSS custom properties.
|
|
116
|
+
|
|
117
|
+
## Step 5 — Use the tokens
|
|
118
|
+
|
|
119
|
+
Reference them in any CSS:
|
|
120
|
+
|
|
121
|
+
```css
|
|
122
|
+
.my-button {
|
|
123
|
+
background: var(--color-primary-default);
|
|
124
|
+
color: var(--color-on-primary);
|
|
125
|
+
padding: var(--space-md);
|
|
126
|
+
border-radius: var(--radius-md);
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
The button now uses your brand-derived tokens.
|
|
131
|
+
|
|
132
|
+
## What's next
|
|
133
|
+
|
|
134
|
+
You generated tokens. Now:
|
|
135
|
+
|
|
136
|
+
- **Spec your first component** with `/component-spec Button` — see [`skills/component-spec-writer`](../skills/component-spec-writer/PLAYBOOK.md).
|
|
137
|
+
- **Bootstrap a full design system** with `/design-from-brief` — see [`commands/design-from-brief.md`](../commands/design-from-brief.md).
|
|
138
|
+
- **Sync with Figma** via Tokens Studio plugin — see [`docs/integrations/figma-mcp.md`](../docs/integrations/figma-mcp.md).
|
|
139
|
+
|
|
140
|
+
If you got stuck, check [`docs/USING.md`](../docs/USING.md) for agent-specific setup.
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Why this is a good tutorial example
|
|
146
|
+
|
|
147
|
+
- **Time + audience stated up top** — sets expectations.
|
|
148
|
+
- **"What you'll build" with concrete deliverables** — motivates.
|
|
149
|
+
- **Numbered steps** — easy to follow.
|
|
150
|
+
- **Each step has visible outcome** ("you should see…") — confirms progress.
|
|
151
|
+
- **Callout for warning** when contrast fails.
|
|
152
|
+
- **What's next section** — bridges to next learning.
|
|
153
|
+
- **No throat-clearing.** Tutorials are encouraging but direct.
|
|
154
|
+
|
|
155
|
+
Cite [`knowledge/patterns/information-architecture.md`](../knowledge/patterns/information-architecture.md) for the canonical tutorial structure.
|
|
156
|
+
|
|
157
|
+
## Cross-reference
|
|
158
|
+
|
|
159
|
+
- [`skills/document-author/PLAYBOOK.md`](../skills/document-author/PLAYBOOK.md) — skill that generates this
|
|
160
|
+
- [`commands/document-from-brief.md`](../commands/document-from-brief.md)
|
|
161
|
+
- [`knowledge/patterns/information-architecture.md`](../knowledge/patterns/information-architecture.md) — Diátaxis types
|
|
162
|
+
- [`knowledge/patterns/technical-writing.md`](../knowledge/patterns/technical-writing.md) — voice rules
|