@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,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: enhance-onboarding
|
|
3
|
+
description: >
|
|
4
|
+
Activation pass: define the activation event, cut steps to first value, add
|
|
5
|
+
templates, sample data, a short checklist, and signup → activated events.
|
|
6
|
+
Use when "improve onboarding", "users sign up and leave", or "activation
|
|
7
|
+
rate".
|
|
8
|
+
license: MIT
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# enhance-onboarding — First session to first value
|
|
12
|
+
|
|
13
|
+
**Degree of freedom: MIXED.** Choosing the activation event and which
|
|
14
|
+
patterns fit `[HIGH freedom]`; the event names, the new-user walkthrough, and
|
|
15
|
+
the before/after step count `[LOW freedom — run exactly]`.
|
|
16
|
+
|
|
17
|
+
Apply-now. The product already works; two-thirds of the people who sign up
|
|
18
|
+
never see it work (median B2B activation 37%, Userpilot n=62). This skill
|
|
19
|
+
shortens the path from landing to the first real outcome and proves it with
|
|
20
|
+
events, not a tour.
|
|
21
|
+
|
|
22
|
+
## This skill vs neighbors
|
|
23
|
+
|
|
24
|
+
| Skill | Owns |
|
|
25
|
+
|---|---|
|
|
26
|
+
| **enhance-onboarding** (this) | Landing → signup → first value → habit, as one journey |
|
|
27
|
+
| `enhance-web-ux` | Any single route's flows and density |
|
|
28
|
+
| `audit-ui-states` | Empty / loading / error states audit (findings) |
|
|
29
|
+
| `enhance-web-forms` | Form structure, validation, a11y |
|
|
30
|
+
| `audit-analytics` | Whether events exist and fire after consent |
|
|
31
|
+
| `enhance-web-conversion` | Pricing, upgrade prompts — after activation |
|
|
32
|
+
| `design-email` | Day-1/3/7 re-engagement mail this skill may request |
|
|
33
|
+
| `plan-gtm` | Decides *what* activation means for the business; this skill builds it |
|
|
34
|
+
|
|
35
|
+
Do **not** fire for "add a product tour" as stated — tours are a last resort here.
|
|
36
|
+
|
|
37
|
+
## How to reason
|
|
38
|
+
|
|
39
|
+
1. **Define** — the activation event is the first outcome the user came for, not signup or tour-end
|
|
40
|
+
2. **Measure** — current steps and drop-off from landing to that event (instrument first if blind)
|
|
41
|
+
3. **Cut** — every field, screen, or decision before the event that can wait
|
|
42
|
+
4. **Guide** — what remains gets a template, sample data, a ≤5-item checklist, or one contextual hint
|
|
43
|
+
5. **Verify** — a fresh user reaches the event in fewer steps; events fire; nothing else regressed
|
|
44
|
+
|
|
45
|
+
## Worked example
|
|
46
|
+
|
|
47
|
+
> **Define:** a kakeibo app — `activated` = first transaction categorized, not
|
|
48
|
+
> account created.
|
|
49
|
+
> **Measure:** landing → 6-field signup → email verify → empty dashboard →
|
|
50
|
+
> "Add account" → "Add transaction" = 9 steps, verification email lost on mobile.
|
|
51
|
+
> **Cut:** OAuth + magic link; name/currency inferred from locale; verify later.
|
|
52
|
+
> **Guide:** empty dashboard becomes "Start with sample month" + "Add your first
|
|
53
|
+
> expense"; 3-item checklist ends at the activation event.
|
|
54
|
+
> **Verify:** 9 → 4 steps; `activated` fires on first categorized row; Playwright
|
|
55
|
+
> new-user path green; existing password login untouched.
|
|
56
|
+
|
|
57
|
+
## Self-critique before reporting
|
|
58
|
+
|
|
59
|
+
- **Event is value** — `activated` fires on an outcome, never on `signup_completed` or tour end
|
|
60
|
+
- **Steps counted** — before/after step counts are in the report from a real walkthrough
|
|
61
|
+
- **Nothing removed** — every auth provider, setting, and route still exists; fields were deferred, not deleted
|
|
62
|
+
- **Consent-gated** — no event fires before the consent state the app already uses
|
|
63
|
+
- **Right owner** — pricing/upgrade → `enhance-web-conversion`; single-route polish → `enhance-web-ux`
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Procedure
|
|
68
|
+
|
|
69
|
+
### 1. Define activation [HIGH freedom]
|
|
70
|
+
|
|
71
|
+
Reforge order: **Setup** (must-have info) → **Aha** (core value once) →
|
|
72
|
+
**Habit** (core action at its natural frequency). `activated` is the aha. Pick
|
|
73
|
+
it by asking: *what did they come to do, and when have they done it once?* One
|
|
74
|
+
event, written as `activated` plus the domain event that triggers it (e.g.
|
|
75
|
+
`transaction_categorized`). Add `setup_completed` and `habit_reached` (e.g. 3
|
|
76
|
+
sessions in 7 days) so setup drop-off and retention are measurable too. When
|
|
77
|
+
analytics already exist, prefer the event combination that best predicts
|
|
78
|
+
3-month retention; a valid activation event shows ≥ 2× retention for the users
|
|
79
|
+
who hit it. Payment is never the activation event.
|
|
80
|
+
|
|
81
|
+
### 2. Measure the current path [LOW freedom — run exactly]
|
|
82
|
+
|
|
83
|
+
1. Fresh browser profile (or emulator) — walk landing → activation as a stranger.
|
|
84
|
+
2. Record each step: URL, fields, decisions, waits (email, verification, payment).
|
|
85
|
+
3. Pull funnel numbers if analytics exist; otherwise write **unmeasured** and
|
|
86
|
+
add instrumentation in step 4 before any redesign is judged.
|
|
87
|
+
|
|
88
|
+
Benchmarks for judging (sources in `plan-gtm/references/benchmarks-2026.md`):
|
|
89
|
+
median B2B activation 37%, good = p60 / great = p80 for the product type;
|
|
90
|
+
time-to-value over 24 h → activation collapses below 25%; top quartile first
|
|
91
|
+
value under 5 minutes; day-7 return ≥ 7% of a new cohort is top quartile.
|
|
92
|
+
Checklist completion averages ~19% (engaged users finish ~5 items) — a
|
|
93
|
+
checklist supports the path, it does not replace cutting it.
|
|
94
|
+
|
|
95
|
+
### 3. Cut and guide [HIGH freedom — choose; each pattern below is optional]
|
|
96
|
+
|
|
97
|
+
| Do | Avoid |
|
|
98
|
+
|---|---|
|
|
99
|
+
| Try before signup when the value shows in one session (7% of self-serve products now lead ungated; value-before-signup lifts referred conversion 2–5×) | Signup wall in front of a demo |
|
|
100
|
+
| OAuth / magic link; password as fallback; one optional "how did you hear about us" field | 6+ field forms, phone, company size |
|
|
101
|
+
| Infer locale, currency, timezone; ask firmographics after first value | Profile wizard before the product |
|
|
102
|
+
| Empty state = one primary action + "start from a template / sample data" | Blank screen with a "+" icon |
|
|
103
|
+
| ≤5-item checklist, open by default, first item pre-completed, completion detected by real events, last item **is** the activation event | 12-item tour of every menu |
|
|
104
|
+
| Guidance embedded in the UI (+20% engagement vs modals); tours only user-triggered and ≤4 steps (67% completion vs 31% timer-triggered; 7+ steps 16%) | Autoplay tours, modal stacks, welcome videos |
|
|
105
|
+
| Personalize with at most one JTBD question — and use the answer (65% collect it, 18% use it) | Role/industry quiz before value |
|
|
106
|
+
| Day-1/3/7 email nudges tied to unfinished checklist items (→ `design-email`) | Generic "welcome aboard" mail; sales outreach minutes after signup |
|
|
107
|
+
| Keep card-required trials only if `plan-gtm` chose that model | Payment before value by accident |
|
|
108
|
+
|
|
109
|
+
Deferred fields move to settings or a later prompt; nothing is deleted.
|
|
110
|
+
|
|
111
|
+
### 4. Instrument [LOW freedom — names]
|
|
112
|
+
|
|
113
|
+
Use the app's existing analytics SDK and consent gate. Canonical events:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
signup_started · signup_completed { method, source }
|
|
117
|
+
onboarding_step_completed { step }
|
|
118
|
+
setup_completed
|
|
119
|
+
activated { via: <domain_event> }
|
|
120
|
+
habit_reached { sessions, window_days }
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Server-side where possible; same analytics project as the marketing site so
|
|
124
|
+
`page_viewed { utm, referrer }` joins to signup. Reconcile naming with
|
|
125
|
+
`audit-analytics` when a taxonomy already exists. No PII in properties. Fire
|
|
126
|
+
nothing before consent.
|
|
127
|
+
|
|
128
|
+
### 5. Verify [LOW freedom — run exactly]
|
|
129
|
+
|
|
130
|
+
- New-user Playwright path from landing to `activated` — passes, step count ≤ target
|
|
131
|
+
- Existing login providers, settings, and routes — unchanged (regression pass)
|
|
132
|
+
- Events visible in the analytics debug view or test sink
|
|
133
|
+
- Report: steps before/after, TTV estimate, events added, files touched
|
|
134
|
+
|
|
135
|
+
## Guardrails
|
|
136
|
+
|
|
137
|
+
- **No dark patterns** — no fake progress, forced card, hidden skip, or pre-checked upsell.
|
|
138
|
+
- **Defer, never delete** — collected data the business needs moves later in the journey.
|
|
139
|
+
- **Do not invent numbers** — funnel cells stay "unmeasured" until events exist.
|
|
140
|
+
- **One journey** — landing to first value; the rest of the app is another skill's.
|
|
141
|
+
|
|
142
|
+
## Chains with
|
|
143
|
+
|
|
144
|
+
- **`plan-gtm`** → defines the business meaning of activation; this skill ships it.
|
|
145
|
+
- **`audit-ui-states`** → empty/loading/error findings feed step 3.
|
|
146
|
+
- **`enhance-web-forms`** → the signup form itself.
|
|
147
|
+
- **`enhance-web-conversion`** → upgrade prompts after activation.
|
|
148
|
+
- **`test-playwright`** → lock the new-user path.
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: enhance-pwa
|
|
3
|
+
description: >
|
|
4
|
+
Add or upgrade PWA features: manifest, service worker, offline mode, install
|
|
5
|
+
prompt, push, background sync. Use when "make it a PWA", "offline support",
|
|
6
|
+
or "install prompt". Native → mobile-capacitor-platform.
|
|
7
|
+
license: MIT
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# enhance-pwa — Make It Installable and Offline-Ready
|
|
11
|
+
|
|
12
|
+
**Degree of freedom: MIXED.** Strategy and prompt timing `[HIGH freedom]`; caching rules, Capacitor bypass, and the installability check `[LOW freedom — run exactly]`.
|
|
13
|
+
|
|
14
|
+
**A PWA closes the gap between "website" and "app".** Users can install it to
|
|
15
|
+
their home screen, it loads instantly from cache, and it keeps working when the
|
|
16
|
+
network drops. This skill adds those capabilities to any existing web app without
|
|
17
|
+
breaking what already works.
|
|
18
|
+
|
|
19
|
+
## How to reason
|
|
20
|
+
|
|
21
|
+
1. **Audit** — manifest, SW, framework plugin already present
|
|
22
|
+
2. **Choose** — caching strategy per asset type; Workbox over raw SW
|
|
23
|
+
3. **Ship** — installable manifest + offline fallback + autoUpdate
|
|
24
|
+
4. **Prove** — DevTools shows no installability errors; offline revisit works; Capacitor bridge not intercepted
|
|
25
|
+
|
|
26
|
+
## Worked example
|
|
27
|
+
|
|
28
|
+
> **Audit:** Next.js app; no manifest link; no SW; also ships Capacitor.
|
|
29
|
+
> **Choose:** Serwist (Workbox fork) via `@serwist/turbopack`; NetworkFirst APIs; CacheFirst images; skip `capacitor://`.
|
|
30
|
+
> **Ship:** `manifest.webmanifest` + 192/512 icons + `/offline.html`; install prompt after first success.
|
|
31
|
+
> **Prove:** offline revisit of `/` works; DevTools Manifest pane shows no installability errors; native bridge still functions.
|
|
32
|
+
|
|
33
|
+
## Self-critique before reporting
|
|
34
|
+
|
|
35
|
+
- **No stale deploys** — `autoUpdate`, not silent stale cache
|
|
36
|
+
- **No secrets in cache** — auth tokens and sensitive APIs are NetworkOnly
|
|
37
|
+
- **Offline path** — fallback page or cached shell, not a browser error
|
|
38
|
+
- **Right owner** — native Capacitor shell → `mobile-capacitor-platform`; confirm bridge via `mobile-emulator-test`
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Phase 0: Audit what already exists [HIGH freedom]
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
public/manifest.json or public/manifest.webmanifest → existing manifest
|
|
46
|
+
public/sw.js or src/sw.ts → existing service worker
|
|
47
|
+
vite.config.* → vite-plugin-pwa already configured?
|
|
48
|
+
next.config.* → next-pwa or @serwist/* already configured?
|
|
49
|
+
package.json → workbox-*, serwist, @serwist/*, vite-plugin-pwa, next-pwa, @vite-pwa/nuxt
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Also check the basics in the page (Lighthouse 12+ has no PWA category):
|
|
53
|
+
```javascript
|
|
54
|
+
// eval after goto
|
|
55
|
+
const pwaReady = {
|
|
56
|
+
manifest: !!document.querySelector('link[rel="manifest"]'),
|
|
57
|
+
sw: 'serviceWorker' in navigator,
|
|
58
|
+
https: location.protocol === 'https:' || location.hostname === 'localhost',
|
|
59
|
+
};
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Phase 1: Research framework-specific PWA tooling [HIGH freedom]
|
|
65
|
+
|
|
66
|
+
Follow `/research`: Context7 for the PWA plugin that matches the framework (`vite-plugin-pwa`, `@serwist/turbopack` or `@serwist/next`, `@vite-pwa/nuxt`), Firecrawl for current service-worker and offline guidance. Search the plugin name as written and anchor to the framework version actually installed — recognizing a package is not knowing its current API.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Phase 2: Web App Manifest [HIGH freedom]
|
|
71
|
+
|
|
72
|
+
The manifest is what makes the app installable. Create or improve
|
|
73
|
+
`public/manifest.webmanifest`:
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"name": "Full App Name",
|
|
78
|
+
"short_name": "Short Name",
|
|
79
|
+
"description": "One sentence about what the app does",
|
|
80
|
+
"start_url": "/",
|
|
81
|
+
"display": "standalone",
|
|
82
|
+
"background_color": "#ffffff",
|
|
83
|
+
"theme_color": "#6366f1",
|
|
84
|
+
"orientation": "portrait-primary",
|
|
85
|
+
"icons": [
|
|
86
|
+
{ "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "maskable any" },
|
|
87
|
+
{ "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable any" }
|
|
88
|
+
],
|
|
89
|
+
"screenshots": [
|
|
90
|
+
{ "src": "/screenshots/home.png", "sizes": "1280x720", "type": "image/png", "form_factor": "wide" },
|
|
91
|
+
{ "src": "/screenshots/home-mobile.png", "sizes": "390x844", "type": "image/png", "form_factor": "narrow" }
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Reference the manifest in `<head>`:
|
|
97
|
+
```html
|
|
98
|
+
<link rel="manifest" href="/manifest.webmanifest" />
|
|
99
|
+
<meta name="theme-color" content="#6366f1" />
|
|
100
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
101
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
102
|
+
<link rel="apple-touch-icon" href="/icons/icon-192.png" />
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Icon requirements:**
|
|
106
|
+
- 192×192 and 512×512 minimum; add 180×180 for Apple Touch Icon
|
|
107
|
+
- PNG with transparent background OR maskable (safe zone = inner 80%)
|
|
108
|
+
- Generate from a single source SVG using `sharp` or `pwa-asset-generator`
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Phase 3: Service Worker — caching strategy [HIGH freedom]
|
|
113
|
+
|
|
114
|
+
Use **Workbox** (via the framework plugin) rather than writing raw service
|
|
115
|
+
worker code. Choose the right caching strategy per asset type:
|
|
116
|
+
|
|
117
|
+
| Asset type | Strategy | Why |
|
|
118
|
+
|------------|----------|-----|
|
|
119
|
+
| App shell (HTML/JS/CSS) | CacheFirst + revision hash | Fast loads, updated on deploy |
|
|
120
|
+
| API data (list/detail) | NetworkFirst with 5s timeout | Fresh data, offline fallback |
|
|
121
|
+
| Images | CacheFirst, 30-day expiry | Rarely changes |
|
|
122
|
+
| Fonts | CacheFirst, 1-year expiry | Never changes |
|
|
123
|
+
| Analytics/telemetry | NetworkOnly | No value in caching |
|
|
124
|
+
|
|
125
|
+
### Vite (vite-plugin-pwa)
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
// vite.config.ts
|
|
129
|
+
import { VitePWA } from 'vite-plugin-pwa';
|
|
130
|
+
|
|
131
|
+
VitePWA({
|
|
132
|
+
registerType: 'autoUpdate',
|
|
133
|
+
workbox: {
|
|
134
|
+
globPatterns: ['**/*.{js,css,html,ico,png,svg,webp}'],
|
|
135
|
+
runtimeCaching: [
|
|
136
|
+
{
|
|
137
|
+
urlPattern: /^https:\/\/.*\/api\//,
|
|
138
|
+
handler: 'NetworkFirst',
|
|
139
|
+
options: {
|
|
140
|
+
cacheName: 'api-cache',
|
|
141
|
+
expiration: { maxAgeSeconds: 60 * 60 * 24 },
|
|
142
|
+
networkTimeoutSeconds: 5,
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
manifest: { /* inline or separate file */ },
|
|
148
|
+
})
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Next.js (Serwist, or an existing next-pwa)
|
|
152
|
+
|
|
153
|
+
Next.js has no built-in service worker. It ships the `app/manifest.ts` file
|
|
154
|
+
convention, and 16.3 added an experimental `experimental.useOffline` flag that
|
|
155
|
+
detects connectivity and retries requests but does not cache pages. For
|
|
156
|
+
Workbox-style caching the Next.js PWA guide points to Serwist, a Workbox fork:
|
|
157
|
+
`@serwist/turbopack` for Turbopack builds (the `next build` default since
|
|
158
|
+
Next.js 16) or `@serwist/next` for webpack builds. Take the setup for the
|
|
159
|
+
installed Next.js version from the Serwist docs.
|
|
160
|
+
|
|
161
|
+
`@ducanh2912/next-pwa` is webpack-only (last release 10.2.9, September 2024)
|
|
162
|
+
and its README recommends migrating to `@serwist/next`. Keep it only where a
|
|
163
|
+
repo already uses it, and on Next.js 16+ build with `next build --webpack`:
|
|
164
|
+
|
|
165
|
+
```javascript
|
|
166
|
+
// next.config.mjs
|
|
167
|
+
import withPWA from '@ducanh2912/next-pwa';
|
|
168
|
+
export default withPWA({
|
|
169
|
+
dest: 'public',
|
|
170
|
+
cacheOnFrontEndNav: true,
|
|
171
|
+
aggressiveFrontEndNavCaching: true,
|
|
172
|
+
reloadOnOnline: true,
|
|
173
|
+
})({ /* rest of next config */ });
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Capacitor compatibility
|
|
177
|
+
|
|
178
|
+
If the app also ships as a Capacitor native app, the service worker must not
|
|
179
|
+
intercept Capacitor's bridge requests. Add to the service worker:
|
|
180
|
+
|
|
181
|
+
```javascript
|
|
182
|
+
// Do not cache Capacitor bridge calls
|
|
183
|
+
if (event.request.url.includes('capacitor://') ||
|
|
184
|
+
event.request.url.includes('ionic://')) {
|
|
185
|
+
return; // let it pass through
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Phase 4: Offline page and graceful degradation [HIGH freedom]
|
|
192
|
+
|
|
193
|
+
When the network is unavailable and a cached response does not exist, show a
|
|
194
|
+
helpful offline page rather than a browser error:
|
|
195
|
+
|
|
196
|
+
```html
|
|
197
|
+
<!-- public/offline.html -->
|
|
198
|
+
<h1>You are offline</h1>
|
|
199
|
+
<p>Check your connection and try again. Pages you have visited recently will still load.</p>
|
|
200
|
+
<button onclick="location.reload()">Try again</button>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Register it as the fallback. Workbox's `navigateFallback` answers every
|
|
204
|
+
non-precached navigation with one HTML file, online or not, so it is the SPA
|
|
205
|
+
shell (vite-plugin-pwa defaults it to `index.html`), not an offline page. For
|
|
206
|
+
server-rendered pages, precache `offline.html` and attach it to the
|
|
207
|
+
navigation route:
|
|
208
|
+
```javascript
|
|
209
|
+
// workbox (generateSW) options; clear the SPA fallback so this route runs
|
|
210
|
+
navigateFallback: null,
|
|
211
|
+
runtimeCaching: [{
|
|
212
|
+
urlPattern: ({ request }) => request.mode === 'navigate',
|
|
213
|
+
handler: 'NetworkFirst', // NetworkOnly if pages carry per-user data
|
|
214
|
+
options: { cacheName: 'pages', precacheFallback: { fallbackURL: '/offline.html' } },
|
|
215
|
+
}],
|
|
216
|
+
// hand-written service worker: offlineFallback() from workbox-recipes
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
With Serwist (Next.js), precache the page through `additionalPrecacheEntries`
|
|
220
|
+
and list it in the `Serwist` constructor's `fallbacks.entries` with a
|
|
221
|
+
`request.destination === 'document'` matcher.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Phase 5: Install prompt (optional but high-value) [HIGH freedom]
|
|
226
|
+
|
|
227
|
+
Do not use the browser's default install prompt — it appears at the wrong time.
|
|
228
|
+
Instead, intercept `beforeinstallprompt` and show it when the user has
|
|
229
|
+
demonstrated value (e.g. after completing a core action):
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
// hooks/useInstallPrompt.ts
|
|
233
|
+
let deferredPrompt: BeforeInstallPromptEvent | null = null;
|
|
234
|
+
|
|
235
|
+
window.addEventListener('beforeinstallprompt', (e) => {
|
|
236
|
+
e.preventDefault();
|
|
237
|
+
deferredPrompt = e as BeforeInstallPromptEvent;
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
export function triggerInstallPrompt() {
|
|
241
|
+
if (!deferredPrompt) return;
|
|
242
|
+
deferredPrompt.prompt();
|
|
243
|
+
deferredPrompt.userChoice.then(() => { deferredPrompt = null; });
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Show a custom banner with clear benefits ("Install for offline access and faster loads"),
|
|
248
|
+
not just "Add to Home Screen". `beforeinstallprompt` fires only in Chromium browsers;
|
|
249
|
+
Safari (including iOS) and Firefox never fire it, so on iOS show Share → Add to
|
|
250
|
+
Home Screen instructions instead.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Phase 6: Push notifications (if backend supports it) [HIGH freedom]
|
|
255
|
+
|
|
256
|
+
Only implement push if the app has a genuine reason to send notifications
|
|
257
|
+
(not just to ask for permission on first load — users will deny that).
|
|
258
|
+
|
|
259
|
+
```typescript
|
|
260
|
+
async function subscribeToPush(userId: string) {
|
|
261
|
+
const registration = await navigator.serviceWorker.ready;
|
|
262
|
+
const subscription = await registration.pushManager.subscribe({
|
|
263
|
+
userVisibleOnly: true,
|
|
264
|
+
applicationServerKey: urlBase64ToUint8Array(process.env.NEXT_PUBLIC_VAPID_KEY!),
|
|
265
|
+
});
|
|
266
|
+
// Save subscription to backend
|
|
267
|
+
await fetch('/api/push/subscribe', {
|
|
268
|
+
method: 'POST',
|
|
269
|
+
body: JSON.stringify({ userId, subscription }),
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
For the backend, use `web-push` (Node.js) or your platform's push service.
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Phase 7: Verify installability and offline [LOW freedom — do not skip]
|
|
279
|
+
|
|
280
|
+
Lighthouse removed its PWA category in v12.0 (April 2024), so there is no PWA
|
|
281
|
+
score to target. Check in Chrome DevTools → Application instead: the
|
|
282
|
+
**Manifest** pane's Installability section must list no errors, and in
|
|
283
|
+
**Service workers** tick **Offline** and reload `start_url`.
|
|
284
|
+
|
|
285
|
+
Key checks:
|
|
286
|
+
- [ ] Manifest present and installable
|
|
287
|
+
- [ ] Service worker registered
|
|
288
|
+
- [ ] Works offline (offline page or cached response)
|
|
289
|
+
- [ ] HTTPS (localhost counts)
|
|
290
|
+
- [ ] `viewport` meta tag present
|
|
291
|
+
- [ ] Icons correct size and format
|
|
292
|
+
- [ ] `start_url` loads while offline
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Guardrails
|
|
297
|
+
|
|
298
|
+
- **Service worker caching can break deployments** if old caches persist.
|
|
299
|
+
Use `registerType: 'autoUpdate'` (the new service worker takes control at once; open tabs reload only when the app registers through `virtual:pwa-register`, e.g. `registerSW({ immediate: true })`) or `'prompt'` (the user is asked to reload) — never a silent background update that keeps serving stale precached code.
|
|
300
|
+
- **Never cache auth tokens or sensitive API responses** in the service worker.
|
|
301
|
+
- **Test offline mode manually** via DevTools → Network → Offline before shipping.
|
|
302
|
+
- **Capacitor apps**: confirm the Capacitor bridge still works after adding the
|
|
303
|
+
service worker by running `mobile-emulator-test`.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: enhance-readability
|
|
3
|
+
description: >
|
|
4
|
+
Audit and fix how easily content is understood: line length (CPL), reading
|
|
5
|
+
level, grouping, deadspace, icons or tables that cut verbosity. Use when
|
|
6
|
+
"hard to read", "too dense", "reading level", "cognitive load", or "turn
|
|
7
|
+
this prose into a table".
|
|
8
|
+
license: MIT
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
> Surface router: `/uiux`. You are here: `enhance-readability`. Native iOS/Android (SwiftUI / Compose, no web layer) is out of scope — use Apple HIG / Material directly.
|
|
12
|
+
|
|
13
|
+
# enhance-readability — Make content understood
|
|
14
|
+
|
|
15
|
+
**Degree of freedom: MIXED.** Text-metric measurement `[LOW freedom — run exactly]`;
|
|
16
|
+
grouping, iconography, and tone `[HIGH freedom]`.
|
|
17
|
+
|
|
18
|
+
Audit-and-fix. The goal is **comprehension**: the least mental effort for the
|
|
19
|
+
reader to understand the content. `enhance-web-ui` makes it look good;
|
|
20
|
+
`audit-responsive` makes it fit the screen; this makes it *understood*.
|
|
21
|
+
|
|
22
|
+
The backbone is **Cognitive Load Theory** (working memory is small — cut
|
|
23
|
+
extraneous load) and **Gestalt** (the brain auto-groups visual elements —
|
|
24
|
+
design with that). A consequence of CLT / information overload: showing
|
|
25
|
+
*more* information can raise extraneous load and lower understanding. Replacing
|
|
26
|
+
a dense paragraph with one table or diagram is a comprehension win **only when
|
|
27
|
+
the visual reduces total load** versus the text it replaces — never decoration.
|
|
28
|
+
|
|
29
|
+
## How to reason
|
|
30
|
+
|
|
31
|
+
1. **Observe** — what makes this effortful? (dense text / no hierarchy / wall of prose / no whitespace / wrong register)
|
|
32
|
+
2. **Diagnose** — which of the six channels, and which Gestalt / CLT principle
|
|
33
|
+
3. **Classify load** — extraneous (bad presentation — always cut) vs intrinsic (inherent complexity — restructure / chunk) vs germane (productive — keep)
|
|
34
|
+
4. **Lever** — cheapest channel that removes that load
|
|
35
|
+
5. **Severity** — how much it blocks understanding on the primary path
|
|
36
|
+
|
|
37
|
+
## Worked example
|
|
38
|
+
|
|
39
|
+
> **Observe:** a pricing section is 3 dense paragraphs comparing 4 plans, 105 CPL, one grey block.
|
|
40
|
+
> **Diagnose:** dim 4 (comparison is a table), dim 3 (no proximity grouping), dim 1 (CPL 105 > 80), dim 5 (no whitespace).
|
|
41
|
+
> **Classify:** extraneous (prose form) + intrinsic (4-way comparison → chunk into a table).
|
|
42
|
+
> **Lever:** generate a 4-column comparison table; cap surrounding text at 66ch; icon per tier.
|
|
43
|
+
> **Handoff:** table collapse on mobile → `audit-responsive`; table tokens → `audit-uiux-design-system`.
|
|
44
|
+
|
|
45
|
+
## Self-critique before reporting
|
|
46
|
+
|
|
47
|
+
- **Load reduced** — each change names extraneous vs intrinsic; "looks cleaner" is not the test
|
|
48
|
+
- **Right owner** — breakpoints → `audit-responsive`; personality → `enhance-web-ui`; WCAG floor → `audit-accessibility`; voice authenticity → `plan-antislop`; tokens → `audit-uiux-design-system`
|
|
49
|
+
- **Language-correct** — CJK judged at 40 CPL (WCAG 2.2 SC 1.4.8)
|
|
50
|
+
- **Visuals earn their place** — generated graphic reduces load vs the text it replaces
|
|
51
|
+
- **Voice intact** — tone lowers effort without flattening the author
|
|
52
|
+
|
|
53
|
+
## The six channels (one goal: lower cognitive load)
|
|
54
|
+
|
|
55
|
+
1. **Text** — legibility and reading level (measurable).
|
|
56
|
+
2. **Separation** — Gestalt figure-ground + similarity (weight / color / rule).
|
|
57
|
+
3. **Layout** — proximity + chunking (~4 working-memory units) + hierarchy.
|
|
58
|
+
4. **Iconography & graphics** — icons paired with text; generate a visual only if load drops.
|
|
59
|
+
5. **Deadspace** — negative space that directs focus. "Is space aiding understanding," not "fix the 1440px grid."
|
|
60
|
+
6. **Tone & accent** — register/rhythm for the audience. Authenticity / AI-tells → `plan-antislop`.
|
|
61
|
+
|
|
62
|
+
Each is sized per form factor as *comprehension judgment*, not breakpoint CSS.
|
|
63
|
+
|
|
64
|
+
## Boundary — what this skill does NOT own
|
|
65
|
+
|
|
66
|
+
- **Breakpoint layout / matcher / CSS grid / "desktop = stretched phone"** → `audit-responsive`
|
|
67
|
+
- **Visual personality, brand, aesthetic composition** → `enhance-web-ui`
|
|
68
|
+
- **WCAG pass/fail contrast/size floor** → `audit-accessibility` (this skill treats the floor as the minimum)
|
|
69
|
+
- **Voice authenticity / anti-slop** → `plan-antislop`
|
|
70
|
+
- **Design-token / system coherence** → `audit-uiux-design-system`
|
|
71
|
+
|
|
72
|
+
Note and hand off. Do not duplicate.
|
|
73
|
+
|
|
74
|
+
## Text thresholds (Phase 1) [LOW freedom — run exactly]
|
|
75
|
+
|
|
76
|
+
House targets, measured not eyeballed. CPL/CJK and line-height come from
|
|
77
|
+
[WCAG 2.2 SC 1.4.8 Visual Presentation](https://www.w3.org/WAI/WCAG22/Understanding/visual-presentation.html)
|
|
78
|
+
(AAA *mechanism* criterion; we use the numbers as authoring targets):
|
|
79
|
+
|
|
80
|
+
- **CPL / measure**: 50–75, ~66 sweet spot; hard limit **80 Latin**, **40 CJK** (日本語).
|
|
81
|
+
- **Line-height**: 1.5–1.8 body. **Font**: body ≥16px (16–18 optimal). **Paragraphs**: 2–4 lines.
|
|
82
|
+
- **Contrast**: WCAG AA floor is the minimum, not the goal — flag pale secondary text.
|
|
83
|
+
- **Alignment**: left-align *running text* (do not justify). Opposite of `audit-responsive`'s left-stacked-*layout* anti-pattern.
|
|
84
|
+
- **Reading level**: Flesch-Kincaid ≤8 for general UI (plain-language house target, not WCAG); sentences <~20 words; front-load; chunk.
|
|
85
|
+
|
|
86
|
+
## Phase 0 — Scope the content surfaces [HIGH freedom]
|
|
87
|
+
|
|
88
|
+
Identify where *understanding* is the job: article/doc bodies, comparisons,
|
|
89
|
+
dashboards, onboarding, help/FAQ, dense forms, data-heavy views, empty/error
|
|
90
|
+
copy. Note language(s) (CJK vs Latin) and the primary comprehension goal
|
|
91
|
+
("decide between plans", "learn the concept", "complete the task").
|
|
92
|
+
|
|
93
|
+
## Phase 1 — Measure text legibility [LOW freedom — run exactly]
|
|
94
|
+
|
|
95
|
+
Per surface, measure rendered values: CPL at real width, line-height, body/caption
|
|
96
|
+
px, paragraph length, contrast, alignment, reading level. Record value-vs-threshold.
|
|
97
|
+
|
|
98
|
+
## Phase 2 — Visual channels (2, 3, 5) against Gestalt [HIGH freedom]
|
|
99
|
+
|
|
100
|
+
- **Separation (2):** distinct types look distinct, or one undifferentiated stream?
|
|
101
|
+
- **Grouping (3):** related close, unrelated apart? Chunked to working-memory size? Clear first-look target?
|
|
102
|
+
- **Deadspace (5):** whitespace separates and focuses, or everything is crammed and left-stacked? (Use of space for comprehension — not the breakpoint grid.)
|
|
103
|
+
|
|
104
|
+
## Phase 3 — Iconography & graphics (4) [HIGH freedom]
|
|
105
|
+
|
|
106
|
+
Where prose carries a load a visual would carry better, propose (and generate if
|
|
107
|
+
the environment supports it) a comparison table, flow/step diagram, scan-anchor
|
|
108
|
+
icons, or a chart. Test: does it *reduce* total load vs the text it replaces?
|
|
109
|
+
If not, do not add it. Existing icons: paired with text and consistent, or noise?
|
|
110
|
+
(NN/g: almost no icon is universal without a label.)
|
|
111
|
+
|
|
112
|
+
## Phase 4 — Tone (6), then fix in the system [HIGH freedom]
|
|
113
|
+
|
|
114
|
+
Register right for audience and goal (short + direct for tasks; warmer for
|
|
115
|
+
onboarding). Preserve author voice. Fixes use the repo's design tokens and type
|
|
116
|
+
scale — never one-off values; systemic gaps → `audit-uiux-design-system`.
|
|
117
|
+
Generated visuals follow the design system. Keep diffs to comprehension.
|
|
118
|
+
|
|
119
|
+
## Definition of Done
|
|
120
|
+
|
|
121
|
+
- [ ] Surfaces scoped with per-surface comprehension goal; language(s) noted
|
|
122
|
+
- [ ] Text measured value-vs-threshold (CPL incl. CJK, line-height, px, paragraph, contrast, align, reading level)
|
|
123
|
+
- [ ] Separation, grouping, and deadspace assessed against Gestalt / CLT
|
|
124
|
+
- [ ] Iconography/graphics assessed; visuals generated only if load drops
|
|
125
|
+
- [ ] Tone assessed; author voice preserved
|
|
126
|
+
- [ ] Findings classified by channel + load type + severity
|
|
127
|
+
- [ ] Fixes use tokens/scale; systemic gaps flagged
|
|
128
|
+
- [ ] Boundary respected (responsive / web-ui / a11y / antislop / design-system)
|
|
129
|
+
- [ ] Self-critique applied; every change names the load it removes
|
|
130
|
+
|
|
131
|
+
## Output format
|
|
132
|
+
|
|
133
|
+
1. **Text measurement table** — surface | CPL | line-height | px | paragraph | contrast | align | reading level | vs threshold
|
|
134
|
+
2. **Channel findings** — surface | channel (1–6) | Gestalt/CLT principle | load type | severity | fix
|
|
135
|
+
3. **Proposed/generated visuals** — load-reduction rationale
|
|
136
|
+
4. **Fixes applied** — token CSS + regrouping + visuals + copy/tone, before/after
|
|
137
|
+
5. **Handoffs** — breakpoints / personality / WCAG / voice / tokens
|
|
138
|
+
|
|
139
|
+
## Related
|
|
140
|
+
|
|
141
|
+
- `enhance-web-ui` — looks good (composition / personality)
|
|
142
|
+
- `audit-responsive` — container reflow per breakpoint
|
|
143
|
+
- `audit-accessibility` — WCAG pass/fail floor
|
|
144
|
+
- `plan-antislop` — voice authenticity / AI tells
|
|
145
|
+
- `audit-uiux-design-system` — tokens / component SSOT
|
|
146
|
+
- `enhance-web-ux` — flows / IA / information density of the *task*, not reading measure
|