@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,325 @@
|
|
|
1
|
+
<!-- hand-written -->
|
|
2
|
+
---
|
|
3
|
+
title: Settings page patterns
|
|
4
|
+
applies_to: [web, mobile, all-ui]
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
last_updated: 2026-05
|
|
7
|
+
stability: stable
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Settings page patterns
|
|
11
|
+
|
|
12
|
+
A settings page is a list of toggles, choices, and links. The hard parts: organization, save behavior, and the destructive actions at the bottom.
|
|
13
|
+
|
|
14
|
+
## Three layouts
|
|
15
|
+
|
|
16
|
+
| Layout | Use |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| **Single-page list** | Mobile, simple settings (≤ 20 items) |
|
|
19
|
+
| **Sidebar + content** | Desktop, complex settings (account, billing, integrations, etc.) |
|
|
20
|
+
| **Tabbed** | Medium complexity — 3–5 sections, no need for sidebar |
|
|
21
|
+
|
|
22
|
+
For Korean consumer mobile: **single-page list** is the convention. Settings sections separated by visual gaps; section headers small and gray.
|
|
23
|
+
|
|
24
|
+
For B2B SaaS desktop: **sidebar + content** is the convention. The sidebar lists categories; clicking shifts the right panel.
|
|
25
|
+
|
|
26
|
+
## Anatomy — single-page
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
[Top app bar: ← 설정]
|
|
30
|
+
|
|
31
|
+
──── 계정 ────────────────────
|
|
32
|
+
이름 김민지 >
|
|
33
|
+
이메일 minji@example.com >
|
|
34
|
+
프로필 사진 변경 >
|
|
35
|
+
|
|
36
|
+
──── 알림 ────────────────────
|
|
37
|
+
푸시 알림 ●━○
|
|
38
|
+
이메일 수신 ○━●
|
|
39
|
+
알림 빈도 매일 >
|
|
40
|
+
|
|
41
|
+
──── 결제 ────────────────────
|
|
42
|
+
결제 수단 KB **** >
|
|
43
|
+
구독 관리 >
|
|
44
|
+
|
|
45
|
+
──── 보안 ────────────────────
|
|
46
|
+
비밀번호 변경 >
|
|
47
|
+
2단계 인증 ○━●
|
|
48
|
+
|
|
49
|
+
──── 기타 ────────────────────
|
|
50
|
+
약관 >
|
|
51
|
+
개인정보처리방침 >
|
|
52
|
+
앱 버전 v1.4.2
|
|
53
|
+
|
|
54
|
+
──── ─────────────────────────
|
|
55
|
+
로그아웃 ↗
|
|
56
|
+
계정 삭제 ⚠
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
| Element | Notes |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| Section header | Small (12–13px), `--color-text-tertiary`, uppercase or label-style |
|
|
62
|
+
| Section gap | `--space-2xl` (32px) between sections |
|
|
63
|
+
| Row height | 48px mobile / 40px desktop dense |
|
|
64
|
+
| Trailing chevron `>` | For drill-in (opens detail screen) |
|
|
65
|
+
| Trailing toggle | For boolean settings |
|
|
66
|
+
| Trailing value (e.g., "매일") | When the setting has a current value visible |
|
|
67
|
+
| Destructive at bottom | Logout, delete account |
|
|
68
|
+
|
|
69
|
+
## Save behavior — three patterns
|
|
70
|
+
|
|
71
|
+
| Pattern | Save trigger | Use |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| **Auto-save (per change)** | On toggle, on blur of input | Settings that are clearly individual toggles. Default for most. |
|
|
74
|
+
| **Save bar** | Sticky banner appears when changes exist; user clicks Save | Multi-field forms, billing info, profile editing |
|
|
75
|
+
| **Modal with confirm** | Open detail screen, edit, click Save | Complex changes (password change, payment method) |
|
|
76
|
+
|
|
77
|
+
**Pick the lowest-friction pattern that's safe.**
|
|
78
|
+
|
|
79
|
+
For toggles (notifications on/off): auto-save. The user expects immediate effect.
|
|
80
|
+
|
|
81
|
+
For forms (display name, address): save bar. The user might tweak multiple fields before deciding.
|
|
82
|
+
|
|
83
|
+
For destructive (delete account, change password): modal with explicit confirm.
|
|
84
|
+
|
|
85
|
+
### Save bar
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
┌────────────────────────────────────────────────────┐
|
|
89
|
+
│ Profile │
|
|
90
|
+
│ [name input] │
|
|
91
|
+
│ [email input] │
|
|
92
|
+
│ [bio textarea] │
|
|
93
|
+
│ ... │
|
|
94
|
+
│ │
|
|
95
|
+
│ [save bar appears as soon as anything changes] │
|
|
96
|
+
└────────────────────────────────────────────────────┘
|
|
97
|
+
┌────────────────────────────────────────────────────┐ ← sticky bottom
|
|
98
|
+
│ Unsaved changes [Discard] [Save] │
|
|
99
|
+
└────────────────────────────────────────────────────┘
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
- Appears when state diverges from saved.
|
|
103
|
+
- Cleanly disappears after successful save (toast confirmation).
|
|
104
|
+
- Disabled save button during validation errors — but tooltip explains why.
|
|
105
|
+
- Discard prompt for unsaved navigation away.
|
|
106
|
+
|
|
107
|
+
## Korean settings copy
|
|
108
|
+
|
|
109
|
+
Standard section labels:
|
|
110
|
+
|
|
111
|
+
| Korean | English |
|
|
112
|
+
| --- | --- |
|
|
113
|
+
| 계정 | Account |
|
|
114
|
+
| 알림 | Notifications |
|
|
115
|
+
| 결제 | Billing / Payments |
|
|
116
|
+
| 구독 | Subscription |
|
|
117
|
+
| 보안 | Security |
|
|
118
|
+
| 개인정보 | Privacy |
|
|
119
|
+
| 약관 | Terms |
|
|
120
|
+
| 도움말 | Help |
|
|
121
|
+
| 앱 정보 | About |
|
|
122
|
+
| 기타 | Other |
|
|
123
|
+
|
|
124
|
+
Standard row labels:
|
|
125
|
+
|
|
126
|
+
| Korean | English |
|
|
127
|
+
| --- | --- |
|
|
128
|
+
| 비밀번호 변경 | Change password |
|
|
129
|
+
| 이메일 수신 | Email notifications |
|
|
130
|
+
| 푸시 알림 | Push notifications |
|
|
131
|
+
| 다크 모드 | Dark mode |
|
|
132
|
+
| 언어 | Language |
|
|
133
|
+
| 로그아웃 | Sign out |
|
|
134
|
+
| 계정 삭제 | Delete account |
|
|
135
|
+
|
|
136
|
+
## Section organization — what goes where
|
|
137
|
+
|
|
138
|
+
The order matters. Korean consumer apps converge on this rough order:
|
|
139
|
+
|
|
140
|
+
1. **계정 (Account)** — name, email, photo, basic identity
|
|
141
|
+
2. **알림 (Notifications)** — frequency, channels
|
|
142
|
+
3. **결제 / 구독** — payment methods, current plan
|
|
143
|
+
4. **보안** — password, 2FA, login history
|
|
144
|
+
5. **앱 환경** — language, theme, density
|
|
145
|
+
6. **개인정보** — data, marketing consent
|
|
146
|
+
7. **기타 / 정보** — legal, about, version
|
|
147
|
+
8. **위험한 액션** — sign out, delete (with separator)
|
|
148
|
+
|
|
149
|
+
Don't:
|
|
150
|
+
- Don't put destructive actions in the middle.
|
|
151
|
+
- Don't bury security under "More" — make it a top-level section.
|
|
152
|
+
- Don't combine billing + payment methods + subscription if they're different concepts.
|
|
153
|
+
|
|
154
|
+
## Destructive actions at the bottom
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
──── ─────────────────────────
|
|
158
|
+
로그아웃
|
|
159
|
+
계정 삭제 ⚠
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
- Visual gap above (heavier divider or extra space).
|
|
163
|
+
- "Log out" is neutral; "Delete account" is red (`--color-error`).
|
|
164
|
+
- Both require confirmation:
|
|
165
|
+
- **Log out**: simple Yes/No modal.
|
|
166
|
+
- **Delete account**: stronger confirm — type the username, plus checkboxes for "I understand this is permanent" + "I understand my data will be deleted".
|
|
167
|
+
- For data export before delete: provide an obvious "Export my data" link first.
|
|
168
|
+
|
|
169
|
+
## Toggles vs drill-in
|
|
170
|
+
|
|
171
|
+
| Choice | Use toggle | Use drill-in |
|
|
172
|
+
| --- | --- | --- |
|
|
173
|
+
| Setting has 2 values (on/off) | ✓ | — |
|
|
174
|
+
| Setting has 3+ values | — | ✓ — opens a screen with radios |
|
|
175
|
+
| Setting needs sub-options | — | ✓ |
|
|
176
|
+
| Setting includes input field | — | ✓ |
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
✓ Push notifications ●━○ [boolean → toggle]
|
|
180
|
+
✓ Notification frequency 매일 > [3+ values → drill-in]
|
|
181
|
+
✓ Profile name 민지 > [text input → drill-in]
|
|
182
|
+
|
|
183
|
+
✗ Theme Light ●━○ [3 values can't fit a toggle]
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Drill-in screens
|
|
187
|
+
|
|
188
|
+
When a row drills into a sub-screen:
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
[← Back] Notification frequency
|
|
192
|
+
|
|
193
|
+
Choose how often you want notifications:
|
|
194
|
+
|
|
195
|
+
○ Real-time
|
|
196
|
+
● Daily summary
|
|
197
|
+
○ Weekly summary
|
|
198
|
+
○ Off
|
|
199
|
+
|
|
200
|
+
[설명: ...]
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
- Use radio group for 3+ choices.
|
|
204
|
+
- Use form for free-text input.
|
|
205
|
+
- Save behavior: usually auto-save on selection (radio) OR save button (form).
|
|
206
|
+
- Back button returns to settings list.
|
|
207
|
+
|
|
208
|
+
## Mobile patterns
|
|
209
|
+
|
|
210
|
+
- Settings is the canonical use case for the **bottom-tab-bar with no settings tab** — instead, settings is reached via "MY" or "More" tab → drill in.
|
|
211
|
+
- Don't show settings as a top-level tab unless the app is settings-heavy.
|
|
212
|
+
- Header: "← 설정" with no actions.
|
|
213
|
+
- Pull-to-refresh: not applicable (settings don't refresh).
|
|
214
|
+
|
|
215
|
+
## Desktop patterns — sidebar + content
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
┌──────────────┬─────────────────────────────────────────┐
|
|
219
|
+
│ ⚙ 설정 │ ── 계정 ───────────────────── │
|
|
220
|
+
│ │ Profile │
|
|
221
|
+
│ ● 계정 │ [name input] │
|
|
222
|
+
│ ○ 알림 │ [email input] │
|
|
223
|
+
│ ○ 결제 │ ... │
|
|
224
|
+
│ ○ 보안 │ │
|
|
225
|
+
│ ○ 정보 │ │
|
|
226
|
+
└──────────────┴─────────────────────────────────────────┘
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
- Sidebar fixed-width 200–280px.
|
|
230
|
+
- Active section highlighted (full row, not just text).
|
|
231
|
+
- Right panel scrolls; sidebar doesn't.
|
|
232
|
+
- URL syncs to section: `/settings/account`, `/settings/notifications`. Refresh preserves.
|
|
233
|
+
|
|
234
|
+
For very deep settings (organization-level, multi-tenant), nested sub-navigation in sidebar:
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
계정
|
|
238
|
+
▾ 프로필
|
|
239
|
+
개인 정보
|
|
240
|
+
공개 설정
|
|
241
|
+
▸ 보안
|
|
242
|
+
▸ 결제
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
But avoid > 2 levels — that's too deep.
|
|
246
|
+
|
|
247
|
+
## Tokens consumed
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
--color-bg-default
|
|
251
|
+
--color-bg-elevated (sidebar bg, card sections)
|
|
252
|
+
--color-bg-subtle (hover, section bg)
|
|
253
|
+
--color-text-primary
|
|
254
|
+
--color-text-secondary (helper text)
|
|
255
|
+
--color-text-tertiary (section labels)
|
|
256
|
+
--color-text-disabled
|
|
257
|
+
--color-error (destructive)
|
|
258
|
+
--color-border-default (rows divider)
|
|
259
|
+
--color-focus-ring
|
|
260
|
+
--space-md, --space-base, --space-2xl
|
|
261
|
+
--font-size-sm, --font-size-base
|
|
262
|
+
--font-size-xs (section labels)
|
|
263
|
+
--radius-md
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Accessibility
|
|
267
|
+
|
|
268
|
+
- Section headers: `<h2>` (or appropriate); each section a `<section>` with `aria-labelledby`.
|
|
269
|
+
- Each row is keyboard-reachable. Toggles via `Space`. Drill-ins via `Enter`.
|
|
270
|
+
- For drill-in rows: render as `<a href>` (web) or `<Pressable>` (RN), not just clickable divs.
|
|
271
|
+
- Screen reader announces section + row label + current value.
|
|
272
|
+
- Destructive actions: confirmation modal must trap focus + restore on close. See [`examples/component-modal.md`](../../examples/component-modal.md).
|
|
273
|
+
- Form save bar: `aria-live="polite"` so changes announced.
|
|
274
|
+
|
|
275
|
+
## Common settings page anti-patterns
|
|
276
|
+
|
|
277
|
+
- **Hiding sign-out** under multiple drill-downs.
|
|
278
|
+
- **No confirmation on destructive actions** (delete account in one tap).
|
|
279
|
+
- **Auto-save on text inputs** (user paused typing → got saved with typo).
|
|
280
|
+
- **Save button without disabled state** (user clicks save with no changes).
|
|
281
|
+
- **Settings everywhere** — every page has its own settings panel. Centralize.
|
|
282
|
+
- **Inconsistent toggle direction** (some "off" is left, some "off" is right).
|
|
283
|
+
- **No breadcrumb on deep settings** (user lost in /settings/account/security/2fa/codes).
|
|
284
|
+
- **Modal stacking** for nested settings drill-ins — should be a screen push, not a modal.
|
|
285
|
+
- **Settings modal that closes on outside click** while editing — user loses unsaved input.
|
|
286
|
+
|
|
287
|
+
## Code example
|
|
288
|
+
|
|
289
|
+
```tsx
|
|
290
|
+
function SettingsPage() {
|
|
291
|
+
return (
|
|
292
|
+
<Page>
|
|
293
|
+
<PageHeader>설정</PageHeader>
|
|
294
|
+
|
|
295
|
+
<SettingsSection title="계정">
|
|
296
|
+
<SettingsRow label="이름" value={user.name} onClick={() => nav("/settings/account/name")} />
|
|
297
|
+
<SettingsRow label="이메일" value={user.email} onClick={() => nav("/settings/account/email")} />
|
|
298
|
+
</SettingsSection>
|
|
299
|
+
|
|
300
|
+
<SettingsSection title="알림">
|
|
301
|
+
<SettingsRow label="푸시 알림" trailing={<Switch checked={notifyPush} onCheckedChange={setNotifyPush} />} />
|
|
302
|
+
<SettingsRow label="이메일 수신" trailing={<Switch checked={notifyEmail} onCheckedChange={setNotifyEmail} />} />
|
|
303
|
+
<SettingsRow label="알림 빈도" value={notifyFreq} onClick={() => nav("/settings/notifications/frequency")} />
|
|
304
|
+
</SettingsSection>
|
|
305
|
+
|
|
306
|
+
<SettingsSection title="기타">
|
|
307
|
+
<SettingsRow label="약관" onClick={() => nav("/settings/terms")} />
|
|
308
|
+
<SettingsRow label="앱 버전" trailing={<span>v{APP_VERSION}</span>} />
|
|
309
|
+
</SettingsSection>
|
|
310
|
+
|
|
311
|
+
<SettingsSection>
|
|
312
|
+
<SettingsRow label="로그아웃" onClick={() => confirmLogout()} />
|
|
313
|
+
<SettingsRow label="계정 삭제" intent="danger" onClick={() => confirmDelete()} />
|
|
314
|
+
</SettingsSection>
|
|
315
|
+
</Page>
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
## Cross-reference
|
|
321
|
+
|
|
322
|
+
- [`knowledge/patterns/form-design.md`](form-design.md) — when settings include forms
|
|
323
|
+
- [`knowledge/patterns/mobile-navigation.md`](mobile-navigation.md) — settings inside MY tab
|
|
324
|
+
- [`knowledge/i18n/korean-product-conventions.md`](../i18n/korean-product-conventions.md) — Korean labels and conventions
|
|
325
|
+
- [`examples/component-form-controls.md`](../../examples/component-form-controls.md) — Switch / Checkbox / Radio
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
<!-- hand-written -->
|
|
2
|
+
---
|
|
3
|
+
title: Slide deck design
|
|
4
|
+
applies_to: [presentations, slide-decks, pitch-decks, conference-talks]
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
last_updated: 2026-05
|
|
7
|
+
stability: stable
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Slide deck design
|
|
11
|
+
|
|
12
|
+
Slide decks have their own rules. They're built for **presentation in front of an audience** (not solo reading) — so layout, density, and pacing differ from documents.
|
|
13
|
+
|
|
14
|
+
If your "deck" is meant to be sent as a PDF and read alone, that's a **document**, not a deck. See [`document-typography.md`](document-typography.md). Many "decks" should be docs.
|
|
15
|
+
|
|
16
|
+
## Three slide-deck archetypes
|
|
17
|
+
|
|
18
|
+
| Type | Use | Density |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| **Talk deck** | Presented live, supports the speaker | Very low (1 idea per slide) |
|
|
21
|
+
| **Sales / pitch deck** | Sent OR presented; persuasion + reading | Medium |
|
|
22
|
+
| **Reading deck (deck-as-document)** | Read solo, structured like slides | High — but consider doc instead |
|
|
23
|
+
|
|
24
|
+
Don't mix archetypes in one deck. A talk deck sent as PDF reads as confusingly sparse.
|
|
25
|
+
|
|
26
|
+
## Talk deck rules — the strict ones
|
|
27
|
+
|
|
28
|
+
### One idea per slide
|
|
29
|
+
|
|
30
|
+
If a slide has 3 different points, it's 3 slides.
|
|
31
|
+
|
|
32
|
+
### Big text
|
|
33
|
+
|
|
34
|
+
Body text on slides: **24pt minimum**. From the back of a room, anything smaller is unreadable. For body content: 32–40pt.
|
|
35
|
+
|
|
36
|
+
Heading: 60–96pt.
|
|
37
|
+
|
|
38
|
+
### Few words
|
|
39
|
+
|
|
40
|
+
Maximum **6 lines × 6 words** rule (rough). If your slide has more, you're reading slides at the audience — bad presenting.
|
|
41
|
+
|
|
42
|
+
### High contrast
|
|
43
|
+
|
|
44
|
+
Black on white. Or white on near-black. No gray-on-gray.
|
|
45
|
+
|
|
46
|
+
### No animations except for purpose
|
|
47
|
+
|
|
48
|
+
Auto-transitions, fade-ins, "flying text" — kill them all. Animations should:
|
|
49
|
+
- Reveal information progressively (e.g., bullet by bullet during a build-up).
|
|
50
|
+
- Show physical change (a chart updating).
|
|
51
|
+
- Create surprise (rare, intentional).
|
|
52
|
+
|
|
53
|
+
Default: no animation. Only add when justified.
|
|
54
|
+
|
|
55
|
+
## Sales/pitch deck rules
|
|
56
|
+
|
|
57
|
+
Different: this deck stands alone (sent via email) AND gets presented.
|
|
58
|
+
|
|
59
|
+
### Higher density allowed
|
|
60
|
+
|
|
61
|
+
Body 18–24pt is fine. Subtitle/caption 14–16pt.
|
|
62
|
+
|
|
63
|
+
### Each slide self-contained
|
|
64
|
+
|
|
65
|
+
Sender isn't there to explain. Each slide should communicate without the speaker.
|
|
66
|
+
|
|
67
|
+
### Strong visual brand
|
|
68
|
+
|
|
69
|
+
Colors, fonts, illustrations match brand. The deck IS a brand artifact.
|
|
70
|
+
|
|
71
|
+
### Standard structure (SaaS pitch)
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
1. Hero — company + tagline
|
|
75
|
+
2. Problem — what's broken in the world
|
|
76
|
+
3. Solution — what we do
|
|
77
|
+
4. Why now — market timing
|
|
78
|
+
5. Product / Demo
|
|
79
|
+
6. Traction — metrics, customers, growth
|
|
80
|
+
7. Business model
|
|
81
|
+
8. Competition / market
|
|
82
|
+
9. Team
|
|
83
|
+
10. Financials / Ask (for fundraising) OR pricing
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Variations exist; this is the typical SaaS pitch deck. Keep it ≤ 12 slides for first send.
|
|
87
|
+
|
|
88
|
+
## Anatomy of a great slide
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
92
|
+
│ │
|
|
93
|
+
│ │
|
|
94
|
+
│ Headline — what this slide says │ ← center-aligned, bold
|
|
95
|
+
│ │
|
|
96
|
+
│ [Visual / chart / image — main proof] │
|
|
97
|
+
│ │
|
|
98
|
+
│ Sub-text or caption (optional) │
|
|
99
|
+
│ │
|
|
100
|
+
│ │
|
|
101
|
+
│ [logo] [page #] / [N] │ ← chrome at bottom
|
|
102
|
+
└─────────────────────────────────────────────────────────────┘
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
| Slot | Use |
|
|
106
|
+
| --- | --- |
|
|
107
|
+
| Headline | The one thing — prose, not heading |
|
|
108
|
+
| Visual | The proof — chart, image, demo screenshot |
|
|
109
|
+
| Sub-text | Secondary detail (small, low-priority) |
|
|
110
|
+
| Chrome | Logo + page numbers (small, persistent) |
|
|
111
|
+
|
|
112
|
+
Every slide has these elements. Variation comes from layout (visual top vs left vs bottom) — but the slots are consistent.
|
|
113
|
+
|
|
114
|
+
## Title-as-message
|
|
115
|
+
|
|
116
|
+
Bad title (boring): "Revenue".
|
|
117
|
+
Good title (the message): "Revenue tripled in Q4."
|
|
118
|
+
|
|
119
|
+
The title makes the case. The chart proves it.
|
|
120
|
+
|
|
121
|
+
If audience reads only the titles, they get the deck's argument. That's the goal.
|
|
122
|
+
|
|
123
|
+
## Visual hierarchy
|
|
124
|
+
|
|
125
|
+
Slide audiences scan in seconds. Hierarchy must be unambiguous:
|
|
126
|
+
|
|
127
|
+
1. **Largest visual element wins.** If your chart is small and the heading is huge, the heading is the message. Verify intent.
|
|
128
|
+
2. **Color contrast wins second.** A red number on a gray slide draws first.
|
|
129
|
+
3. **Position last.** Everything else equal, top-left wins (LTR).
|
|
130
|
+
|
|
131
|
+
Test: glance at slide for 2 seconds. What do you see?
|
|
132
|
+
|
|
133
|
+
## Color in decks
|
|
134
|
+
|
|
135
|
+
| Use | Color |
|
|
136
|
+
| --- | --- |
|
|
137
|
+
| Brand primary | Headlines, key callouts |
|
|
138
|
+
| Neutral dark | Body text |
|
|
139
|
+
| Neutral light | Background |
|
|
140
|
+
| Money / status | One semantic accent (positive trend, etc.) |
|
|
141
|
+
|
|
142
|
+
Cap palette at **4–6 colors** for the whole deck. More is brand chaos.
|
|
143
|
+
|
|
144
|
+
For chart slides: use the chart palette rules from [`knowledge/patterns/chart-color-encoding.md`](chart-color-encoding.md).
|
|
145
|
+
|
|
146
|
+
## Typography in decks
|
|
147
|
+
|
|
148
|
+
| Slot | Web/screen | Print/PDF |
|
|
149
|
+
| --- | --- | --- |
|
|
150
|
+
| Title | 60–96pt | 36–48pt |
|
|
151
|
+
| Body | 24–32pt | 14–18pt |
|
|
152
|
+
| Caption | 16–20pt | 10–12pt |
|
|
153
|
+
| Code (rare) | 22–28pt monospace | 12–14pt |
|
|
154
|
+
|
|
155
|
+
Pick **one font**. Maybe two (heading + body if they pair). More is brand inconsistency.
|
|
156
|
+
|
|
157
|
+
For Korean: Pretendard works at all sizes. Avoid mixing Hangul fonts within one deck.
|
|
158
|
+
|
|
159
|
+
## Layout templates
|
|
160
|
+
|
|
161
|
+
### Title slide
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
┌──────────────────────────────────────┐
|
|
165
|
+
│ │
|
|
166
|
+
│ [Big bold title] │
|
|
167
|
+
│ │
|
|
168
|
+
│ Subtitle / tagline │
|
|
169
|
+
│ │
|
|
170
|
+
│ Author · Date · Venue │
|
|
171
|
+
│ │
|
|
172
|
+
└──────────────────────────────────────┘
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Section divider
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
┌──────────────────────────────────────┐
|
|
179
|
+
│ │
|
|
180
|
+
│ Part 02 │
|
|
181
|
+
│ Section name │
|
|
182
|
+
│ │
|
|
183
|
+
└──────────────────────────────────────┘
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Used between major parts of the deck. Helps audience reset.
|
|
187
|
+
|
|
188
|
+
### Content slide (one image, one message)
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
┌──────────────────────────────────────┐
|
|
192
|
+
│ Title │
|
|
193
|
+
│ │
|
|
194
|
+
│ [Large image / chart] │
|
|
195
|
+
│ │
|
|
196
|
+
│ Caption │
|
|
197
|
+
└──────────────────────────────────────┘
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Comparison slide (2-up)
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
┌──────────────────────────────────────┐
|
|
204
|
+
│ Title — the comparison itself │
|
|
205
|
+
├─────────────┬───────────────────────┤
|
|
206
|
+
│ │ │
|
|
207
|
+
│ Option A │ Option B │
|
|
208
|
+
│ │ │
|
|
209
|
+
│ ✓ benefit │ ✓ benefit │
|
|
210
|
+
│ ✓ benefit │ ✗ drawback │
|
|
211
|
+
│ │ │
|
|
212
|
+
└─────────────┴───────────────────────┘
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Two columns; clearly delineated. Avoid 3+ columns (cramped).
|
|
216
|
+
|
|
217
|
+
### Quote slide
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
┌──────────────────────────────────────┐
|
|
221
|
+
│ │
|
|
222
|
+
│ "Quote text, large, italic or │
|
|
223
|
+
│ distinct font." │
|
|
224
|
+
│ │
|
|
225
|
+
│ — Attribution │
|
|
226
|
+
│ │
|
|
227
|
+
└──────────────────────────────────────┘
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Used for testimonials in sales decks, framing quotes in talks.
|
|
231
|
+
|
|
232
|
+
## Charts on slides
|
|
233
|
+
|
|
234
|
+
| Rule | Why |
|
|
235
|
+
| --- | --- |
|
|
236
|
+
| **Headline tells the story** | Audience reads the headline, glances at chart for confirmation |
|
|
237
|
+
| **Drop chart noise** (gridlines, redundant labels) | Slide is glance-only, less is better |
|
|
238
|
+
| **Highlight the takeaway** | Color one bar / line differently to indicate "this is the point" |
|
|
239
|
+
| **Single message per chart** | Don't show 5 series unless the comparison is the point |
|
|
240
|
+
| **No 3D charts** | Always confusing |
|
|
241
|
+
|
|
242
|
+
Cite [`knowledge/patterns/chart-color-encoding.md`](chart-color-encoding.md).
|
|
243
|
+
|
|
244
|
+
## Demo / screenshot slides
|
|
245
|
+
|
|
246
|
+
For product walkthroughs:
|
|
247
|
+
- Screenshot fills most of the slide.
|
|
248
|
+
- Annotate with arrows / circles / numbered callouts.
|
|
249
|
+
- For UI demos: cover sensitive data (use placeholder).
|
|
250
|
+
- Optimize image — slide PDF can balloon to 100MB if uncompressed.
|
|
251
|
+
|
|
252
|
+
## Tools
|
|
253
|
+
|
|
254
|
+
| Tool | Best for |
|
|
255
|
+
| --- | --- |
|
|
256
|
+
| **Keynote** (Mac) | Live talks, smooth animations |
|
|
257
|
+
| **Google Slides** | Collaboration, real-time editing |
|
|
258
|
+
| **PowerPoint** | Corporate, advanced layout |
|
|
259
|
+
| **Figma Slides** | Brand-led decks with rich design |
|
|
260
|
+
| **Pitch** | Sales decks, modern collaboration |
|
|
261
|
+
| **Markdown → reveal.js / Slidev** | Engineer-friendly, code-heavy talks |
|
|
262
|
+
|
|
263
|
+
For consistency with design-ai's design system: Figma Slides + tokens (Phase 9 Figma MCP) is the cleanest path.
|
|
264
|
+
|
|
265
|
+
## Deck structure decisions
|
|
266
|
+
|
|
267
|
+
### How long?
|
|
268
|
+
|
|
269
|
+
| Use | Slide count |
|
|
270
|
+
| --- | --- |
|
|
271
|
+
| 5-min lightning talk | 8–10 slides |
|
|
272
|
+
| 20-min conference talk | 15–25 slides |
|
|
273
|
+
| 30-min keynote | 30–40 slides |
|
|
274
|
+
| Sales pitch (sent) | 10–15 slides |
|
|
275
|
+
| Investor pitch | 12 slides (Sequoia-style) or 8–10 (Y Combinator-style) |
|
|
276
|
+
| Internal team review | 15–25 slides |
|
|
277
|
+
|
|
278
|
+
More important than count: **rhythm**. A 30-slide deck with 10 dense slides + 20 simple slides reads better than 30 medium-density slides.
|
|
279
|
+
|
|
280
|
+
### One presenter or several?
|
|
281
|
+
|
|
282
|
+
Multi-presenter decks need clear handoffs. Add a "next presenter" cue between sections (a slide with the next person's name + topic).
|
|
283
|
+
|
|
284
|
+
## Korean conventions
|
|
285
|
+
|
|
286
|
+
Korean business decks (보고서/제안서):
|
|
287
|
+
- Heavier on text than Western (Korean business context expects detail).
|
|
288
|
+
- Hierarchy via numbered sections (1, 1.1, 1.1.1).
|
|
289
|
+
- Polite tone (~합니다).
|
|
290
|
+
- Conservative palette — corporate gray + brand color, less saturation.
|
|
291
|
+
|
|
292
|
+
Korean talk decks at conferences (PyCon Korea, FEKR, etc.):
|
|
293
|
+
- Lighter, more Western-style.
|
|
294
|
+
- English code samples on Korean explanation slides is standard.
|
|
295
|
+
|
|
296
|
+
For Korean fintech pitch decks: per Toss-style aesthetic — minimal, single primary color, lots of whitespace, big numbers.
|
|
297
|
+
|
|
298
|
+
## Common deck design mistakes
|
|
299
|
+
|
|
300
|
+
- **Walls of bullets** — death by PowerPoint.
|
|
301
|
+
- **Reading slides verbatim** — "I'll let the slide speak for itself" is the slide's failure.
|
|
302
|
+
- **Tiny text** at the back of the room.
|
|
303
|
+
- **Auto-advance** — robs presenter of pacing control.
|
|
304
|
+
- **Stock photography of people pointing at laptops** — instantly cliché.
|
|
305
|
+
- **Pie charts with 8+ slices**.
|
|
306
|
+
- **3D anything**.
|
|
307
|
+
- **Slide numbers in the title** — irrelevant during the talk.
|
|
308
|
+
- **Same template for every slide type** — title slide, section divider, content slide should look distinct.
|
|
309
|
+
|
|
310
|
+
## Cross-reference
|
|
311
|
+
|
|
312
|
+
- [`knowledge/patterns/document-typography.md`](document-typography.md) — when "deck" is actually a doc
|
|
313
|
+
- [`knowledge/patterns/chart-color-encoding.md`](chart-color-encoding.md) — chart-on-slide
|
|
314
|
+
- [`knowledge/patterns/information-architecture.md`](information-architecture.md) — structuring sections
|
|
315
|
+
- [`knowledge/colors/color-theory.md`](../colors/color-theory.md) — palette construction
|
|
316
|
+
- [`skills/slide-deck-author/PLAYBOOK.md`](../../skills/slide-deck-author/PLAYBOOK.md) — authoring skill (uses these rules)
|