@kensaurus/skills 0.0.0-stage → 2.0.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/marketplace.json +53 -0
- package/.claude-plugin/plugin.json +40 -0
- package/.cursor-plugin/plugin.json +38 -0
- package/.mcp.json +28 -0
- package/CHANGELOG.md +1761 -0
- package/LICENSE +21 -0
- package/NOTICE +13 -0
- package/README.md +820 -2
- package/SECURITY.md +55 -0
- package/agents/code-reviewer.md +60 -0
- package/agents/completion-judge.md +89 -0
- package/agents/db-migrator.md +125 -0
- package/agents/debugger.md +47 -0
- package/agents/deploy-checker.md +100 -0
- package/agents/perf-monitor.md +74 -0
- package/assets/favicon.png +0 -0
- package/assets/logo-light.png +0 -0
- package/assets/logo.png +0 -0
- package/assets/logo.svg +6 -0
- package/assets/og.png +0 -0
- package/bin/install.mjs +1127 -0
- package/bin/kenji.js +2 -0
- package/commands/adr.md +17 -0
- package/commands/aeo-plan.md +18 -0
- package/commands/arch-boundaries.md +17 -0
- package/commands/aso-plan.md +18 -0
- package/commands/auth-flows.md +19 -0
- package/commands/backup-plan.md +17 -0
- package/commands/burndown-full.md +25 -0
- package/commands/capacitor-plan.md +18 -0
- package/commands/codemod-safety.md +22 -0
- package/commands/commit.md +18 -0
- package/commands/complete-everything.md +40 -0
- package/commands/cost-plan.md +19 -0
- package/commands/deadcode-plan.md +26 -0
- package/commands/deadcode.md +32 -0
- package/commands/debug-issue.md +17 -0
- package/commands/deps-plan.md +18 -0
- package/commands/docs-plan.md +17 -0
- package/commands/doctrine.md +19 -0
- package/commands/error-plan.md +19 -0
- package/commands/feedback-to-closure.md +36 -0
- package/commands/fix-issue.md +76 -0
- package/commands/gate-logic.md +26 -0
- package/commands/green-repo.md +36 -0
- package/commands/grill-me.md +19 -0
- package/commands/gtm-plan.md +21 -0
- package/commands/gtm-weekly.md +17 -0
- package/commands/gtm.md +22 -0
- package/commands/handoff.md +15 -0
- package/commands/housekeep-backlog.md +18 -0
- package/commands/housekeep-files.md +22 -0
- package/commands/housekeep-gates.md +18 -0
- package/commands/instant-nav.md +11 -0
- package/commands/integrity-plan.md +19 -0
- package/commands/launch-kit.md +16 -0
- package/commands/mcp-guide.md +40 -0
- package/commands/mobile-plan.md +19 -0
- package/commands/native-rn-monorepo/README.md +78 -0
- package/commands/native-rn-monorepo/android-build.md +26 -0
- package/commands/native-rn-monorepo/android-install.md +32 -0
- package/commands/native-rn-monorepo/android-logcat.md +37 -0
- package/commands/native-rn-monorepo/ios-ci-logs.md +56 -0
- package/commands/native-rn-monorepo/ios-ci-status.md +52 -0
- package/commands/native-rn-monorepo/ios-ci-trigger.md +59 -0
- package/commands/native-rn-monorepo/rn-reset.md +50 -0
- package/commands/native-rn-monorepo/rn-ship-ios.md +67 -0
- package/commands/native-rn-monorepo/rn-verify.md +53 -0
- package/commands/perf-plan.md +18 -0
- package/commands/plan-mode.md +74 -0
- package/commands/pr.md +16 -0
- package/commands/pricing-plan.md +20 -0
- package/commands/privacy-plan.md +18 -0
- package/commands/readability.md +12 -0
- package/commands/readme.md +15 -0
- package/commands/refactor.md +15 -0
- package/commands/release-prep.md +17 -0
- package/commands/research.md +25 -0
- package/commands/responsive-audit.md +21 -0
- package/commands/review-code.md +18 -0
- package/commands/rls-plan.md +18 -0
- package/commands/secrets-plan.md +18 -0
- package/commands/security-plan.md +19 -0
- package/commands/ship-and-observe.md +36 -0
- package/commands/skill-conflicts.md +19 -0
- package/commands/slop-plan.md +18 -0
- package/commands/stub-plan.md +18 -0
- package/commands/test-mutation.md +16 -0
- package/commands/test-plan.md +17 -0
- package/commands/test.md +29 -0
- package/commands/thirdparty-web-interface-guidelines.md +185 -0
- package/commands/uiux-plan.md +18 -0
- package/commands/uiux.md +45 -0
- package/commands/update-deps.md +21 -0
- package/commands/validation-plan.md +19 -0
- package/commands-portable/fix-issue.md +72 -0
- package/commands-portable/plan-mode.md +92 -0
- package/commands-portable/research.md +91 -0
- package/docs/screenshots/README.md +5 -0
- package/docs/screenshots/audit-dark.png +0 -0
- package/docs/screenshots/build-dark.png +0 -0
- package/docs/screenshots/grill-dark.png +0 -0
- package/docs/screenshots/hero-dark.png +0 -0
- package/docs/screenshots/hero-light.png +0 -0
- package/docs/screenshots/ship-dark.png +0 -0
- package/docs/screenshots/src/showcase.html +320 -0
- package/hooks/completion-gate.mjs +258 -0
- package/hooks/cursor-hooks.json +13 -0
- package/hooks/hooks.json +15 -0
- package/install.sh +21 -0
- package/llms.txt +40 -0
- package/mcp/README.md +266 -0
- package/mcp/VERSIONS.md +41 -0
- package/mcp/mcp-full.json.template +124 -0
- package/mcp/mcp.json.template +29 -0
- package/mcp/pinned-versions.json +27 -0
- package/package.json +93 -4
- package/rules/approved-plan-execution.mdc +65 -0
- package/rules/full-stack-ship-discipline.mdc +37 -0
- package/rules/native-rn-monorepo/README.md +63 -0
- package/rules/native-rn-monorepo/_project.mdc +69 -0
- package/rules/native-rn-monorepo/native-android.mdc +72 -0
- package/rules/native-rn-monorepo/native-ios.mdc +61 -0
- package/rules/native-rn-monorepo/react-native-js.mdc +78 -0
- package/rules/native-rn-monorepo/web.mdc +60 -0
- package/rules/project-starter/components.mdc +54 -0
- package/rules/project-starter/data-fetching.mdc +77 -0
- package/rules/project-starter/git.mdc +41 -0
- package/rules/project-starter/supabase.mdc +37 -0
- package/rules/project-starter/tailwind.mdc +48 -0
- package/rules/project-starter/typescript.mdc +36 -0
- package/rules/project-starter/web-performance.mdc +42 -0
- package/rules/senior-engineer.mdc +30 -0
- package/rules/shell-first-search.mdc +19 -0
- package/rules/skill-workflows.mdc +35 -0
- package/rules/verification-before-completion.mdc +57 -0
- package/skills/audit-accessibility/SKILL.md +441 -0
- package/skills/audit-agent-speed/SKILL.md +181 -0
- package/skills/audit-agent-speed/scripts/stop-typecheck.mjs +151 -0
- package/skills/audit-analytics/SKILL.md +138 -0
- package/skills/audit-auth-flows/SKILL.md +267 -0
- package/skills/audit-backend-architecture/SKILL.md +266 -0
- package/skills/audit-backend-architecture/references/patterns.md +386 -0
- package/skills/audit-bundle-size/SKILL.md +296 -0
- package/skills/audit-cicd/SKILL.md +218 -0
- package/skills/audit-code-quality/SKILL.md +314 -0
- package/skills/audit-code-review/SKILL.md +289 -0
- package/skills/audit-codemod-safety/SKILL.md +159 -0
- package/skills/audit-db-schema/SKILL.md +465 -0
- package/skills/audit-db-schema/references/details.md +110 -0
- package/skills/audit-doctrine/SKILL.md +189 -0
- package/skills/audit-env-parity/SKILL.md +133 -0
- package/skills/audit-fe-api/SKILL.md +458 -0
- package/skills/audit-gate-logic/SKILL.md +219 -0
- package/skills/audit-i18n/SKILL.md +339 -0
- package/skills/audit-infra-cost/SKILL.md +142 -0
- package/skills/audit-langfuse-llm/SKILL.md +468 -0
- package/skills/audit-langfuse-llm/references/details.md +226 -0
- package/skills/audit-llm-security/SKILL.md +147 -0
- package/skills/audit-monetization-iap/SKILL.md +137 -0
- package/skills/audit-payment-system/SKILL.md +268 -0
- package/skills/audit-payment-system/references/checklist.md +283 -0
- package/skills/audit-performance/SKILL.md +383 -0
- package/skills/audit-performance/references/loading-priority-2026.md +81 -0
- package/skills/audit-realworld/SKILL.md +287 -0
- package/skills/audit-registry-listing/SKILL.md +122 -0
- package/skills/audit-resilience/SKILL.md +154 -0
- package/skills/audit-responsive/SKILL.md +221 -0
- package/skills/audit-responsive/references/checklist.md +166 -0
- package/skills/audit-security/SKILL.md +289 -0
- package/skills/audit-skill-conflicts/SKILL.md +178 -0
- package/skills/audit-ui-states/SKILL.md +146 -0
- package/skills/audit-uiux-design-system/SKILL.md +475 -0
- package/skills/audit-uiux-design-system/references/details.md +71 -0
- package/skills/audit-ux/SKILL.md +379 -0
- package/skills/audit-ux/references/details.md +245 -0
- package/skills/audit-ux-journeys/SKILL.md +215 -0
- package/skills/audit-ux-journeys/references/checklist.md +179 -0
- package/skills/backend-db-performance/SKILL.md +441 -0
- package/skills/backend-error-handling/SKILL.md +489 -0
- package/skills/backend-error-handling/references/details.md +58 -0
- package/skills/backend-observability/SKILL.md +88 -0
- package/skills/backend-patterns/SKILL.md +499 -0
- package/skills/backend-patterns/references/architecture-patterns.md +298 -0
- package/skills/backend-realtime/SKILL.md +403 -0
- package/skills/backend-realtime/references/patterns.md +74 -0
- package/skills/burndown-full/SKILL.md +174 -0
- package/skills/complete-everything/SKILL.md +295 -0
- package/skills/data-pipeline/SKILL.md +109 -0
- package/skills/data-visualization/SKILL.md +488 -0
- package/skills/debug-error/SKILL.md +322 -0
- package/skills/debug-fe-be-integration/SKILL.md +459 -0
- package/skills/debug-sentry-monitor/SKILL.md +497 -0
- package/skills/debug-sentry-monitor/references/details.md +165 -0
- package/skills/deploy-npm/SKILL.md +394 -0
- package/skills/deploy-npm/references/example-mushi-mushi.md +52 -0
- package/skills/deploy-verify/SKILL.md +489 -0
- package/skills/design-api/SKILL.md +379 -0
- package/skills/design-canvas/SKILL.md +155 -0
- package/skills/design-email/SKILL.md +370 -0
- package/skills/design-frontend/SKILL.md +143 -0
- package/skills/design-generative-art/SKILL.md +474 -0
- package/skills/design-mobile-first/SKILL.md +506 -0
- package/skills/design-motion/SKILL.md +333 -0
- package/skills/design-motion/references/delight-interactions.md +191 -0
- package/skills/design-prd/SKILL.md +443 -0
- package/skills/design-system/SKILL.md +457 -0
- package/skills/design-theme/SKILL.md +226 -0
- package/skills/design-theme/themes/tsumagoi-ranch.md +150 -0
- package/skills/docs-adr/SKILL.md +168 -0
- package/skills/docs-coauthor/SKILL.md +368 -0
- package/skills/docs-comparison-pages/SKILL.md +117 -0
- package/skills/docs-domain-modeling/SKILL.md +97 -0
- package/skills/docs-launch-kit/SKILL.md +139 -0
- package/skills/docs-writer/SKILL.md +469 -0
- package/skills/enhance-agent-guardrails/SKILL.md +164 -0
- package/skills/enhance-arch-boundaries/SKILL.md +154 -0
- package/skills/enhance-capacitor-ui/SKILL.md +463 -0
- package/skills/enhance-capacitor-ui/references/details.md +750 -0
- package/skills/enhance-email-deliverability/SKILL.md +143 -0
- package/skills/enhance-growth-loops/SKILL.md +122 -0
- package/skills/enhance-lifecycle-email/SKILL.md +130 -0
- package/skills/enhance-motion/SKILL.md +193 -0
- package/skills/enhance-onboarding/SKILL.md +148 -0
- package/skills/enhance-pwa/SKILL.md +304 -0
- package/skills/enhance-readability/SKILL.md +146 -0
- package/skills/enhance-readme/SKILL.md +496 -0
- package/skills/enhance-readme/package-lock.json +187 -0
- package/skills/enhance-readme/package.json +17 -0
- package/skills/enhance-readme/scripts/generate-readme-blocks.mjs +199 -0
- package/skills/enhance-readme/scripts/record-readme-tour.mjs +442 -0
- package/skills/enhance-skill-prompts/SKILL.md +167 -0
- package/skills/enhance-skill-prompts/references/exemplar-audit-auth-flows.md +311 -0
- package/skills/enhance-web-conversion/SKILL.md +155 -0
- package/skills/enhance-web-forms/SKILL.md +154 -0
- package/skills/enhance-web-instant-nav/SKILL.md +138 -0
- package/skills/enhance-web-instant-nav/references/bfcache-blockers.md +23 -0
- package/skills/enhance-web-instant-nav/references/early-hints.md +33 -0
- package/skills/enhance-web-instant-nav/references/speculation-rules.md +44 -0
- package/skills/enhance-web-landing/SKILL.md +459 -0
- package/skills/enhance-web-landing/references/details.md +773 -0
- package/skills/enhance-web-redesign/SKILL.md +228 -0
- package/skills/enhance-web-seo/SKILL.md +276 -0
- package/skills/enhance-web-ui/SKILL.md +473 -0
- package/skills/enhance-web-ui/references/details.md +674 -0
- package/skills/enhance-web-ux/HEURISTICS.md +242 -0
- package/skills/enhance-web-ux/PATTERNS.md +375 -0
- package/skills/enhance-web-ux/SKILL.md +464 -0
- package/skills/enhance-web-ux/examples.md +222 -0
- package/skills/enhance-web-ux/references/details.md +406 -0
- package/skills/enhance-web-web3d/SKILL.md +397 -0
- package/skills/enhance-web-web3d/references/css-canvas-effects.md +180 -0
- package/skills/handoff/SKILL.md +66 -0
- package/skills/housekeep-backlog/SKILL.md +149 -0
- package/skills/housekeep-dead-code/SKILL.md +387 -0
- package/skills/housekeep-dead-code/references/ratchet-ci.md +205 -0
- package/skills/housekeep-dead-code/references/supabase-hygiene.md +152 -0
- package/skills/housekeep-design/SKILL.md +207 -0
- package/skills/housekeep-files/SKILL.md +220 -0
- package/skills/housekeep-files/references/naming-and-catalog.md +86 -0
- package/skills/housekeep-files/scripts/housekeep-files.ps1 +360 -0
- package/skills/housekeep-files/scripts/housekeep-files.sh +238 -0
- package/skills/housekeep-gates/SKILL.md +174 -0
- package/skills/iterate-agent-harness/SKILL.md +137 -0
- package/skills/iterate-gtm-weekly/SKILL.md +103 -0
- package/skills/iterate-post-launch/SKILL.md +292 -0
- package/skills/meta-mcp-builder/SKILL.md +313 -0
- package/skills/meta-skill-creator/SKILL.md +304 -0
- package/skills/mobile-capacitor-platform/SKILL.md +104 -0
- package/skills/mobile-emulator-start/SKILL.md +296 -0
- package/skills/mobile-emulator-test/SKILL.md +491 -0
- package/skills/mobile-emulator-test/references/details.md +478 -0
- package/skills/mobile-rn-performance/SKILL.md +107 -0
- package/skills/mobile-rn-screen/SKILL.md +476 -0
- package/skills/mobile-rn-screen/references/details.md +785 -0
- package/skills/mushi-health/SKILL.md +206 -0
- package/skills/mushi-integration/SKILL.md +257 -0
- package/skills/plan-aeo-readiness/SKILL.md +166 -0
- package/skills/plan-antislop/SKILL.md +281 -0
- package/skills/plan-aso/SKILL.md +149 -0
- package/skills/plan-backup-dr/SKILL.md +131 -0
- package/skills/plan-capacitor-hardening/SKILL.md +217 -0
- package/skills/plan-data-integrity/SKILL.md +187 -0
- package/skills/plan-dead-code/SKILL.md +386 -0
- package/skills/plan-dead-code/references/knip-config.md +214 -0
- package/skills/plan-dead-code/references/output-templates.md +133 -0
- package/skills/plan-dead-code/references/preservation-contract.md +50 -0
- package/skills/plan-dead-code/references/residue-greps.md +84 -0
- package/skills/plan-dependency-provenance/SKILL.md +200 -0
- package/skills/plan-docs-sync/SKILL.md +143 -0
- package/skills/plan-docs-sync/references/drift-taxonomy.md +43 -0
- package/skills/plan-docs-sync/references/output-templates.md +33 -0
- package/skills/plan-docs-sync/references/preservation-contract.md +17 -0
- package/skills/plan-error-handling/SKILL.md +205 -0
- package/skills/plan-gtm/SKILL.md +276 -0
- package/skills/plan-gtm/references/benchmarks-2026.md +183 -0
- package/skills/plan-input-validation/SKILL.md +179 -0
- package/skills/plan-llm-cost-guardrails/SKILL.md +176 -0
- package/skills/plan-mobile-readiness/SKILL.md +171 -0
- package/skills/plan-perf-audit/SKILL.md +145 -0
- package/skills/plan-perf-audit/references/audit-scope.md +51 -0
- package/skills/plan-perf-audit/references/output-templates.md +33 -0
- package/skills/plan-perf-audit/references/preservation-contract.md +13 -0
- package/skills/plan-pricing/SKILL.md +173 -0
- package/skills/plan-privacy-compliance/SKILL.md +148 -0
- package/skills/plan-rls-audit/SKILL.md +231 -0
- package/skills/plan-secrets-audit/SKILL.md +181 -0
- package/skills/plan-security-audit/SKILL.md +168 -0
- package/skills/plan-security-audit/references/output-templates.md +36 -0
- package/skills/plan-security-audit/references/owasp-supabase-scope.md +55 -0
- package/skills/plan-security-audit/references/preservation-contract.md +18 -0
- package/skills/plan-stub-checker/SKILL.md +216 -0
- package/skills/plan-stub-checker/references/detection-methodology.md +75 -0
- package/skills/plan-stub-checker/references/detection-taxonomy.md +34 -0
- package/skills/plan-stub-checker/references/output-templates.md +63 -0
- package/skills/plan-stub-checker/references/preservation-contract.md +24 -0
- package/skills/plan-test-coverage/SKILL.md +170 -0
- package/skills/plan-test-coverage/references/methodology.md +54 -0
- package/skills/plan-test-coverage/references/output-templates.md +34 -0
- package/skills/plan-test-coverage/references/preservation-contract.md +15 -0
- package/skills/plan-uiux-unification/SKILL.md +230 -0
- package/skills/plan-uiux-unification/references/output-templates.md +67 -0
- package/skills/plan-uiux-unification/references/phase-workbook.md +85 -0
- package/skills/plan-uiux-unification/references/preservation-contract.md +24 -0
- package/skills/protocol-browser-anti-stall/SKILL.md +211 -0
- package/skills/protocol-browser-anti-stall/references/mcp-to-cli-map.md +113 -0
- package/skills/protocol-browser-anti-stall/references/playwright-session-coordination.md +170 -0
- package/skills/research/SKILL.md +422 -0
- package/skills/test-exploratory/SKILL.md +165 -0
- package/skills/test-exploratory/references/charter-template.md +29 -0
- package/skills/test-load/SKILL.md +126 -0
- package/skills/test-mutation/SKILL.md +160 -0
- package/skills/test-playwright/SKILL.md +354 -0
- package/skills/test-qa/SKILL.md +364 -0
- package/skills/test-qa/references/details.md +268 -0
- package/skills/test-red-team/SKILL.md +387 -0
- package/skills/test-red-team/references/owasp-attack-checklist.md +193 -0
- package/skills/test-unit/SKILL.md +259 -0
- package/skills/test-unit/references/details.md +267 -0
- package/skills/test-visual-regression/SKILL.md +132 -0
- package/skills/thirdparty-emil-design-eng/ATTRIBUTION.md +20 -0
- package/skills/thirdparty-emil-design-eng/SKILL.md +21 -0
- package/skills/thirdparty-emil-design-eng/references/emil-design-eng.md +676 -0
- package/skills/thirdparty-ui-ux-pro-max/ATTRIBUTION.md +22 -0
- package/skills/thirdparty-ui-ux-pro-max/SKILL.md +304 -0
- package/skills/thirdparty-ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/thirdparty-ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/thirdparty-ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/thirdparty-ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/thirdparty-ui-ux-pro-max/data/products.csv +97 -0
- package/skills/thirdparty-ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/thirdparty-ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/thirdparty-ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/thirdparty-ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/thirdparty-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/thirdparty-ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/search.py +114 -0
- package/skills/thirdparty-web-interface-guidelines/ATTRIBUTION.md +23 -0
- package/skills/thirdparty-web-interface-guidelines/SKILL.md +190 -0
- package/skills/workflow-build-feature/SKILL.md +118 -0
- package/skills/workflow-coding-discipline/SKILL.md +140 -0
- package/skills/workflow-environment-ready/SKILL.md +128 -0
- package/skills/workflow-feature-flag/SKILL.md +262 -0
- package/skills/workflow-feedback-to-closure/SKILL.md +165 -0
- package/skills/workflow-fix-and-ship/SKILL.md +136 -0
- package/skills/workflow-git-commit/SKILL.md +200 -0
- package/skills/workflow-green-repo/SKILL.md +166 -0
- package/skills/workflow-grilling/SKILL.md +73 -0
- package/skills/workflow-gtm/SKILL.md +153 -0
- package/skills/workflow-housekeep/SKILL.md +453 -0
- package/skills/workflow-housekeep/references/templates.md +109 -0
- package/skills/workflow-launch-ready/SKILL.md +145 -0
- package/skills/workflow-merge-conflicts/SKILL.md +62 -0
- package/skills/workflow-onboard/SKILL.md +99 -0
- package/skills/workflow-parallel-agents/SKILL.md +164 -0
- package/skills/workflow-pr/SKILL.md +197 -0
- package/skills/workflow-quality-gate/SKILL.md +147 -0
- package/skills/workflow-refactor/SKILL.md +274 -0
- package/skills/workflow-release-prep/SKILL.md +207 -0
- package/skills/workflow-ship-and-observe/SKILL.md +164 -0
- package/skills/workflow-spec-tdd/SKILL.md +141 -0
- package/skills/workflow-spec-tdd/references/spec-template.md +126 -0
- package/skills/workflow-spec-tdd/references/tdd-patterns.md +167 -0
- package/skills-cursor/babysit/SKILL.md +17 -0
- package/skills-cursor/canvas/SKILL.md +142 -0
- package/skills-cursor/canvas/sdk/canvas-tokens.d.ts +235 -0
- package/skills-cursor/canvas/sdk/chart-primitives.d.ts +200 -0
- package/skills-cursor/canvas/sdk/dag-layout.d.ts +102 -0
- package/skills-cursor/canvas/sdk/diff-view.d.ts +130 -0
- package/skills-cursor/canvas/sdk/form-primitives.d.ts +194 -0
- package/skills-cursor/canvas/sdk/hooks.d.ts +117 -0
- package/skills-cursor/canvas/sdk/index.d.ts +47 -0
- package/skills-cursor/canvas/sdk/theme.d.ts +61 -0
- package/skills-cursor/canvas/sdk/todo-list.d.ts +49 -0
- package/skills-cursor/canvas/sdk/ui-primitives.d.ts +549 -0
- package/skills-cursor/canvas/sdk/ui-primitives.test.d.ts +2 -0
- package/skills-cursor/create-hook/SKILL.md +238 -0
- package/skills-cursor/create-rule/SKILL.md +185 -0
- package/skills-cursor/create-skill/SKILL.md +269 -0
- package/skills-cursor/create-skill/references/authoring-guide.md +182 -0
- package/skills-cursor/create-subagent/SKILL.md +228 -0
- package/skills-cursor/migrate-to-skills/SKILL.md +121 -0
- package/skills-cursor/shell/SKILL.md +22 -0
- package/skills-cursor/split-to-prs/SKILL.md +47 -0
- package/skills-cursor/statusline/SKILL.md +193 -0
- package/skills-cursor/update-cli-config/SKILL.md +85 -0
- package/skills-cursor/update-cursor-settings/SKILL.md +137 -0
- package/skills.sh.json +296 -0
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-system
|
|
3
|
+
description: >
|
|
4
|
+
Build a new design system (tokens, variants, theming). Use when
|
|
5
|
+
"create a design system" or "component library from scratch". Drifted
|
|
6
|
+
existing system → housekeep-design. Plan-only unification →
|
|
7
|
+
plan-uiux-unification.
|
|
8
|
+
license: MIT
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Design System Skill
|
|
12
|
+
|
|
13
|
+
**Degree of freedom: MIXED.** Token taxonomy and variants `[HIGH freedom]`;
|
|
14
|
+
existing `ui/` / token inventory `[LOW freedom — run exactly]`.
|
|
15
|
+
|
|
16
|
+
Build scalable, maintainable design systems with consistent tokens, variants, and documentation.
|
|
17
|
+
|
|
18
|
+
## How to reason
|
|
19
|
+
|
|
20
|
+
1. **Inventory** — `components/ui`, tokens, `cva`, shadcn/Radix
|
|
21
|
+
2. **Tokenize** — semantic tokens, not raw hex in components
|
|
22
|
+
3. **Variant** — `cva` covers real states (default/destructive/disabled)
|
|
23
|
+
4. **Document** — JSDoc, keyboard/focus, dark mode
|
|
24
|
+
|
|
25
|
+
## Worked example
|
|
26
|
+
|
|
27
|
+
> **Inventory:** shadcn `Button` exists; colors are raw `#3B82F6` in three pages; no `--primary`.
|
|
28
|
+
> **Tokenize:** `--primary` / `--primary-foreground` in `globals.css`; Tailwind maps `hsl(var(--primary))`.
|
|
29
|
+
> **Variant:** extend existing `buttonVariants` — do not add `components/Button2.tsx`.
|
|
30
|
+
> **Document:** JSDoc lists variants/sizes; focus ring + dark `.dark` overrides.
|
|
31
|
+
|
|
32
|
+
## Self-critique before reporting
|
|
33
|
+
|
|
34
|
+
- **Did not fork** — existing primitives were extended, not recreated
|
|
35
|
+
- **Semantic tokens** — components reference tokens, not primitives or hex
|
|
36
|
+
- **A11y + dark** — focus, disabled, and dark variants exist
|
|
37
|
+
- **Right owner** — drifted existing system → `housekeep-design`; plan-only unification → `plan-uiux-unification`
|
|
38
|
+
|
|
39
|
+
## Check existing first [LOW freedom — run exactly]
|
|
40
|
+
|
|
41
|
+
**Before creating ANY design system components, verify:**
|
|
42
|
+
|
|
43
|
+
1. **Check for existing design system:**
|
|
44
|
+
```bash
|
|
45
|
+
ls -la src/components/ui/
|
|
46
|
+
cat package.json | grep -i "shadcn\|radix\|headless"
|
|
47
|
+
cat components.json 2>/dev/null # shadcn config
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
2. **Check for existing tokens:**
|
|
51
|
+
```bash
|
|
52
|
+
cat tailwind.config.* | head -100
|
|
53
|
+
cat src/styles/globals.css | head -50
|
|
54
|
+
rg "var\(--" --type css | head -20
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
3. **Check for existing patterns:**
|
|
58
|
+
```bash
|
|
59
|
+
rg "cva\(|variants:" --type ts --type tsx | head -10
|
|
60
|
+
rg "cn\(|clsx\(|twMerge" --type tsx | head -5
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Why:** Don't recreate existing primitives. Extend and enhance what exists.
|
|
64
|
+
|
|
65
|
+
## Design Tokens [HIGH freedom]
|
|
66
|
+
|
|
67
|
+
Face and ground are choices, not defaults: Inter/Roboto/Arial, a cream/off-white page, and a purple-gradient primary are the fallbacks to name and avoid. Add `--font-sans` / `--font-display` tokens for the faces you pick.
|
|
68
|
+
|
|
69
|
+
### CSS Custom Properties
|
|
70
|
+
```css
|
|
71
|
+
/* globals.css */
|
|
72
|
+
:root {
|
|
73
|
+
/* Colors - Semantic */
|
|
74
|
+
--background: 0 0% 100%;
|
|
75
|
+
--foreground: 222.2 84% 4.9%;
|
|
76
|
+
--card: 0 0% 100%;
|
|
77
|
+
--card-foreground: 222.2 84% 4.9%;
|
|
78
|
+
--popover: 0 0% 100%;
|
|
79
|
+
--popover-foreground: 222.2 84% 4.9%;
|
|
80
|
+
--primary: 221.2 83.2% 53.3%;
|
|
81
|
+
--primary-foreground: 210 40% 98%;
|
|
82
|
+
--secondary: 210 40% 96.1%;
|
|
83
|
+
--secondary-foreground: 222.2 47.4% 11.2%;
|
|
84
|
+
--muted: 210 40% 96.1%;
|
|
85
|
+
--muted-foreground: 215.4 16.3% 46.9%;
|
|
86
|
+
--accent: 210 40% 96.1%;
|
|
87
|
+
--accent-foreground: 222.2 47.4% 11.2%;
|
|
88
|
+
--destructive: 0 84.2% 60.2%;
|
|
89
|
+
--destructive-foreground: 210 40% 98%;
|
|
90
|
+
--border: 214.3 31.8% 91.4%;
|
|
91
|
+
--input: 214.3 31.8% 91.4%;
|
|
92
|
+
--ring: 221.2 83.2% 53.3%;
|
|
93
|
+
|
|
94
|
+
/* Spacing */
|
|
95
|
+
--spacing-xs: 0.25rem;
|
|
96
|
+
--spacing-sm: 0.5rem;
|
|
97
|
+
--spacing-md: 1rem;
|
|
98
|
+
--spacing-lg: 1.5rem;
|
|
99
|
+
--spacing-xl: 2rem;
|
|
100
|
+
|
|
101
|
+
/* Border Radius */
|
|
102
|
+
--radius: 0.5rem;
|
|
103
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
104
|
+
--radius-lg: calc(var(--radius) + 4px);
|
|
105
|
+
|
|
106
|
+
/* Shadows */
|
|
107
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
108
|
+
--shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
|
109
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
110
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
111
|
+
|
|
112
|
+
/* Animation */
|
|
113
|
+
--duration-fast: 150ms;
|
|
114
|
+
--duration-normal: 200ms;
|
|
115
|
+
--duration-slow: 300ms;
|
|
116
|
+
--ease-default: cubic-bezier(0.4, 0, 0.2, 1);
|
|
117
|
+
--ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
118
|
+
--ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
119
|
+
--ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.dark {
|
|
123
|
+
--background: 222.2 84% 4.9%;
|
|
124
|
+
--foreground: 210 40% 98%;
|
|
125
|
+
/* ... dark mode overrides */
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Tailwind Config Integration
|
|
130
|
+
```ts
|
|
131
|
+
// tailwind.config.ts
|
|
132
|
+
import type { Config } from 'tailwindcss'
|
|
133
|
+
|
|
134
|
+
const config: Config = {
|
|
135
|
+
content: ['./src/**/*.{ts,tsx}'],
|
|
136
|
+
darkMode: 'class',
|
|
137
|
+
theme: {
|
|
138
|
+
extend: {
|
|
139
|
+
colors: {
|
|
140
|
+
border: 'hsl(var(--border))',
|
|
141
|
+
input: 'hsl(var(--input))',
|
|
142
|
+
ring: 'hsl(var(--ring))',
|
|
143
|
+
background: 'hsl(var(--background))',
|
|
144
|
+
foreground: 'hsl(var(--foreground))',
|
|
145
|
+
primary: {
|
|
146
|
+
DEFAULT: 'hsl(var(--primary))',
|
|
147
|
+
foreground: 'hsl(var(--primary-foreground))',
|
|
148
|
+
},
|
|
149
|
+
secondary: {
|
|
150
|
+
DEFAULT: 'hsl(var(--secondary))',
|
|
151
|
+
foreground: 'hsl(var(--secondary-foreground))',
|
|
152
|
+
},
|
|
153
|
+
destructive: {
|
|
154
|
+
DEFAULT: 'hsl(var(--destructive))',
|
|
155
|
+
foreground: 'hsl(var(--destructive-foreground))',
|
|
156
|
+
},
|
|
157
|
+
muted: {
|
|
158
|
+
DEFAULT: 'hsl(var(--muted))',
|
|
159
|
+
foreground: 'hsl(var(--muted-foreground))',
|
|
160
|
+
},
|
|
161
|
+
accent: {
|
|
162
|
+
DEFAULT: 'hsl(var(--accent))',
|
|
163
|
+
foreground: 'hsl(var(--accent-foreground))',
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
borderRadius: {
|
|
167
|
+
lg: 'var(--radius-lg)',
|
|
168
|
+
md: 'var(--radius)',
|
|
169
|
+
sm: 'var(--radius-sm)',
|
|
170
|
+
},
|
|
171
|
+
boxShadow: {
|
|
172
|
+
sm: 'var(--shadow-sm)',
|
|
173
|
+
DEFAULT: 'var(--shadow)',
|
|
174
|
+
md: 'var(--shadow-md)',
|
|
175
|
+
lg: 'var(--shadow-lg)',
|
|
176
|
+
},
|
|
177
|
+
transitionDuration: {
|
|
178
|
+
fast: 'var(--duration-fast)',
|
|
179
|
+
normal: 'var(--duration-normal)',
|
|
180
|
+
slow: 'var(--duration-slow)',
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export default config
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Component Variants with CVA
|
|
190
|
+
|
|
191
|
+
```tsx
|
|
192
|
+
// lib/utils.ts
|
|
193
|
+
import { type ClassValue, clsx } from 'clsx'
|
|
194
|
+
import { twMerge } from 'tailwind-merge'
|
|
195
|
+
|
|
196
|
+
export function cn(...inputs: ClassValue[]) {
|
|
197
|
+
return twMerge(clsx(inputs))
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
```tsx
|
|
202
|
+
// components/ui/button.tsx
|
|
203
|
+
import { cva, type VariantProps } from 'class-variance-authority'
|
|
204
|
+
import { forwardRef } from 'react'
|
|
205
|
+
import { cn } from '@/lib/utils'
|
|
206
|
+
|
|
207
|
+
const buttonVariants = cva(
|
|
208
|
+
// Base styles
|
|
209
|
+
'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',
|
|
210
|
+
{
|
|
211
|
+
variants: {
|
|
212
|
+
variant: {
|
|
213
|
+
default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',
|
|
214
|
+
destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',
|
|
215
|
+
outline: 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',
|
|
216
|
+
secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',
|
|
217
|
+
ghost: 'hover:bg-accent hover:text-accent-foreground',
|
|
218
|
+
link: 'text-primary underline-offset-4 hover:underline',
|
|
219
|
+
},
|
|
220
|
+
size: {
|
|
221
|
+
default: 'h-9 px-4 py-2',
|
|
222
|
+
sm: 'h-8 rounded-md px-3 text-xs',
|
|
223
|
+
lg: 'h-10 rounded-md px-8',
|
|
224
|
+
icon: 'h-9 w-9',
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
defaultVariants: {
|
|
228
|
+
variant: 'default',
|
|
229
|
+
size: 'default',
|
|
230
|
+
},
|
|
231
|
+
}
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
export interface ButtonProps
|
|
235
|
+
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
236
|
+
VariantProps<typeof buttonVariants> {
|
|
237
|
+
asChild?: boolean
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const Button = forwardRef<HTMLButtonElement, ButtonProps>(
|
|
241
|
+
({ className, variant, size, asChild = false, ...props }, ref) => {
|
|
242
|
+
const Comp = asChild ? Slot : 'button'
|
|
243
|
+
return (
|
|
244
|
+
<Comp
|
|
245
|
+
className={cn(buttonVariants({ variant, size, className }))}
|
|
246
|
+
ref={ref}
|
|
247
|
+
{...props}
|
|
248
|
+
/>
|
|
249
|
+
)
|
|
250
|
+
}
|
|
251
|
+
)
|
|
252
|
+
Button.displayName = 'Button'
|
|
253
|
+
|
|
254
|
+
export { Button, buttonVariants }
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Compound Components Pattern
|
|
258
|
+
|
|
259
|
+
```tsx
|
|
260
|
+
// components/ui/card.tsx
|
|
261
|
+
import { cn } from '@/lib/utils'
|
|
262
|
+
import { forwardRef } from 'react'
|
|
263
|
+
|
|
264
|
+
const Card = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
265
|
+
({ className, ...props }, ref) => (
|
|
266
|
+
<div
|
|
267
|
+
ref={ref}
|
|
268
|
+
className={cn(
|
|
269
|
+
'rounded-xl border bg-card text-card-foreground shadow',
|
|
270
|
+
className
|
|
271
|
+
)}
|
|
272
|
+
{...props}
|
|
273
|
+
/>
|
|
274
|
+
)
|
|
275
|
+
)
|
|
276
|
+
Card.displayName = 'Card'
|
|
277
|
+
|
|
278
|
+
const CardHeader = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
279
|
+
({ className, ...props }, ref) => (
|
|
280
|
+
<div
|
|
281
|
+
ref={ref}
|
|
282
|
+
className={cn('flex flex-col space-y-1.5 p-6', className)}
|
|
283
|
+
{...props}
|
|
284
|
+
/>
|
|
285
|
+
)
|
|
286
|
+
)
|
|
287
|
+
CardHeader.displayName = 'CardHeader'
|
|
288
|
+
|
|
289
|
+
const CardTitle = forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(
|
|
290
|
+
({ className, ...props }, ref) => (
|
|
291
|
+
<h3
|
|
292
|
+
ref={ref}
|
|
293
|
+
className={cn('font-semibold leading-none tracking-tight', className)}
|
|
294
|
+
{...props}
|
|
295
|
+
/>
|
|
296
|
+
)
|
|
297
|
+
)
|
|
298
|
+
CardTitle.displayName = 'CardTitle'
|
|
299
|
+
|
|
300
|
+
const CardDescription = forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(
|
|
301
|
+
({ className, ...props }, ref) => (
|
|
302
|
+
<p
|
|
303
|
+
ref={ref}
|
|
304
|
+
className={cn('text-sm text-muted-foreground', className)}
|
|
305
|
+
{...props}
|
|
306
|
+
/>
|
|
307
|
+
)
|
|
308
|
+
)
|
|
309
|
+
CardDescription.displayName = 'CardDescription'
|
|
310
|
+
|
|
311
|
+
const CardContent = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
312
|
+
({ className, ...props }, ref) => (
|
|
313
|
+
<div ref={ref} className={cn('p-6 pt-0', className)} {...props} />
|
|
314
|
+
)
|
|
315
|
+
)
|
|
316
|
+
CardContent.displayName = 'CardContent'
|
|
317
|
+
|
|
318
|
+
const CardFooter = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
319
|
+
({ className, ...props }, ref) => (
|
|
320
|
+
<div
|
|
321
|
+
ref={ref}
|
|
322
|
+
className={cn('flex items-center p-6 pt-0', className)}
|
|
323
|
+
{...props}
|
|
324
|
+
/>
|
|
325
|
+
)
|
|
326
|
+
)
|
|
327
|
+
CardFooter.displayName = 'CardFooter'
|
|
328
|
+
|
|
329
|
+
export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
## Accessible Components with Radix
|
|
333
|
+
|
|
334
|
+
```tsx
|
|
335
|
+
// components/ui/dialog.tsx
|
|
336
|
+
'use client'
|
|
337
|
+
|
|
338
|
+
import * as DialogPrimitive from '@radix-ui/react-dialog'
|
|
339
|
+
import { X } from 'lucide-react'
|
|
340
|
+
import { cn } from '@/lib/utils'
|
|
341
|
+
|
|
342
|
+
const Dialog = DialogPrimitive.Root
|
|
343
|
+
const DialogTrigger = DialogPrimitive.Trigger
|
|
344
|
+
const DialogPortal = DialogPrimitive.Portal
|
|
345
|
+
const DialogClose = DialogPrimitive.Close
|
|
346
|
+
|
|
347
|
+
const DialogOverlay = forwardRef<
|
|
348
|
+
React.ElementRef<typeof DialogPrimitive.Overlay>,
|
|
349
|
+
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
|
|
350
|
+
>(({ className, ...props }, ref) => (
|
|
351
|
+
<DialogPrimitive.Overlay
|
|
352
|
+
ref={ref}
|
|
353
|
+
className={cn(
|
|
354
|
+
'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',
|
|
355
|
+
className
|
|
356
|
+
)}
|
|
357
|
+
{...props}
|
|
358
|
+
/>
|
|
359
|
+
))
|
|
360
|
+
|
|
361
|
+
const DialogContent = forwardRef<
|
|
362
|
+
React.ElementRef<typeof DialogPrimitive.Content>,
|
|
363
|
+
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
|
|
364
|
+
>(({ className, children, ...props }, ref) => (
|
|
365
|
+
<DialogPortal>
|
|
366
|
+
<DialogOverlay />
|
|
367
|
+
<DialogPrimitive.Content
|
|
368
|
+
ref={ref}
|
|
369
|
+
className={cn(
|
|
370
|
+
'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',
|
|
371
|
+
className
|
|
372
|
+
)}
|
|
373
|
+
{...props}
|
|
374
|
+
>
|
|
375
|
+
{children}
|
|
376
|
+
<DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
|
|
377
|
+
<X className="h-4 w-4" />
|
|
378
|
+
<span className="sr-only">Close</span>
|
|
379
|
+
</DialogPrimitive.Close>
|
|
380
|
+
</DialogPrimitive.Content>
|
|
381
|
+
</DialogPortal>
|
|
382
|
+
))
|
|
383
|
+
|
|
384
|
+
export { Dialog, DialogTrigger, DialogContent, DialogClose }
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
## Component Documentation Pattern
|
|
388
|
+
|
|
389
|
+
```tsx
|
|
390
|
+
// components/ui/button.stories.tsx (or docs)
|
|
391
|
+
/**
|
|
392
|
+
* Button Component
|
|
393
|
+
*
|
|
394
|
+
* A versatile button component with multiple variants and sizes.
|
|
395
|
+
*
|
|
396
|
+
* @example
|
|
397
|
+
* ```tsx
|
|
398
|
+
* <Button variant="default" size="md">Click me</Button>
|
|
399
|
+
* <Button variant="outline" size="sm">Small</Button>
|
|
400
|
+
* <Button variant="destructive" disabled>Disabled</Button>
|
|
401
|
+
* ```
|
|
402
|
+
*
|
|
403
|
+
* ## Variants
|
|
404
|
+
* - `default` - Primary action button
|
|
405
|
+
* - `secondary` - Secondary actions
|
|
406
|
+
* - `destructive` - Dangerous actions (delete, remove)
|
|
407
|
+
* - `outline` - Less prominent actions
|
|
408
|
+
* - `ghost` - Minimal visual weight
|
|
409
|
+
* - `link` - Styled as a link
|
|
410
|
+
*
|
|
411
|
+
* ## Sizes
|
|
412
|
+
* - `sm` - 32px height
|
|
413
|
+
* - `default` - 36px height
|
|
414
|
+
* - `lg` - 40px height
|
|
415
|
+
* - `icon` - 36x36px square for icon-only buttons
|
|
416
|
+
*
|
|
417
|
+
* ## Accessibility
|
|
418
|
+
* - Uses native `<button>` element
|
|
419
|
+
* - Supports `disabled` attribute
|
|
420
|
+
* - Focus ring visible on keyboard navigation
|
|
421
|
+
* - Works with `asChild` prop for custom elements
|
|
422
|
+
*/
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
## File Structure
|
|
426
|
+
|
|
427
|
+
```
|
|
428
|
+
src/
|
|
429
|
+
├── components/
|
|
430
|
+
│ └── ui/
|
|
431
|
+
│ ├── button.tsx
|
|
432
|
+
│ ├── card.tsx
|
|
433
|
+
│ ├── dialog.tsx
|
|
434
|
+
│ ├── input.tsx
|
|
435
|
+
│ ├── label.tsx
|
|
436
|
+
│ ├── select.tsx
|
|
437
|
+
│ ├── textarea.tsx
|
|
438
|
+
│ ├── toast.tsx
|
|
439
|
+
│ └── index.ts # Barrel export
|
|
440
|
+
├── lib/
|
|
441
|
+
│ └── utils.ts # cn() helper
|
|
442
|
+
├── styles/
|
|
443
|
+
│ └── globals.css # CSS tokens
|
|
444
|
+
└── tailwind.config.ts # Theme config
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
## Validation [LOW freedom — do not skip]
|
|
448
|
+
|
|
449
|
+
After creating design system components:
|
|
450
|
+
|
|
451
|
+
1. **Consistency** → All components use same tokens
|
|
452
|
+
2. **Variants** → Cover all needed use cases
|
|
453
|
+
3. **Accessibility** → Keyboard nav, ARIA, focus states
|
|
454
|
+
4. **Dark mode** → All components work in dark mode
|
|
455
|
+
5. **Responsive** → Mobile-friendly by default
|
|
456
|
+
6. **Documentation** → JSDoc comments, usage examples
|
|
457
|
+
7. **Type safety** → Full TypeScript support with VariantProps
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-theme
|
|
3
|
+
description: >
|
|
4
|
+
Apply one of 11 preset themes (colors, fonts) to slides, docs, or landing
|
|
5
|
+
pages. Use when "apply theme", "color palette", "brand colors", "styling
|
|
6
|
+
slides", "presentation design", "visual identity", or styling artifacts
|
|
7
|
+
consistently.
|
|
8
|
+
license: MIT
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Theme Factory Skill
|
|
12
|
+
|
|
13
|
+
**Degree of freedom: MIXED.** Custom-theme authoring `[HIGH freedom]`; wait-for-
|
|
14
|
+
selection and existing-token inventory `[LOW freedom — run exactly]`.
|
|
15
|
+
|
|
16
|
+
A curated collection of professional font and color themes. Once a theme is chosen, it can be applied to any artifact.
|
|
17
|
+
|
|
18
|
+
## How to reason
|
|
19
|
+
|
|
20
|
+
1. **Inventory** — existing tokens, fonts, and brand colors
|
|
21
|
+
2. **Select** — show the catalog; wait for an explicit choice
|
|
22
|
+
3. **Apply** — one palette + pairing everywhere on the artifact
|
|
23
|
+
4. **Contrast** — 4.5:1 text; do not override the design system arbitrarily
|
|
24
|
+
|
|
25
|
+
## Worked example
|
|
26
|
+
|
|
27
|
+
> **Inventory:** slide deck uses mixed hex; `globals.css` already has `--primary`.
|
|
28
|
+
> **Select:** user picks **Forest Canopy** after seeing the 11 options.
|
|
29
|
+
> **Apply:** headings Merriweather / body Lato; `#276749` primary on `#f0fff4`.
|
|
30
|
+
> **Contrast:** body text vs background ≥4.5:1; app chrome still uses existing tokens.
|
|
31
|
+
|
|
32
|
+
## Self-critique before reporting
|
|
33
|
+
|
|
34
|
+
- **Choice recorded** — a theme was not applied until the user picked one
|
|
35
|
+
- **One pairing** — no leftover fonts or hex from a second theme
|
|
36
|
+
- **Readable** — contrast checked, not assumed
|
|
37
|
+
- **Right owner** — component library / tokens from scratch → `design-system`; drifted token SSOT → `housekeep-design`
|
|
38
|
+
|
|
39
|
+
## Purpose
|
|
40
|
+
|
|
41
|
+
To apply consistent, professional styling to presentation slide decks or other artifacts. Each theme includes:
|
|
42
|
+
- A cohesive color palette with hex codes
|
|
43
|
+
- Complementary font pairings for headers and body text
|
|
44
|
+
- A distinct visual identity suitable for different contexts and audiences
|
|
45
|
+
|
|
46
|
+
## Usage Instructions [LOW freedom — run exactly]
|
|
47
|
+
|
|
48
|
+
To apply styling to a slide deck or other artifact:
|
|
49
|
+
|
|
50
|
+
1. **Show available themes**: Display the theme options to allow users to see all available themes
|
|
51
|
+
2. **Ask for their choice**: Ask which theme to apply
|
|
52
|
+
3. **Wait for selection**: Get explicit confirmation about the chosen theme
|
|
53
|
+
4. **Apply the theme**: Apply the selected theme's colors and fonts
|
|
54
|
+
|
|
55
|
+
## Themes Available
|
|
56
|
+
|
|
57
|
+
The following 11 themes are available:
|
|
58
|
+
|
|
59
|
+
### 1. Ocean Depths
|
|
60
|
+
Professional and calming maritime theme
|
|
61
|
+
- **Primary**: `#1a365d` (deep blue)
|
|
62
|
+
- **Secondary**: `#2c5282`
|
|
63
|
+
- **Accent**: `#63b3ed`
|
|
64
|
+
- **Background**: `#ebf8ff`
|
|
65
|
+
- **Heading Font**: Playfair Display
|
|
66
|
+
- **Body Font**: Source Sans Pro
|
|
67
|
+
|
|
68
|
+
### 2. Sunset Boulevard
|
|
69
|
+
Warm and vibrant sunset colors
|
|
70
|
+
- **Primary**: `#c05621` (burnt orange)
|
|
71
|
+
- **Secondary**: `#dd6b20`
|
|
72
|
+
- **Accent**: `#ed8936`
|
|
73
|
+
- **Background**: `#fffaf0`
|
|
74
|
+
- **Heading Font**: Poppins
|
|
75
|
+
- **Body Font**: Open Sans
|
|
76
|
+
|
|
77
|
+
### 3. Forest Canopy
|
|
78
|
+
Natural and grounded earth tones
|
|
79
|
+
- **Primary**: `#276749` (forest green)
|
|
80
|
+
- **Secondary**: `#38a169`
|
|
81
|
+
- **Accent**: `#9ae6b4`
|
|
82
|
+
- **Background**: `#f0fff4`
|
|
83
|
+
- **Heading Font**: Merriweather
|
|
84
|
+
- **Body Font**: Lato
|
|
85
|
+
|
|
86
|
+
### 4. Modern Minimalist
|
|
87
|
+
Clean and contemporary grayscale
|
|
88
|
+
- **Primary**: `#1a202c` (charcoal)
|
|
89
|
+
- **Secondary**: `#4a5568`
|
|
90
|
+
- **Accent**: `#718096`
|
|
91
|
+
- **Background**: `#f7fafc`
|
|
92
|
+
- **Heading Font**: Inter
|
|
93
|
+
- **Body Font**: Inter
|
|
94
|
+
|
|
95
|
+
### 5. Golden Hour
|
|
96
|
+
Rich and warm autumnal palette
|
|
97
|
+
- **Primary**: `#744210` (golden brown)
|
|
98
|
+
- **Secondary**: `#b7791f`
|
|
99
|
+
- **Accent**: `#ecc94b`
|
|
100
|
+
- **Background**: `#fffff0`
|
|
101
|
+
- **Heading Font**: Cormorant Garamond
|
|
102
|
+
- **Body Font**: Work Sans
|
|
103
|
+
|
|
104
|
+
### 6. Arctic Frost
|
|
105
|
+
Cool and crisp winter-inspired theme
|
|
106
|
+
- **Primary**: `#2b6cb0` (ice blue)
|
|
107
|
+
- **Secondary**: `#4299e1`
|
|
108
|
+
- **Accent**: `#90cdf4`
|
|
109
|
+
- **Background**: `#ebf8ff`
|
|
110
|
+
- **Heading Font**: Montserrat
|
|
111
|
+
- **Body Font**: Nunito
|
|
112
|
+
|
|
113
|
+
### 7. Desert Rose
|
|
114
|
+
Soft and sophisticated dusty tones
|
|
115
|
+
- **Primary**: `#97266d` (dusty rose)
|
|
116
|
+
- **Secondary**: `#d53f8c`
|
|
117
|
+
- **Accent**: `#ed64a6`
|
|
118
|
+
- **Background**: `#fff5f7`
|
|
119
|
+
- **Heading Font**: DM Serif Display
|
|
120
|
+
- **Body Font**: DM Sans
|
|
121
|
+
|
|
122
|
+
### 8. Tech Innovation
|
|
123
|
+
Bold and modern tech aesthetic
|
|
124
|
+
- **Primary**: `#2d3748` (slate)
|
|
125
|
+
- **Secondary**: `#4c51bf`
|
|
126
|
+
- **Accent**: `#667eea`
|
|
127
|
+
- **Background**: `#edf2f7`
|
|
128
|
+
- **Heading Font**: JetBrains Mono
|
|
129
|
+
- **Body Font**: IBM Plex Sans
|
|
130
|
+
|
|
131
|
+
### 9. Botanical Garden
|
|
132
|
+
Fresh and organic garden colors
|
|
133
|
+
- **Primary**: `#285e61` (teal)
|
|
134
|
+
- **Secondary**: `#319795`
|
|
135
|
+
- **Accent**: `#81e6d9`
|
|
136
|
+
- **Background**: `#e6fffa`
|
|
137
|
+
- **Heading Font**: Libre Baskerville
|
|
138
|
+
- **Body Font**: Karla
|
|
139
|
+
|
|
140
|
+
### 10. Midnight Galaxy
|
|
141
|
+
Dramatic and cosmic deep tones
|
|
142
|
+
- **Primary**: `#1a1a2e` (midnight)
|
|
143
|
+
- **Secondary**: `#16213e`
|
|
144
|
+
- **Accent**: `#e94560`
|
|
145
|
+
- **Background**: `#0f0f23`
|
|
146
|
+
- **Text**: `#edf2f7`
|
|
147
|
+
- **Heading Font**: Orbitron
|
|
148
|
+
- **Body Font**: Rajdhani
|
|
149
|
+
|
|
150
|
+
### 11. Tsumagoi Ranch
|
|
151
|
+
Neo-Brutalist "Cute-alism" - Japanese ranch/campground aesthetic
|
|
152
|
+
- **Primary**: `#0c85f4` (mountain blue)
|
|
153
|
+
- **Secondary**: `#10b981` (pine green)
|
|
154
|
+
- **Accent**: `#ff6b35` (campfire orange)
|
|
155
|
+
- **Accent Alt**: `#FF6D38` (navigate orange - CTAs)
|
|
156
|
+
- **Premium**: `#8584FF` (navigate purple)
|
|
157
|
+
- **Background Light**: `#faf7f2` (warm cream)
|
|
158
|
+
- **Background Dark**: `#0c1424` (night sky)
|
|
159
|
+
- **Border**: `#b8a080` (wood/sand tone)
|
|
160
|
+
- **Text**: `#1a1a1a` (near black)
|
|
161
|
+
- **Heading Font**: M PLUS Rounded 1c
|
|
162
|
+
- **Body Font**: Inter
|
|
163
|
+
- **Body JP**: Noto Sans JP
|
|
164
|
+
- **Mono**: JetBrains Mono
|
|
165
|
+
|
|
166
|
+
**Neo-Brutal Shadows**: Hard-edge `3px 3px 0 0 #b8a080` (no blur)
|
|
167
|
+
**Border Style**: 3px solid with rounded-xl corners
|
|
168
|
+
**Motion**: Bounce easing `cubic-bezier(0.34, 1.56, 0.64, 1)`
|
|
169
|
+
|
|
170
|
+
See `themes/tsumagoi-ranch.md` for full specification including mobile patterns.
|
|
171
|
+
|
|
172
|
+
## Application Process [LOW freedom — run exactly]
|
|
173
|
+
|
|
174
|
+
After a preferred theme is selected:
|
|
175
|
+
1. Read the corresponding theme specifications
|
|
176
|
+
2. Apply the specified colors and fonts consistently throughout
|
|
177
|
+
3. Ensure proper contrast and readability
|
|
178
|
+
4. Maintain the theme's visual identity across all elements
|
|
179
|
+
|
|
180
|
+
## Create Your Own Theme [HIGH freedom]
|
|
181
|
+
|
|
182
|
+
To handle cases where none of the existing themes work, create a custom theme based on:
|
|
183
|
+
- User's brand colors
|
|
184
|
+
- Specific aesthetic direction
|
|
185
|
+
- Industry or context requirements
|
|
186
|
+
|
|
187
|
+
Generate a new theme with:
|
|
188
|
+
- 5 color palette (primary, secondary, accent, background, text)
|
|
189
|
+
- Font pairing (heading + body)
|
|
190
|
+
- A descriptive name
|
|
191
|
+
|
|
192
|
+
Name the fallbacks and avoid them: Inter/Roboto as the pairing, a cream or off-white background, a purple gradient — a custom theme that lands on those is the model's default, not the user's brand.
|
|
193
|
+
|
|
194
|
+
After generating, show it for review before applying.
|
|
195
|
+
|
|
196
|
+
## Check existing first [LOW freedom — run exactly]
|
|
197
|
+
|
|
198
|
+
**Before applying ANY theme, verify:**
|
|
199
|
+
|
|
200
|
+
1. **Check for existing theme/design system:**
|
|
201
|
+
```bash
|
|
202
|
+
cat tailwind.config.* 2>/dev/null | grep -A30 "colors\|fontFamily"
|
|
203
|
+
cat src/styles/globals.css docs/THEME_GUIDE.md 2>/dev/null
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
2. **Check for existing CSS variables:**
|
|
207
|
+
```bash
|
|
208
|
+
rg "var\(--" --type css --type tsx | head -20
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
3. **Check for existing brand colors:**
|
|
212
|
+
- Look in `public/` for logos
|
|
213
|
+
- Check existing components for color patterns
|
|
214
|
+
|
|
215
|
+
**Why:** Themes must integrate with existing design systems, not override them arbitrarily.
|
|
216
|
+
|
|
217
|
+
## Validation [LOW freedom — do not skip]
|
|
218
|
+
|
|
219
|
+
After applying a theme:
|
|
220
|
+
|
|
221
|
+
1. **Visual consistency** → All components use theme colors
|
|
222
|
+
2. **Contrast check** → Text readable on backgrounds (4.5:1 min)
|
|
223
|
+
3. **Font loading** → Google Fonts load correctly
|
|
224
|
+
4. **Dark mode** → If applicable, verify dark variant works
|
|
225
|
+
5. **Mobile check** → Typography scales appropriately
|
|
226
|
+
6. **Print preview** → If printable, colors work in print
|