@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.
Files changed (423) hide show
  1. package/.claude-plugin/marketplace.json +53 -0
  2. package/.claude-plugin/plugin.json +40 -0
  3. package/.cursor-plugin/plugin.json +38 -0
  4. package/.mcp.json +28 -0
  5. package/CHANGELOG.md +1761 -0
  6. package/LICENSE +21 -0
  7. package/NOTICE +13 -0
  8. package/README.md +820 -2
  9. package/SECURITY.md +55 -0
  10. package/agents/code-reviewer.md +60 -0
  11. package/agents/completion-judge.md +89 -0
  12. package/agents/db-migrator.md +125 -0
  13. package/agents/debugger.md +47 -0
  14. package/agents/deploy-checker.md +100 -0
  15. package/agents/perf-monitor.md +74 -0
  16. package/assets/favicon.png +0 -0
  17. package/assets/logo-light.png +0 -0
  18. package/assets/logo.png +0 -0
  19. package/assets/logo.svg +6 -0
  20. package/assets/og.png +0 -0
  21. package/bin/install.mjs +1127 -0
  22. package/bin/kenji.js +2 -0
  23. package/commands/adr.md +17 -0
  24. package/commands/aeo-plan.md +18 -0
  25. package/commands/arch-boundaries.md +17 -0
  26. package/commands/aso-plan.md +18 -0
  27. package/commands/auth-flows.md +19 -0
  28. package/commands/backup-plan.md +17 -0
  29. package/commands/burndown-full.md +25 -0
  30. package/commands/capacitor-plan.md +18 -0
  31. package/commands/codemod-safety.md +22 -0
  32. package/commands/commit.md +18 -0
  33. package/commands/complete-everything.md +40 -0
  34. package/commands/cost-plan.md +19 -0
  35. package/commands/deadcode-plan.md +26 -0
  36. package/commands/deadcode.md +32 -0
  37. package/commands/debug-issue.md +17 -0
  38. package/commands/deps-plan.md +18 -0
  39. package/commands/docs-plan.md +17 -0
  40. package/commands/doctrine.md +19 -0
  41. package/commands/error-plan.md +19 -0
  42. package/commands/feedback-to-closure.md +36 -0
  43. package/commands/fix-issue.md +76 -0
  44. package/commands/gate-logic.md +26 -0
  45. package/commands/green-repo.md +36 -0
  46. package/commands/grill-me.md +19 -0
  47. package/commands/gtm-plan.md +21 -0
  48. package/commands/gtm-weekly.md +17 -0
  49. package/commands/gtm.md +22 -0
  50. package/commands/handoff.md +15 -0
  51. package/commands/housekeep-backlog.md +18 -0
  52. package/commands/housekeep-files.md +22 -0
  53. package/commands/housekeep-gates.md +18 -0
  54. package/commands/instant-nav.md +11 -0
  55. package/commands/integrity-plan.md +19 -0
  56. package/commands/launch-kit.md +16 -0
  57. package/commands/mcp-guide.md +40 -0
  58. package/commands/mobile-plan.md +19 -0
  59. package/commands/native-rn-monorepo/README.md +78 -0
  60. package/commands/native-rn-monorepo/android-build.md +26 -0
  61. package/commands/native-rn-monorepo/android-install.md +32 -0
  62. package/commands/native-rn-monorepo/android-logcat.md +37 -0
  63. package/commands/native-rn-monorepo/ios-ci-logs.md +56 -0
  64. package/commands/native-rn-monorepo/ios-ci-status.md +52 -0
  65. package/commands/native-rn-monorepo/ios-ci-trigger.md +59 -0
  66. package/commands/native-rn-monorepo/rn-reset.md +50 -0
  67. package/commands/native-rn-monorepo/rn-ship-ios.md +67 -0
  68. package/commands/native-rn-monorepo/rn-verify.md +53 -0
  69. package/commands/perf-plan.md +18 -0
  70. package/commands/plan-mode.md +74 -0
  71. package/commands/pr.md +16 -0
  72. package/commands/pricing-plan.md +20 -0
  73. package/commands/privacy-plan.md +18 -0
  74. package/commands/readability.md +12 -0
  75. package/commands/readme.md +15 -0
  76. package/commands/refactor.md +15 -0
  77. package/commands/release-prep.md +17 -0
  78. package/commands/research.md +25 -0
  79. package/commands/responsive-audit.md +21 -0
  80. package/commands/review-code.md +18 -0
  81. package/commands/rls-plan.md +18 -0
  82. package/commands/secrets-plan.md +18 -0
  83. package/commands/security-plan.md +19 -0
  84. package/commands/ship-and-observe.md +36 -0
  85. package/commands/skill-conflicts.md +19 -0
  86. package/commands/slop-plan.md +18 -0
  87. package/commands/stub-plan.md +18 -0
  88. package/commands/test-mutation.md +16 -0
  89. package/commands/test-plan.md +17 -0
  90. package/commands/test.md +29 -0
  91. package/commands/thirdparty-web-interface-guidelines.md +185 -0
  92. package/commands/uiux-plan.md +18 -0
  93. package/commands/uiux.md +45 -0
  94. package/commands/update-deps.md +21 -0
  95. package/commands/validation-plan.md +19 -0
  96. package/commands-portable/fix-issue.md +72 -0
  97. package/commands-portable/plan-mode.md +92 -0
  98. package/commands-portable/research.md +91 -0
  99. package/docs/screenshots/README.md +5 -0
  100. package/docs/screenshots/audit-dark.png +0 -0
  101. package/docs/screenshots/build-dark.png +0 -0
  102. package/docs/screenshots/grill-dark.png +0 -0
  103. package/docs/screenshots/hero-dark.png +0 -0
  104. package/docs/screenshots/hero-light.png +0 -0
  105. package/docs/screenshots/ship-dark.png +0 -0
  106. package/docs/screenshots/src/showcase.html +320 -0
  107. package/hooks/completion-gate.mjs +258 -0
  108. package/hooks/cursor-hooks.json +13 -0
  109. package/hooks/hooks.json +15 -0
  110. package/install.sh +21 -0
  111. package/llms.txt +40 -0
  112. package/mcp/README.md +266 -0
  113. package/mcp/VERSIONS.md +41 -0
  114. package/mcp/mcp-full.json.template +124 -0
  115. package/mcp/mcp.json.template +29 -0
  116. package/mcp/pinned-versions.json +27 -0
  117. package/package.json +93 -4
  118. package/rules/approved-plan-execution.mdc +65 -0
  119. package/rules/full-stack-ship-discipline.mdc +37 -0
  120. package/rules/native-rn-monorepo/README.md +63 -0
  121. package/rules/native-rn-monorepo/_project.mdc +69 -0
  122. package/rules/native-rn-monorepo/native-android.mdc +72 -0
  123. package/rules/native-rn-monorepo/native-ios.mdc +61 -0
  124. package/rules/native-rn-monorepo/react-native-js.mdc +78 -0
  125. package/rules/native-rn-monorepo/web.mdc +60 -0
  126. package/rules/project-starter/components.mdc +54 -0
  127. package/rules/project-starter/data-fetching.mdc +77 -0
  128. package/rules/project-starter/git.mdc +41 -0
  129. package/rules/project-starter/supabase.mdc +37 -0
  130. package/rules/project-starter/tailwind.mdc +48 -0
  131. package/rules/project-starter/typescript.mdc +36 -0
  132. package/rules/project-starter/web-performance.mdc +42 -0
  133. package/rules/senior-engineer.mdc +30 -0
  134. package/rules/shell-first-search.mdc +19 -0
  135. package/rules/skill-workflows.mdc +35 -0
  136. package/rules/verification-before-completion.mdc +57 -0
  137. package/skills/audit-accessibility/SKILL.md +441 -0
  138. package/skills/audit-agent-speed/SKILL.md +181 -0
  139. package/skills/audit-agent-speed/scripts/stop-typecheck.mjs +151 -0
  140. package/skills/audit-analytics/SKILL.md +138 -0
  141. package/skills/audit-auth-flows/SKILL.md +267 -0
  142. package/skills/audit-backend-architecture/SKILL.md +266 -0
  143. package/skills/audit-backend-architecture/references/patterns.md +386 -0
  144. package/skills/audit-bundle-size/SKILL.md +296 -0
  145. package/skills/audit-cicd/SKILL.md +218 -0
  146. package/skills/audit-code-quality/SKILL.md +314 -0
  147. package/skills/audit-code-review/SKILL.md +289 -0
  148. package/skills/audit-codemod-safety/SKILL.md +159 -0
  149. package/skills/audit-db-schema/SKILL.md +465 -0
  150. package/skills/audit-db-schema/references/details.md +110 -0
  151. package/skills/audit-doctrine/SKILL.md +189 -0
  152. package/skills/audit-env-parity/SKILL.md +133 -0
  153. package/skills/audit-fe-api/SKILL.md +458 -0
  154. package/skills/audit-gate-logic/SKILL.md +219 -0
  155. package/skills/audit-i18n/SKILL.md +339 -0
  156. package/skills/audit-infra-cost/SKILL.md +142 -0
  157. package/skills/audit-langfuse-llm/SKILL.md +468 -0
  158. package/skills/audit-langfuse-llm/references/details.md +226 -0
  159. package/skills/audit-llm-security/SKILL.md +147 -0
  160. package/skills/audit-monetization-iap/SKILL.md +137 -0
  161. package/skills/audit-payment-system/SKILL.md +268 -0
  162. package/skills/audit-payment-system/references/checklist.md +283 -0
  163. package/skills/audit-performance/SKILL.md +383 -0
  164. package/skills/audit-performance/references/loading-priority-2026.md +81 -0
  165. package/skills/audit-realworld/SKILL.md +287 -0
  166. package/skills/audit-registry-listing/SKILL.md +122 -0
  167. package/skills/audit-resilience/SKILL.md +154 -0
  168. package/skills/audit-responsive/SKILL.md +221 -0
  169. package/skills/audit-responsive/references/checklist.md +166 -0
  170. package/skills/audit-security/SKILL.md +289 -0
  171. package/skills/audit-skill-conflicts/SKILL.md +178 -0
  172. package/skills/audit-ui-states/SKILL.md +146 -0
  173. package/skills/audit-uiux-design-system/SKILL.md +475 -0
  174. package/skills/audit-uiux-design-system/references/details.md +71 -0
  175. package/skills/audit-ux/SKILL.md +379 -0
  176. package/skills/audit-ux/references/details.md +245 -0
  177. package/skills/audit-ux-journeys/SKILL.md +215 -0
  178. package/skills/audit-ux-journeys/references/checklist.md +179 -0
  179. package/skills/backend-db-performance/SKILL.md +441 -0
  180. package/skills/backend-error-handling/SKILL.md +489 -0
  181. package/skills/backend-error-handling/references/details.md +58 -0
  182. package/skills/backend-observability/SKILL.md +88 -0
  183. package/skills/backend-patterns/SKILL.md +499 -0
  184. package/skills/backend-patterns/references/architecture-patterns.md +298 -0
  185. package/skills/backend-realtime/SKILL.md +403 -0
  186. package/skills/backend-realtime/references/patterns.md +74 -0
  187. package/skills/burndown-full/SKILL.md +174 -0
  188. package/skills/complete-everything/SKILL.md +295 -0
  189. package/skills/data-pipeline/SKILL.md +109 -0
  190. package/skills/data-visualization/SKILL.md +488 -0
  191. package/skills/debug-error/SKILL.md +322 -0
  192. package/skills/debug-fe-be-integration/SKILL.md +459 -0
  193. package/skills/debug-sentry-monitor/SKILL.md +497 -0
  194. package/skills/debug-sentry-monitor/references/details.md +165 -0
  195. package/skills/deploy-npm/SKILL.md +394 -0
  196. package/skills/deploy-npm/references/example-mushi-mushi.md +52 -0
  197. package/skills/deploy-verify/SKILL.md +489 -0
  198. package/skills/design-api/SKILL.md +379 -0
  199. package/skills/design-canvas/SKILL.md +155 -0
  200. package/skills/design-email/SKILL.md +370 -0
  201. package/skills/design-frontend/SKILL.md +143 -0
  202. package/skills/design-generative-art/SKILL.md +474 -0
  203. package/skills/design-mobile-first/SKILL.md +506 -0
  204. package/skills/design-motion/SKILL.md +333 -0
  205. package/skills/design-motion/references/delight-interactions.md +191 -0
  206. package/skills/design-prd/SKILL.md +443 -0
  207. package/skills/design-system/SKILL.md +457 -0
  208. package/skills/design-theme/SKILL.md +226 -0
  209. package/skills/design-theme/themes/tsumagoi-ranch.md +150 -0
  210. package/skills/docs-adr/SKILL.md +168 -0
  211. package/skills/docs-coauthor/SKILL.md +368 -0
  212. package/skills/docs-comparison-pages/SKILL.md +117 -0
  213. package/skills/docs-domain-modeling/SKILL.md +97 -0
  214. package/skills/docs-launch-kit/SKILL.md +139 -0
  215. package/skills/docs-writer/SKILL.md +469 -0
  216. package/skills/enhance-agent-guardrails/SKILL.md +164 -0
  217. package/skills/enhance-arch-boundaries/SKILL.md +154 -0
  218. package/skills/enhance-capacitor-ui/SKILL.md +463 -0
  219. package/skills/enhance-capacitor-ui/references/details.md +750 -0
  220. package/skills/enhance-email-deliverability/SKILL.md +143 -0
  221. package/skills/enhance-growth-loops/SKILL.md +122 -0
  222. package/skills/enhance-lifecycle-email/SKILL.md +130 -0
  223. package/skills/enhance-motion/SKILL.md +193 -0
  224. package/skills/enhance-onboarding/SKILL.md +148 -0
  225. package/skills/enhance-pwa/SKILL.md +304 -0
  226. package/skills/enhance-readability/SKILL.md +146 -0
  227. package/skills/enhance-readme/SKILL.md +496 -0
  228. package/skills/enhance-readme/package-lock.json +187 -0
  229. package/skills/enhance-readme/package.json +17 -0
  230. package/skills/enhance-readme/scripts/generate-readme-blocks.mjs +199 -0
  231. package/skills/enhance-readme/scripts/record-readme-tour.mjs +442 -0
  232. package/skills/enhance-skill-prompts/SKILL.md +167 -0
  233. package/skills/enhance-skill-prompts/references/exemplar-audit-auth-flows.md +311 -0
  234. package/skills/enhance-web-conversion/SKILL.md +155 -0
  235. package/skills/enhance-web-forms/SKILL.md +154 -0
  236. package/skills/enhance-web-instant-nav/SKILL.md +138 -0
  237. package/skills/enhance-web-instant-nav/references/bfcache-blockers.md +23 -0
  238. package/skills/enhance-web-instant-nav/references/early-hints.md +33 -0
  239. package/skills/enhance-web-instant-nav/references/speculation-rules.md +44 -0
  240. package/skills/enhance-web-landing/SKILL.md +459 -0
  241. package/skills/enhance-web-landing/references/details.md +773 -0
  242. package/skills/enhance-web-redesign/SKILL.md +228 -0
  243. package/skills/enhance-web-seo/SKILL.md +276 -0
  244. package/skills/enhance-web-ui/SKILL.md +473 -0
  245. package/skills/enhance-web-ui/references/details.md +674 -0
  246. package/skills/enhance-web-ux/HEURISTICS.md +242 -0
  247. package/skills/enhance-web-ux/PATTERNS.md +375 -0
  248. package/skills/enhance-web-ux/SKILL.md +464 -0
  249. package/skills/enhance-web-ux/examples.md +222 -0
  250. package/skills/enhance-web-ux/references/details.md +406 -0
  251. package/skills/enhance-web-web3d/SKILL.md +397 -0
  252. package/skills/enhance-web-web3d/references/css-canvas-effects.md +180 -0
  253. package/skills/handoff/SKILL.md +66 -0
  254. package/skills/housekeep-backlog/SKILL.md +149 -0
  255. package/skills/housekeep-dead-code/SKILL.md +387 -0
  256. package/skills/housekeep-dead-code/references/ratchet-ci.md +205 -0
  257. package/skills/housekeep-dead-code/references/supabase-hygiene.md +152 -0
  258. package/skills/housekeep-design/SKILL.md +207 -0
  259. package/skills/housekeep-files/SKILL.md +220 -0
  260. package/skills/housekeep-files/references/naming-and-catalog.md +86 -0
  261. package/skills/housekeep-files/scripts/housekeep-files.ps1 +360 -0
  262. package/skills/housekeep-files/scripts/housekeep-files.sh +238 -0
  263. package/skills/housekeep-gates/SKILL.md +174 -0
  264. package/skills/iterate-agent-harness/SKILL.md +137 -0
  265. package/skills/iterate-gtm-weekly/SKILL.md +103 -0
  266. package/skills/iterate-post-launch/SKILL.md +292 -0
  267. package/skills/meta-mcp-builder/SKILL.md +313 -0
  268. package/skills/meta-skill-creator/SKILL.md +304 -0
  269. package/skills/mobile-capacitor-platform/SKILL.md +104 -0
  270. package/skills/mobile-emulator-start/SKILL.md +296 -0
  271. package/skills/mobile-emulator-test/SKILL.md +491 -0
  272. package/skills/mobile-emulator-test/references/details.md +478 -0
  273. package/skills/mobile-rn-performance/SKILL.md +107 -0
  274. package/skills/mobile-rn-screen/SKILL.md +476 -0
  275. package/skills/mobile-rn-screen/references/details.md +785 -0
  276. package/skills/mushi-health/SKILL.md +206 -0
  277. package/skills/mushi-integration/SKILL.md +257 -0
  278. package/skills/plan-aeo-readiness/SKILL.md +166 -0
  279. package/skills/plan-antislop/SKILL.md +281 -0
  280. package/skills/plan-aso/SKILL.md +149 -0
  281. package/skills/plan-backup-dr/SKILL.md +131 -0
  282. package/skills/plan-capacitor-hardening/SKILL.md +217 -0
  283. package/skills/plan-data-integrity/SKILL.md +187 -0
  284. package/skills/plan-dead-code/SKILL.md +386 -0
  285. package/skills/plan-dead-code/references/knip-config.md +214 -0
  286. package/skills/plan-dead-code/references/output-templates.md +133 -0
  287. package/skills/plan-dead-code/references/preservation-contract.md +50 -0
  288. package/skills/plan-dead-code/references/residue-greps.md +84 -0
  289. package/skills/plan-dependency-provenance/SKILL.md +200 -0
  290. package/skills/plan-docs-sync/SKILL.md +143 -0
  291. package/skills/plan-docs-sync/references/drift-taxonomy.md +43 -0
  292. package/skills/plan-docs-sync/references/output-templates.md +33 -0
  293. package/skills/plan-docs-sync/references/preservation-contract.md +17 -0
  294. package/skills/plan-error-handling/SKILL.md +205 -0
  295. package/skills/plan-gtm/SKILL.md +276 -0
  296. package/skills/plan-gtm/references/benchmarks-2026.md +183 -0
  297. package/skills/plan-input-validation/SKILL.md +179 -0
  298. package/skills/plan-llm-cost-guardrails/SKILL.md +176 -0
  299. package/skills/plan-mobile-readiness/SKILL.md +171 -0
  300. package/skills/plan-perf-audit/SKILL.md +145 -0
  301. package/skills/plan-perf-audit/references/audit-scope.md +51 -0
  302. package/skills/plan-perf-audit/references/output-templates.md +33 -0
  303. package/skills/plan-perf-audit/references/preservation-contract.md +13 -0
  304. package/skills/plan-pricing/SKILL.md +173 -0
  305. package/skills/plan-privacy-compliance/SKILL.md +148 -0
  306. package/skills/plan-rls-audit/SKILL.md +231 -0
  307. package/skills/plan-secrets-audit/SKILL.md +181 -0
  308. package/skills/plan-security-audit/SKILL.md +168 -0
  309. package/skills/plan-security-audit/references/output-templates.md +36 -0
  310. package/skills/plan-security-audit/references/owasp-supabase-scope.md +55 -0
  311. package/skills/plan-security-audit/references/preservation-contract.md +18 -0
  312. package/skills/plan-stub-checker/SKILL.md +216 -0
  313. package/skills/plan-stub-checker/references/detection-methodology.md +75 -0
  314. package/skills/plan-stub-checker/references/detection-taxonomy.md +34 -0
  315. package/skills/plan-stub-checker/references/output-templates.md +63 -0
  316. package/skills/plan-stub-checker/references/preservation-contract.md +24 -0
  317. package/skills/plan-test-coverage/SKILL.md +170 -0
  318. package/skills/plan-test-coverage/references/methodology.md +54 -0
  319. package/skills/plan-test-coverage/references/output-templates.md +34 -0
  320. package/skills/plan-test-coverage/references/preservation-contract.md +15 -0
  321. package/skills/plan-uiux-unification/SKILL.md +230 -0
  322. package/skills/plan-uiux-unification/references/output-templates.md +67 -0
  323. package/skills/plan-uiux-unification/references/phase-workbook.md +85 -0
  324. package/skills/plan-uiux-unification/references/preservation-contract.md +24 -0
  325. package/skills/protocol-browser-anti-stall/SKILL.md +211 -0
  326. package/skills/protocol-browser-anti-stall/references/mcp-to-cli-map.md +113 -0
  327. package/skills/protocol-browser-anti-stall/references/playwright-session-coordination.md +170 -0
  328. package/skills/research/SKILL.md +422 -0
  329. package/skills/test-exploratory/SKILL.md +165 -0
  330. package/skills/test-exploratory/references/charter-template.md +29 -0
  331. package/skills/test-load/SKILL.md +126 -0
  332. package/skills/test-mutation/SKILL.md +160 -0
  333. package/skills/test-playwright/SKILL.md +354 -0
  334. package/skills/test-qa/SKILL.md +364 -0
  335. package/skills/test-qa/references/details.md +268 -0
  336. package/skills/test-red-team/SKILL.md +387 -0
  337. package/skills/test-red-team/references/owasp-attack-checklist.md +193 -0
  338. package/skills/test-unit/SKILL.md +259 -0
  339. package/skills/test-unit/references/details.md +267 -0
  340. package/skills/test-visual-regression/SKILL.md +132 -0
  341. package/skills/thirdparty-emil-design-eng/ATTRIBUTION.md +20 -0
  342. package/skills/thirdparty-emil-design-eng/SKILL.md +21 -0
  343. package/skills/thirdparty-emil-design-eng/references/emil-design-eng.md +676 -0
  344. package/skills/thirdparty-ui-ux-pro-max/ATTRIBUTION.md +22 -0
  345. package/skills/thirdparty-ui-ux-pro-max/SKILL.md +304 -0
  346. package/skills/thirdparty-ui-ux-pro-max/data/charts.csv +26 -0
  347. package/skills/thirdparty-ui-ux-pro-max/data/colors.csv +97 -0
  348. package/skills/thirdparty-ui-ux-pro-max/data/icons.csv +101 -0
  349. package/skills/thirdparty-ui-ux-pro-max/data/landing.csv +31 -0
  350. package/skills/thirdparty-ui-ux-pro-max/data/products.csv +97 -0
  351. package/skills/thirdparty-ui-ux-pro-max/data/react-performance.csv +45 -0
  352. package/skills/thirdparty-ui-ux-pro-max/data/stacks/astro.csv +54 -0
  353. package/skills/thirdparty-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  354. package/skills/thirdparty-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  355. package/skills/thirdparty-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  356. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  357. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  358. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  359. package/skills/thirdparty-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  360. package/skills/thirdparty-ui-ux-pro-max/data/stacks/react.csv +54 -0
  361. package/skills/thirdparty-ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  362. package/skills/thirdparty-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  363. package/skills/thirdparty-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  364. package/skills/thirdparty-ui-ux-pro-max/data/stacks/vue.csv +50 -0
  365. package/skills/thirdparty-ui-ux-pro-max/data/styles.csv +68 -0
  366. package/skills/thirdparty-ui-ux-pro-max/data/typography.csv +58 -0
  367. package/skills/thirdparty-ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  368. package/skills/thirdparty-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  369. package/skills/thirdparty-ui-ux-pro-max/data/web-interface.csv +31 -0
  370. package/skills/thirdparty-ui-ux-pro-max/scripts/core.py +253 -0
  371. package/skills/thirdparty-ui-ux-pro-max/scripts/design_system.py +1067 -0
  372. package/skills/thirdparty-ui-ux-pro-max/scripts/search.py +114 -0
  373. package/skills/thirdparty-web-interface-guidelines/ATTRIBUTION.md +23 -0
  374. package/skills/thirdparty-web-interface-guidelines/SKILL.md +190 -0
  375. package/skills/workflow-build-feature/SKILL.md +118 -0
  376. package/skills/workflow-coding-discipline/SKILL.md +140 -0
  377. package/skills/workflow-environment-ready/SKILL.md +128 -0
  378. package/skills/workflow-feature-flag/SKILL.md +262 -0
  379. package/skills/workflow-feedback-to-closure/SKILL.md +165 -0
  380. package/skills/workflow-fix-and-ship/SKILL.md +136 -0
  381. package/skills/workflow-git-commit/SKILL.md +200 -0
  382. package/skills/workflow-green-repo/SKILL.md +166 -0
  383. package/skills/workflow-grilling/SKILL.md +73 -0
  384. package/skills/workflow-gtm/SKILL.md +153 -0
  385. package/skills/workflow-housekeep/SKILL.md +453 -0
  386. package/skills/workflow-housekeep/references/templates.md +109 -0
  387. package/skills/workflow-launch-ready/SKILL.md +145 -0
  388. package/skills/workflow-merge-conflicts/SKILL.md +62 -0
  389. package/skills/workflow-onboard/SKILL.md +99 -0
  390. package/skills/workflow-parallel-agents/SKILL.md +164 -0
  391. package/skills/workflow-pr/SKILL.md +197 -0
  392. package/skills/workflow-quality-gate/SKILL.md +147 -0
  393. package/skills/workflow-refactor/SKILL.md +274 -0
  394. package/skills/workflow-release-prep/SKILL.md +207 -0
  395. package/skills/workflow-ship-and-observe/SKILL.md +164 -0
  396. package/skills/workflow-spec-tdd/SKILL.md +141 -0
  397. package/skills/workflow-spec-tdd/references/spec-template.md +126 -0
  398. package/skills/workflow-spec-tdd/references/tdd-patterns.md +167 -0
  399. package/skills-cursor/babysit/SKILL.md +17 -0
  400. package/skills-cursor/canvas/SKILL.md +142 -0
  401. package/skills-cursor/canvas/sdk/canvas-tokens.d.ts +235 -0
  402. package/skills-cursor/canvas/sdk/chart-primitives.d.ts +200 -0
  403. package/skills-cursor/canvas/sdk/dag-layout.d.ts +102 -0
  404. package/skills-cursor/canvas/sdk/diff-view.d.ts +130 -0
  405. package/skills-cursor/canvas/sdk/form-primitives.d.ts +194 -0
  406. package/skills-cursor/canvas/sdk/hooks.d.ts +117 -0
  407. package/skills-cursor/canvas/sdk/index.d.ts +47 -0
  408. package/skills-cursor/canvas/sdk/theme.d.ts +61 -0
  409. package/skills-cursor/canvas/sdk/todo-list.d.ts +49 -0
  410. package/skills-cursor/canvas/sdk/ui-primitives.d.ts +549 -0
  411. package/skills-cursor/canvas/sdk/ui-primitives.test.d.ts +2 -0
  412. package/skills-cursor/create-hook/SKILL.md +238 -0
  413. package/skills-cursor/create-rule/SKILL.md +185 -0
  414. package/skills-cursor/create-skill/SKILL.md +269 -0
  415. package/skills-cursor/create-skill/references/authoring-guide.md +182 -0
  416. package/skills-cursor/create-subagent/SKILL.md +228 -0
  417. package/skills-cursor/migrate-to-skills/SKILL.md +121 -0
  418. package/skills-cursor/shell/SKILL.md +22 -0
  419. package/skills-cursor/split-to-prs/SKILL.md +47 -0
  420. package/skills-cursor/statusline/SKILL.md +193 -0
  421. package/skills-cursor/update-cli-config/SKILL.md +85 -0
  422. package/skills-cursor/update-cursor-settings/SKILL.md +137 -0
  423. package/skills.sh.json +296 -0
@@ -0,0 +1,397 @@
1
+ ---
2
+ name: enhance-web-web3d
3
+ description: >
4
+ Add purposeful 3D/WebGL and scroll choreography to an existing site with
5
+ Three.js/R3F, GSAP, or Motion. Use when "add 3D", "WebGL hero", "React Three
6
+ Fiber", or "scroll-driven 3D". Motion without 3D → enhance-motion.
7
+ license: MIT
8
+ ---
9
+
10
+ > Surface router: `/uiux`. You are here: `enhance-web-web3d`. Native iOS/Android (SwiftUI / Compose, no web layer) is out of scope — use Apple HIG / Material directly.
11
+
12
+ # Enhance Web with 3D & Cinematic Motion
13
+
14
+ **Degree of freedom: MIXED.** Fit and stack choice `[HIGH freedom]`; budget, fallbacks, SSR, and verify `[LOW freedom — run exactly]`.
15
+
16
+ Add Three.js / React Three Fiber scenes, GSAP scroll choreography, and physics
17
+ motion to an **existing** web project — without rewriting it, breaking the
18
+ build, blowing the performance budget, or shipping a blank canvas to users on
19
+ weak devices or with WebGL disabled.
20
+
21
+ This is **not** a "drop a spinning cube on the homepage" skill. It audits the
22
+ repo first, decides whether 3D actually serves the page, picks the smallest
23
+ library combination that fits the existing stack, and ships the effect with
24
+ fallbacks and reduced-motion support from the first commit.
25
+
26
+ > **For greenfield / from-scratch 3D library mechanics** (raw Three.js scene
27
+ > setup, R3F primitives, shader authoring), this skill points you at the
28
+ > deeper references but stays focused on *integrating into a live repo*. For
29
+ > pure visual composition (no 3D) use `enhance-web-ui`; for anti-slop landing
30
+ > pages use `enhance-web-landing`.
31
+
32
+ ## How to reason
33
+
34
+ 1. **Fit** — does 3D serve comprehension/brand, or is it decoration?
35
+ 2. **Choose** — minimal stack from the matrix; one system per property
36
+ 3. **Integrate** — budget + reduced-motion + no-WebGL + `ssr: false` in the same change
37
+ 4. **Prove** — mid-tier FPS, fallbacks, LCP not waiting on WebGL
38
+
39
+ ## Worked example
40
+
41
+ > **Fit:** cookware PDP; users decide from the pot shape — a viewer earns cost; a torus knot does not.
42
+ > **Choose:** Next.js + R3F + drei; Motion overlays; no GSAP (no scroll story).
43
+ > **Integrate:** `dynamic(..., { ssr: false })`; poster as LCP; `frameloop="demand"`; Draco model.
44
+ > **Prove:** reduced-motion shows poster; WebGL-off shows the same; LCP unchanged.
45
+
46
+ ## Self-critique before reporting
47
+
48
+ - **Fit passed** — non-3D alternative was considered and rejected for a reason
49
+ - **Same change** — fallbacks, reduced-motion, and SSR safety shipped with the scene
50
+ - **No blank canvas** — no-WebGL and mid-tier paths verified
51
+ - **Right owner** — no-3D polish → `enhance-web-ui`; motion without 3D → `enhance-motion`; anti-slop landing → `enhance-web-landing`
52
+
53
+ ---
54
+
55
+ ## How This Works
56
+
57
+ When applied to an existing project, follow this sequence. **Never skip the
58
+ audit and jump to code** — that is how 3D ends up as a 4 MB hero nobody on
59
+ mobile can load.
60
+
61
+ 1. **Scan** — Read the codebase. Identify framework, rendering model (SSR /
62
+ SSG / SPA), styling system, existing motion/3D libraries, build tool, and
63
+ the current performance baseline.
64
+ 2. **Fit check** — Decide *whether* 3D/cinematic motion belongs on this
65
+ surface and *where*. Reject 3D-for-3D's-sake.
66
+ 3. **Diagnose** — Map concrete opportunities (hero, product viewer,
67
+ scroll-story, background ambience) and the constraints around each.
68
+ 4. **Choose stack** — Use the Decision Matrix to pick the minimal library
69
+ combination that fits the existing stack.
70
+ 5. **Implement** — Build with the chosen pattern, wiring performance budget,
71
+ fallbacks, reduced-motion, and SSR/hydration safety in the same change.
72
+ 6. **Verify** — Profile on a mid-tier device, test the no-WebGL and
73
+ reduced-motion paths, confirm Lighthouse / Web Vitals didn't regress.
74
+
75
+ ---
76
+
77
+ ## Phase 0: Fit Check (does 3D belong here?) [HIGH freedom]
78
+
79
+ Before touching any library, answer these. If you can't justify the effect,
80
+ the right move is `enhance-web-ui` or `enhance-web-landing`, not WebGL.
81
+
82
+ - [ ] **Does the effect serve comprehension or brand, or is it decoration?**
83
+ A product configurator, a data-driven globe, a hero that shows the actual
84
+ product in 3D — these earn their cost. A generic floating-blob background
85
+ usually does not.
86
+ - [ ] **What is the performance budget?** A marketing landing page can spend
87
+ more than a dashboard a user opens 40× a day. Name the budget (KB, LCP, INP,
88
+ target FPS) *before* designing.
89
+ - [ ] **Who is the audience / device mix?** Heavy mobile traffic → design the
90
+ mobile fallback first, then enhance up. Desktop-only internal tool → you
91
+ have more headroom.
92
+ - [ ] **Is there a non-3D alternative that's 90% as good for 10% of the cost?**
93
+ A pre-rendered `<video>`, an animated SVG, a CSS scroll effect, or a
94
+ high-quality image sequence often beats live WebGL. The DEV community lesson
95
+ holds: a scripted DOM/GSAP walkthrough can be **under 40 KB gzip vs a
96
+ multi-MB MP4/GIF** — reach for real WebGL only when interactivity or true 3D
97
+ depth is the point.
98
+ - [ ] **Reduced-motion + no-WebGL story exists?** If you can't describe what a
99
+ `prefers-reduced-motion` user and a no-WebGL user see, you're not ready to
100
+ build.
101
+
102
+ > **Anti-slop guardrail.** A spinning torus knot, a particle field with no
103
+ > meaning, or a tilt-on-mouse card that fights scrolling are the 3D equivalent
104
+ > of the purple-gradient hero. Motion and depth must explain, demo, or brand —
105
+ > never just sparkle.
106
+
107
+ ---
108
+
109
+ ## Phase 1: Recon — Learn the Existing Stack [HIGH freedom]
110
+
111
+ Read the entry point, layout, and any existing animated component. Then record:
112
+
113
+ ```
114
+ FRAMEWORK: [Next.js (app/pages?) / Vite+React / Astro / Remix / SvelteKit / vanilla]
115
+ RENDER MODEL: [SSR / SSG / CSR — matters for hydration + dynamic import]
116
+ REACT?: [yes → R3F is on the table | no → vanilla three.js]
117
+ STYLING: [Tailwind v3/v4 / CSS modules / styled-components / vanilla]
118
+ BUILD TOOL: [Vite / Webpack / Turbopack / esbuild — affects code-split + worker setup]
119
+ EXISTING MOTION: [framer-motion/motion? GSAP? Lenis? CSS only?]
120
+ EXISTING 3D: [three? @react-three/fiber? drei? none?]
121
+ PERF BASELINE: [current LCP / bundle size / Lighthouse, if measurable]
122
+ ASSET PIPELINE: [is there a /public model dir? a CDN? Draco/KTX2 already set up?]
123
+ ```
124
+
125
+ Check the dependency manifest **before importing anything** — reuse what's
126
+ installed, match the installed major version (three, @react-three/fiber, gsap,
127
+ motion vs framer-motion), and never hallucinate an import.
128
+
129
+ Search for prior art and guard comments:
130
+
131
+ ```bash
132
+ rg -l "three|@react-three|gsap|ScrollTrigger|Lenis|framer-motion|\"motion\"" --type ts --type tsx package.json
133
+ rg -n "useGSAP|registerPlugin|<Canvas|useFrame|frameloop" src/
134
+ rg -n "prefers-reduced-motion|matchMedia|DO NOT|deprecated" src/
135
+ ```
136
+
137
+ ---
138
+
139
+ ## Phase 2: Opportunity Audit — Where 3D Earns Its Place [HIGH freedom]
140
+
141
+ Map the page to one (rarely more than two) of these archetypes. Each has a
142
+ different cost/benefit and a different stack.
143
+
144
+ | Opportunity | What it is | Earns its cost when | Default stack |
145
+ |-------------|-----------|---------------------|---------------|
146
+ | **Hero scene** | First-fold 3D centerpiece | The product *is* visual/physical | Three.js or R3F + a light entrance tween |
147
+ | **Product viewer / configurator** | Rotate/zoom/customize a model | Users decide based on the object | R3F + drei (`OrbitControls`, `Environment`) |
148
+ | **Scroll story (pinned)** | Camera/model animates as you scroll | There's a narrative or process to reveal | GSAP `ScrollTrigger` (pin + scrub) driving the scene |
149
+ | **Ambient background** | Subtle depth behind content | Brand texture, low-distraction | Cheap shader / instanced particles, `frameloop="demand"` |
150
+ | **Data viz in 3D** | Globe, graph, point cloud | The data is inherently spatial | R3F + instancing; or 2D if it reads better flat |
151
+ | **Micro-interaction** | Hover/drag physics on a card | Delight on a key CTA | Motion / React Spring (often no Three.js at all) |
152
+
153
+ > **Rule:** one focal 3D moment per page beats five. If everything moves,
154
+ > nothing is special — the same hierarchy logic as `enhance-web-ui` applies in
155
+ > three dimensions.
156
+
157
+ ---
158
+
159
+ ## Phase 3: Decision Matrix — Pick the Minimal Stack [HIGH freedom]
160
+
161
+ GSAP and all of its plugins (ScrollTrigger, SplitText, MorphSVG, …) are free for every use, so licensing does not constrain the choice.
162
+
163
+ | Use case | Recommended stack | Rationale |
164
+ |----------|-------------------|-----------|
165
+ | Marketing page, scroll-driven 3D | Three.js (or R3F) + **GSAP ScrollTrigger** + HTML/Motion overlays | GSAP owns scroll orchestration; clean layer separation |
166
+ | React app, interactive 3D viewer | **R3F** + drei + Motion | Declarative, state-driven, component-based |
167
+ | Timeline-choreographed sequences | **R3F + GSAP** (timeline in `useGSAP`) | GSAP timeline control over R3F objects |
168
+ | Physics-y drag / momentum / gestures | **R3F + React Spring** (`@react-spring/three`) | Spring physics feel natural |
169
+ | High-count particles / instances | Three.js + GSAP, `InstancedMesh`/`BatchedMesh` | Imperative control, minimal overhead |
170
+ | Smooth-scroll feel under GSAP | add **Lenis** (`lenis` / `react-lenis`) | Inertia scroll that ScrollTrigger can drive |
171
+ | Pure UI delight (no real 3D) | **Motion** or **React Spring** only | Don't pull in WebGL for a hover effect |
172
+ | Non-React repo | **vanilla three.js + GSAP** | R3F requires React; don't add React for one scene |
173
+
174
+ **One animation system per property.** GSAP *or* React Spring *or* Motion
175
+ animating a given transform — never two on the same property. Coordinate by
176
+ timing or split properties (GSAP drives position, Spring drives scale).
177
+
178
+ ---
179
+
180
+ ## Phase 4: Integration Patterns [HIGH freedom]
181
+
182
+ Pick the pattern that matches the stack from Phase 3. Full, current code lives
183
+ in the foundation references (see *Research & Foundation Skills*); below are the
184
+ load-bearing shapes and the integration glue.
185
+
186
+ ### Pattern A — Layered Separation (vanilla three.js + GSAP + HTML)
187
+
188
+ Best for non-React repos and marketing sites. Three layers: a 3D layer
189
+ (scene/camera/render loop), an animation layer (GSAP ScrollTrigger), and an
190
+ HTML/UI overlay. The scene exposes refs (camera, key meshes); GSAP animates
191
+ those refs on scroll; HTML sits on top.
192
+
193
+ ```js
194
+ // scroll.js — GSAP drives the scene's exposed refs
195
+ import gsap from "gsap";
196
+ import { ScrollTrigger } from "gsap/ScrollTrigger";
197
+ gsap.registerPlugin(ScrollTrigger);
198
+
199
+ export function initScrollAnimations({ camera, model }) {
200
+ const tl = gsap.timeline({
201
+ scrollTrigger: { trigger: "#stage", start: "top top", end: "+=3000", scrub: 1, pin: true },
202
+ });
203
+ tl.to(camera.position, { x: 5, z: 10, onUpdate: () => camera.lookAt(0, 0, 0) })
204
+ .to(model.rotation, { y: Math.PI * 2 }, 0);
205
+ return () => tl.scrollTrigger?.kill(); // always return teardown
206
+ }
207
+ ```
208
+
209
+ ### Pattern B — Unified React (R3F + Motion)
210
+
211
+ Best for React apps with interactive, state-driven 3D. `<Canvas>` holds the
212
+ scene; `motion.div` overlays carry HTML. Keep per-frame work in `useFrame`
213
+ mutating **refs**, never React state.
214
+
215
+ ```tsx
216
+ // Lazy-load the canvas so WebGL never blocks first paint / SSR
217
+ const Scene = dynamic(() => import("./Scene"), { ssr: false, loading: () => <Poster /> });
218
+
219
+ <Canvas camera={{ position: [0, 2, 5], fov: 45 }} dpr={[1, 1.5]} frameloop="demand">
220
+ <Suspense fallback={null}><Scene /></Suspense>
221
+ </Canvas>
222
+ ```
223
+
224
+ ### Pattern C — Hybrid (R3F + GSAP timelines)
225
+
226
+ R3F renders; GSAP choreographs. Create the timeline inside `useGSAP` (scoped,
227
+ auto-cleaned) and target the R3F object's `.current`.
228
+
229
+ ```tsx
230
+ import { useGSAP } from "@gsap/react";
231
+ useGSAP(() => {
232
+ const tl = gsap.timeline({ scrollTrigger: { trigger: ref.current, scrub: 1 } });
233
+ tl.to(groupRef.current.position, { y: 2, ease: "power2.inOut" });
234
+ }, { scope: ref }); // useGSAP reverts on unmount — handles Strict Mode double-invoke
235
+ ```
236
+
237
+ ### Pattern D — Physics (R3F + React Spring)
238
+
239
+ `@react-spring/three` for drag/momentum/gesture feedback that should feel
240
+ weighty. Spring owns scale/position; nothing else touches those props.
241
+
242
+ ---
243
+
244
+ ## Phase 5: Performance Budget (bake in, don't bolt on) [LOW freedom — run exactly]
245
+
246
+ WebGL is expensive and degrades hard on weak devices. Apply these from the
247
+ first commit, not after a complaint.
248
+
249
+ **Render loop**
250
+ - [ ] Cap DPR: `dpr={[1, 1.5]}` (R3F) / `renderer.setPixelRatio(Math.min(devicePixelRatio, 2))`.
251
+ - [ ] Render on demand where possible: R3F `frameloop="demand"` + `invalidate()` on change; vanilla → only render when something changed or controls are active.
252
+ - [ ] **Pause off-screen.** `IntersectionObserver` stops the loop when the canvas leaves the viewport.
253
+ - [ ] Never read/write React state in `useFrame` — mutate refs. State in the loop forces 60 fps re-renders.
254
+
255
+ **Draw calls & geometry**
256
+ - [ ] Aim for **< 100 draw calls/frame**. Use `InstancedMesh` / `BatchedMesh` for repeated objects; merge static geometry.
257
+ - [ ] Reuse geometries and materials; don't allocate inside the loop.
258
+ - [ ] LOD for large scenes; simpler shaders + reduced geometry on mobile.
259
+
260
+ **Assets**
261
+ - [ ] glTF + **Draco** for meshes (50–80% smaller); **KTX2/Basis** for textures (3–5× smaller, lower GPU memory).
262
+ - [ ] Power-of-two textures, mipmaps, correct `colorSpace` (`SRGBColorSpace`).
263
+ - [ ] **Lazy-load 3D below the fold**; code-split the Three.js/R3F bundle; preload only critical assets. Never lazy-load the LCP element itself.
264
+
265
+ **Modern renderer (optional, current)**
266
+ - [ ] WebGPU is production-ready since three r171: `import { WebGPURenderer } from "three/webgpu"` ships one renderer with **automatic WebGL2 fallback**. Use `forceWebGL: true` to test the fallback path. No urgent migration if a WebGL2 app already runs smoothly.
267
+
268
+ **Main thread (advanced)**
269
+ - [ ] For heavy scenes, consider `OffscreenCanvas` + Web Worker to keep the main thread free for UI/INP.
270
+
271
+ **Cleanup**
272
+ - [ ] `dispose()` every geometry / material / texture / render target on unmount; `renderer.dispose()`. Kill GSAP tweens/ScrollTriggers (`useGSAP` does this for you).
273
+
274
+ ---
275
+
276
+ ## Phase 6: Accessibility & Graceful Degradation [LOW freedom — run exactly]
277
+
278
+ A 3D enhancement that breaks for some users is a regression, not an upgrade.
279
+
280
+ - [ ] **Reduced motion.** Respect `prefers-reduced-motion`: disable scroll
281
+ scrub / auto-rotation / parallax, or swap to a static poster frame. Gate at
282
+ the source so the whole scene honors it.
283
+
284
+ ```ts
285
+ const reduce = typeof window !== "undefined"
286
+ && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
287
+ // reduce ? render static poster / no scrub : full experience
288
+ ```
289
+
290
+ - [ ] **No-WebGL fallback.** Feature-detect; if WebGL/WebGPU is unavailable,
291
+ render a static image/`<video>`/SVG that preserves the visual language and the
292
+ conversion path. Never a blank canvas.
293
+ - [ ] **Mobile fallback designed first**, then enhanced up — simpler scene,
294
+ fewer particles, no heavy post-processing, fewer transparent layers.
295
+ - [ ] **Keep semantic HTML for anything interactive.** Buttons, links, and
296
+ text content live in real DOM (overlay), not as click targets inside the
297
+ canvas — screen readers and keyboard users need them, and it protects INP.
298
+ - [ ] **Don't trap scroll or focus.** Pinned scroll sections must release; the
299
+ canvas must not steal keyboard focus or block tabbing.
300
+ - [ ] **Protect LCP.** The hero's largest contentful element should not wait on
301
+ WebGL init — show a poster immediately, hydrate the scene after.
302
+
303
+ ---
304
+
305
+ ## Phase 7: SSR / Hydration Safety [LOW freedom — run exactly]
306
+
307
+ The most common way 3D breaks an existing app is server rendering and React
308
+ Strict Mode.
309
+
310
+ - [ ] **Don't render WebGL on the server.** Next.js: `dynamic(() => import("./Scene"), { ssr: false })`. Guard any `window`/`document` access with a client check.
311
+ - [ ] **Use `useGSAP()` from `@gsap/react`**, not bare `useEffect` — it scopes
312
+ selectors and auto-reverts animations on unmount, surviving route changes and
313
+ Strict Mode's double-invoke. Never create tweens in the render body (a new
314
+ animation per re-render).
315
+ - [ ] **Clean up everything on unmount** — ScrollTriggers, RAF loops, resize
316
+ listeners, IntersectionObservers, disposables.
317
+ - [ ] **Lenis (if used):** integrate with ScrollTrigger via the recommended
318
+ `lenis.on("scroll", ScrollTrigger.update)` + ticker wiring so scroll position
319
+ stays in sync.
320
+
321
+ ---
322
+
323
+ ## Common Pitfalls
324
+
325
+ | Pitfall | Fix |
326
+ |---------|-----|
327
+ | Two libraries animate the same property | One system per property; split or sequence |
328
+ | React state mutated in `useFrame` | Mutate refs; lift state out of the loop |
329
+ | Scene renders every frame while idle/off-screen | `frameloop="demand"` + `IntersectionObserver` pause |
330
+ | GSAP tween created in render body | Wrap in `useGSAP` / `contextSafe` |
331
+ | Blank canvas on no-WebGL / slow device | Feature-detect + poster/video fallback |
332
+ | WebGL initialized on server | `ssr: false` dynamic import; window guards |
333
+ | Multi-MB model on the hero | Draco/KTX2 + lazy-load + poster + device-tier scene |
334
+ | Scroll jank under ScrollTrigger | `scrub` numeric (smoothing), Lenis, refs not state |
335
+ | Memory grows on route change | Dispose geometries/materials/textures + kill tweens |
336
+ | Parallax/tilt fights native scroll | Reduced-motion gate + clamp; don't hijack the wheel |
337
+
338
+ ---
339
+
340
+ ## Verification Checklist (run before declaring done) [LOW freedom — do not skip]
341
+
342
+ - [ ] Builds and type-checks; no hallucinated imports; installed versions matched.
343
+ - [ ] Profiled on a **mid-tier / mobile** device or throttled DevTools — holds target FPS.
344
+ - [ ] Draw calls within budget (`renderer.info` / `stats-gl`); DPR capped.
345
+ - [ ] `prefers-reduced-motion` path verified (motion off / poster shown).
346
+ - [ ] No-WebGL path verified (DevTools disable WebGL, or `forceWebGL` + simulated failure) — graceful fallback, never blank.
347
+ - [ ] Mobile layout + fallback scene verified at a real narrow viewport.
348
+ - [ ] LCP/INP/CLS not regressed vs the Phase 1 baseline (Lighthouse before/after).
349
+ - [ ] SSR/hydration clean — no `window is not defined`, no hydration mismatch, no Strict Mode double-mount leak.
350
+ - [ ] Unmount is clean — disposables freed, tweens/observers killed (navigate away and back, watch memory).
351
+ - [ ] Interactive elements remain real DOM, keyboard-reachable; canvas doesn't trap focus/scroll.
352
+ - [ ] One focal 3D moment per page; the effect explains/demos/brands (passes the Phase 0 fit check).
353
+
354
+ ---
355
+
356
+ ## Rules
357
+
358
+ - Work with the **existing stack**. Don't add React for one scene; don't swap build tools or styling systems.
359
+ - Don't break existing functionality or the build. Lazy-load and feature-gate so the page still works if WebGL fails.
360
+ - Check the dependency manifest before importing; match installed major versions (`three`, `@react-three/fiber`, `@react-three/drei`, `gsap`, `@gsap/react`, `motion`/`framer-motion`, `@react-spring/three`, `lenis`).
361
+ - Keep changes reviewable and scoped to the surface being enhanced.
362
+ - Performance budget, fallbacks, reduced-motion, and SSR safety ship **in the same change** as the effect — not as a follow-up.
363
+ - Add comments only for non-obvious intent (why a DPR cap, why `ssr: false`), not narration.
364
+
365
+ ---
366
+
367
+ ## When Not To Use
368
+
369
+ - Pure visual composition / hierarchy / spacing, no 3D → `enhance-web-ui`.
370
+ - Greenfield anti-slop landing page → `enhance-web-landing`.
371
+ - Generic existing-site premium upgrade (no 3D) → `enhance-web-redesign`.
372
+ - UX heuristics / flows / data wiring → `enhance-web-ux`.
373
+ - A hover/drag delight that needs no WebGL → `design-motion`.
374
+
375
+ ---
376
+
377
+ ## Research & Foundation Skills
378
+
379
+ **Foundation / deeper mechanics (in this repo):**
380
+ - `design-motion` — Motion / GSAP / CSS animation patterns and physics micro-interactions.
381
+ - `audit-performance` — Core Web Vitals (LCP/INP/CLS), bundle analysis.
382
+ - `audit-accessibility` — reduced-motion, keyboard, screen-reader compliance.
383
+
384
+ **Current external anchors:**
385
+ - **GSAP is free for all use, plugins included.** Use `useGSAP()` (`@gsap/react`) for React cleanup/Strict-Mode safety. <https://gsap.com/resources/React/>
386
+ - **R3F performance docs** — WebGL is expensive on weak devices; design for graceful degradation; mutate refs not state in `useFrame`. <https://r3f.docs.pmnd.rs/advanced/scaling-performance>
387
+ - **three.js WebGPURenderer** — production-ready since r171, automatic WebGL2 fallback, `forceWebGL` to test. <https://threejs.org/manual/en/webgpurenderer.html>
388
+ - **"100 Three.js Tips That Actually Improve Performance" (2026)** — <100 draw calls, Draco/KTX2, lazy-load below the fold, dispose everything, profile with stats-gl/renderer.info/Spector.js. <https://www.utsubo.com/blog/threejs-best-practices-100-tips>
389
+ - **Cinematic 3D scroll with GSAP + Next.js + R3F** — DPR cap, refs for camera values, mobile simplification, reduced-motion, `useGSAP` cleanup, hydration safety. <https://mirax.cc/articles/cinematic-3d-scroll-gsap-nextjs-react-three-fiber>
390
+ - **R3F mobile performance (2026)** — Draco + LOD + `OffscreenCanvas`/Web Worker + instancing for stable 60 FPS. <https://www.krapton.com/blog/boosting-react-three-fiber-mobile-performance-in-2026-a-deep-dive-d6105c>
391
+ - **Optimizing 3D website performance** — device-tier detection, IntersectionObserver pause, static fallback for no-WebGL. <https://svilenkovic.com/3d/how-to-optimize-3d-website>
392
+
393
+ > Adapted and generalized from the `web3d-integration-patterns` meta-skill in
394
+ > [freshtechbro/claudedesignskills](https://github.com/freshtechbro/claudedesignskills)
395
+ > (and its `threejs-webgl` / `gsap-scrolltrigger` / `react-three-fiber` /
396
+ > `motion-framer` / `react-spring-physics` foundation skills) into an
397
+ > audit-first, repo-elevation skill in the `enhance-web-*` family.
@@ -0,0 +1,180 @@
1
+ # CSS, SVG & Canvas 2D Effect Patterns
2
+
3
+ Lightweight alternatives to WebGL — use these when Three.js / R3F is overkill.
4
+
5
+ ---
6
+
7
+ ## Glassmorphism
8
+
9
+ ```css
10
+ .glass {
11
+ background: rgba(255, 255, 255, 0.1);
12
+ backdrop-filter: blur(10px);
13
+ -webkit-backdrop-filter: blur(10px);
14
+ border: 1px solid rgba(255, 255, 255, 0.2);
15
+ border-radius: 16px;
16
+ }
17
+ /* Isolate to avoid cross-element bleed */
18
+ .glass-container { isolation: isolate; }
19
+ ```
20
+
21
+ ---
22
+
23
+ ## Animated gradient background
24
+
25
+ ```css
26
+ .animated-gradient {
27
+ background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
28
+ background-size: 400% 400%;
29
+ animation: gradient 15s ease infinite;
30
+ }
31
+ @keyframes gradient {
32
+ 0% { background-position: 0% 50%; }
33
+ 50% { background-position: 100% 50%; }
34
+ 100% { background-position: 0% 50%; }
35
+ }
36
+ ```
37
+
38
+ ---
39
+
40
+ ## Noise / grain texture
41
+
42
+ ```css
43
+ .grain::after {
44
+ content: '';
45
+ position: absolute;
46
+ inset: 0;
47
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
48
+ opacity: 0.05;
49
+ pointer-events: none;
50
+ }
51
+ ```
52
+
53
+ ---
54
+
55
+ ## SVG morphing (Framer Motion)
56
+
57
+ ```tsx
58
+ import { motion } from 'framer-motion'
59
+
60
+ const paths = {
61
+ circle: "M50,10 A40,40 0 1,1 50,90 A40,40 0 1,1 50,10",
62
+ square: "M10,10 L90,10 L90,90 L10,90 Z",
63
+ star: "M50,10 L61,40 L95,40 L68,60 L79,90 L50,72 L21,90 L32,60 L5,40 L39,40 Z",
64
+ }
65
+
66
+ function MorphingSVG({ shape }: { shape: keyof typeof paths }) {
67
+ return (
68
+ <svg viewBox="0 0 100 100">
69
+ <motion.path
70
+ d={paths[shape]}
71
+ animate={{ d: paths[shape] }}
72
+ transition={{ duration: 0.5, ease: "easeInOut" }}
73
+ fill="currentColor"
74
+ />
75
+ </svg>
76
+ )
77
+ }
78
+ ```
79
+
80
+ ---
81
+
82
+ ## Canvas 2D particle system
83
+
84
+ ```tsx
85
+ 'use client'
86
+ import { useEffect, useRef } from 'react'
87
+
88
+ interface Particle { x: number; y: number; vx: number; vy: number; size: number; alpha: number }
89
+
90
+ export function ParticleBackground({ count = 100 }: { count?: number }) {
91
+ const canvasRef = useRef<HTMLCanvasElement>(null)
92
+
93
+ useEffect(() => {
94
+ const canvas = canvasRef.current!
95
+ const ctx = canvas.getContext('2d')!
96
+ let animId: number
97
+
98
+ const particles: Particle[] = Array.from({ length: count }, () => ({
99
+ x: Math.random() * canvas.width,
100
+ y: Math.random() * canvas.height,
101
+ vx: (Math.random() - 0.5) * 0.5,
102
+ vy: (Math.random() - 0.5) * 0.5,
103
+ size: Math.random() * 2 + 1,
104
+ alpha: Math.random() * 0.5 + 0.2,
105
+ }))
106
+
107
+ const animate = () => {
108
+ ctx.clearRect(0, 0, canvas.width, canvas.height)
109
+ particles.forEach(p => {
110
+ p.x = (p.x + p.vx + canvas.width) % canvas.width
111
+ p.y = (p.y + p.vy + canvas.height) % canvas.height
112
+ ctx.beginPath()
113
+ ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2)
114
+ ctx.fillStyle = `rgba(255,255,255,${p.alpha})`
115
+ ctx.fill()
116
+ })
117
+ // Connection lines
118
+ particles.forEach((a, i) => {
119
+ particles.slice(i + 1).forEach(b => {
120
+ const d = Math.hypot(a.x - b.x, a.y - b.y)
121
+ if (d < 100) {
122
+ ctx.beginPath()
123
+ ctx.moveTo(a.x, a.y)
124
+ ctx.lineTo(b.x, b.y)
125
+ ctx.strokeStyle = `rgba(255,255,255,${0.2 * (1 - d / 100)})`
126
+ ctx.stroke()
127
+ }
128
+ })
129
+ })
130
+ animId = requestAnimationFrame(animate)
131
+ }
132
+ animate()
133
+ return () => cancelAnimationFrame(animId)
134
+ }, [count])
135
+
136
+ return (
137
+ <canvas ref={canvasRef} className="fixed inset-0 -z-10"
138
+ style={{ width: '100%', height: '100%' }} />
139
+ )
140
+ }
141
+ ```
142
+
143
+ ---
144
+
145
+ ## Mouse-following cursor glow
146
+
147
+ ```tsx
148
+ 'use client'
149
+ import { motion, useMotionValue, useSpring } from 'framer-motion'
150
+ import { useEffect } from 'react'
151
+
152
+ export function CursorFollower() {
153
+ const x = useSpring(useMotionValue(0), { stiffness: 500, damping: 28 })
154
+ const y = useSpring(useMotionValue(0), { stiffness: 500, damping: 28 })
155
+
156
+ useEffect(() => {
157
+ const move = (e: MouseEvent) => { x.set(e.clientX); y.set(e.clientY) }
158
+ window.addEventListener('mousemove', move)
159
+ return () => window.removeEventListener('mousemove', move)
160
+ }, [x, y])
161
+
162
+ return (
163
+ <motion.div
164
+ className="fixed w-8 h-8 bg-primary/30 rounded-full pointer-events-none
165
+ -translate-x-1/2 -translate-y-1/2 z-50 mix-blend-difference"
166
+ style={{ x, y }}
167
+ />
168
+ )
169
+ }
170
+ ```
171
+
172
+ ---
173
+
174
+ ## Performance notes
175
+
176
+ - `backdrop-filter` is GPU-expensive — use on ≤3 elements.
177
+ - Canvas particle counts: full desktop 100, mobile ≤25.
178
+ - Always `cancelAnimationFrame` on cleanup.
179
+ - `will-change: transform` only during animation, remove after.
180
+ - Respect `prefers-reduced-motion` — skip or minimise all effects.
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: handoff
3
+ description: >-
4
+ Compact the current conversation into a handoff document a fresh agent can pick
5
+ up. User-invoked via /handoff; an optional argument describes what the next
6
+ session will focus on.
7
+ disable-model-invocation: true
8
+ license: MIT
9
+ effort: low
10
+ ---
11
+
12
+ # Handoff
13
+
14
+ **Degree of freedom: LOW.** Contents, redaction, and temp-dir save
15
+ `[LOW freedom — run exactly]`. What to emphasize for the next session
16
+ `[HIGH freedom]`.
17
+
18
+ > Adapted from [mattpocock/skills](https://github.com/mattpocock/skills) (MIT).
19
+
20
+ ## How to reason
21
+
22
+ 1. **Observe** — what is done, verified, and still open
23
+ 2. **Interpret** — which claims are implemented vs scoped-verified vs assumed
24
+ 3. **Classify** — include / point-at-artifact / omit (already in an ADR)
25
+ 4. **Severity** — a false "green" in the handoff is worse than a missing detail
26
+
27
+ ## Worked example
28
+
29
+ > **Observe:** auth UI landed; RLS migration is a local file only; tests not run.
30
+ > **Interpret:** UI is implemented, backend is not deployed-verified.
31
+ > **Classify:** write "implemented, not verified"; point at the migration path; do not say SHIP.
32
+ > **Save:** OS temp file, print the path; do not commit the handoff into the repo.
33
+
34
+ ## Self-critique before writing
35
+
36
+ - **Ladder honest** — no upgraded verification claim
37
+ - **No secrets** — keys/tokens/PII redacted
38
+ - **Pointers not copies** — ADRs and plans referenced by path
39
+ - **Right owner** — permanent decisions → `docs-adr`, not this file
40
+
41
+ Write a handoff document summarizing the current conversation so a fresh agent
42
+ can continue the work. Save it to the OS temporary directory — **not** the
43
+ current workspace — and print the path.
44
+
45
+ ## Contents
46
+
47
+ - **State**: what was attempted, what is done, what is verified vs merely edited.
48
+ - **Next steps**: the concrete remaining work, in order, with file paths.
49
+ - **Suggested skills**: which skills the next agent should invoke, and for what.
50
+ - **Pointers, not copies**: do not duplicate content already captured in other
51
+ artifacts (specs, plans, ADRs, issues, commits, diffs). Reference them by path
52
+ or URL instead.
53
+ - **Gotchas**: anything non-obvious the next agent would otherwise rediscover the
54
+ hard way (flaky tests, env quirks, decisions already ruled out).
55
+
56
+ ## Rules
57
+
58
+ 1. Redact sensitive information: API keys, passwords, tokens, PII.
59
+ 2. If the user passed an argument, treat it as the next session's focus and
60
+ tailor the document accordingly.
61
+ 3. Be honest about verification state — use the ladder from
62
+ `verification-before-completion`: implemented → scoped verified → repository
63
+ green → PR green → deployed verified. Never upgrade a claim in a handoff.
64
+ 4. Permanent decisions (stack, layering, rejected alternatives) belong in
65
+ `docs-adr`, not in the handoff. Point at `docs/adr/INDEX.md` if it exists;
66
+ do not re-copy those records here.