@kensaurus/skills 0.0.0-stage → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +53 -0
- package/.claude-plugin/plugin.json +40 -0
- package/.cursor-plugin/plugin.json +38 -0
- package/.mcp.json +28 -0
- package/CHANGELOG.md +1761 -0
- package/LICENSE +21 -0
- package/NOTICE +13 -0
- package/README.md +820 -2
- package/SECURITY.md +55 -0
- package/agents/code-reviewer.md +60 -0
- package/agents/completion-judge.md +89 -0
- package/agents/db-migrator.md +125 -0
- package/agents/debugger.md +47 -0
- package/agents/deploy-checker.md +100 -0
- package/agents/perf-monitor.md +74 -0
- package/assets/favicon.png +0 -0
- package/assets/logo-light.png +0 -0
- package/assets/logo.png +0 -0
- package/assets/logo.svg +6 -0
- package/assets/og.png +0 -0
- package/bin/install.mjs +1127 -0
- package/bin/kenji.js +2 -0
- package/commands/adr.md +17 -0
- package/commands/aeo-plan.md +18 -0
- package/commands/arch-boundaries.md +17 -0
- package/commands/aso-plan.md +18 -0
- package/commands/auth-flows.md +19 -0
- package/commands/backup-plan.md +17 -0
- package/commands/burndown-full.md +25 -0
- package/commands/capacitor-plan.md +18 -0
- package/commands/codemod-safety.md +22 -0
- package/commands/commit.md +18 -0
- package/commands/complete-everything.md +40 -0
- package/commands/cost-plan.md +19 -0
- package/commands/deadcode-plan.md +26 -0
- package/commands/deadcode.md +32 -0
- package/commands/debug-issue.md +17 -0
- package/commands/deps-plan.md +18 -0
- package/commands/docs-plan.md +17 -0
- package/commands/doctrine.md +19 -0
- package/commands/error-plan.md +19 -0
- package/commands/feedback-to-closure.md +36 -0
- package/commands/fix-issue.md +76 -0
- package/commands/gate-logic.md +26 -0
- package/commands/green-repo.md +36 -0
- package/commands/grill-me.md +19 -0
- package/commands/gtm-plan.md +21 -0
- package/commands/gtm-weekly.md +17 -0
- package/commands/gtm.md +22 -0
- package/commands/handoff.md +15 -0
- package/commands/housekeep-backlog.md +18 -0
- package/commands/housekeep-files.md +22 -0
- package/commands/housekeep-gates.md +18 -0
- package/commands/instant-nav.md +11 -0
- package/commands/integrity-plan.md +19 -0
- package/commands/launch-kit.md +16 -0
- package/commands/mcp-guide.md +40 -0
- package/commands/mobile-plan.md +19 -0
- package/commands/native-rn-monorepo/README.md +78 -0
- package/commands/native-rn-monorepo/android-build.md +26 -0
- package/commands/native-rn-monorepo/android-install.md +32 -0
- package/commands/native-rn-monorepo/android-logcat.md +37 -0
- package/commands/native-rn-monorepo/ios-ci-logs.md +56 -0
- package/commands/native-rn-monorepo/ios-ci-status.md +52 -0
- package/commands/native-rn-monorepo/ios-ci-trigger.md +59 -0
- package/commands/native-rn-monorepo/rn-reset.md +50 -0
- package/commands/native-rn-monorepo/rn-ship-ios.md +67 -0
- package/commands/native-rn-monorepo/rn-verify.md +53 -0
- package/commands/perf-plan.md +18 -0
- package/commands/plan-mode.md +74 -0
- package/commands/pr.md +16 -0
- package/commands/pricing-plan.md +20 -0
- package/commands/privacy-plan.md +18 -0
- package/commands/readability.md +12 -0
- package/commands/readme.md +15 -0
- package/commands/refactor.md +15 -0
- package/commands/release-prep.md +17 -0
- package/commands/research.md +25 -0
- package/commands/responsive-audit.md +21 -0
- package/commands/review-code.md +18 -0
- package/commands/rls-plan.md +18 -0
- package/commands/secrets-plan.md +18 -0
- package/commands/security-plan.md +19 -0
- package/commands/ship-and-observe.md +36 -0
- package/commands/skill-conflicts.md +19 -0
- package/commands/slop-plan.md +18 -0
- package/commands/stub-plan.md +18 -0
- package/commands/test-mutation.md +16 -0
- package/commands/test-plan.md +17 -0
- package/commands/test.md +29 -0
- package/commands/thirdparty-web-interface-guidelines.md +185 -0
- package/commands/uiux-plan.md +18 -0
- package/commands/uiux.md +45 -0
- package/commands/update-deps.md +21 -0
- package/commands/validation-plan.md +19 -0
- package/commands-portable/fix-issue.md +72 -0
- package/commands-portable/plan-mode.md +92 -0
- package/commands-portable/research.md +91 -0
- package/docs/screenshots/README.md +5 -0
- package/docs/screenshots/audit-dark.png +0 -0
- package/docs/screenshots/build-dark.png +0 -0
- package/docs/screenshots/grill-dark.png +0 -0
- package/docs/screenshots/hero-dark.png +0 -0
- package/docs/screenshots/hero-light.png +0 -0
- package/docs/screenshots/ship-dark.png +0 -0
- package/docs/screenshots/src/showcase.html +320 -0
- package/hooks/completion-gate.mjs +258 -0
- package/hooks/cursor-hooks.json +13 -0
- package/hooks/hooks.json +15 -0
- package/install.sh +21 -0
- package/llms.txt +40 -0
- package/mcp/README.md +266 -0
- package/mcp/VERSIONS.md +41 -0
- package/mcp/mcp-full.json.template +124 -0
- package/mcp/mcp.json.template +29 -0
- package/mcp/pinned-versions.json +27 -0
- package/package.json +93 -4
- package/rules/approved-plan-execution.mdc +65 -0
- package/rules/full-stack-ship-discipline.mdc +37 -0
- package/rules/native-rn-monorepo/README.md +63 -0
- package/rules/native-rn-monorepo/_project.mdc +69 -0
- package/rules/native-rn-monorepo/native-android.mdc +72 -0
- package/rules/native-rn-monorepo/native-ios.mdc +61 -0
- package/rules/native-rn-monorepo/react-native-js.mdc +78 -0
- package/rules/native-rn-monorepo/web.mdc +60 -0
- package/rules/project-starter/components.mdc +54 -0
- package/rules/project-starter/data-fetching.mdc +77 -0
- package/rules/project-starter/git.mdc +41 -0
- package/rules/project-starter/supabase.mdc +37 -0
- package/rules/project-starter/tailwind.mdc +48 -0
- package/rules/project-starter/typescript.mdc +36 -0
- package/rules/project-starter/web-performance.mdc +42 -0
- package/rules/senior-engineer.mdc +30 -0
- package/rules/shell-first-search.mdc +19 -0
- package/rules/skill-workflows.mdc +35 -0
- package/rules/verification-before-completion.mdc +57 -0
- package/skills/audit-accessibility/SKILL.md +441 -0
- package/skills/audit-agent-speed/SKILL.md +181 -0
- package/skills/audit-agent-speed/scripts/stop-typecheck.mjs +151 -0
- package/skills/audit-analytics/SKILL.md +138 -0
- package/skills/audit-auth-flows/SKILL.md +267 -0
- package/skills/audit-backend-architecture/SKILL.md +266 -0
- package/skills/audit-backend-architecture/references/patterns.md +386 -0
- package/skills/audit-bundle-size/SKILL.md +296 -0
- package/skills/audit-cicd/SKILL.md +218 -0
- package/skills/audit-code-quality/SKILL.md +314 -0
- package/skills/audit-code-review/SKILL.md +289 -0
- package/skills/audit-codemod-safety/SKILL.md +159 -0
- package/skills/audit-db-schema/SKILL.md +465 -0
- package/skills/audit-db-schema/references/details.md +110 -0
- package/skills/audit-doctrine/SKILL.md +189 -0
- package/skills/audit-env-parity/SKILL.md +133 -0
- package/skills/audit-fe-api/SKILL.md +458 -0
- package/skills/audit-gate-logic/SKILL.md +219 -0
- package/skills/audit-i18n/SKILL.md +339 -0
- package/skills/audit-infra-cost/SKILL.md +142 -0
- package/skills/audit-langfuse-llm/SKILL.md +468 -0
- package/skills/audit-langfuse-llm/references/details.md +226 -0
- package/skills/audit-llm-security/SKILL.md +147 -0
- package/skills/audit-monetization-iap/SKILL.md +137 -0
- package/skills/audit-payment-system/SKILL.md +268 -0
- package/skills/audit-payment-system/references/checklist.md +283 -0
- package/skills/audit-performance/SKILL.md +383 -0
- package/skills/audit-performance/references/loading-priority-2026.md +81 -0
- package/skills/audit-realworld/SKILL.md +287 -0
- package/skills/audit-registry-listing/SKILL.md +122 -0
- package/skills/audit-resilience/SKILL.md +154 -0
- package/skills/audit-responsive/SKILL.md +221 -0
- package/skills/audit-responsive/references/checklist.md +166 -0
- package/skills/audit-security/SKILL.md +289 -0
- package/skills/audit-skill-conflicts/SKILL.md +178 -0
- package/skills/audit-ui-states/SKILL.md +146 -0
- package/skills/audit-uiux-design-system/SKILL.md +475 -0
- package/skills/audit-uiux-design-system/references/details.md +71 -0
- package/skills/audit-ux/SKILL.md +379 -0
- package/skills/audit-ux/references/details.md +245 -0
- package/skills/audit-ux-journeys/SKILL.md +215 -0
- package/skills/audit-ux-journeys/references/checklist.md +179 -0
- package/skills/backend-db-performance/SKILL.md +441 -0
- package/skills/backend-error-handling/SKILL.md +489 -0
- package/skills/backend-error-handling/references/details.md +58 -0
- package/skills/backend-observability/SKILL.md +88 -0
- package/skills/backend-patterns/SKILL.md +499 -0
- package/skills/backend-patterns/references/architecture-patterns.md +298 -0
- package/skills/backend-realtime/SKILL.md +403 -0
- package/skills/backend-realtime/references/patterns.md +74 -0
- package/skills/burndown-full/SKILL.md +174 -0
- package/skills/complete-everything/SKILL.md +295 -0
- package/skills/data-pipeline/SKILL.md +109 -0
- package/skills/data-visualization/SKILL.md +488 -0
- package/skills/debug-error/SKILL.md +322 -0
- package/skills/debug-fe-be-integration/SKILL.md +459 -0
- package/skills/debug-sentry-monitor/SKILL.md +497 -0
- package/skills/debug-sentry-monitor/references/details.md +165 -0
- package/skills/deploy-npm/SKILL.md +394 -0
- package/skills/deploy-npm/references/example-mushi-mushi.md +52 -0
- package/skills/deploy-verify/SKILL.md +489 -0
- package/skills/design-api/SKILL.md +379 -0
- package/skills/design-canvas/SKILL.md +155 -0
- package/skills/design-email/SKILL.md +370 -0
- package/skills/design-frontend/SKILL.md +143 -0
- package/skills/design-generative-art/SKILL.md +474 -0
- package/skills/design-mobile-first/SKILL.md +506 -0
- package/skills/design-motion/SKILL.md +333 -0
- package/skills/design-motion/references/delight-interactions.md +191 -0
- package/skills/design-prd/SKILL.md +443 -0
- package/skills/design-system/SKILL.md +457 -0
- package/skills/design-theme/SKILL.md +226 -0
- package/skills/design-theme/themes/tsumagoi-ranch.md +150 -0
- package/skills/docs-adr/SKILL.md +168 -0
- package/skills/docs-coauthor/SKILL.md +368 -0
- package/skills/docs-comparison-pages/SKILL.md +117 -0
- package/skills/docs-domain-modeling/SKILL.md +97 -0
- package/skills/docs-launch-kit/SKILL.md +139 -0
- package/skills/docs-writer/SKILL.md +469 -0
- package/skills/enhance-agent-guardrails/SKILL.md +164 -0
- package/skills/enhance-arch-boundaries/SKILL.md +154 -0
- package/skills/enhance-capacitor-ui/SKILL.md +463 -0
- package/skills/enhance-capacitor-ui/references/details.md +750 -0
- package/skills/enhance-email-deliverability/SKILL.md +143 -0
- package/skills/enhance-growth-loops/SKILL.md +122 -0
- package/skills/enhance-lifecycle-email/SKILL.md +130 -0
- package/skills/enhance-motion/SKILL.md +193 -0
- package/skills/enhance-onboarding/SKILL.md +148 -0
- package/skills/enhance-pwa/SKILL.md +304 -0
- package/skills/enhance-readability/SKILL.md +146 -0
- package/skills/enhance-readme/SKILL.md +496 -0
- package/skills/enhance-readme/package-lock.json +187 -0
- package/skills/enhance-readme/package.json +17 -0
- package/skills/enhance-readme/scripts/generate-readme-blocks.mjs +199 -0
- package/skills/enhance-readme/scripts/record-readme-tour.mjs +442 -0
- package/skills/enhance-skill-prompts/SKILL.md +167 -0
- package/skills/enhance-skill-prompts/references/exemplar-audit-auth-flows.md +311 -0
- package/skills/enhance-web-conversion/SKILL.md +155 -0
- package/skills/enhance-web-forms/SKILL.md +154 -0
- package/skills/enhance-web-instant-nav/SKILL.md +138 -0
- package/skills/enhance-web-instant-nav/references/bfcache-blockers.md +23 -0
- package/skills/enhance-web-instant-nav/references/early-hints.md +33 -0
- package/skills/enhance-web-instant-nav/references/speculation-rules.md +44 -0
- package/skills/enhance-web-landing/SKILL.md +459 -0
- package/skills/enhance-web-landing/references/details.md +773 -0
- package/skills/enhance-web-redesign/SKILL.md +228 -0
- package/skills/enhance-web-seo/SKILL.md +276 -0
- package/skills/enhance-web-ui/SKILL.md +473 -0
- package/skills/enhance-web-ui/references/details.md +674 -0
- package/skills/enhance-web-ux/HEURISTICS.md +242 -0
- package/skills/enhance-web-ux/PATTERNS.md +375 -0
- package/skills/enhance-web-ux/SKILL.md +464 -0
- package/skills/enhance-web-ux/examples.md +222 -0
- package/skills/enhance-web-ux/references/details.md +406 -0
- package/skills/enhance-web-web3d/SKILL.md +397 -0
- package/skills/enhance-web-web3d/references/css-canvas-effects.md +180 -0
- package/skills/handoff/SKILL.md +66 -0
- package/skills/housekeep-backlog/SKILL.md +149 -0
- package/skills/housekeep-dead-code/SKILL.md +387 -0
- package/skills/housekeep-dead-code/references/ratchet-ci.md +205 -0
- package/skills/housekeep-dead-code/references/supabase-hygiene.md +152 -0
- package/skills/housekeep-design/SKILL.md +207 -0
- package/skills/housekeep-files/SKILL.md +220 -0
- package/skills/housekeep-files/references/naming-and-catalog.md +86 -0
- package/skills/housekeep-files/scripts/housekeep-files.ps1 +360 -0
- package/skills/housekeep-files/scripts/housekeep-files.sh +238 -0
- package/skills/housekeep-gates/SKILL.md +174 -0
- package/skills/iterate-agent-harness/SKILL.md +137 -0
- package/skills/iterate-gtm-weekly/SKILL.md +103 -0
- package/skills/iterate-post-launch/SKILL.md +292 -0
- package/skills/meta-mcp-builder/SKILL.md +313 -0
- package/skills/meta-skill-creator/SKILL.md +304 -0
- package/skills/mobile-capacitor-platform/SKILL.md +104 -0
- package/skills/mobile-emulator-start/SKILL.md +296 -0
- package/skills/mobile-emulator-test/SKILL.md +491 -0
- package/skills/mobile-emulator-test/references/details.md +478 -0
- package/skills/mobile-rn-performance/SKILL.md +107 -0
- package/skills/mobile-rn-screen/SKILL.md +476 -0
- package/skills/mobile-rn-screen/references/details.md +785 -0
- package/skills/mushi-health/SKILL.md +206 -0
- package/skills/mushi-integration/SKILL.md +257 -0
- package/skills/plan-aeo-readiness/SKILL.md +166 -0
- package/skills/plan-antislop/SKILL.md +281 -0
- package/skills/plan-aso/SKILL.md +149 -0
- package/skills/plan-backup-dr/SKILL.md +131 -0
- package/skills/plan-capacitor-hardening/SKILL.md +217 -0
- package/skills/plan-data-integrity/SKILL.md +187 -0
- package/skills/plan-dead-code/SKILL.md +386 -0
- package/skills/plan-dead-code/references/knip-config.md +214 -0
- package/skills/plan-dead-code/references/output-templates.md +133 -0
- package/skills/plan-dead-code/references/preservation-contract.md +50 -0
- package/skills/plan-dead-code/references/residue-greps.md +84 -0
- package/skills/plan-dependency-provenance/SKILL.md +200 -0
- package/skills/plan-docs-sync/SKILL.md +143 -0
- package/skills/plan-docs-sync/references/drift-taxonomy.md +43 -0
- package/skills/plan-docs-sync/references/output-templates.md +33 -0
- package/skills/plan-docs-sync/references/preservation-contract.md +17 -0
- package/skills/plan-error-handling/SKILL.md +205 -0
- package/skills/plan-gtm/SKILL.md +276 -0
- package/skills/plan-gtm/references/benchmarks-2026.md +183 -0
- package/skills/plan-input-validation/SKILL.md +179 -0
- package/skills/plan-llm-cost-guardrails/SKILL.md +176 -0
- package/skills/plan-mobile-readiness/SKILL.md +171 -0
- package/skills/plan-perf-audit/SKILL.md +145 -0
- package/skills/plan-perf-audit/references/audit-scope.md +51 -0
- package/skills/plan-perf-audit/references/output-templates.md +33 -0
- package/skills/plan-perf-audit/references/preservation-contract.md +13 -0
- package/skills/plan-pricing/SKILL.md +173 -0
- package/skills/plan-privacy-compliance/SKILL.md +148 -0
- package/skills/plan-rls-audit/SKILL.md +231 -0
- package/skills/plan-secrets-audit/SKILL.md +181 -0
- package/skills/plan-security-audit/SKILL.md +168 -0
- package/skills/plan-security-audit/references/output-templates.md +36 -0
- package/skills/plan-security-audit/references/owasp-supabase-scope.md +55 -0
- package/skills/plan-security-audit/references/preservation-contract.md +18 -0
- package/skills/plan-stub-checker/SKILL.md +216 -0
- package/skills/plan-stub-checker/references/detection-methodology.md +75 -0
- package/skills/plan-stub-checker/references/detection-taxonomy.md +34 -0
- package/skills/plan-stub-checker/references/output-templates.md +63 -0
- package/skills/plan-stub-checker/references/preservation-contract.md +24 -0
- package/skills/plan-test-coverage/SKILL.md +170 -0
- package/skills/plan-test-coverage/references/methodology.md +54 -0
- package/skills/plan-test-coverage/references/output-templates.md +34 -0
- package/skills/plan-test-coverage/references/preservation-contract.md +15 -0
- package/skills/plan-uiux-unification/SKILL.md +230 -0
- package/skills/plan-uiux-unification/references/output-templates.md +67 -0
- package/skills/plan-uiux-unification/references/phase-workbook.md +85 -0
- package/skills/plan-uiux-unification/references/preservation-contract.md +24 -0
- package/skills/protocol-browser-anti-stall/SKILL.md +211 -0
- package/skills/protocol-browser-anti-stall/references/mcp-to-cli-map.md +113 -0
- package/skills/protocol-browser-anti-stall/references/playwright-session-coordination.md +170 -0
- package/skills/research/SKILL.md +422 -0
- package/skills/test-exploratory/SKILL.md +165 -0
- package/skills/test-exploratory/references/charter-template.md +29 -0
- package/skills/test-load/SKILL.md +126 -0
- package/skills/test-mutation/SKILL.md +160 -0
- package/skills/test-playwright/SKILL.md +354 -0
- package/skills/test-qa/SKILL.md +364 -0
- package/skills/test-qa/references/details.md +268 -0
- package/skills/test-red-team/SKILL.md +387 -0
- package/skills/test-red-team/references/owasp-attack-checklist.md +193 -0
- package/skills/test-unit/SKILL.md +259 -0
- package/skills/test-unit/references/details.md +267 -0
- package/skills/test-visual-regression/SKILL.md +132 -0
- package/skills/thirdparty-emil-design-eng/ATTRIBUTION.md +20 -0
- package/skills/thirdparty-emil-design-eng/SKILL.md +21 -0
- package/skills/thirdparty-emil-design-eng/references/emil-design-eng.md +676 -0
- package/skills/thirdparty-ui-ux-pro-max/ATTRIBUTION.md +22 -0
- package/skills/thirdparty-ui-ux-pro-max/SKILL.md +304 -0
- package/skills/thirdparty-ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/thirdparty-ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/thirdparty-ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/thirdparty-ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/thirdparty-ui-ux-pro-max/data/products.csv +97 -0
- package/skills/thirdparty-ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/thirdparty-ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/thirdparty-ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/thirdparty-ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/thirdparty-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/thirdparty-ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/search.py +114 -0
- package/skills/thirdparty-web-interface-guidelines/ATTRIBUTION.md +23 -0
- package/skills/thirdparty-web-interface-guidelines/SKILL.md +190 -0
- package/skills/workflow-build-feature/SKILL.md +118 -0
- package/skills/workflow-coding-discipline/SKILL.md +140 -0
- package/skills/workflow-environment-ready/SKILL.md +128 -0
- package/skills/workflow-feature-flag/SKILL.md +262 -0
- package/skills/workflow-feedback-to-closure/SKILL.md +165 -0
- package/skills/workflow-fix-and-ship/SKILL.md +136 -0
- package/skills/workflow-git-commit/SKILL.md +200 -0
- package/skills/workflow-green-repo/SKILL.md +166 -0
- package/skills/workflow-grilling/SKILL.md +73 -0
- package/skills/workflow-gtm/SKILL.md +153 -0
- package/skills/workflow-housekeep/SKILL.md +453 -0
- package/skills/workflow-housekeep/references/templates.md +109 -0
- package/skills/workflow-launch-ready/SKILL.md +145 -0
- package/skills/workflow-merge-conflicts/SKILL.md +62 -0
- package/skills/workflow-onboard/SKILL.md +99 -0
- package/skills/workflow-parallel-agents/SKILL.md +164 -0
- package/skills/workflow-pr/SKILL.md +197 -0
- package/skills/workflow-quality-gate/SKILL.md +147 -0
- package/skills/workflow-refactor/SKILL.md +274 -0
- package/skills/workflow-release-prep/SKILL.md +207 -0
- package/skills/workflow-ship-and-observe/SKILL.md +164 -0
- package/skills/workflow-spec-tdd/SKILL.md +141 -0
- package/skills/workflow-spec-tdd/references/spec-template.md +126 -0
- package/skills/workflow-spec-tdd/references/tdd-patterns.md +167 -0
- package/skills-cursor/babysit/SKILL.md +17 -0
- package/skills-cursor/canvas/SKILL.md +142 -0
- package/skills-cursor/canvas/sdk/canvas-tokens.d.ts +235 -0
- package/skills-cursor/canvas/sdk/chart-primitives.d.ts +200 -0
- package/skills-cursor/canvas/sdk/dag-layout.d.ts +102 -0
- package/skills-cursor/canvas/sdk/diff-view.d.ts +130 -0
- package/skills-cursor/canvas/sdk/form-primitives.d.ts +194 -0
- package/skills-cursor/canvas/sdk/hooks.d.ts +117 -0
- package/skills-cursor/canvas/sdk/index.d.ts +47 -0
- package/skills-cursor/canvas/sdk/theme.d.ts +61 -0
- package/skills-cursor/canvas/sdk/todo-list.d.ts +49 -0
- package/skills-cursor/canvas/sdk/ui-primitives.d.ts +549 -0
- package/skills-cursor/canvas/sdk/ui-primitives.test.d.ts +2 -0
- package/skills-cursor/create-hook/SKILL.md +238 -0
- package/skills-cursor/create-rule/SKILL.md +185 -0
- package/skills-cursor/create-skill/SKILL.md +269 -0
- package/skills-cursor/create-skill/references/authoring-guide.md +182 -0
- package/skills-cursor/create-subagent/SKILL.md +228 -0
- package/skills-cursor/migrate-to-skills/SKILL.md +121 -0
- package/skills-cursor/shell/SKILL.md +22 -0
- package/skills-cursor/split-to-prs/SKILL.md +47 -0
- package/skills-cursor/statusline/SKILL.md +193 -0
- package/skills-cursor/update-cli-config/SKILL.md +85 -0
- package/skills-cursor/update-cursor-settings/SKILL.md +137 -0
- package/skills.sh.json +296 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Require frontend changes and their DB/RPC/RLS/storage/secret dependencies to ship and be remotely verified together. Apply when implementing code that reads or writes backend state. Do not apply to plan-* or present-then-stop audits; production data mutation still requires confirmation.
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Full-Stack Ship Discipline
|
|
7
|
+
|
|
8
|
+
A feature is **not done** when the UI compiles — it is done when the flow
|
|
9
|
+
works end-to-end against the **remote** backend the user actually hits. The
|
|
10
|
+
recurring failure this prevents: a migration file authored beside a feature
|
|
11
|
+
is never deployed, the live API 404s, and the bug masquerades as a UI issue.
|
|
12
|
+
|
|
13
|
+
1. **Inventory backend dependencies first.** Before editing components ask:
|
|
14
|
+
does this read/write data, call an RPC, or depend on a table / column /
|
|
15
|
+
function / policy / bucket / secret? Fix those in the same turn.
|
|
16
|
+
2. **Deploy schema, don't just author it.** Supabase: `apply_migration` /
|
|
17
|
+
`execute_sql` on the confirmed `project_id`, then verify in the same turn
|
|
18
|
+
— re-query `information_schema` / `pg_proc` / `pg_policies`, exercise the
|
|
19
|
+
surface as `anon` / `authenticated`, check `query_logs` and `get_advisors`.
|
|
20
|
+
Other stacks: run the real deploy command (`prisma migrate deploy`,
|
|
21
|
+
`drizzle-kit push`, `rails db:migrate`, …) against the confirmed
|
|
22
|
+
environment before the turn ends.
|
|
23
|
+
3. **Keep file and deploy in sync.** SQL applied via MCP also gets a matching
|
|
24
|
+
versioned file in the repo's migrations folder. Do not `git push` unless
|
|
25
|
+
the user asked in this turn.
|
|
26
|
+
4. **Edge functions, secrets, RLS, buckets, and cron jobs count as schema** —
|
|
27
|
+
deploy and configure them with the UI change (`verify_jwt`, CORS, keys).
|
|
28
|
+
5. **Schema vs data.** Deploy schema the user asked to ship without
|
|
29
|
+
re-asking — the request was the approval. Ask before mutating production
|
|
30
|
+
data (`DELETE` / `TRUNCATE` / `UPDATE` on real rows) — it is hard to reverse.
|
|
31
|
+
6. **Do not attach during a present-then-stop pass.** If the active skill is
|
|
32
|
+
`plan-*` or a read-only `audit-*`, emit findings/plan only — do not
|
|
33
|
+
`apply_migration` or deploy until the user approves a phase.
|
|
34
|
+
|
|
35
|
+
Done means: remote objects verified to exist, anon + authenticated paths
|
|
36
|
+
exercised, migration file on disk, and the frontend observed hitting a 200 —
|
|
37
|
+
not a stale 404.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Native RN-monorepo rules (Cursor)
|
|
2
|
+
|
|
3
|
+
Drop-in rules for a React Native + Web monorepo where the developer
|
|
4
|
+
is on **Linux/Windows (no Mac)** and iOS verification is **CI-only**.
|
|
5
|
+
|
|
6
|
+
## What's here
|
|
7
|
+
|
|
8
|
+
| Rule | Auto-attaches when |
|
|
9
|
+
|---|---|
|
|
10
|
+
| `_project.mdc` | always (`alwaysApply: true`) — declares the no-Mac dev env |
|
|
11
|
+
| `native-android.mdc` | `android/**`, `*.kt`, `*.kts`, `*.gradle`, `AndroidManifest.xml` |
|
|
12
|
+
| `native-ios.mdc` | `ios/**`, `*.swift`, `*.m`, `*.mm`, `*.h`, `Podfile`, `Info.plist` |
|
|
13
|
+
| `react-native-js.mdc` | `src/**/*.{ts,tsx}`, `App.tsx`, `index.{js,ts}`, Metro/Babel configs |
|
|
14
|
+
| `web.mdc` | `web/**`, `packages/web/**` |
|
|
15
|
+
|
|
16
|
+
## Install into a project
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
mkdir -p <project>/.cursor/rules
|
|
20
|
+
cp ~/skills/rules/native-rn-monorepo/*.mdc <project>/.cursor/rules/
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Rename the files to match the project's existing naming if needed
|
|
24
|
+
(e.g. prefix `rn-monorepo-` to avoid collisions).
|
|
25
|
+
Claude Code reads `.claude/rules/*.md` instead of `.cursor/rules/`.
|
|
26
|
+
Copy the same files there with a `.md` extension; leave `_project`
|
|
27
|
+
without frontmatter so it loads at session start, and translate each
|
|
28
|
+
`globs:` line into `paths:` frontmatter so the target-specific rules
|
|
29
|
+
load only when a matching file is read.
|
|
30
|
+
|
|
31
|
+
## Customisation required after install
|
|
32
|
+
|
|
33
|
+
Open each rule and:
|
|
34
|
+
|
|
35
|
+
1. Replace path globs to match the actual repo layout (e.g.
|
|
36
|
+
`apps/mobile/android/` instead of `android/` if you use a
|
|
37
|
+
nested-package monorepo).
|
|
38
|
+
2. Fill in `<FILL IN>` placeholders in `react-native-js.mdc` (state
|
|
39
|
+
library, networking client, styling approach) and `web.mdc`
|
|
40
|
+
(framework, styling, state).
|
|
41
|
+
3. Adjust the iOS workflow filename references in any companion
|
|
42
|
+
commands you also install.
|
|
43
|
+
|
|
44
|
+
## Why these rules?
|
|
45
|
+
|
|
46
|
+
Most RN agent guidance assumes the developer can build iOS locally.
|
|
47
|
+
This bundle inverts that assumption:
|
|
48
|
+
|
|
49
|
+
- iOS edits route through CI (`gh workflow run …`) instead of
|
|
50
|
+
Xcode.
|
|
51
|
+
- Verification happens via `/rn-verify` (TS + lint + Android Kotlin
|
|
52
|
+
compile) before triggering the expensive macOS runner.
|
|
53
|
+
- TestFlight is the install target for iOS — there's no simulator
|
|
54
|
+
in the dev loop.
|
|
55
|
+
|
|
56
|
+
This is the cheapest, fastest path for a solo / small-team RN
|
|
57
|
+
project that doesn't justify dedicated Mac hardware.
|
|
58
|
+
|
|
59
|
+
## Companion commands
|
|
60
|
+
|
|
61
|
+
The matching slash-command bundle lives at
|
|
62
|
+
`~/skills/commands/native-rn-monorepo/`. Install both
|
|
63
|
+
together for the full workflow.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Project-wide conventions and developer environment context (RN monorepo, no-Mac dev)
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Project conventions
|
|
7
|
+
|
|
8
|
+
## Targets
|
|
9
|
+
|
|
10
|
+
- `android/` — native Android (Kotlin/Java/Gradle)
|
|
11
|
+
- `ios/` — native iOS (Swift/Obj-C/Xcode)
|
|
12
|
+
- `src/` — shared React Native JS/TS
|
|
13
|
+
- `web/` — web build (separate target)
|
|
14
|
+
|
|
15
|
+
> Adjust these paths if your monorepo uses a different layout
|
|
16
|
+
> (e.g. `apps/mobile/{android,ios,src}/` or `packages/web/`).
|
|
17
|
+
|
|
18
|
+
## Developer environment (no Mac)
|
|
19
|
+
|
|
20
|
+
The developer works on Linux/Windows; there is no Mac. This means:
|
|
21
|
+
|
|
22
|
+
- iOS cannot be built or tested locally, so `xcodebuild`, `pod install`,
|
|
23
|
+
`xcrun simctl`, and Xcode are not options to hand the developer;
|
|
24
|
+
iOS work routes through CI.
|
|
25
|
+
- iOS verification happens entirely on **GitHub Actions CI** with
|
|
26
|
+
macOS runners.
|
|
27
|
+
- iOS distribution happens via **TestFlight** — the developer
|
|
28
|
+
installs builds on a real iPhone from TestFlight after CI uploads
|
|
29
|
+
them.
|
|
30
|
+
- Android local dev uses ADB + Android emulator + Metro for hot
|
|
31
|
+
reload.
|
|
32
|
+
- For iOS-affecting changes, the loop is: edit → verify TS / lint /
|
|
33
|
+
Android compile locally → push → CI builds iOS → TestFlight →
|
|
34
|
+
install on device.
|
|
35
|
+
|
|
36
|
+
When the developer reports an iOS issue, look in shared JS first —
|
|
37
|
+
most "iOS bugs" also reproduce on Android, the only place they can be
|
|
38
|
+
verified locally. If it is genuinely iOS-specific (native bridge,
|
|
39
|
+
`Podfile`, iOS-only code), edit the file and trigger CI instead of
|
|
40
|
+
asking the developer to run `pod install` or open Xcode;
|
|
41
|
+
`/ios-ci-logs` reads the failure.
|
|
42
|
+
|
|
43
|
+
## Hard rules
|
|
44
|
+
|
|
45
|
+
- Identify the target before editing. The path tells you which.
|
|
46
|
+
- Each target's patterns stay in its own tree:
|
|
47
|
+
- No JSX/React in `android/` or `ios/`
|
|
48
|
+
- No native bridge code in `src/`
|
|
49
|
+
- No `react-native` imports in `web/` (unless `react-native-web`
|
|
50
|
+
is configured)
|
|
51
|
+
- No browser APIs (`window`, `document`, `localStorage`) in `src/`
|
|
52
|
+
- Never declare a task complete without running the verification
|
|
53
|
+
command for the affected target.
|
|
54
|
+
- For iOS-affecting changes: declare "ready to ship to CI" — never
|
|
55
|
+
claim "iOS verified" since you cannot.
|
|
56
|
+
- TypeScript strict; do not introduce `any` without an inline
|
|
57
|
+
justification comment.
|
|
58
|
+
- Never disable a lint rule inline without an explanatory comment.
|
|
59
|
+
- Never commit secrets, signing keys, `local.properties`, `.env`,
|
|
60
|
+
or `*.keystore`.
|
|
61
|
+
|
|
62
|
+
## When unsure
|
|
63
|
+
|
|
64
|
+
If the request is ambiguous about which target it touches, read the
|
|
65
|
+
relevant trees first; ask before editing only if the paths still
|
|
66
|
+
don't settle it. A single feature may need parallel changes in
|
|
67
|
+
`src/` (JS) and `android/` + `ios/` (native bridge) — call this out
|
|
68
|
+
explicitly. For iOS native changes, also note that verification
|
|
69
|
+
will require a CI run and explain the wait time.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Native Android (Kotlin/Java/Gradle) conventions
|
|
3
|
+
globs: android/**, **/*.kt, **/*.kts, **/*.gradle, **/AndroidManifest.xml
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Native Android
|
|
8
|
+
|
|
9
|
+
Stack: Kotlin first, Java only when required by RN bridge or
|
|
10
|
+
legacy code.
|
|
11
|
+
Build: Gradle (Kotlin DSL where present).
|
|
12
|
+
Min SDK / target SDK / compile SDK: read `android/build.gradle`;
|
|
13
|
+
change them only on explicit instruction — they cascade through AGP,
|
|
14
|
+
Gradle, and every native dependency.
|
|
15
|
+
|
|
16
|
+
> Adjust `android/` to your repo's actual path (e.g.
|
|
17
|
+
> `apps/mobile/android/`).
|
|
18
|
+
|
|
19
|
+
## Conventions
|
|
20
|
+
|
|
21
|
+
- Package matches what's already declared in `AndroidManifest.xml`
|
|
22
|
+
and `build.gradle` `namespace`.
|
|
23
|
+
- Native modules for RN go under
|
|
24
|
+
`android/app/src/main/java/<package>/modules/`.
|
|
25
|
+
- Each native module = one `*Module.kt` (extends
|
|
26
|
+
`ReactContextBaseJavaModule`) + one `*Package.kt`.
|
|
27
|
+
- Register packages in `MainApplication.kt` unless RN autolinking
|
|
28
|
+
already picks them up.
|
|
29
|
+
- Async: Coroutines + Flow (`AsyncTask` is deprecated since API 30;
|
|
30
|
+
a raw `Thread` has no lifecycle scope). RxJava only if the project
|
|
31
|
+
already uses it.
|
|
32
|
+
- Logging: `android.util.Log` with tag = class name. Wrap verbose
|
|
33
|
+
logs in `BuildConfig.DEBUG` checks.
|
|
34
|
+
- Strings: `android/app/src/main/res/values/strings.xml`. No
|
|
35
|
+
hardcoded user-facing text.
|
|
36
|
+
- Permissions: declare in `AndroidManifest.xml` AND request at
|
|
37
|
+
runtime for dangerous permissions (camera, mic, location, storage
|
|
38
|
+
on older API levels, notifications on API 33+).
|
|
39
|
+
- Compose (if used): follow `MaterialTheme` tokens, no raw
|
|
40
|
+
`Color()` literals in screen code.
|
|
41
|
+
|
|
42
|
+
## Build verification (after any change)
|
|
43
|
+
|
|
44
|
+
Run `/android-build` or directly:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
cd android && ./gradlew :app:assembleDebug --console=plain
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The change is verified only on `BUILD SUCCESSFUL`; on `BUILD FAILED`
|
|
51
|
+
the first error is usually the root cause and later ones cascade.
|
|
52
|
+
|
|
53
|
+
If you hit `OutOfMemoryError` or metaspace errors, add to
|
|
54
|
+
`android/gradle.properties`:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m
|
|
58
|
+
org.gradle.daemon=true
|
|
59
|
+
org.gradle.parallel=true
|
|
60
|
+
org.gradle.caching=true
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Boundaries
|
|
64
|
+
|
|
65
|
+
- Do not add a new native module if the JS-side library can do it.
|
|
66
|
+
- Do not edit `MainActivity.kt` ReactRootView wiring without
|
|
67
|
+
explicit instruction.
|
|
68
|
+
- Do not bump `compileSdk`, `targetSdk`, AGP, or Gradle wrapper
|
|
69
|
+
versions casually — these cascade.
|
|
70
|
+
- Do not commit `local.properties`, `*.keystore`, or
|
|
71
|
+
`google-services.json` if it's gitignored.
|
|
72
|
+
- Do not edit auto-generated files under `android/app/build/`.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Native iOS conventions — verification is CI-only (no Mac locally)
|
|
3
|
+
globs: ios/**, **/*.swift, **/*.m, **/*.mm, **/*.h, **/Podfile, **/Podfile.lock, **/Info.plist
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Native iOS
|
|
8
|
+
|
|
9
|
+
The developer has no Mac: iOS code is written here and verified on CI,
|
|
10
|
+
so local Xcode, `pod install`, and `xcodebuild` are not options to
|
|
11
|
+
suggest.
|
|
12
|
+
|
|
13
|
+
> Adjust `ios/` to your repo's actual path (e.g.
|
|
14
|
+
> `apps/mobile/ios/`).
|
|
15
|
+
|
|
16
|
+
Stack: Swift first, Obj-C only for RN bridge boilerplate.
|
|
17
|
+
Build: Xcode + CocoaPods on the CI runner.
|
|
18
|
+
Deployment target: read `ios/Podfile` `platform :ios, 'X.Y'`; raise it
|
|
19
|
+
only after checking which RN libraries it breaks.
|
|
20
|
+
|
|
21
|
+
## Conventions
|
|
22
|
+
|
|
23
|
+
- Native modules for RN: `*.swift` for logic + `*.m` bridge with
|
|
24
|
+
`RCT_EXTERN_METHOD` declarations.
|
|
25
|
+
- Async: Swift Concurrency (`async`/`await`, `Task`). Combine only
|
|
26
|
+
where the API requires it.
|
|
27
|
+
- No callback pyramids. No `DispatchQueue.main.async` wrapping
|
|
28
|
+
unless updating UIKit on a background queue.
|
|
29
|
+
- Logging: `os_log` or `Logger` with subsystem matching the bundle
|
|
30
|
+
ID.
|
|
31
|
+
- UI: SwiftUI for new screens; programmatic UIKit if existing
|
|
32
|
+
patterns require it.
|
|
33
|
+
- Strings: `Localizable.strings`. No hardcoded user-facing text.
|
|
34
|
+
- Permissions: usage descriptions in `Info.plist`
|
|
35
|
+
(NSCameraUsageDescription, NSMicrophoneUsageDescription, etc.)
|
|
36
|
+
AND runtime requests.
|
|
37
|
+
|
|
38
|
+
## Verification (CI only)
|
|
39
|
+
|
|
40
|
+
After editing iOS files:
|
|
41
|
+
|
|
42
|
+
1. Make the edit.
|
|
43
|
+
2. Suggest `/rn-verify` to catch JS/Android-side issues.
|
|
44
|
+
3. When ready, suggest `/rn-ship-ios` to push and trigger CI.
|
|
45
|
+
4. If CI fails, use `/ios-ci-logs` to diagnose.
|
|
46
|
+
|
|
47
|
+
Special case: if the change is purely in `Info.plist` strings
|
|
48
|
+
(e.g., adding a permission description), it's worth flagging that
|
|
49
|
+
the change is low-risk but must still go through CI.
|
|
50
|
+
|
|
51
|
+
## Boundaries
|
|
52
|
+
|
|
53
|
+
- Do not edit `*.pbxproj` by hand. The developer can't open Xcode
|
|
54
|
+
to fix a corrupted project file.
|
|
55
|
+
- Do not bump `Podfile.lock` unless that's the explicit task —
|
|
56
|
+
`pod install` runs on CI.
|
|
57
|
+
- Do not change `IPHONEOS_DEPLOYMENT_TARGET` without checking
|
|
58
|
+
which RN libs it breaks.
|
|
59
|
+
- Do not commit `.xcuserstate`, `xcuserdata/`, or `ios/build/`.
|
|
60
|
+
- Do not claim iOS changes are verified just because TS passed —
|
|
61
|
+
the developer must trigger CI.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: React Native JS/TS shared layer conventions
|
|
3
|
+
globs: src/**/*.{ts,tsx}, App.tsx, App.ts, index.js, index.ts, metro.config.js, babel.config.js
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# React Native (JS/TS layer)
|
|
8
|
+
|
|
9
|
+
Shared code that runs on both Android and iOS. Does NOT include
|
|
10
|
+
native module code (that lives in `android/` or `ios/`).
|
|
11
|
+
|
|
12
|
+
> Adjust `src/` to your repo's actual path (e.g.
|
|
13
|
+
> `apps/mobile/src/`).
|
|
14
|
+
|
|
15
|
+
## Stack assumptions (verify against `package.json` before assuming)
|
|
16
|
+
|
|
17
|
+
- React Native — version per `package.json`
|
|
18
|
+
- TypeScript strict
|
|
19
|
+
- Navigation: React Navigation
|
|
20
|
+
- State: <FILL IN — Zustand / Redux Toolkit / Jotai / React Query /
|
|
21
|
+
Context>
|
|
22
|
+
- Networking: <FILL IN — fetch / axios / ky>
|
|
23
|
+
- Styling: <FILL IN — StyleSheet.create / styled-components /
|
|
24
|
+
NativeWind>
|
|
25
|
+
|
|
26
|
+
If unsure, grep the codebase before introducing a new pattern.
|
|
27
|
+
|
|
28
|
+
## Conventions
|
|
29
|
+
|
|
30
|
+
- Components in `src/components/`, screens in `src/screens/`,
|
|
31
|
+
hooks in `src/hooks/`, utils in `src/utils/`.
|
|
32
|
+
- One component per file. Named export. File name matches the
|
|
33
|
+
component name (PascalCase.tsx).
|
|
34
|
+
- Hooks prefix `use`; custom hook files start with lowercase `use`.
|
|
35
|
+
- Platform-specific code:
|
|
36
|
+
- Small divergence: `Platform.OS === 'ios'` / `'android'` checks
|
|
37
|
+
at the top of a function
|
|
38
|
+
- Large divergence: `*.ios.tsx` / `*.android.tsx` files with
|
|
39
|
+
shared interface
|
|
40
|
+
- Persistence: `@react-native-async-storage/async-storage`. Never
|
|
41
|
+
`localStorage`.
|
|
42
|
+
- Environment vars: via `react-native-config` or `react-native-dotenv`
|
|
43
|
+
(whichever the repo uses). Never hardcoded.
|
|
44
|
+
- Imports: absolute imports if `tsconfig.json` paths is set up;
|
|
45
|
+
otherwise relative within a feature module.
|
|
46
|
+
|
|
47
|
+
## Hard exclusions
|
|
48
|
+
|
|
49
|
+
- Never import from `react-native-web` in this layer.
|
|
50
|
+
- Never use browser globals (`window`, `document`,
|
|
51
|
+
`navigator.geolocation` directly — use the RN APIs).
|
|
52
|
+
- Never bypass the bridge with raw native calls; if you need native
|
|
53
|
+
behavior, add a typed native module under `android/` and `ios/`.
|
|
54
|
+
|
|
55
|
+
## Verification
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
npx tsc --noEmit
|
|
59
|
+
npm run lint # if a lint script exists
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
For runtime sanity:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
npx react-native start --reset-cache
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Boundaries
|
|
69
|
+
|
|
70
|
+
- Do not commit `.env*` files unless they are the example/template
|
|
71
|
+
(`.env.example`).
|
|
72
|
+
- Do not pin RN to a non-stable version (`0.x.0-rc.x`) without
|
|
73
|
+
explicit instruction.
|
|
74
|
+
- Do not add new dependencies without checking they support both
|
|
75
|
+
iOS and Android and the current RN version.
|
|
76
|
+
- Do not run codegen scripts (`pod install`, `gradle sync`)
|
|
77
|
+
silently — flag them as side effects. Note: `pod install` is
|
|
78
|
+
CI-only here.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Web build conventions (separate from native and RN JS)
|
|
3
|
+
globs: web/**, packages/web/**
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Web build
|
|
8
|
+
|
|
9
|
+
Web-only target; it shares no patterns with the RN/native side.
|
|
10
|
+
Shared logic comes in through an explicit shared package
|
|
11
|
+
(`packages/shared/`), not from the RN `src/` tree.
|
|
12
|
+
|
|
13
|
+
> Adjust the globs to your repo's actual web path (e.g. `app/**`,
|
|
14
|
+
> `components/**` for a Next.js root layout).
|
|
15
|
+
|
|
16
|
+
## Stack assumptions (verify before assuming)
|
|
17
|
+
|
|
18
|
+
- Framework: <FILL IN — Next.js / Vite + React / RN Web>
|
|
19
|
+
- Routing: per the framework's convention
|
|
20
|
+
- Styling: <FILL IN — Tailwind / CSS Modules / styled-components>
|
|
21
|
+
- State: <FILL IN — React Query / Zustand / Redux Toolkit>
|
|
22
|
+
|
|
23
|
+
## Conventions
|
|
24
|
+
|
|
25
|
+
- React + hooks, TypeScript strict.
|
|
26
|
+
- Web-only APIs are fine here: `window`, `document`, `localStorage`,
|
|
27
|
+
`IntersectionObserver`, etc.
|
|
28
|
+
- Server components / SSR (if Next.js): be deliberate about
|
|
29
|
+
`'use client'` boundaries.
|
|
30
|
+
- Images: optimized via the framework's image component, not raw
|
|
31
|
+
`<img>` for above-the-fold content.
|
|
32
|
+
- No `react-native` imports unless `react-native-web` is explicitly
|
|
33
|
+
configured.
|
|
34
|
+
|
|
35
|
+
## Hard exclusions
|
|
36
|
+
|
|
37
|
+
- Never import from the RN `src/` tree unless there's an explicit
|
|
38
|
+
shared package (e.g., `packages/shared/`).
|
|
39
|
+
- Never assume mobile code runs here. RN-only libraries will break
|
|
40
|
+
the web build.
|
|
41
|
+
- Never use native bridge code or `Platform.OS` checks here.
|
|
42
|
+
|
|
43
|
+
## Verification
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
cd web && npm run build
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Or for a quick check without building:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
cd web && npm run typecheck
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Boundaries
|
|
56
|
+
|
|
57
|
+
- Do not duplicate logic that already exists in a shared package —
|
|
58
|
+
import it.
|
|
59
|
+
- Do not introduce a new state library if one is already in use.
|
|
60
|
+
- Do not commit `.next/`, `dist/`, or `build/` output.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Component patterns and UI conventions
|
|
3
|
+
globs: "**/*.tsx"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Component Conventions
|
|
8
|
+
|
|
9
|
+
Performance (LCP images, INP, bfcache) → `web-performance.mdc`.
|
|
10
|
+
|
|
11
|
+
## Reuse First
|
|
12
|
+
- Check `@/components/ui/` before creating any UI element; a second Button or Dialog forks the design system
|
|
13
|
+
- Import existing primitives: Button, Card, Input, Dialog, etc.
|
|
14
|
+
- Use `cn()` from `@/lib/utils` for className composition
|
|
15
|
+
- Use CVA (class-variance-authority) for component variants
|
|
16
|
+
|
|
17
|
+
## Component Structure
|
|
18
|
+
```tsx
|
|
19
|
+
// 1. Imports
|
|
20
|
+
import { cn } from '@/lib/utils'
|
|
21
|
+
|
|
22
|
+
// 2. Types (or import from types.ts if >5 lines)
|
|
23
|
+
interface Props { ... }
|
|
24
|
+
|
|
25
|
+
// 3. Component (named export, not default)
|
|
26
|
+
export function ComponentName({ prop1, prop2, className }: Props) {
|
|
27
|
+
// hooks first
|
|
28
|
+
// derived state
|
|
29
|
+
// handlers
|
|
30
|
+
// render
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Rules
|
|
35
|
+
- Server Components by default — only add `'use client'` at leaf components
|
|
36
|
+
- Max 300 lines per component — extract sub-components if larger
|
|
37
|
+
- Props destructured in function signature
|
|
38
|
+
- No inline styles — use Tailwind classes
|
|
39
|
+
- No business logic in components — extract to hooks or utils
|
|
40
|
+
- All interactive elements need hover, focus, active, and disabled states
|
|
41
|
+
- All async UI needs loading, error, and empty states
|
|
42
|
+
|
|
43
|
+
## Naming
|
|
44
|
+
- Components: `PascalCase.tsx`
|
|
45
|
+
- Hooks: `useCamelCase.ts`
|
|
46
|
+
- Utils: `camelCase.ts`
|
|
47
|
+
- Types: `types.ts` or `camelCase.types.ts`
|
|
48
|
+
|
|
49
|
+
## Accessibility
|
|
50
|
+
- Semantic HTML elements (`<button>`, `<nav>`, `<main>`)
|
|
51
|
+
- All inputs have associated `<label>` or `aria-label`
|
|
52
|
+
- All images have descriptive `alt` text
|
|
53
|
+
- Focus indicators visible on keyboard navigation
|
|
54
|
+
- `aria-live` for dynamic content updates
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Data fetching patterns with TanStack Query, Server Components, and Supabase
|
|
3
|
+
globs: "**/*.ts,**/*.tsx"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Data Fetching Conventions
|
|
8
|
+
|
|
9
|
+
## Decision Matrix
|
|
10
|
+
|
|
11
|
+
| Context | Pattern |
|
|
12
|
+
|---------|---------|
|
|
13
|
+
| Server Component (initial load) | Direct Supabase/Prisma query |
|
|
14
|
+
| Client Component (read) | TanStack Query `useQuery` |
|
|
15
|
+
| Client Component (mutation) | TanStack Query `useMutation` or Server Action |
|
|
16
|
+
| Form submission | Server Action with `useActionState` |
|
|
17
|
+
| Real-time updates | Supabase Realtime subscription |
|
|
18
|
+
| URL-driven state | nuqs `useQueryStates` |
|
|
19
|
+
|
|
20
|
+
## TanStack Query Patterns
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
// Query with proper key factory
|
|
24
|
+
const queryKeys = {
|
|
25
|
+
all: ['features'] as const,
|
|
26
|
+
lists: () => [...queryKeys.all, 'list'] as const,
|
|
27
|
+
list: (filters: Filters) => [...queryKeys.lists(), filters] as const,
|
|
28
|
+
details: () => [...queryKeys.all, 'detail'] as const,
|
|
29
|
+
detail: (id: string) => [...queryKeys.details(), id] as const,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Hook
|
|
33
|
+
export function useFeatures(filters: Filters) {
|
|
34
|
+
return useQuery({
|
|
35
|
+
queryKey: queryKeys.list(filters),
|
|
36
|
+
queryFn: () => fetchFeatures(filters),
|
|
37
|
+
staleTime: 5 * 60 * 1000, // 5 minutes
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Next.js 16 caching
|
|
43
|
+
|
|
44
|
+
Caching is explicit: `'use cache'` + `cacheComponents` (static shell / dynamic
|
|
45
|
+
holes). Do not assume implicit `fetch` caching. Turbopack is default for
|
|
46
|
+
dev and build. React Compiler: `reactCompiler: true`.
|
|
47
|
+
|
|
48
|
+
## Server Component Prefetching
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
// Prefetch in Server Component, hydrate in Client
|
|
52
|
+
import { HydrationBoundary, dehydrate } from '@tanstack/react-query'
|
|
53
|
+
|
|
54
|
+
export default async function Page() {
|
|
55
|
+
const queryClient = new QueryClient()
|
|
56
|
+
await queryClient.prefetchQuery({
|
|
57
|
+
queryKey: ['features'],
|
|
58
|
+
queryFn: fetchFeatures,
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<HydrationBoundary state={dehydrate(queryClient)}>
|
|
63
|
+
<FeatureList />
|
|
64
|
+
</HydrationBoundary>
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Error Handling
|
|
70
|
+
- Always handle `error` state from `useQuery`
|
|
71
|
+
- Show `<ErrorState>` component with retry button
|
|
72
|
+
- Mutations: use `onSuccess` for cache invalidation, `onError` for toast
|
|
73
|
+
|
|
74
|
+
## Caching
|
|
75
|
+
- Set `staleTime` based on data freshness needs
|
|
76
|
+
- Use `queryClient.invalidateQueries` after mutations
|
|
77
|
+
- Use `revalidatePath` / `revalidateTag` in Server Actions
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Git workflow and commit conventions
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Git Conventions
|
|
8
|
+
|
|
9
|
+
## Branch Naming
|
|
10
|
+
```
|
|
11
|
+
feature/description — New functionality
|
|
12
|
+
fix/description — Bug fixes
|
|
13
|
+
chore/description — Maintenance, deps, config
|
|
14
|
+
refactor/description — Code restructuring
|
|
15
|
+
docs/description — Documentation only
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Commit Messages
|
|
19
|
+
Conventional commit format:
|
|
20
|
+
```
|
|
21
|
+
<type>(<scope>): <description>
|
|
22
|
+
|
|
23
|
+
[optional body with details]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Types: `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `chore`, `ci`
|
|
27
|
+
|
|
28
|
+
Examples:
|
|
29
|
+
- `feat(auth): add Google OAuth login`
|
|
30
|
+
- `fix(cart): prevent duplicate items on rapid clicks`
|
|
31
|
+
- `refactor(hooks): extract useDebounce from search component`
|
|
32
|
+
|
|
33
|
+
## Rules
|
|
34
|
+
|
|
35
|
+
- Commit only what the task touched; scratch scripts, ad-hoc test files, and unrelated cleanup stay out (note pre-existing bugs as follow-ups instead)
|
|
36
|
+
- Atomic commits — one logical change per commit
|
|
37
|
+
- Never commit secrets, `.env` files, or API keys
|
|
38
|
+
- Never commit `node_modules/`, `.next/`, build artifacts
|
|
39
|
+
- Run `npm run build` before pushing to main
|
|
40
|
+
- Squash fixup commits before merging PRs
|
|
41
|
+
- Delete feature branches after merge
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Supabase patterns and conventions for this project
|
|
3
|
+
globs: "**/*.ts,**/*.tsx"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Supabase Conventions
|
|
8
|
+
|
|
9
|
+
## Client Usage
|
|
10
|
+
- Use typed Supabase client from `@/lib/supabase`
|
|
11
|
+
- Always use `.select()` with specific columns (never `SELECT *`)
|
|
12
|
+
- Use `.single()` when expecting one row
|
|
13
|
+
- Handle errors: `const { data, error } = await supabase.from(...)`
|
|
14
|
+
|
|
15
|
+
## RLS
|
|
16
|
+
- Enable RLS on every table; without it the publishable/anon key reads and writes every row
|
|
17
|
+
- Test policies after creation with Supabase MCP
|
|
18
|
+
- Use `auth.uid()` for user-scoped access
|
|
19
|
+
- Role-based access: `EXISTS` / `IN (select …)` subqueries against the membership table, or a `security definer` helper when the policy would otherwise recurse; wrap `auth.uid()` and helper functions as `(select auth.uid())` so Postgres evaluates them once per query, not per row
|
|
20
|
+
|
|
21
|
+
## Migrations
|
|
22
|
+
- File naming: `YYYYMMDD_description.sql`
|
|
23
|
+
- Always include `created_at TIMESTAMPTZ DEFAULT now()`
|
|
24
|
+
- Always include `updated_at` with moddatetime trigger
|
|
25
|
+
- Always add indexes on foreign keys
|
|
26
|
+
- After migration: regenerate types with `supabase gen types typescript`
|
|
27
|
+
|
|
28
|
+
## Edge Functions
|
|
29
|
+
- Verify JWT or API key in every function
|
|
30
|
+
- Handle CORS preflight OPTIONS requests
|
|
31
|
+
- Return proper status codes (401, 403, 400, 500)
|
|
32
|
+
- Use `Deno.env.get()` for secrets
|
|
33
|
+
|
|
34
|
+
## Data Fetching
|
|
35
|
+
- Server Components: use Supabase server client directly
|
|
36
|
+
- Client Components: use TanStack Query with Supabase client
|
|
37
|
+
- Real-time: subscribe at component level, cleanup on unmount
|