@xonovex/skills 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. package/.claude-plugin/plugin.json +21 -0
  2. package/commands/code-align.md +108 -0
  3. package/commands/code-harden.md +74 -0
  4. package/commands/code-simplify.md +145 -0
  5. package/commands/git-commit.md +146 -0
  6. package/commands/insights-extract.md +109 -0
  7. package/commands/insights-integrate.md +100 -0
  8. package/commands/plan-continue.md +167 -0
  9. package/commands/plan-create.md +107 -0
  10. package/commands/plan-research.md +113 -0
  11. package/commands/plan-subplans-create.md +111 -0
  12. package/commands/plan-tdd-create.md +128 -0
  13. package/commands/plan-update.md +99 -0
  14. package/commands/plan-validate.md +100 -0
  15. package/commands/plan-worktree-abandon.md +104 -0
  16. package/commands/plan-worktree-create.md +92 -0
  17. package/commands/plan-worktree-merge.md +132 -0
  18. package/package.json +44 -0
  19. package/skills/astro-guidelines/SKILL.md +23 -0
  20. package/skills/astro-guidelines/reference/accessibility.md +31 -0
  21. package/skills/astro-guidelines/reference/components.md +42 -0
  22. package/skills/astro-guidelines/reference/content-collections.md +32 -0
  23. package/skills/astro-guidelines/reference/islands-architecture.md +26 -0
  24. package/skills/astro-guidelines/reference/project-structure.md +32 -0
  25. package/skills/c99-game-opinionated-guidelines/SKILL.md +43 -0
  26. package/skills/c99-game-opinionated-guidelines/reference/builder-pattern.md +29 -0
  27. package/skills/c99-game-opinionated-guidelines/reference/coordinate-system.md +27 -0
  28. package/skills/c99-game-opinionated-guidelines/reference/geometry-pipeline.md +29 -0
  29. package/skills/c99-game-opinionated-guidelines/reference/math-types.md +31 -0
  30. package/skills/c99-game-opinionated-guidelines/reference/mesh-types.md +32 -0
  31. package/skills/c99-game-opinionated-guidelines/reference/physics-patterns.md +28 -0
  32. package/skills/c99-game-opinionated-guidelines/reference/spatial-structures.md +26 -0
  33. package/skills/c99-game-opinionated-guidelines/reference/tagged-unions.md +40 -0
  34. package/skills/c99-game-opinionated-guidelines/reference/vertex-packing.md +38 -0
  35. package/skills/c99-guidelines/SKILL.md +29 -0
  36. package/skills/c99-guidelines/reference/compound-literals.md +33 -0
  37. package/skills/c99-guidelines/reference/const-correctness.md +32 -0
  38. package/skills/c99-guidelines/reference/designated-initializers.md +32 -0
  39. package/skills/c99-guidelines/reference/error-handling.md +49 -0
  40. package/skills/c99-guidelines/reference/inline-functions.md +37 -0
  41. package/skills/c99-guidelines/reference/memory-management.md +35 -0
  42. package/skills/c99-opinionated-guidelines/SKILL.md +44 -0
  43. package/skills/c99-opinionated-guidelines/reference/alignment.md +50 -0
  44. package/skills/c99-opinionated-guidelines/reference/caller-owns-memory.md +38 -0
  45. package/skills/c99-opinionated-guidelines/reference/compound-literals.md +33 -0
  46. package/skills/c99-opinionated-guidelines/reference/const-correctness.md +32 -0
  47. package/skills/c99-opinionated-guidelines/reference/data-oriented-design.md +42 -0
  48. package/skills/c99-opinionated-guidelines/reference/designated-initializers.md +32 -0
  49. package/skills/c99-opinionated-guidelines/reference/error-handling.md +49 -0
  50. package/skills/c99-opinionated-guidelines/reference/file-naming.md +33 -0
  51. package/skills/c99-opinionated-guidelines/reference/implementation-variants.md +35 -0
  52. package/skills/c99-opinionated-guidelines/reference/inline-functions.md +37 -0
  53. package/skills/c99-opinionated-guidelines/reference/memory-management.md +35 -0
  54. package/skills/c99-opinionated-guidelines/reference/safety-validations.md +32 -0
  55. package/skills/c99-opinionated-guidelines/reference/testing-patterns.md +39 -0
  56. package/skills/cmake-guidelines/SKILL.md +31 -0
  57. package/skills/cmake-guidelines/reference/compile-options.md +34 -0
  58. package/skills/cmake-guidelines/reference/fetchcontent.md +32 -0
  59. package/skills/cmake-guidelines/reference/find-package.md +29 -0
  60. package/skills/cmake-guidelines/reference/generator-expressions.md +34 -0
  61. package/skills/cmake-guidelines/reference/installation.md +38 -0
  62. package/skills/cmake-guidelines/reference/project-structure.md +40 -0
  63. package/skills/cmake-guidelines/reference/target-types.md +37 -0
  64. package/skills/cmake-guidelines/reference/testing.md +30 -0
  65. package/skills/cmake-guidelines/reference/visibility-specifiers.md +32 -0
  66. package/skills/content-guidelines/SKILL.md +36 -0
  67. package/skills/content-guidelines/reference/humanize.md +30 -0
  68. package/skills/content-guidelines/reference/news.md +28 -0
  69. package/skills/content-guidelines/reference/travelguide.md +31 -0
  70. package/skills/docker-guidelines/SKILL.md +23 -0
  71. package/skills/docker-guidelines/reference/docker-compose.md +40 -0
  72. package/skills/docker-guidelines/reference/layer-caching.md +25 -0
  73. package/skills/docker-guidelines/reference/multi-stage-builds.md +37 -0
  74. package/skills/docker-guidelines/reference/production-config.md +32 -0
  75. package/skills/docker-guidelines/reference/security.md +27 -0
  76. package/skills/express.js-guidelines/SKILL.md +32 -0
  77. package/skills/express.js-guidelines/reference/app-setup.md +39 -0
  78. package/skills/express.js-guidelines/reference/authentication.md +39 -0
  79. package/skills/express.js-guidelines/reference/controllers.md +49 -0
  80. package/skills/express.js-guidelines/reference/error-handling.md +54 -0
  81. package/skills/express.js-guidelines/reference/project-structure.md +29 -0
  82. package/skills/express.js-guidelines/reference/responses.md +30 -0
  83. package/skills/express.js-guidelines/reference/routes.md +29 -0
  84. package/skills/express.js-guidelines/reference/testing.md +39 -0
  85. package/skills/express.js-guidelines/reference/validation.md +41 -0
  86. package/skills/general-fp-guidelines/SKILL.md +28 -0
  87. package/skills/general-oop-guidelines/SKILL.md +28 -0
  88. package/skills/git-guidelines/SKILL.md +46 -0
  89. package/skills/git-guidelines/reference/commit.md +32 -0
  90. package/skills/git-guidelines/reference/merge-resolve.md +38 -0
  91. package/skills/git-guidelines/reference/worktree-abandon.md +48 -0
  92. package/skills/git-guidelines/reference/worktree-cleanup.md +40 -0
  93. package/skills/git-guidelines/reference/worktree-commit.md +46 -0
  94. package/skills/git-guidelines/reference/worktree-create.md +42 -0
  95. package/skills/git-guidelines/reference/worktree-merge.md +45 -0
  96. package/skills/git-guidelines/reference/worktree-validate.md +44 -0
  97. package/skills/hono-guidelines/SKILL.md +49 -0
  98. package/skills/hono-guidelines/reference/application-structure.md +53 -0
  99. package/skills/hono-guidelines/reference/context-storage.md +46 -0
  100. package/skills/hono-guidelines/reference/cookie-handling.md +63 -0
  101. package/skills/hono-guidelines/reference/error-handling.md +69 -0
  102. package/skills/hono-guidelines/reference/middleware-combine.md +47 -0
  103. package/skills/hono-guidelines/reference/middleware-patterns.md +58 -0
  104. package/skills/hono-guidelines/reference/platform-runtime.md +41 -0
  105. package/skills/hono-guidelines/reference/security-middleware.md +60 -0
  106. package/skills/hono-guidelines/reference/validation-type-safety.md +43 -0
  107. package/skills/hono-guidelines/reference/websocket-support.md +59 -0
  108. package/skills/hono-opinionated-guidelines/SKILL.md +49 -0
  109. package/skills/hono-opinionated-guidelines/reference/application-structure.md +53 -0
  110. package/skills/hono-opinionated-guidelines/reference/body-limit.md +57 -0
  111. package/skills/hono-opinionated-guidelines/reference/context-storage.md +46 -0
  112. package/skills/hono-opinionated-guidelines/reference/controllers.md +38 -0
  113. package/skills/hono-opinionated-guidelines/reference/cookie-handling.md +63 -0
  114. package/skills/hono-opinionated-guidelines/reference/error-handling.md +69 -0
  115. package/skills/hono-opinionated-guidelines/reference/middleware-combine.md +47 -0
  116. package/skills/hono-opinionated-guidelines/reference/middleware-patterns.md +58 -0
  117. package/skills/hono-opinionated-guidelines/reference/openapi-explicit-status-codes.md +61 -0
  118. package/skills/hono-opinionated-guidelines/reference/openapi-inline-handlers.md +56 -0
  119. package/skills/hono-opinionated-guidelines/reference/openapi-router-hierarchy.md +64 -0
  120. package/skills/hono-opinionated-guidelines/reference/openapi-spec-generation.md +57 -0
  121. package/skills/hono-opinionated-guidelines/reference/platform-runtime.md +41 -0
  122. package/skills/hono-opinionated-guidelines/reference/router-selection.md +34 -0
  123. package/skills/hono-opinionated-guidelines/reference/security-middleware.md +60 -0
  124. package/skills/hono-opinionated-guidelines/reference/validation-type-safety.md +43 -0
  125. package/skills/hono-opinionated-guidelines/reference/websocket-support.md +59 -0
  126. package/skills/insights-guidelines/SKILL.md +28 -0
  127. package/skills/insights-guidelines/reference/insights-extract.md +31 -0
  128. package/skills/insights-guidelines/reference/insights-integrate.md +35 -0
  129. package/skills/instruction-guidelines/SKILL.md +26 -0
  130. package/skills/instruction-guidelines/reference/assimilate.md +38 -0
  131. package/skills/instruction-guidelines/reference/simplify.md +46 -0
  132. package/skills/instruction-guidelines/reference/sync.md +41 -0
  133. package/skills/kubernetes-guidelines/SKILL.md +28 -0
  134. package/skills/kubernetes-guidelines/reference/configmaps-secrets.md +34 -0
  135. package/skills/kubernetes-guidelines/reference/deployments.md +55 -0
  136. package/skills/kubernetes-guidelines/reference/kustomize.md +41 -0
  137. package/skills/kubernetes-guidelines/reference/network-policies.md +53 -0
  138. package/skills/kubernetes-guidelines/reference/services.md +36 -0
  139. package/skills/kubernetes-guidelines/reference/validation.md +32 -0
  140. package/skills/lua-guidelines/SKILL.md +29 -0
  141. package/skills/lua-guidelines/reference/coroutines.md +66 -0
  142. package/skills/lua-guidelines/reference/error-handling.md +41 -0
  143. package/skills/lua-guidelines/reference/idiomatic-patterns.md +40 -0
  144. package/skills/lua-guidelines/reference/input-validation.md +42 -0
  145. package/skills/lua-guidelines/reference/local-variables.md +33 -0
  146. package/skills/lua-guidelines/reference/metatables.md +52 -0
  147. package/skills/lua-guidelines/reference/module-pattern.md +37 -0
  148. package/skills/lua-guidelines/reference/string-concatenation.md +31 -0
  149. package/skills/lua-opinionated-guidelines/SKILL.md +32 -0
  150. package/skills/lua-opinionated-guidelines/reference/cache-lookups.md +43 -0
  151. package/skills/lua-opinionated-guidelines/reference/coroutines.md +66 -0
  152. package/skills/lua-opinionated-guidelines/reference/error-handling.md +41 -0
  153. package/skills/lua-opinionated-guidelines/reference/idiomatic-patterns.md +40 -0
  154. package/skills/lua-opinionated-guidelines/reference/input-validation.md +42 -0
  155. package/skills/lua-opinionated-guidelines/reference/jit-friendly-tables.md +57 -0
  156. package/skills/lua-opinionated-guidelines/reference/local-variables.md +33 -0
  157. package/skills/lua-opinionated-guidelines/reference/metatables.md +52 -0
  158. package/skills/lua-opinionated-guidelines/reference/module-pattern.md +37 -0
  159. package/skills/lua-opinionated-guidelines/reference/string-concatenation.md +31 -0
  160. package/skills/moon-guidelines/SKILL.md +30 -0
  161. package/skills/moon-guidelines/reference/docker-multistage.md +42 -0
  162. package/skills/moon-guidelines/reference/project-constraints.md +25 -0
  163. package/skills/moon-guidelines/reference/query-language.md +27 -0
  164. package/skills/moon-guidelines/reference/tag-based-filtering.md +28 -0
  165. package/skills/moon-guidelines/reference/task-configuration.md +38 -0
  166. package/skills/moon-guidelines/reference/task-inheritance.md +30 -0
  167. package/skills/motion-react-guidelines/SKILL.md +66 -0
  168. package/skills/motion-react-guidelines/reference/3d-effects.md +35 -0
  169. package/skills/motion-react-guidelines/reference/entrance.md +36 -0
  170. package/skills/motion-react-guidelines/reference/exit.md +35 -0
  171. package/skills/motion-react-guidelines/reference/gestures.md +23 -0
  172. package/skills/motion-react-guidelines/reference/layout.md +39 -0
  173. package/skills/motion-react-guidelines/reference/motion-values.md +33 -0
  174. package/skills/motion-react-guidelines/reference/performance.md +32 -0
  175. package/skills/motion-react-guidelines/reference/scroll.md +38 -0
  176. package/skills/motion-react-guidelines/reference/spring-physics.md +40 -0
  177. package/skills/motion-react-guidelines/reference/stagger.md +34 -0
  178. package/skills/motion-react-guidelines/reference/svg-path.md +33 -0
  179. package/skills/motion-react-guidelines/reference/text-effects.md +39 -0
  180. package/skills/plan-guidelines/SKILL.md +56 -0
  181. package/skills/plan-guidelines/reference/code-align.md +23 -0
  182. package/skills/plan-guidelines/reference/code-barrels-remove.md +24 -0
  183. package/skills/plan-guidelines/reference/code-comments-remove.md +28 -0
  184. package/skills/plan-guidelines/reference/code-harden.md +30 -0
  185. package/skills/plan-guidelines/reference/code-shared-extract.md +25 -0
  186. package/skills/plan-guidelines/reference/code-simplify.md +33 -0
  187. package/skills/plan-guidelines/reference/code-template-extract.md +34 -0
  188. package/skills/plan-guidelines/reference/code-template-scaffold.md +36 -0
  189. package/skills/plan-guidelines/reference/general-research.md +35 -0
  190. package/skills/plan-guidelines/reference/plan-create.md +37 -0
  191. package/skills/plan-guidelines/reference/plan-tdd-create.md +44 -0
  192. package/skills/plan-guidelines/reference/todos.md +39 -0
  193. package/skills/presentation-guidelines/SKILL.md +25 -0
  194. package/skills/presentation-guidelines/reference/presentation-create.md +41 -0
  195. package/skills/presentation-guidelines/reference/presentation-motion-scaffold.md +38 -0
  196. package/skills/python-guidelines/SKILL.md +32 -0
  197. package/skills/python-guidelines/reference/async-await-patterns.md +62 -0
  198. package/skills/python-guidelines/reference/caching-functions.md +47 -0
  199. package/skills/python-guidelines/reference/dataclasses-type-hints.md +63 -0
  200. package/skills/python-guidelines/reference/exception-handling.md +72 -0
  201. package/skills/python-guidelines/reference/generators-comprehensions.md +54 -0
  202. package/skills/python-guidelines/reference/pathlib-file-ops.md +60 -0
  203. package/skills/python-guidelines/reference/resource-management.md +58 -0
  204. package/skills/python-guidelines/reference/string-formatting.md +41 -0
  205. package/skills/python-guidelines/reference/type-checking.md +47 -0
  206. package/skills/react-guidelines/SKILL.md +105 -0
  207. package/skills/react-guidelines/reference/accessibility.md +31 -0
  208. package/skills/react-guidelines/reference/activity-effect-event.md +42 -0
  209. package/skills/react-guidelines/reference/component-design.md +57 -0
  210. package/skills/react-guidelines/reference/hooks.md +39 -0
  211. package/skills/react-guidelines/reference/migration-anti-patterns.md +33 -0
  212. package/skills/react-guidelines/reference/migration-deprecations.md +109 -0
  213. package/skills/react-guidelines/reference/migration-paradigm-shifts.md +33 -0
  214. package/skills/react-guidelines/reference/migration-typescript.md +95 -0
  215. package/skills/react-guidelines/reference/new-hooks.md +94 -0
  216. package/skills/react-guidelines/reference/performance-optimization.md +41 -0
  217. package/skills/react-guidelines/reference/react-compiler.md +34 -0
  218. package/skills/react-guidelines/reference/server-components.md +99 -0
  219. package/skills/react-guidelines/reference/state-management.md +72 -0
  220. package/skills/react-guidelines/reference/suspense-streaming.md +36 -0
  221. package/skills/remotion-guidelines/SKILL.md +67 -0
  222. package/skills/remotion-guidelines/reference/animations.md +121 -0
  223. package/skills/remotion-guidelines/reference/assets.md +21 -0
  224. package/skills/remotion-guidelines/reference/captions.md +33 -0
  225. package/skills/remotion-guidelines/reference/charts.md +35 -0
  226. package/skills/remotion-guidelines/reference/compositions.md +40 -0
  227. package/skills/remotion-guidelines/reference/dom-measurement.md +82 -0
  228. package/skills/remotion-guidelines/reference/gifs.md +33 -0
  229. package/skills/remotion-guidelines/reference/lottie.md +41 -0
  230. package/skills/remotion-guidelines/reference/maps.md +26 -0
  231. package/skills/remotion-guidelines/reference/media.md +39 -0
  232. package/skills/remotion-guidelines/reference/mediabunny.md +28 -0
  233. package/skills/remotion-guidelines/reference/sequencing.md +44 -0
  234. package/skills/remotion-guidelines/reference/text.md +24 -0
  235. package/skills/remotion-guidelines/reference/three-d.md +33 -0
  236. package/skills/remotion-guidelines/reference/timing.md +22 -0
  237. package/skills/remotion-guidelines/reference/transitions.md +52 -0
  238. package/skills/shell-scripting-guidelines/SKILL.md +31 -0
  239. package/skills/shell-scripting-guidelines/reference/argument-parsing.md +67 -0
  240. package/skills/shell-scripting-guidelines/reference/common-patterns.md +46 -0
  241. package/skills/shell-scripting-guidelines/reference/error-handling.md +62 -0
  242. package/skills/shell-scripting-guidelines/reference/functions.md +66 -0
  243. package/skills/shell-scripting-guidelines/reference/idempotency.md +57 -0
  244. package/skills/shell-scripting-guidelines/reference/parameter-expansion.md +38 -0
  245. package/skills/shell-scripting-guidelines/reference/posix-compatibility.md +53 -0
  246. package/skills/shell-scripting-guidelines/reference/quoting.md +42 -0
  247. package/skills/shell-scripting-guidelines/reference/script-template.md +70 -0
  248. package/skills/shell-scripting-guidelines/reference/strict-mode.md +41 -0
  249. package/skills/shell-scripting-guidelines/reference/validation.md +30 -0
  250. package/skills/skill-guidelines/SKILL.md +33 -0
  251. package/skills/skill-guidelines/reference/assimilate.md +51 -0
  252. package/skills/skill-guidelines/reference/create.md +48 -0
  253. package/skills/skill-guidelines/reference/extract.md +48 -0
  254. package/skills/skill-guidelines/reference/simplify.md +56 -0
  255. package/skills/sql-postgresql-guidelines/SKILL.md +31 -0
  256. package/skills/sql-postgresql-guidelines/reference/constraints.md +47 -0
  257. package/skills/sql-postgresql-guidelines/reference/cte-patterns.md +42 -0
  258. package/skills/sql-postgresql-guidelines/reference/data-types.md +46 -0
  259. package/skills/sql-postgresql-guidelines/reference/indexing.md +45 -0
  260. package/skills/sql-postgresql-guidelines/reference/jsonb.md +54 -0
  261. package/skills/sql-postgresql-guidelines/reference/performance.md +46 -0
  262. package/skills/sql-postgresql-guidelines/reference/role-based-access.md +47 -0
  263. package/skills/sql-postgresql-guidelines/reference/row-level-security.md +66 -0
  264. package/skills/strudel-guidelines/SKILL.md +52 -0
  265. package/skills/strudel-guidelines/reference/arrangement.md +24 -0
  266. package/skills/strudel-guidelines/reference/conditionals.md +22 -0
  267. package/skills/strudel-guidelines/reference/effects.md +22 -0
  268. package/skills/strudel-guidelines/reference/genre-ambient.md +26 -0
  269. package/skills/strudel-guidelines/reference/genre-harsh.md +21 -0
  270. package/skills/strudel-guidelines/reference/genre-trance.md +23 -0
  271. package/skills/strudel-guidelines/reference/layering.md +22 -0
  272. package/skills/strudel-guidelines/reference/mini-notation.md +74 -0
  273. package/skills/strudel-guidelines/reference/modulation.md +22 -0
  274. package/skills/strudel-guidelines/reference/scales-harmony.md +20 -0
  275. package/skills/strudel-guidelines/reference/sounds.md +89 -0
  276. package/skills/strudel-guidelines/reference/tempo-timing.md +23 -0
  277. package/skills/terraform-guidelines/SKILL.md +28 -0
  278. package/skills/terraform-guidelines/reference/advanced-patterns.md +88 -0
  279. package/skills/terraform-guidelines/reference/locals.md +53 -0
  280. package/skills/terraform-guidelines/reference/module-definition.md +81 -0
  281. package/skills/terraform-guidelines/reference/module-structure.md +51 -0
  282. package/skills/terraform-guidelines/reference/remote-state.md +38 -0
  283. package/skills/terraform-guidelines/reference/root-module.md +71 -0
  284. package/skills/terraform-guidelines/reference/typed-variables.md +90 -0
  285. package/skills/threejs-guidelines/SKILL.md +38 -0
  286. package/skills/threejs-guidelines/reference/animation.md +26 -0
  287. package/skills/threejs-guidelines/reference/cameras-controls.md +26 -0
  288. package/skills/threejs-guidelines/reference/geometry.md +22 -0
  289. package/skills/threejs-guidelines/reference/interaction.md +25 -0
  290. package/skills/threejs-guidelines/reference/lighting-shadows.md +31 -0
  291. package/skills/threejs-guidelines/reference/loaders.md +29 -0
  292. package/skills/threejs-guidelines/reference/materials.md +25 -0
  293. package/skills/threejs-guidelines/reference/math.md +27 -0
  294. package/skills/threejs-guidelines/reference/node-materials.md +32 -0
  295. package/skills/threejs-guidelines/reference/patterns.md +29 -0
  296. package/skills/threejs-guidelines/reference/performance.md +24 -0
  297. package/skills/threejs-guidelines/reference/physics-vr.md +36 -0
  298. package/skills/threejs-guidelines/reference/postprocessing.md +26 -0
  299. package/skills/threejs-guidelines/reference/scene-fundamentals.md +26 -0
  300. package/skills/threejs-guidelines/reference/shaders.md +28 -0
  301. package/skills/threejs-guidelines/reference/textures.md +21 -0
  302. package/skills/threejs-guidelines/reference/webgpu.md +34 -0
  303. package/skills/typescript-guidelines/SKILL.md +37 -0
  304. package/skills/typescript-guidelines/reference/async-without-await.md +32 -0
  305. package/skills/typescript-guidelines/reference/avoid-barrel-exports.md +25 -0
  306. package/skills/typescript-guidelines/reference/avoid-eslint-disable.md +28 -0
  307. package/skills/typescript-guidelines/reference/avoid-reexports.md +26 -0
  308. package/skills/typescript-guidelines/reference/env-access-bracket-notation.md +29 -0
  309. package/skills/typescript-guidelines/reference/numeric-separator-enforcement.md +30 -0
  310. package/skills/typescript-guidelines/reference/template-literals-require-string-conversion.md +26 -0
  311. package/skills/typescript-guidelines/reference/unbound-method-references.md +32 -0
  312. package/skills/typescript-guidelines/reference/unnecessary-async-keywords.md +37 -0
  313. package/skills/typescript-to-lua-guidelines/SKILL.md +33 -0
  314. package/skills/typescript-to-lua-guidelines/reference/avoiding-heavy-features.md +41 -0
  315. package/skills/typescript-to-lua-guidelines/reference/coroutine-patterns.md +49 -0
  316. package/skills/typescript-to-lua-guidelines/reference/function-patterns.md +59 -0
  317. package/skills/typescript-to-lua-guidelines/reference/lua-interop.md +49 -0
  318. package/skills/typescript-to-lua-guidelines/reference/module-organization.md +42 -0
  319. package/skills/typescript-to-lua-guidelines/reference/multi-return-functions.md +47 -0
  320. package/skills/typescript-to-lua-guidelines/reference/namespaces-vs-classes.md +52 -0
  321. package/skills/typescript-to-lua-guidelines/reference/performance-tips.md +68 -0
  322. package/skills/typescript-to-lua-guidelines/reference/stable-tables.md +60 -0
  323. package/skills/typescript-to-lua-guidelines/reference/tsconfig.md +46 -0
  324. package/skills/typescript-to-lua-guidelines/reference/tstl-decorators.md +61 -0
  325. package/skills/typescript-to-lua-guidelines/reference/type-safety.md +79 -0
  326. package/skills/vitest-guidelines/SKILL.md +32 -0
  327. package/skills/vitest-guidelines/reference/cors-preflight-status-code.md +34 -0
  328. package/skills/vitest-guidelines/reference/http-testing.md +57 -0
  329. package/skills/vitest-guidelines/reference/json-response-type-safety.md +40 -0
  330. package/skills/vitest-guidelines/reference/mock-patterns.md +53 -0
  331. package/skills/vitest-guidelines/reference/project-references-path-resolution.md +36 -0
  332. package/skills/vitest-guidelines/reference/test-organization.md +25 -0
  333. package/skills/vitest-guidelines/reference/timestamp-testing.md +55 -0
  334. package/skills/vitest-guidelines/reference/type-safety.md +55 -0
  335. package/skills/vitest-guidelines/reference/typescript-config.md +43 -0
  336. package/skills/zod-guidelines/SKILL.md +33 -0
  337. package/skills/zod-guidelines/reference/default-values-output-type.md +63 -0
  338. package/skills/zod-guidelines/reference/migration-string-validators.md +38 -0
  339. package/skills/zod-guidelines/reference/migration-v4.md +46 -0
  340. package/skills/zod-guidelines/reference/schema-organization.md +73 -0
  341. package/skills/zod-guidelines/reference/validation-patterns.md +37 -0
@@ -0,0 +1,72 @@
1
+ # exception-handling: Specific Exception Handling
2
+
3
+ **Guideline:** Raise and catch specific exception types, never use bare `except`.
4
+
5
+ **Rationale:** Specific exceptions enable precise error handling and better debugging. Bare `except` catches system exceptions like `KeyboardInterrupt` and `SystemExit`, making programs unresponsive. Custom exceptions document error conditions and enable targeted error handling. Specific exception handling improves code reliability and maintainability.
6
+
7
+ **Example:**
8
+
9
+ ```python
10
+ from pathlib import Path
11
+ from typing import Optional
12
+
13
+ # Raise specific exceptions
14
+ def read_user_file(user_id: str) -> str:
15
+ path = Path(f"users/{user_id}.json")
16
+
17
+ if not path.exists():
18
+ raise FileNotFoundError(f"User file not found: {user_id}")
19
+
20
+ if not path.is_file():
21
+ raise ValueError(f"Path is not a file: {path}")
22
+
23
+ return path.read_text()
24
+
25
+ # Catch specific exceptions
26
+ def load_user(user_id: str) -> Optional[dict]:
27
+ try:
28
+ data = read_user_file(user_id)
29
+ return parse_json(data)
30
+ except FileNotFoundError:
31
+ print(f"User {user_id} not found")
32
+ return None
33
+ except ValueError as e:
34
+ print(f"Invalid data: {e}")
35
+ return None
36
+ except Exception as e:
37
+ print(f"Unexpected error: {e}")
38
+ raise
39
+
40
+ # Custom exceptions
41
+ class ValidationError(ValueError):
42
+ """Raised when input validation fails"""
43
+ pass
44
+
45
+ class DatabaseError(RuntimeError):
46
+ """Raised when database operations fail"""
47
+ pass
48
+
49
+ def validate_email(email: str) -> None:
50
+ if "@" not in email:
51
+ raise ValidationError(f"Invalid email format: {email}")
52
+
53
+ # ❌ Avoid bare except
54
+ try:
55
+ risky_operation()
56
+ except: # Don't do this - catches everything including KeyboardInterrupt
57
+ pass
58
+
59
+ # ✅ Better - catch specific exceptions
60
+ try:
61
+ risky_operation()
62
+ except (ValueError, TypeError) as e:
63
+ handle_error(e)
64
+ ```
65
+
66
+ **Techniques:**
67
+ - Raise specific built-in exceptions (`ValueError`, `TypeError`, `FileNotFoundError`)
68
+ - Create custom exceptions by subclassing built-in exceptions
69
+ - Catch specific exceptions or tuples of exceptions
70
+ - Use `except Exception` as a catch-all (not bare `except`)
71
+ - Re-raise unexpected exceptions after logging
72
+ - Provide meaningful error messages with context
@@ -0,0 +1,54 @@
1
+ # generators-comprehensions: Generators and Comprehensions
2
+
3
+ **Guideline:** Use generators and comprehensions for memory-efficient, lazy data processing.
4
+
5
+ **Rationale:** Generators process items on-demand without loading entire datasets into memory, enabling efficient handling of large files and streams. Comprehensions provide concise, readable syntax for transformations. Generator expressions and functions enable pipeline-style processing with minimal memory overhead.
6
+
7
+ **Example:**
8
+
9
+ ```python
10
+ from typing import Iterator, Iterable
11
+ from pathlib import Path
12
+
13
+ # List comprehension
14
+ numbers = [x * 2 for x in range(10) if x % 2 == 0]
15
+
16
+ # Dict comprehension
17
+ squares = {x: x**2 for x in range(10)}
18
+
19
+ # Set comprehension
20
+ unique_lengths = {len(word) for word in words}
21
+
22
+ # Generator expression (lazy, memory efficient)
23
+ total = sum(x**2 for x in range(1000000))
24
+
25
+ # Generator function
26
+ def read_large_file(path: Path) -> Iterator[str]:
27
+ """Read file line by line without loading all into memory"""
28
+ with path.open('r') as f:
29
+ for line in f:
30
+ yield line.strip()
31
+
32
+ # Generator with processing
33
+ def process_items(items: Iterable[str]) -> Iterator[dict[str, any]]:
34
+ """Process items lazily"""
35
+ for item in items:
36
+ if item:
37
+ yield {"value": item, "length": len(item)}
38
+
39
+ # Usage - only processes items as needed
40
+ for processed in process_items(read_large_file(Path("data.txt"))):
41
+ print(processed)
42
+
43
+ # ❌ Bad - loads entire file into memory
44
+ def read_large_file_bad(path: Path) -> list[str]:
45
+ with path.open('r') as f:
46
+ return [line.strip() for line in f] # All in memory!
47
+ ```
48
+
49
+ **Techniques:**
50
+ - Use list/dict/set comprehensions for small, in-memory collections
51
+ - Use generator expressions (parentheses) for large or streamed data
52
+ - Create generator functions with `yield` for lazy iteration
53
+ - Chain generators for pipeline processing
54
+ - Avoid materializing generators until needed (don't convert to list unnecessarily)
@@ -0,0 +1,60 @@
1
+ # pathlib-file-ops: Pathlib for File Operations
2
+
3
+ **Guideline:** Use `pathlib.Path` for all file and directory operations instead of `os.path`.
4
+
5
+ **Rationale:** Pathlib provides object-oriented path manipulation with intuitive methods and operators. The `/` operator for path joining is more readable than `os.path.join()`. Built-in methods like `.read_text()`, `.write_text()`, and `.glob()` simplify common operations. Pathlib is cross-platform and type-safe.
6
+
7
+ **Example:**
8
+
9
+ ```python
10
+ from pathlib import Path
11
+ from typing import Iterator, Optional
12
+
13
+ # Use Path objects
14
+ config_path = Path("config.json")
15
+ data_dir = Path("data")
16
+
17
+ # Path operations
18
+ if config_path.exists():
19
+ content = config_path.read_text()
20
+
21
+ if data_dir.is_dir():
22
+ for file in data_dir.glob("*.txt"):
23
+ process_file(file)
24
+
25
+ # Path construction
26
+ user_dir = Path("users") / "123" / "profile"
27
+ user_dir.mkdir(parents=True, exist_ok=True)
28
+
29
+ # Read/write operations
30
+ def save_data(path: Path, data: str) -> None:
31
+ path.write_text(data)
32
+
33
+ def load_data(path: Path) -> str:
34
+ return path.read_text()
35
+
36
+ # Iterate directory
37
+ def find_python_files(directory: Path) -> Iterator[Path]:
38
+ return directory.rglob("*.py")
39
+
40
+ # Safe file operations
41
+ def read_if_exists(path: Path) -> Optional[str]:
42
+ if path.exists() and path.is_file():
43
+ return path.read_text()
44
+ return None
45
+
46
+ # ❌ Avoid os.path
47
+ import os
48
+ old_path = os.path.join("users", "123", "profile") # Don't do this
49
+
50
+ # ✅ Use Path instead
51
+ new_path = Path("users") / "123" / "profile"
52
+ ```
53
+
54
+ **Techniques:**
55
+ - Create Path objects: `path = Path("file.txt")`
56
+ - Use `/` operator for path joining: `Path("dir") / "file.txt"`
57
+ - Check existence with `.exists()`, `.is_file()`, `.is_dir()`
58
+ - Read/write with `.read_text()`, `.write_text()`, `.read_bytes()`, `.write_bytes()`
59
+ - Glob patterns with `.glob()` and `.rglob()`
60
+ - Create directories with `.mkdir(parents=True, exist_ok=True)`
@@ -0,0 +1,58 @@
1
+ # resource-management: Resource Management with Context Managers
2
+
3
+ **Guideline:** Use context managers (`with` and `async with`) for automatic resource cleanup.
4
+
5
+ **Rationale:** Context managers ensure resources are properly released even when exceptions occur. This prevents resource leaks and simplifies error handling. Custom context managers enable reusable resource management patterns like database transactions.
6
+
7
+ **Example:**
8
+
9
+ ```python
10
+ from pathlib import Path
11
+ from contextlib import contextmanager, asynccontextmanager
12
+ import asyncio
13
+
14
+ # File operations with pathlib
15
+ def read_config(path: Path) -> dict[str, str]:
16
+ with path.open('r') as f:
17
+ return parse_config(f.read())
18
+
19
+ def write_config(path: Path, config: dict[str, str]) -> None:
20
+ with path.open('w') as f:
21
+ f.write(serialize_config(config))
22
+
23
+ # Custom context manager
24
+ @contextmanager
25
+ def database_transaction(connection):
26
+ try:
27
+ yield connection
28
+ connection.commit()
29
+ except Exception:
30
+ connection.rollback()
31
+ raise
32
+
33
+ # Usage
34
+ with database_transaction(conn) as db:
35
+ db.execute("INSERT INTO users ...")
36
+
37
+ # Async context manager
38
+ @asynccontextmanager
39
+ async def async_database_transaction(connection):
40
+ try:
41
+ yield connection
42
+ await connection.commit()
43
+ except Exception:
44
+ await connection.rollback()
45
+ raise
46
+
47
+ # Usage
48
+ async with async_database_transaction(conn) as db:
49
+ await db.execute("INSERT INTO users ...")
50
+ ```
51
+
52
+ **Techniques:**
53
+ - Use `with` for synchronous resource operations
54
+ - Use `async with` for asynchronous resource operations
55
+ - Create custom context managers with `@contextmanager` decorator
56
+ - Create async context managers with `@asynccontextmanager`
57
+ - Handle cleanup in finally blocks or with explicit rollback
58
+ - Use pathlib.Path with context managers for file operations
@@ -0,0 +1,41 @@
1
+ # string-formatting: Modern String Formatting
2
+
3
+ **Guideline:** Use f-strings for all string formatting and interpolation.
4
+
5
+ **Rationale:** F-strings are more readable, faster, and less error-prone than old `%` formatting or `.format()` methods. They support inline expressions, formatting specifiers, and multiline strings. The syntax is concise and makes variable substitution obvious.
6
+
7
+ **Example:**
8
+
9
+ ```python
10
+ # f-strings (preferred)
11
+ name = "Alice"
12
+ age = 30
13
+ message = f"Hello, {name}! You are {age} years old."
14
+
15
+ # f-strings with expressions
16
+ result = f"The answer is {2 + 2}"
17
+
18
+ # f-strings with formatting
19
+ pi = 3.14159
20
+ formatted = f"Pi is approximately {pi:.2f}"
21
+
22
+ # Multiline f-strings
23
+ user = User(id="123", email="user@example.com", name="Alice", created_at=datetime.now())
24
+ summary = f"""
25
+ User Information:
26
+ ID: {user.id}
27
+ Email: {user.email}
28
+ Name: {user.name}
29
+ """
30
+
31
+ # ❌ Avoid old-style formatting
32
+ message_old = "Hello, %s! You are %d years old." % (name, age)
33
+ message_format = "Hello, {}! You are {} years old.".format(name, age)
34
+ ```
35
+
36
+ **Techniques:**
37
+ - Use f-string syntax: `f"text {variable} more text"`
38
+ - Embed expressions directly: `f"result: {2 + 2}"`
39
+ - Apply format specifiers: `f"{value:.2f}"` for decimals
40
+ - Use multiline f-strings with triple quotes for structured text
41
+ - Avoid old `%` formatting and `.format()` methods
@@ -0,0 +1,47 @@
1
+ # type-checking: Type Checking Best Practices
2
+
3
+ **Guideline:** Use type aliases, protocols, and modern type syntax for clear, maintainable type hints.
4
+
5
+ **Rationale:** Type aliases make complex types readable and reusable. Protocols enable structural typing (duck typing with type safety). Using `Sequence` and `Mapping` instead of `list` and `dict` in function parameters enables broader compatibility. Modern union syntax (`|`) is more concise than `Union`. Proper typing enables static analysis and better IDE support.
6
+
7
+ **Example:**
8
+
9
+ ```python
10
+ from typing import TypeAlias, Protocol, Sequence, Mapping
11
+
12
+ # Type aliases
13
+ UserId: TypeAlias = str
14
+ Config: TypeAlias = dict[str, str | int | bool]
15
+
16
+ # Protocol for structural typing (duck typing with types)
17
+ class Drawable(Protocol):
18
+ def draw(self) -> None: ...
19
+
20
+ def render(item: Drawable) -> None:
21
+ item.draw()
22
+
23
+ # Sequence for read-only list-like
24
+ def sum_numbers(numbers: Sequence[int]) -> int:
25
+ return sum(numbers)
26
+
27
+ # Mapping for read-only dict-like
28
+ def get_value(config: Mapping[str, str], key: str, default: str = "") -> str:
29
+ return config.get(key, default)
30
+
31
+ # Use | for union types (Python 3.10+)
32
+ def parse_value(value: str | int | float) -> float:
33
+ return float(value)
34
+
35
+ # Use None instead of Optional when clear
36
+ def find_user(user_id: str) -> User | None:
37
+ """Returns User or None if not found"""
38
+ pass
39
+ ```
40
+
41
+ **Techniques:**
42
+ - Create type aliases with `TypeAlias` for complex types
43
+ - Use `Protocol` for structural typing requirements
44
+ - Use `Sequence` for read-only list-like parameters
45
+ - Use `Mapping` for read-only dict-like parameters
46
+ - Use `|` for union types instead of `Optional` or `Union`
47
+ - Return `Type | None` instead of `Optional[Type]` when clear
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: react-guidelines
3
+ description: >-
4
+ Trigger on `.tsx/.jsx` files with React imports, Vite config. Use when building React 19+ components. Apply for Server Components, Form Actions, new hooks, Suspense streaming, React Compiler. Keywords: React 19, RSC, Server Components, useActionState, useOptimistic, use(), Suspense, Form Actions, 'use client', 'use server', ref as prop, React Compiler.
5
+ ---
6
+
7
+ # React Coding Guidelines
8
+
9
+ ## Requirements
10
+
11
+ - React ≥ 19, Vite ≥ 6, Tailwind ≥ 4, Headless UI.
12
+
13
+ ## React 19 Essentials
14
+
15
+ - **Server-first** - Components run on server by default; add `'use client'` only for interactivity
16
+ - **Compiler handles memoization** - Write clean code; React Compiler optimizes automatically
17
+ - **ref as prop** - Pass `ref` directly, no `forwardRef` wrapper needed
18
+ - **Context as provider** - Use `<Context value={}>` directly, not `.Provider`
19
+ - **Form Actions** - Use `useActionState` and `FormData` instead of controlled inputs
20
+ - **New hooks** - `useActionState`, `useOptimistic`, `use()`, `useFormStatus`
21
+ - **Native metadata** - Use `<title>`, `<meta>`, `<link>` anywhere, auto-hoisted to `<head>`
22
+
23
+ ## Quick Reference
24
+
25
+ | Feature | React 18 | React 19+ |
26
+ |---------|----------|-----------|
27
+ | Memoization | Manual (`useMemo`, `useCallback`) | React Compiler (automatic) |
28
+ | Forward refs | `forwardRef()` wrapper | `ref` as regular prop |
29
+ | Context provider | `<Context.Provider value={}>` | `<Context value={}>` |
30
+ | Form state | Custom `useState` | `useActionState` hook |
31
+ | Optimistic updates | Manual state | `useOptimistic` hook |
32
+ | Read promises | Not possible | `use()` hook |
33
+ | Conditional context | Not possible | `use(Context)` after conditionals |
34
+ | Form pending | Manual tracking | `useFormStatus` hook |
35
+
36
+ ## Example
37
+
38
+ ```tsx
39
+ // React 19 Form with Actions
40
+ 'use client';
41
+ import { useActionState } from 'react';
42
+
43
+ function ContactForm() {
44
+ const [state, formAction, isPending] = useActionState(
45
+ async (prev, formData) => {
46
+ const result = await submitForm(Object.fromEntries(formData));
47
+ if (result.error) return { error: result.error };
48
+ return { success: true };
49
+ },
50
+ null
51
+ );
52
+
53
+ return (
54
+ <form action={formAction}>
55
+ <input name="email" type="email" disabled={isPending} />
56
+ <button disabled={isPending}>
57
+ {isPending ? 'Submitting...' : 'Submit'}
58
+ </button>
59
+ {state?.error && <p className="error">{state.error}</p>}
60
+ </form>
61
+ );
62
+ }
63
+
64
+ // ref as prop (no forwardRef needed)
65
+ function Input({ ref, ...props }: { ref?: React.Ref<HTMLInputElement> }) {
66
+ return <input ref={ref} {...props} />;
67
+ }
68
+
69
+ // Context as provider
70
+ const ThemeContext = createContext('light');
71
+
72
+ function App({ children }) {
73
+ return <ThemeContext value="dark">{children}</ThemeContext>;
74
+ }
75
+ ```
76
+
77
+ ## Essentials
78
+
79
+ - **Component design** - Small, composable; lift/minimize state; derive when possible, see [reference/component-design.md](reference/component-design.md)
80
+ - **Performance** - Let React Compiler handle memoization; manual `useMemo`/`useCallback` for effect deps only, see [reference/performance-optimization.md](reference/performance-optimization.md)
81
+ - **Rendering** - Prefer Server Components; use Suspense for streaming, see [reference/suspense-streaming.md](reference/suspense-streaming.md)
82
+ - **Accessibility** - Semantic HTML, ARIA, keyboard/focus management, see [reference/accessibility.md](reference/accessibility.md)
83
+ - **Custom hooks** - Extract reusable logic, see [reference/hooks.md](reference/hooks.md)
84
+
85
+ ## Progressive Disclosure
86
+
87
+ ### Guidelines
88
+
89
+ - Read [reference/component-design.md](reference/component-design.md) - When breaking down large components or managing state lifting
90
+ - Read [reference/state-management.md](reference/state-management.md) - When choosing between useState, useReducer, or Context
91
+ - Read [reference/performance-optimization.md](reference/performance-optimization.md) - When components re-render unnecessarily or performance lags
92
+ - Read [reference/hooks.md](reference/hooks.md) - When extracting reusable logic or creating custom hooks
93
+ - Read [reference/accessibility.md](reference/accessibility.md) - When adding keyboard navigation or screen reader support
94
+ - Read [reference/new-hooks.md](reference/new-hooks.md) - When using useActionState, useOptimistic, use(), or useFormStatus
95
+ - Read [reference/server-components.md](reference/server-components.md) - When building with RSC, Server Actions, or 'use server'/'use client' directives
96
+ - Read [reference/suspense-streaming.md](reference/suspense-streaming.md) - When using Suspense boundaries, streaming, or error handling
97
+ - Read [reference/react-compiler.md](reference/react-compiler.md) - When setting up React Compiler or understanding automatic memoization
98
+ - Read [reference/activity-effect-event.md](reference/activity-effect-event.md) - When using Activity component or useEffectEvent
99
+
100
+ ### Migration from React 18
101
+
102
+ - Read [reference/migration-paradigm-shifts.md](reference/migration-paradigm-shifts.md) - When adapting mental model from React 18 to React 19
103
+ - Read [reference/migration-anti-patterns.md](reference/migration-anti-patterns.md) - When avoiding outdated patterns (useEffect for data, manual loading states)
104
+ - Read [reference/migration-deprecations.md](reference/migration-deprecations.md) - When migrating from React 18 or handling removed APIs
105
+ - Read [reference/migration-typescript.md](reference/migration-typescript.md) - When fixing TypeScript errors after React 19 upgrade
@@ -0,0 +1,31 @@
1
+ # accessibility: Accessibility Best Practices
2
+
3
+ **Guideline:** Use semantic HTML, ARIA labels/roles, proper focus management, and keyboard navigation for inclusive components.
4
+
5
+ **Rationale:** Accessible design works for all users (screen readers, keyboards, assistive tech); legal requirement in many jurisdictions.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ function Modal({ isOpen, onClose, title, children }) {
10
+ const closeButtonRef = useRef<HTMLButtonElement>(null);
11
+ useEffect(() => { if (isOpen) closeButtonRef.current?.focus(); }, [isOpen]);
12
+ if (!isOpen) return null;
13
+ return (
14
+ <div role="dialog" aria-modal="true" aria-labelledby="modal-title">
15
+ <h2 id="modal-title">{title}</h2>
16
+ {children}
17
+ <button ref={closeButtonRef} onClick={onClose} aria-label="Close modal">
18
+ Close
19
+ </button>
20
+ </div>
21
+ );
22
+ }
23
+ ```
24
+
25
+ **Techniques:**
26
+ - Semantic HTML: `<button>`, `<nav>`, `<main>`, `<article>` instead of divs
27
+ - ARIA attributes: aria-label, aria-labelledby, aria-describedby, role="dialog", role="list"
28
+ - Focus management: useRef + useEffect to move focus to interactive elements
29
+ - Visually hidden text: sr-only class for screen readers ("sr-only" Tailwind utility)
30
+ - Icon buttons: Always include aria-label; never icon-only without text
31
+ - Keyboard navigation: All interactive elements must be focusable via Tab
@@ -0,0 +1,42 @@
1
+ # activity-effect-event: Activity Component & useEffectEvent
2
+
3
+ **Guideline:** Use `<Activity mode="hidden">` to preserve state; use `useEffectEvent` for Effect logic that reads latest values without re-triggering.
4
+
5
+ **Rationale:** Activity preserves DOM state during hide (tabs, accordions); useEffectEvent eliminates false re-runs caused by dependency changes.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ // Activity - preserve state when hidden
10
+ function TabContainer({ tabs, activeTab }) {
11
+ return tabs.map(tab => (
12
+ <Activity
13
+ key={tab.id}
14
+ mode={tab.id === activeTab ? 'visible' : 'hidden'}
15
+ >
16
+ <TabContent tab={tab} /> {/* State preserved even when hidden */}
17
+ </Activity>
18
+ ));
19
+ }
20
+
21
+ // useEffectEvent - read theme without reconnecting
22
+ function ChatRoom({ roomId, theme }) {
23
+ const onConnected = useEffectEvent(() => {
24
+ showNotification(`Connected to ${roomId}`, theme);
25
+ });
26
+ useEffect(() => {
27
+ const connection = createConnection(roomId);
28
+ connection.on('connected', onConnected);
29
+ connection.connect();
30
+ return () => connection.disconnect();
31
+ }, [roomId]); // theme NOT here - doesn't reconnect
32
+ }
33
+ ```
34
+
35
+ **Techniques:**
36
+ - Activity visible/hidden: Preserves state of hidden components (vs conditional render which destroys state)
37
+ - Activity pre-rendering: Load content in background for faster transition when shown
38
+ - useEffectEvent: Read latest prop/state without adding to dependencies; reads current value
39
+ - Solves false re-runs: Chat reconnect on theme change; analytics re-fires on items change
40
+ - Media handling: Activity doesn't pause video/audio automatically; use useLayoutEffect to pause
41
+ - Deprecating useLayoutEffect: useEffectEvent replaces some useLayoutEffect patterns in React 19
42
+
@@ -0,0 +1,57 @@
1
+ # component-design: Component Design Patterns
2
+
3
+ **Guideline:** Build small, composable components with minimal state lifting and derived values.
4
+
5
+ **Rationale:** Small components are easier to test, reuse, and maintain. Keeping state local reduces complexity and re-renders. Deriving values prevents synchronization bugs.
6
+
7
+ **Example:**
8
+
9
+ ```tsx
10
+ import {memo, useMemo, useState} from "react";
11
+
12
+ type Item = {id: string; value: number};
13
+
14
+ // Small, focused component
15
+ export const List = memo(function List({items}: {items: Item[]}) {
16
+ const [query, setQuery] = useState("");
17
+
18
+ // Derived state - calculated from items and query
19
+ const filteredItems = useMemo(
20
+ () => items.filter((item) => String(item.value).includes(query)),
21
+ [items, query],
22
+ );
23
+
24
+ return (
25
+ <div>
26
+ <SearchInput value={query} onChange={setQuery} />
27
+ <ItemList items={filteredItems} />
28
+ </div>
29
+ );
30
+ });
31
+
32
+ // ✅ Good: Derived state
33
+ function CartTotal({items}: {items: CartItem[]}) {
34
+ const total = useMemo(
35
+ () => items.reduce((sum, item) => sum + item.price, 0),
36
+ [items],
37
+ );
38
+ return <div>Total: ${total}</div>;
39
+ }
40
+
41
+ // ❌ Bad: Duplicated state
42
+ function CartTotalBad({items}: {items: CartItem[]}) {
43
+ const [total, setTotal] = useState(0);
44
+
45
+ useEffect(() => {
46
+ setTotal(items.reduce((sum, item) => sum + item.price, 0));
47
+ }, [items]);
48
+
49
+ return <div>Total: ${total}</div>;
50
+ }
51
+ ```
52
+
53
+ **Techniques:**
54
+ - Break down large components into smaller, focused pieces
55
+ - Keep state in the lowest common ancestor that needs it
56
+ - Calculate derived values using `useMemo` instead of storing them in state
57
+ - Extract reusable logic into custom hooks
@@ -0,0 +1,39 @@
1
+ # filename: hooks
2
+
3
+ **Guideline:** Follow Rules of Hooks (top-level only, from functions/custom hooks); extract reusable logic into custom hooks with `use` prefix.
4
+
5
+ **Rationale:** Hook rules ensure predictable behavior; custom hooks enable logic reuse without prop drilling; focused hooks maintain single responsibility.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ // useApi - fetch with loading/error states
10
+ function useApi<T>(url: string) {
11
+ const [data, setData] = useState<T | null>(null);
12
+ const [loading, setLoading] = useState(true);
13
+ const [error, setError] = useState<Error | null>(null);
14
+
15
+ useEffect(() => {
16
+ let cancelled = false;
17
+ fetch(url).then(r => r.json()).then(json => {
18
+ if (!cancelled) {setData(json); setError(null);}
19
+ }).catch(err => {
20
+ if (!cancelled) setError(err);
21
+ }).finally(() => {
22
+ if (!cancelled) setLoading(false);
23
+ });
24
+ return () => {cancelled = true;};
25
+ }, [url]);
26
+
27
+ return {data, loading, error};
28
+ }
29
+ ```
30
+
31
+ **Techniques:**
32
+ - Rules of Hooks: Call only at top-level (not loops/conditions); only from functions/custom hooks
33
+ - Custom hooks: Extract reusable logic; name with `use` prefix; single responsibility
34
+ - useApi: Fetch with cancellation flag; handle loading/error/data states; type-generic
35
+ - useLocalStorage: Parse JSON on read; stringify on write; handle errors gracefully
36
+ - usePrevious: Store value in `useRef`; update in `useEffect`; return previous on next render
37
+ - useDebounce: Delay state updates with `setTimeout`; cleanup on unmount
38
+ - Error handling: Type check errors (`instanceof Error`); cleanup in finally blocks
39
+ - Dependencies: Always include full dependency array; avoid stale closures
@@ -0,0 +1,33 @@
1
+ # migration-anti-patterns: React 19 Anti-Patterns
2
+
3
+ **Guideline:** Replace useEffect data fetching with Server Components; use Form Actions instead of useState for forms; let Compiler handle memoization.
4
+
5
+ **Rationale:** React 19 provides cleaner solutions; old patterns create unnecessary complexity and performance overhead.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ // OLD: useEffect + loading state
10
+ function UserProfile({ userId }) {
11
+ const [user, setUser] = useState(null), [loading, setLoading] = useState(true);
12
+ useEffect(() => {
13
+ fetchUser(userId).then(setUser).finally(() => setLoading(false));
14
+ }, [userId]);
15
+ if (loading) return <Spinner />;
16
+ return <Profile user={user} />;
17
+ }
18
+
19
+ // NEW: Server Component
20
+ async function UserProfile({ userId }) {
21
+ const user = await fetchUser(userId);
22
+ return <Profile user={user} />;
23
+ }
24
+ ```
25
+
26
+ **Techniques:**
27
+ - Remove useEffect data fetching → Use Server Components (async/await, direct DB)
28
+ - Remove manual loading state → Use useActionState and Suspense
29
+ - Remove useState form fields → Use FormData + Server Actions
30
+ - Remove excessive useMemo/useCallback → Let React Compiler optimize
31
+ - Remove forwardRef wrapper → Pass ref as regular prop in React 19
32
+ - Remove 'use client' everywhere → Server Components by default; client islands only
33
+ - Remove <Suspense/> for errors only → Combine with Error Boundaries for full coverage