@kensaurus/skills 0.0.0-stage → 2.1.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 +1790 -0
- package/LICENSE +21 -0
- package/LICENSE-APACHE +62 -0
- package/NOTICE +13 -0
- package/README.md +821 -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 +94 -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 +295 -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 +153 -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 +381 -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 +303 -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-ux-laws/SKILL.md +409 -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 +248 -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 +103 -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 +386 -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 +297 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# Heuristics & Laws of UX — Quick Reference
|
|
2
|
+
|
|
3
|
+
The canonical references the agent maps every pain point against. Source-of-truth links are
|
|
4
|
+
at the bottom. Keep this lean — the goal is fast lookup, not a textbook.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## NN/g 10 Usability Heuristics (Nielsen, 1994; updated 2024)
|
|
9
|
+
|
|
10
|
+
### #1 Visibility of System Status
|
|
11
|
+
|
|
12
|
+
The system always tells the user what is happening, via appropriate feedback in reasonable
|
|
13
|
+
time.
|
|
14
|
+
|
|
15
|
+
**On screen:** loading spinners, progress bars, "saved" toasts, inline status chips
|
|
16
|
+
("AI解析済", "連携済", "未処理"), breadcrumbs showing where you are, badges that count
|
|
17
|
+
unread items, real-time validation under form fields.
|
|
18
|
+
|
|
19
|
+
**Common violations:** async work runs invisibly (AI extraction, autosave, sync); state
|
|
20
|
+
that affects routing decisions (linked vs. unlinked) is hidden one click deep; nav doesn't
|
|
21
|
+
show selection.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
### #2 Match Between System and Real World
|
|
26
|
+
|
|
27
|
+
Speak the user's language. Use words, phrases, concepts familiar to them. Follow real-world
|
|
28
|
+
conventions, natural ordering.
|
|
29
|
+
|
|
30
|
+
**On screen:** "Empty trash" not "Purge resource"; receipt icon for receipts, plane icon
|
|
31
|
+
for travel; date in the user's locale; sort orders that match how the domain actually
|
|
32
|
+
thinks (newest first for messages, alphabetical for files, status-grouped for tasks).
|
|
33
|
+
|
|
34
|
+
**Common violations:** engineering jargon in user-facing labels (`fileStatus=unlinked`),
|
|
35
|
+
generic icons for domain-specific entities, unfamiliar mental models forced on users.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
### #3 User Control & Freedom
|
|
40
|
+
|
|
41
|
+
Users make mistakes — provide a clearly marked emergency exit. Support undo and redo.
|
|
42
|
+
|
|
43
|
+
**On screen:** Cancel buttons on every modal, Undo toasts after destructive actions,
|
|
44
|
+
breadcrumb to step out, browser-back honoured, multi-step forms remember progress on back.
|
|
45
|
+
|
|
46
|
+
**Common violations:** modals with only "OK"; bulk delete with no undo; form abandonment
|
|
47
|
+
loses all input; no way to back out of an irreversible workflow step.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### #4 Consistency & Standards
|
|
52
|
+
|
|
53
|
+
Same things look the same, different things look different. Follow platform conventions
|
|
54
|
+
(Jakob's Law: users spend most of their time on OTHER products).
|
|
55
|
+
|
|
56
|
+
**On screen:** primary-action button looks the same on every page; destructive actions
|
|
57
|
+
are red everywhere; date format consistent; same icon = same meaning across views;
|
|
58
|
+
keyboard shortcuts (`Cmd+K`, `Esc`, `?`) match platform norms.
|
|
59
|
+
|
|
60
|
+
**Common violations:** two different "Submit" buttons styled differently; the same status
|
|
61
|
+
shown as "✓", "OK", and "完了" in three places; clickable items that don't look clickable.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### #5 Error Prevention
|
|
66
|
+
|
|
67
|
+
Better than a good error message: a design that prevents the error.
|
|
68
|
+
|
|
69
|
+
**On screen:** disabled state on submit until the form is valid; date pickers (not free
|
|
70
|
+
text); type-safe enums (not free strings); confirmation step on irreversible bulk
|
|
71
|
+
operations; auto-save on long forms.
|
|
72
|
+
|
|
73
|
+
**Common violations:** free-text fields that should be enums; destructive actions a single
|
|
74
|
+
mis-click away; forms that submit on Enter inside textarea; copy-paste of formatted text
|
|
75
|
+
silently mangling input.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
### #6 Recognition Rather Than Recall
|
|
80
|
+
|
|
81
|
+
Make options visible. Don't make users remember information from one screen to use it on
|
|
82
|
+
another.
|
|
83
|
+
|
|
84
|
+
**On screen:** breadcrumbs showing the path; recent searches autocompleted; field labels
|
|
85
|
+
always visible (not just placeholder); icon + text labels; keyboard shortcuts listed in
|
|
86
|
+
menus next to actions; "you saw this 5 mins ago" markers.
|
|
87
|
+
|
|
88
|
+
**Common violations:** placeholder-only labels that disappear on focus; cryptic icon-only
|
|
89
|
+
toolbars; forms across multiple steps that don't summarise prior input; "remember which
|
|
90
|
+
tab you were on" expected of the user.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### #7 Flexibility & Efficiency of Use
|
|
95
|
+
|
|
96
|
+
Shortcuts speed up expert use. Allow users to tailor frequent actions.
|
|
97
|
+
|
|
98
|
+
**On screen:** keyboard shortcuts; bulk actions; saved filters / views; multi-select with
|
|
99
|
+
shift-click; right-click menus; quick command palette (`Cmd+K`); customisable columns;
|
|
100
|
+
power-user features hidden behind a `Show advanced` toggle.
|
|
101
|
+
|
|
102
|
+
**Common violations:** every action is N clicks deep; no keyboard alternative; no way to
|
|
103
|
+
batch a repeated action; expert workflow forces novice flow.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### #8 Aesthetic & Minimalist Design
|
|
108
|
+
|
|
109
|
+
Interfaces should not contain information that is irrelevant or rarely needed. Every extra
|
|
110
|
+
unit of information competes with the relevant ones.
|
|
111
|
+
|
|
112
|
+
**On screen:** empty cells removed (not just left blank); progressive disclosure (`Show
|
|
113
|
+
more`); collapsing sections; default-collapsed advanced settings; no decorative noise.
|
|
114
|
+
|
|
115
|
+
**Common violations:** empty `Amount` and `Size` columns for folder rows; "Tip:" boxes
|
|
116
|
+
that never go away; instruction rows above every list; logo + nav + breadcrumb + tab bar
|
|
117
|
+
+ section header all stacked.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### #9 Help Users Recognize, Diagnose, and Recover from Errors
|
|
122
|
+
|
|
123
|
+
Plain language, precise problem, constructive solution.
|
|
124
|
+
|
|
125
|
+
**On screen:** "Email is required" under the field, not "Validation failed"; "File too
|
|
126
|
+
large (12 MB) — max 10 MB. Compress or split it." with a Compress button; 404 pages
|
|
127
|
+
with search; failure toasts that include a Retry button.
|
|
128
|
+
|
|
129
|
+
**Common violations:** error codes without explanation; "Something went wrong"; errors
|
|
130
|
+
that vanish before reading; field-level errors floating in a global toast.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### #10 Help and Documentation
|
|
135
|
+
|
|
136
|
+
Best is no docs needed; if needed, easy to search, focused on the user's task, listing
|
|
137
|
+
concrete steps.
|
|
138
|
+
|
|
139
|
+
**On screen:** in-context tooltips on icon-only buttons; a `?` link near complex fields;
|
|
140
|
+
empty states that explain what the section will contain and how to populate it; first-run
|
|
141
|
+
checklists.
|
|
142
|
+
|
|
143
|
+
**Common violations:** docs in a separate site requiring auth; tooltips that explain the
|
|
144
|
+
icon's name not its action; no empty state at all.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Laws of UX (supporting principles)
|
|
149
|
+
|
|
150
|
+
### Jakob's Law
|
|
151
|
+
|
|
152
|
+
> Users spend most of their time on OTHER sites. They expect yours to work the same way.
|
|
153
|
+
|
|
154
|
+
**Implication:** copy patterns from category leaders. A file explorer should look like
|
|
155
|
+
Drive / Dropbox / Mega. A code editor should look like VS Code / IntelliJ. Don't reinvent
|
|
156
|
+
where convention exists.
|
|
157
|
+
|
|
158
|
+
### Hick's Law
|
|
159
|
+
|
|
160
|
+
> Time to make a decision = log₂(N+1) of options.
|
|
161
|
+
|
|
162
|
+
**Implication:** group related actions; collapse rarely-used options under "More"; never
|
|
163
|
+
show all 12 filters at once if 3 cover 90% of use. Applies only when options must be
|
|
164
|
+
weighed; looking up a known item in an ordered list (a country, a prefecture) is search,
|
|
165
|
+
so give it typeahead instead of trimming it.
|
|
166
|
+
|
|
167
|
+
### Fitts's Law
|
|
168
|
+
|
|
169
|
+
> Time to acquire a target ∝ distance / size.
|
|
170
|
+
|
|
171
|
+
**Implication:** primary actions should be large and stable; toolbar buttons must not
|
|
172
|
+
shrink to 24px on hover; click targets at least 44×44 px on touch; destructive actions
|
|
173
|
+
NOT immediately adjacent to common ones.
|
|
174
|
+
|
|
175
|
+
### Miller's Law
|
|
176
|
+
|
|
177
|
+
> The average person can hold ~7 ± 2 items in working memory; later work puts it nearer 4
|
|
178
|
+
> (Cowan, 2001).
|
|
179
|
+
|
|
180
|
+
**Implication:** it is about what the user must *hold in mind*, not how many items a screen
|
|
181
|
+
shows. A visible menu is read, not memorised, so this law sets no cap on menu length. Do:
|
|
182
|
+
keep labels visible while fields are filled, show earlier choices instead of making users
|
|
183
|
+
remember them, group long codes in 3–4s with Copy, split long forms into labelled groups of
|
|
184
|
+
3–5 fields, show running totals. For a measured pass on one flow, use `enhance-ux-laws`.
|
|
185
|
+
|
|
186
|
+
### Tesler's Law (Law of Conservation of Complexity)
|
|
187
|
+
|
|
188
|
+
> Every system has irreducible complexity. The question is who absorbs it — designer,
|
|
189
|
+
> developer, or user.
|
|
190
|
+
|
|
191
|
+
**Implication:** if the user keeps asking "which folder had AI done?", the complexity is
|
|
192
|
+
currently absorbed by the user. Move it to the system: show an inline AI chip. Cost the
|
|
193
|
+
designer / dev time, save every user every time forever.
|
|
194
|
+
|
|
195
|
+
### Doherty Threshold
|
|
196
|
+
|
|
197
|
+
> Productivity skyrockets when the system responds in <400 ms.
|
|
198
|
+
|
|
199
|
+
**Implication:** optimistic UI updates; skeleton loaders; pre-fetch on hover; never let
|
|
200
|
+
the user wait without feedback (see #1).
|
|
201
|
+
|
|
202
|
+
### Postel's Law
|
|
203
|
+
|
|
204
|
+
> Be liberal in what you accept, conservative in what you produce.
|
|
205
|
+
|
|
206
|
+
**Implication:** accept dates in many formats, normalise on display; trim whitespace;
|
|
207
|
+
parse "1,234.56" and "1234.56" the same; case-insensitive search.
|
|
208
|
+
|
|
209
|
+
### Aesthetic-Usability Effect
|
|
210
|
+
|
|
211
|
+
> Users perceive aesthetically pleasing design as easier to use.
|
|
212
|
+
|
|
213
|
+
**Implication:** spacing, typography, and visual rhythm are not "polish" — they are
|
|
214
|
+
usability. Don't ship raw functionality without applying the design system.
|
|
215
|
+
|
|
216
|
+
### Peak-End Rule
|
|
217
|
+
|
|
218
|
+
> People judge an experience by its peak (best/worst moment) and its end.
|
|
219
|
+
|
|
220
|
+
**Implication:** make sure the success-state of any flow (form submitted, payment done,
|
|
221
|
+
file uploaded) feels good — confetti, micro-celebration, summary, clear next step. Don't
|
|
222
|
+
just dump them back to the list view with no acknowledgement.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Mapping Heuristics to Common UI Symptoms
|
|
227
|
+
|
|
228
|
+
| Symptom | First check | Second check |
|
|
229
|
+
|---------|-------------|--------------|
|
|
230
|
+
| User asks "which one is X?" | #6 Recognition | #2 Match Real World |
|
|
231
|
+
| User asks "did it work?" | #1 Visibility | Doherty Threshold |
|
|
232
|
+
| User asks "how do I undo?" | #3 Control & Freedom | #5 Error Prevention |
|
|
233
|
+
| Two screens look subtly different | #4 Consistency | Jakob's Law |
|
|
234
|
+
| Page feels crowded / heavy | #8 Minimalist | Hick's Law, Miller's Law |
|
|
235
|
+
| Buttons too small / wrap / overflow | Fitts's Law | #4 Consistency |
|
|
236
|
+
| Async result hidden / discoverable | #1 Visibility | Tesler's Law |
|
|
237
|
+
| Power user complains it's slow to use | #7 Flexibility | Hick's Law |
|
|
238
|
+
| Error looks like a system stack trace | #9 Recover from Errors | #2 Match Real World |
|
|
239
|
+
| Empty page with no explanation | #10 Help & Docs | Peak-End Rule |
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Sources
|
|
244
|
+
|
|
245
|
+
- [NN/g — 10 Usability Heuristics for User Interface Design](https://www.nngroup.com/articles/ten-usability-heuristics/)
|
|
246
|
+
- [NN/g — 10 Usability Heuristics Applied to Complex Applications](https://www.nngroup.com/articles/usability-heuristics-complex-applications/)
|
|
247
|
+
- [Laws of UX](https://lawsofux.com/)
|
|
248
|
+
- [Tognazzini — First Principles of Interaction Design](https://asktog.com/atc/principles-of-interaction-design/)
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
# Anti-Pattern → Replacement Library
|
|
2
|
+
|
|
3
|
+
A living catalogue of "smells" found on real pages and the design-system-respecting
|
|
4
|
+
replacements. Each entry links the smell to its NN/g heuristic and gives a concrete code
|
|
5
|
+
shape for the fix. Add entries every time the agent runs an enhancement and discovers a new
|
|
6
|
+
pattern worth remembering.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Generic Icon for Every Item Type
|
|
11
|
+
|
|
12
|
+
**Smell:** every folder / row / card uses the same `<Folder>` icon. The user must read
|
|
13
|
+
the title to discriminate type.
|
|
14
|
+
|
|
15
|
+
**Heuristic:** #6 Recognition over Recall, #2 Match Real World, Miller's Law
|
|
16
|
+
|
|
17
|
+
**Replacement:** introduce a small pure-function helper that maps an item to a
|
|
18
|
+
`{ Icon, label, tone }` object. Icon comes from the icon library already in use.
|
|
19
|
+
Label is a short Japanese / English domain noun. Tone references existing semantic tokens
|
|
20
|
+
(`signal-warn`, `ai`, `brand`, `muted`).
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
// helpers/get-folder-category.tsx
|
|
24
|
+
export interface FolderCategory {
|
|
25
|
+
label: string
|
|
26
|
+
Icon: LucideIcon
|
|
27
|
+
iconColorClass: string // text-* token
|
|
28
|
+
iconBgClass: string // bg-*/n token
|
|
29
|
+
chipClass: string // border + bg + text token tuple
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const getFolderCategory = (item: TreeItem): FolderCategory => {
|
|
33
|
+
if (item.data?.isDocumentLinked) return { label: "連携", Icon: Link2, ... }
|
|
34
|
+
if (/notice|通知|e-gov/.test(haystack)) return { label: "通知書", Icon: BellRing, ... }
|
|
35
|
+
if (/template|雛形/.test(haystack)) return { label: "雛形", Icon: LayoutTemplate, ... }
|
|
36
|
+
// … one branch per domain category, default last
|
|
37
|
+
return { label: "フォルダ", Icon: Folder, ... }
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Then in the renderer:
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
const cat = getFolderCategory(item)
|
|
45
|
+
<span className={cn("h-7 w-7 rounded-sm flex items-center justify-center", cat.iconBgClass)}>
|
|
46
|
+
<cat.Icon size={14} className={cat.iconColorClass} />
|
|
47
|
+
</span>
|
|
48
|
+
<span className={cn("text-[11px] px-1.5 py-0.5 rounded-sm border whitespace-nowrap", cat.chipClass)}>
|
|
49
|
+
{cat.label}
|
|
50
|
+
</span>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Why it's better than ad-hoc inline icons:** new categories are one branch in one file;
|
|
54
|
+
icon + label + tone always travel together (no chance of an orange icon with a blue label);
|
|
55
|
+
unit-testable.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 2. Empty Cells in a Data Grid
|
|
60
|
+
|
|
61
|
+
**Smell:** a folder row in a "Files" grid shows blank `Amount` and `Size` columns because
|
|
62
|
+
folders don't have those scalars. Whole columns are wasted whitespace for half the rows.
|
|
63
|
+
|
|
64
|
+
**Heuristic:** #8 Aesthetic & Minimalist Design
|
|
65
|
+
|
|
66
|
+
**Replacement:** EITHER (a) compute a meaningful aggregate (sum of contained file
|
|
67
|
+
amounts, sum of contained file sizes, count of contained files), OR (b) merge the column
|
|
68
|
+
with another for that row type.
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
// helpers/get-folder-aggregates.ts
|
|
72
|
+
export interface FolderAggregates {
|
|
73
|
+
fileCount: number
|
|
74
|
+
aiAnalyzedCount: number
|
|
75
|
+
unlinkedCount: number
|
|
76
|
+
totalAmount: number
|
|
77
|
+
totalSizeBytes: number
|
|
78
|
+
}
|
|
79
|
+
export const getFolderAggregates = (files: UploadedFile[], folderId: string): FolderAggregates => { ... }
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
```tsx
|
|
83
|
+
// renderer
|
|
84
|
+
{ item.type === "folder" ? (
|
|
85
|
+
<>
|
|
86
|
+
<span className="text-right tabular-nums">{formatJpy(agg.totalAmount)}</span>
|
|
87
|
+
<span className="text-right tabular-nums">{formatBytesShort(agg.totalSizeBytes)}</span>
|
|
88
|
+
</>
|
|
89
|
+
) : (
|
|
90
|
+
<>
|
|
91
|
+
<span className="text-right tabular-nums">{formatJpy(file.amount)}</span>
|
|
92
|
+
<span className="text-right tabular-nums">{formatBytesShort(file.size)}</span>
|
|
93
|
+
</>
|
|
94
|
+
)}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Bonus:** dim the cell to muted when the value is zero. Don't render `0` loud — render
|
|
98
|
+
`—` muted. Renders empty rows visually subordinate to populated ones.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 3. Always-On Hint / Instruction Row
|
|
103
|
+
|
|
104
|
+
**Smell:** above every list there is a row that reads "☐ チェックで選択 / Shift+クリック /
|
|
105
|
+
Ctrl+A: すべて". It is repeated forever and consumes a row of vertical real estate that
|
|
106
|
+
never goes away.
|
|
107
|
+
|
|
108
|
+
**Heuristic:** #6 Recognition over Recall, #8 Aesthetic & Minimalist Design
|
|
109
|
+
|
|
110
|
+
**Replacement:** show the hint *only when the affordance is in use*. The rest of the time,
|
|
111
|
+
collapse to a discreet `?` with a tooltip.
|
|
112
|
+
|
|
113
|
+
```tsx
|
|
114
|
+
{/* Tiny `?` glyph in column header */}
|
|
115
|
+
<div title="クリックで選択・Shift+クリックで範囲選択・Ctrl+Aですべて選択"
|
|
116
|
+
className="flex items-center justify-center text-muted-foreground/60 cursor-help">
|
|
117
|
+
<span className="text-[10px] leading-none">?</span>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
{/* Live hint bar — only when N rows selected */}
|
|
121
|
+
{selected.size > 0 && (
|
|
122
|
+
<div className="px-3 py-1 bg-signal-in border-b border-signar-in text-xs">
|
|
123
|
+
<span className="font-medium whitespace-nowrap">{selected.size}件選択中</span>
|
|
124
|
+
<span className="whitespace-nowrap text-brand/60">Esc: 解除</span>
|
|
125
|
+
</div>
|
|
126
|
+
)}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Why:** affordances should be discoverable, not constantly recited. Once a user has
|
|
130
|
+
selected a row, the hint about HOW to select becomes useless and the hint about WHAT to do
|
|
131
|
+
NEXT becomes useful.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 4. Toolbar Button Labels Wrap to 2 Lines
|
|
136
|
+
|
|
137
|
+
**Smell:** at certain widths a button label like `通知書ZIP` or `アップロード` wraps and
|
|
138
|
+
breaks the toolbar's visual rhythm. The button suddenly takes 2 lines of vertical space.
|
|
139
|
+
|
|
140
|
+
**Heuristic:** #4 Consistency, Fitts's Law
|
|
141
|
+
|
|
142
|
+
**Replacement:** combination of `whitespace-nowrap`, `flex-shrink-0`, and **progressive
|
|
143
|
+
label visibility** based on Tailwind breakpoints — show full label only when there is room
|
|
144
|
+
for it; collapse to icon-only otherwise. Always keep a tooltip with the full label.
|
|
145
|
+
|
|
146
|
+
```tsx
|
|
147
|
+
<TooltipProvider>
|
|
148
|
+
<Tooltip>
|
|
149
|
+
<TooltipTrigger asChild>
|
|
150
|
+
<Button
|
|
151
|
+
size="sm"
|
|
152
|
+
className="h-9 flex-shrink-0 whitespace-nowrap px-2.5"
|
|
153
|
+
aria-label="通知書ZIPを取り込む"
|
|
154
|
+
>
|
|
155
|
+
<BellRing size={16} />
|
|
156
|
+
<span className="hidden lg:inline ml-1.5 whitespace-nowrap">通知書ZIP</span>
|
|
157
|
+
</Button>
|
|
158
|
+
</TooltipTrigger>
|
|
159
|
+
<TooltipContent>e-Gov・e-Tax・eLTAXの通知書ZIPを取り込む</TooltipContent>
|
|
160
|
+
</Tooltip>
|
|
161
|
+
</TooltipProvider>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Conventional breakpoints for label visibility:
|
|
165
|
+
|
|
166
|
+
- `default → lg` (icon-only) for tertiary actions (`通知書ZIP`)
|
|
167
|
+
- `default → md` (icon-only) for secondary actions (`フォルダ`)
|
|
168
|
+
- `always` for primary CTAs (`アップロード`)
|
|
169
|
+
|
|
170
|
+
**NEVER** let a label wrap. If you can't fit it, hide the text and rely on the tooltip.
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 5. Status Badge Wraps Inside a Narrow Column
|
|
175
|
+
|
|
176
|
+
**Smell:** a 64px column shows a `Badge` with the label `未処理`. The badge wraps to render
|
|
177
|
+
`未処` on one line and `理` on the next.
|
|
178
|
+
|
|
179
|
+
**Heuristic:** #4 Consistency
|
|
180
|
+
|
|
181
|
+
**Replacement:** at the **primitive** level, add `whitespace-nowrap` to the Badge variants
|
|
182
|
+
so this never happens again anywhere. As a fallback (if you don't own the primitive), pass
|
|
183
|
+
`className="whitespace-nowrap"` at every call site AND widen the column to fit the natural
|
|
184
|
+
chip width.
|
|
185
|
+
|
|
186
|
+
If you have multiple chips for one row that don't fit horizontally (e.g. AI marker + status
|
|
187
|
+
badge), STACK THEM VERTICALLY (`flex-col gap-0.5`). Never let them try to fit horizontally
|
|
188
|
+
in a column that doesn't have the room.
|
|
189
|
+
|
|
190
|
+
```tsx
|
|
191
|
+
{/* Status column — stacks vertically when both AI + status exist */}
|
|
192
|
+
<div className="flex flex-col items-center justify-center gap-0.5">
|
|
193
|
+
{file.aiData && <span className="… AI chip …">AI</span>}
|
|
194
|
+
{file.status === "unlinked" && (
|
|
195
|
+
<Badge variant="destructive" size="xs" className="whitespace-nowrap px-1.5">
|
|
196
|
+
<AlertTriangle size={9} /> 未処理
|
|
197
|
+
</Badge>
|
|
198
|
+
)}
|
|
199
|
+
</div>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 6. No Indicator for Async / Computed Results (AI, Link, Sync)
|
|
205
|
+
|
|
206
|
+
**Smell:** the system ran AI extraction or linked a file to a journal entry, but the row
|
|
207
|
+
gives no visual marker. The user has to click in to find out.
|
|
208
|
+
|
|
209
|
+
**Heuristic:** #1 Visibility of System Status, Tesler's Law
|
|
210
|
+
|
|
211
|
+
**Replacement:** an inline chip on the row, themed with a dedicated semantic token
|
|
212
|
+
(`bg-ai-soft text-ai`, `bg-signal-in text-signal-in`). For folder rows, count and show:
|
|
213
|
+
`AI×3` means "3 of the files in here have AI metadata". For file rows, just `AI`.
|
|
214
|
+
|
|
215
|
+
```tsx
|
|
216
|
+
{file.aiData && (
|
|
217
|
+
<span
|
|
218
|
+
className="inline-flex items-center gap-0.5 whitespace-nowrap rounded-sm
|
|
219
|
+
border border-ai/40 bg-ai-soft px-1 py-0.5 text-[10px] font-medium
|
|
220
|
+
leading-none text-ai"
|
|
221
|
+
title="AIで内容が解析されています"
|
|
222
|
+
>
|
|
223
|
+
<Sparkles size={8} />
|
|
224
|
+
AI
|
|
225
|
+
</span>
|
|
226
|
+
)}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Why a chip and not a dot or an icon?** Recognition: a labelled chip needs no key.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## 7. Identical Visual Weight for Empty vs. Populated Rows
|
|
234
|
+
|
|
235
|
+
**Smell:** a folder with 0 files and a folder with 12 files look exactly the same.
|
|
236
|
+
|
|
237
|
+
**Heuristic:** #8 Minimalist (don't fight for attention), #6 Recognition
|
|
238
|
+
|
|
239
|
+
**Replacement:** apply `opacity-70` (or muted variant) to the empty row's container.
|
|
240
|
+
Don't hide it — the user still needs to see the count — but stop letting it compete.
|
|
241
|
+
|
|
242
|
+
```tsx
|
|
243
|
+
const folderIsEmpty = item.type === "folder" && (folderData.fileCount ?? 0) === 0
|
|
244
|
+
<div className={cn("…", folderIsEmpty && "opacity-70")}>…</div>
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## 8. Generic 3-Column Card Grid Used as Default Layout
|
|
250
|
+
|
|
251
|
+
**Smell:** every "section" of a page is the same icon → title → 1-line description card,
|
|
252
|
+
laid out in a uniform 3-column grid. This is the most reliable AI-tell.
|
|
253
|
+
|
|
254
|
+
**Heuristic:** #4 Consistency (broken — it's the SAME consistency to a fault), Aesthetic-
|
|
255
|
+
Usability Effect
|
|
256
|
+
|
|
257
|
+
**Replacement:** vary layout by section purpose. Hero gets a generous full-bleed asymmetric
|
|
258
|
+
layout. Stats get a compact horizontal strip with tabular numbers. Long-form content gets
|
|
259
|
+
a max-width column. Action lists get a vertical stack with leading icons. The page should
|
|
260
|
+
have visual rhythm, not pattern repetition.
|
|
261
|
+
|
|
262
|
+
Concrete checklist:
|
|
263
|
+
|
|
264
|
+
- Different `py-*` per section type (hero generous, form tight, footer minimal)
|
|
265
|
+
- Different number of columns per section (1 / 2 / 3 / asymmetric)
|
|
266
|
+
- Different border-radius semantics (pill for tags, rounded for cards, sharp for tables)
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## 9. Date Shown in Two Places on the Same Row
|
|
271
|
+
|
|
272
|
+
**Smell:** the row shows `2024/04/18` inline under the name AND in a dedicated `Date`
|
|
273
|
+
column, both saying the same thing.
|
|
274
|
+
|
|
275
|
+
**Heuristic:** #8 Minimalist
|
|
276
|
+
|
|
277
|
+
**Replacement:** delete one. Choose the one that aligns vertically with peers (the column
|
|
278
|
+
form), so the eye can scan dates top-to-bottom without re-fixating per row.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## 10. Mixed Icon Libraries in the Same View
|
|
283
|
+
|
|
284
|
+
**Smell:** the same view uses some icons from `lucide-react`, some from `@heroicons`, some
|
|
285
|
+
custom SVGs.
|
|
286
|
+
|
|
287
|
+
**Heuristic:** #4 Consistency
|
|
288
|
+
|
|
289
|
+
**Replacement:** pick one icon library per project. If you must use multiple, scope by
|
|
290
|
+
context: e.g. all *navigation* uses one library, all *content* icons use another, never
|
|
291
|
+
mixed within a single visual unit.
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## 11. "Just an Empty State" — No Guidance, No Next Step
|
|
296
|
+
|
|
297
|
+
**Smell:** an empty list shows "No items" or worse, just nothing.
|
|
298
|
+
|
|
299
|
+
**Heuristic:** #10 Help & Documentation, Peak-End Rule (the first interaction is the empty
|
|
300
|
+
state)
|
|
301
|
+
|
|
302
|
+
**Replacement:** every empty state should answer three questions:
|
|
303
|
+
|
|
304
|
+
1. **What goes here?** ("Upload your first invoice…")
|
|
305
|
+
2. **Why doesn't it have anything yet?** ("Drop a PDF or…")
|
|
306
|
+
3. **How do I add one?** With a CTA button matching the page's primary action.
|
|
307
|
+
|
|
308
|
+
Optional: a small illustration that matches the brand voice (NOT generic stock).
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## 12. Destructive Action Adjacent to Common Action
|
|
313
|
+
|
|
314
|
+
**Smell:** `Save` and `Delete` are next to each other in the same toolbar, same size, same
|
|
315
|
+
colour family.
|
|
316
|
+
|
|
317
|
+
**Heuristic:** #5 Error Prevention, Fitts's Law
|
|
318
|
+
|
|
319
|
+
**Replacement:** physical separation (move destructive into an overflow menu), visual
|
|
320
|
+
separation (destructive uses `signal-out` colour), confirmation step (a typed
|
|
321
|
+
"DELETE" or a double-click for irreversibles).
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## 13. Free-Text Field That Should Be an Enum / Picker
|
|
326
|
+
|
|
327
|
+
**Smell:** a date or category field is a free `<input>`, accepting anything the user types.
|
|
328
|
+
|
|
329
|
+
**Heuristic:** #5 Error Prevention, Postel's Law
|
|
330
|
+
|
|
331
|
+
**Replacement:** a `<DatePicker>` or `<Combobox>` that constrains values. If you must
|
|
332
|
+
accept free text (e.g. tags), normalize on blur and offer an autocomplete based on
|
|
333
|
+
existing values.
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## 14. No Keyboard Shortcuts on a Power-User Surface
|
|
338
|
+
|
|
339
|
+
**Smell:** a list view that an operator uses 100 times a day requires mouse for everything.
|
|
340
|
+
|
|
341
|
+
**Heuristic:** #7 Flexibility & Efficiency, Hick's Law
|
|
342
|
+
|
|
343
|
+
**Replacement:** add at minimum:
|
|
344
|
+
|
|
345
|
+
- `j/k` or arrow keys to move selection
|
|
346
|
+
- `Enter` to open
|
|
347
|
+
- `Esc` to close / deselect
|
|
348
|
+
- `Cmd+A` to select all
|
|
349
|
+
- `Cmd+K` for command palette / search
|
|
350
|
+
- `?` to show a shortcut overlay
|
|
351
|
+
|
|
352
|
+
Document them in a `?` overlay (recognition over recall).
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## 15. "Stacked" Status Indicators That Don't Compose
|
|
357
|
+
|
|
358
|
+
**Smell:** the row has icons / dots / chips for AI, link, error, processing — and they're
|
|
359
|
+
all rendered inline, fighting for the same horizontal slot, no clear semantic ordering.
|
|
360
|
+
|
|
361
|
+
**Heuristic:** #8 Minimalist, #4 Consistency
|
|
362
|
+
|
|
363
|
+
**Replacement:** define a status priority and render *one primary chip per row* (the most
|
|
364
|
+
urgent state) plus a small cluster of *micro-chips* for orthogonal facts (AI marker, lock,
|
|
365
|
+
favourite). Group like with like; don't randomly intersperse.
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## How to Use This File
|
|
370
|
+
|
|
371
|
+
1. When the agent finds a smell on a page, search this file for the closest match.
|
|
372
|
+
2. Apply the replacement pattern, adapting tokens to the project's design system.
|
|
373
|
+
3. If the smell is *new* (no match), document it here as a new entry once the fix lands.
|
|
374
|
+
4. Reference the entry number in the enhancement write-up so future readers can trace the
|
|
375
|
+
reasoning.
|