@nerdev/skillset 0.2.1

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 (567) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +351 -0
  3. package/bin/skillset.mjs +205 -0
  4. package/curations/README.md +53 -0
  5. package/curations/TEMPLATE/WHY.md +23 -0
  6. package/curations/TEMPLATE/overlay/SKILL.md +6 -0
  7. package/curations/impeccable/WHY.md +34 -0
  8. package/curations/impeccable/overlay/SKILL.md +116 -0
  9. package/package.json +43 -0
  10. package/scripts/ste-gate.mjs +39 -0
  11. package/scripts/ste-lint.py +201 -0
  12. package/scripts/sync.mjs +174 -0
  13. package/skills/ai-agent/agent-docs-writer/SKILL.md +105 -0
  14. package/skills/ai-agent/agent-docs-writer/references/principles.md +73 -0
  15. package/skills/ai-agent/agent-docs-writer/templates/AGENTS.template.md +44 -0
  16. package/skills/ai-agent/agent-docs-writer/templates/README.template.md +19 -0
  17. package/skills/ai-agent/ultra-context-engine/SKILL.md +941 -0
  18. package/skills/architecture/blueprint/SKILL.md +191 -0
  19. package/skills/architecture/code-tour/SKILL.md +204 -0
  20. package/skills/architecture/progress-guard/SKILL.md +148 -0
  21. package/skills/architecture/search-first/SKILL.md +97 -0
  22. package/skills/backend/api-design/SKILL.md +456 -0
  23. package/skills/backend/auth/SKILL.md +596 -0
  24. package/skills/backend/database/SKILL.md +431 -0
  25. package/skills/backend/realtime/SKILL.md +670 -0
  26. package/skills/backend/security/SKILL.md +590 -0
  27. package/skills/business/brag/SKILL.md +177 -0
  28. package/skills/business/brag/assets/music/README.md +20 -0
  29. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
  30. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
  31. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
  32. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
  33. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
  34. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
  35. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
  36. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
  37. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
  38. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
  39. package/skills/business/brag/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
  40. package/skills/business/brag/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
  41. package/skills/business/brag/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
  42. package/skills/business/brag/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
  43. package/skills/business/brag/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
  44. package/skills/business/brag/assets/sfx/casino/card-fan-1.ogg +0 -0
  45. package/skills/business/brag/assets/sfx/casino/card-fan-2.ogg +0 -0
  46. package/skills/business/brag/assets/sfx/casino/card-place-1.ogg +0 -0
  47. package/skills/business/brag/assets/sfx/casino/card-place-2.ogg +0 -0
  48. package/skills/business/brag/assets/sfx/casino/card-place-3.ogg +0 -0
  49. package/skills/business/brag/assets/sfx/casino/card-place-4.ogg +0 -0
  50. package/skills/business/brag/assets/sfx/casino/card-shove-1.ogg +0 -0
  51. package/skills/business/brag/assets/sfx/casino/card-shove-2.ogg +0 -0
  52. package/skills/business/brag/assets/sfx/casino/card-shove-3.ogg +0 -0
  53. package/skills/business/brag/assets/sfx/casino/card-shove-4.ogg +0 -0
  54. package/skills/business/brag/assets/sfx/casino/card-shuffle.ogg +0 -0
  55. package/skills/business/brag/assets/sfx/casino/card-slide-1.ogg +0 -0
  56. package/skills/business/brag/assets/sfx/casino/card-slide-2.ogg +0 -0
  57. package/skills/business/brag/assets/sfx/casino/card-slide-3.ogg +0 -0
  58. package/skills/business/brag/assets/sfx/casino/card-slide-4.ogg +0 -0
  59. package/skills/business/brag/assets/sfx/casino/card-slide-5.ogg +0 -0
  60. package/skills/business/brag/assets/sfx/casino/card-slide-6.ogg +0 -0
  61. package/skills/business/brag/assets/sfx/casino/card-slide-7.ogg +0 -0
  62. package/skills/business/brag/assets/sfx/casino/card-slide-8.ogg +0 -0
  63. package/skills/business/brag/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
  64. package/skills/business/brag/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
  65. package/skills/business/brag/assets/sfx/casino/chip-lay-1.ogg +0 -0
  66. package/skills/business/brag/assets/sfx/casino/chip-lay-2.ogg +0 -0
  67. package/skills/business/brag/assets/sfx/casino/chip-lay-3.ogg +0 -0
  68. package/skills/business/brag/assets/sfx/casino/chips-collide-1.ogg +0 -0
  69. package/skills/business/brag/assets/sfx/casino/chips-collide-2.ogg +0 -0
  70. package/skills/business/brag/assets/sfx/casino/chips-collide-3.ogg +0 -0
  71. package/skills/business/brag/assets/sfx/casino/chips-collide-4.ogg +0 -0
  72. package/skills/business/brag/assets/sfx/casino/chips-handle-1.ogg +0 -0
  73. package/skills/business/brag/assets/sfx/casino/chips-handle-2.ogg +0 -0
  74. package/skills/business/brag/assets/sfx/casino/chips-handle-3.ogg +0 -0
  75. package/skills/business/brag/assets/sfx/casino/chips-handle-4.ogg +0 -0
  76. package/skills/business/brag/assets/sfx/casino/chips-handle-6.ogg +0 -0
  77. package/skills/business/brag/assets/sfx/casino/chips-stack-1.ogg +0 -0
  78. package/skills/business/brag/assets/sfx/casino/chips-stack-2.ogg +0 -0
  79. package/skills/business/brag/assets/sfx/casino/chips-stack-3.ogg +0 -0
  80. package/skills/business/brag/assets/sfx/casino/chips-stack-4.ogg +0 -0
  81. package/skills/business/brag/assets/sfx/casino/chips-stack-5.ogg +0 -0
  82. package/skills/business/brag/assets/sfx/casino/chips-stack-6.ogg +0 -0
  83. package/skills/business/brag/assets/sfx/casino/dice-grab-1.ogg +0 -0
  84. package/skills/business/brag/assets/sfx/casino/dice-grab-2.ogg +0 -0
  85. package/skills/business/brag/assets/sfx/casino/dice-shake-1.ogg +0 -0
  86. package/skills/business/brag/assets/sfx/casino/dice-shake-2.ogg +0 -0
  87. package/skills/business/brag/assets/sfx/casino/dice-shake-3.ogg +0 -0
  88. package/skills/business/brag/assets/sfx/casino/dice-throw-1.ogg +0 -0
  89. package/skills/business/brag/assets/sfx/casino/dice-throw-2.ogg +0 -0
  90. package/skills/business/brag/assets/sfx/casino/dice-throw-3.ogg +0 -0
  91. package/skills/business/brag/assets/sfx/casino/die-throw-1.ogg +0 -0
  92. package/skills/business/brag/assets/sfx/casino/die-throw-2.ogg +0 -0
  93. package/skills/business/brag/assets/sfx/casino/die-throw-3.ogg +0 -0
  94. package/skills/business/brag/assets/sfx/casino/die-throw-4.ogg +0 -0
  95. package/skills/business/brag/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
  96. package/skills/business/brag/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
  97. package/skills/business/brag/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
  98. package/skills/business/brag/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
  99. package/skills/business/brag/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
  100. package/skills/business/brag/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
  101. package/skills/business/brag/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
  102. package/skills/business/brag/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
  103. package/skills/business/brag/assets/sfx/impact/footstep_grass_000.ogg +0 -0
  104. package/skills/business/brag/assets/sfx/impact/footstep_grass_001.ogg +0 -0
  105. package/skills/business/brag/assets/sfx/impact/footstep_grass_002.ogg +0 -0
  106. package/skills/business/brag/assets/sfx/impact/footstep_grass_003.ogg +0 -0
  107. package/skills/business/brag/assets/sfx/impact/footstep_grass_004.ogg +0 -0
  108. package/skills/business/brag/assets/sfx/impact/footstep_snow_000.ogg +0 -0
  109. package/skills/business/brag/assets/sfx/impact/footstep_snow_001.ogg +0 -0
  110. package/skills/business/brag/assets/sfx/impact/footstep_snow_002.ogg +0 -0
  111. package/skills/business/brag/assets/sfx/impact/footstep_snow_003.ogg +0 -0
  112. package/skills/business/brag/assets/sfx/impact/footstep_snow_004.ogg +0 -0
  113. package/skills/business/brag/assets/sfx/impact/footstep_wood_000.ogg +0 -0
  114. package/skills/business/brag/assets/sfx/impact/footstep_wood_001.ogg +0 -0
  115. package/skills/business/brag/assets/sfx/impact/footstep_wood_002.ogg +0 -0
  116. package/skills/business/brag/assets/sfx/impact/footstep_wood_003.ogg +0 -0
  117. package/skills/business/brag/assets/sfx/impact/footstep_wood_004.ogg +0 -0
  118. package/skills/business/brag/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
  119. package/skills/business/brag/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
  120. package/skills/business/brag/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
  121. package/skills/business/brag/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
  122. package/skills/business/brag/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
  123. package/skills/business/brag/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
  124. package/skills/business/brag/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
  125. package/skills/business/brag/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
  126. package/skills/business/brag/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
  127. package/skills/business/brag/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
  128. package/skills/business/brag/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
  129. package/skills/business/brag/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
  130. package/skills/business/brag/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
  131. package/skills/business/brag/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
  132. package/skills/business/brag/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
  133. package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
  134. package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
  135. package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
  136. package/skills/business/brag/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
  137. package/skills/business/brag/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
  138. package/skills/business/brag/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
  139. package/skills/business/brag/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
  140. package/skills/business/brag/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
  141. package/skills/business/brag/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
  142. package/skills/business/brag/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
  143. package/skills/business/brag/assets/sfx/impact/impactMining_001.ogg +0 -0
  144. package/skills/business/brag/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
  145. package/skills/business/brag/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
  146. package/skills/business/brag/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
  147. package/skills/business/brag/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
  148. package/skills/business/brag/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
  149. package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
  150. package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
  151. package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
  152. package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
  153. package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
  154. package/skills/business/brag/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
  155. package/skills/business/brag/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
  156. package/skills/business/brag/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
  157. package/skills/business/brag/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
  158. package/skills/business/brag/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
  159. package/skills/business/brag/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
  160. package/skills/business/brag/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
  161. package/skills/business/brag/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
  162. package/skills/business/brag/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
  163. package/skills/business/brag/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
  164. package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
  165. package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
  166. package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
  167. package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
  168. package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
  169. package/skills/business/brag/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
  170. package/skills/business/brag/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
  171. package/skills/business/brag/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
  172. package/skills/business/brag/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
  173. package/skills/business/brag/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
  174. package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
  175. package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
  176. package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
  177. package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
  178. package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
  179. package/skills/business/brag/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
  180. package/skills/business/brag/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
  181. package/skills/business/brag/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
  182. package/skills/business/brag/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
  183. package/skills/business/brag/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
  184. package/skills/business/brag/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
  185. package/skills/business/brag/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
  186. package/skills/business/brag/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
  187. package/skills/business/brag/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
  188. package/skills/business/brag/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
  189. package/skills/business/brag/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
  190. package/skills/business/brag/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
  191. package/skills/business/brag/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
  192. package/skills/business/brag/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
  193. package/skills/business/brag/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
  194. package/skills/business/brag/assets/sfx/impact/impactWood_light_000.ogg +0 -0
  195. package/skills/business/brag/assets/sfx/impact/impactWood_light_001.ogg +0 -0
  196. package/skills/business/brag/assets/sfx/impact/impactWood_light_002.ogg +0 -0
  197. package/skills/business/brag/assets/sfx/impact/impactWood_light_003.ogg +0 -0
  198. package/skills/business/brag/assets/sfx/impact/impactWood_light_004.ogg +0 -0
  199. package/skills/business/brag/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
  200. package/skills/business/brag/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
  201. package/skills/business/brag/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
  202. package/skills/business/brag/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
  203. package/skills/business/brag/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
  204. package/skills/business/brag/assets/sfx/interface/bong_001.ogg +0 -0
  205. package/skills/business/brag/assets/sfx/interface/click_001.ogg +0 -0
  206. package/skills/business/brag/assets/sfx/interface/click_002.ogg +0 -0
  207. package/skills/business/brag/assets/sfx/interface/click_003.ogg +0 -0
  208. package/skills/business/brag/assets/sfx/interface/click_004.ogg +0 -0
  209. package/skills/business/brag/assets/sfx/interface/click_005.ogg +0 -0
  210. package/skills/business/brag/assets/sfx/interface/drop_001.ogg +0 -0
  211. package/skills/business/brag/assets/sfx/interface/drop_002.ogg +0 -0
  212. package/skills/business/brag/assets/sfx/interface/drop_003.ogg +0 -0
  213. package/skills/business/brag/assets/sfx/interface/error_005.ogg +0 -0
  214. package/skills/business/brag/assets/sfx/interface/error_006.ogg +0 -0
  215. package/skills/business/brag/assets/sfx/interface/glitch_002.ogg +0 -0
  216. package/skills/business/brag/assets/sfx/interface/glitch_004.ogg +0 -0
  217. package/skills/business/brag/assets/sfx/interface/select_008.ogg +0 -0
  218. package/skills/business/brag/assets/sfx/interface/switch_001.ogg +0 -0
  219. package/skills/business/brag/assets/sfx/interface/switch_002.ogg +0 -0
  220. package/skills/business/brag/assets/sfx/interface/switch_004.ogg +0 -0
  221. package/skills/business/brag/assets/sfx/interface/switch_005.ogg +0 -0
  222. package/skills/business/brag/assets/sfx/interface/switch_006.ogg +0 -0
  223. package/skills/business/brag/assets/sfx/interface/switch_007.ogg +0 -0
  224. package/skills/business/brag/assets/sfx/keyboard/keypress-001.wav +0 -0
  225. package/skills/business/brag/assets/sfx/keyboard/keypress-002.wav +0 -0
  226. package/skills/business/brag/assets/sfx/keyboard/keypress-003.wav +0 -0
  227. package/skills/business/brag/assets/sfx/keyboard/keypress-004.wav +0 -0
  228. package/skills/business/brag/assets/sfx/keyboard/keypress-005.wav +0 -0
  229. package/skills/business/brag/assets/sfx/keyboard/keypress-006.wav +0 -0
  230. package/skills/business/brag/assets/sfx/keyboard/keypress-007.wav +0 -0
  231. package/skills/business/brag/assets/sfx/keyboard/keypress-008.wav +0 -0
  232. package/skills/business/brag/assets/sfx/keyboard/keypress-009.wav +0 -0
  233. package/skills/business/brag/assets/sfx/keyboard/keypress-010.wav +0 -0
  234. package/skills/business/brag/assets/sfx/keyboard/keypress-011.wav +0 -0
  235. package/skills/business/brag/assets/sfx/keyboard/keypress-012.wav +0 -0
  236. package/skills/business/brag/assets/sfx/keyboard/keypress-013.wav +0 -0
  237. package/skills/business/brag/assets/sfx/keyboard/keypress-014.wav +0 -0
  238. package/skills/business/brag/assets/sfx/keyboard/keypress-015.wav +0 -0
  239. package/skills/business/brag/assets/sfx/keyboard/keypress-016.wav +0 -0
  240. package/skills/business/brag/assets/sfx/keyboard/keypress-017.wav +0 -0
  241. package/skills/business/brag/assets/sfx/keyboard/keypress-018.wav +0 -0
  242. package/skills/business/brag/assets/sfx/keyboard/keypress-019.wav +0 -0
  243. package/skills/business/brag/assets/sfx/keyboard/keypress-020.wav +0 -0
  244. package/skills/business/brag/assets/sfx/keyboard/keypress-021.wav +0 -0
  245. package/skills/business/brag/assets/sfx/keyboard/keypress-022.wav +0 -0
  246. package/skills/business/brag/assets/sfx/keyboard/keypress-023.wav +0 -0
  247. package/skills/business/brag/assets/sfx/keyboard/keypress-024.wav +0 -0
  248. package/skills/business/brag/assets/sfx/keyboard/keypress-025.wav +0 -0
  249. package/skills/business/brag/assets/sfx/keyboard/keypress-026.wav +0 -0
  250. package/skills/business/brag/assets/sfx/keyboard/keypress-027.wav +0 -0
  251. package/skills/business/brag/assets/sfx/keyboard/keypress-028.wav +0 -0
  252. package/skills/business/brag/assets/sfx/keyboard/keypress-029.wav +0 -0
  253. package/skills/business/brag/assets/sfx/keyboard/keypress-030.wav +0 -0
  254. package/skills/business/brag/assets/sfx/keyboard/keypress-031.wav +0 -0
  255. package/skills/business/brag/assets/sfx/keyboard/keypress-032.wav +0 -0
  256. package/skills/business/brag/assets/sfx/sfx-analysis.json +15584 -0
  257. package/skills/business/brag/assets/sfx/sfx-analysis.md +75 -0
  258. package/skills/business/brag/assets/sfx/ui/click1.ogg +0 -0
  259. package/skills/business/brag/assets/sfx/ui/click2.ogg +0 -0
  260. package/skills/business/brag/assets/sfx/ui/click3.ogg +0 -0
  261. package/skills/business/brag/assets/sfx/ui/click4.ogg +0 -0
  262. package/skills/business/brag/assets/sfx/ui/click5.ogg +0 -0
  263. package/skills/business/brag/assets/sfx/ui/mouseclick1.ogg +0 -0
  264. package/skills/business/brag/assets/sfx/ui/rollover1.ogg +0 -0
  265. package/skills/business/brag/assets/sfx/ui/rollover2.ogg +0 -0
  266. package/skills/business/brag/assets/sfx/ui/rollover4.ogg +0 -0
  267. package/skills/business/brag/assets/sfx/ui/rollover5.ogg +0 -0
  268. package/skills/business/brag/assets/sfx/ui/switch1.ogg +0 -0
  269. package/skills/business/brag/assets/sfx/ui/switch10.ogg +0 -0
  270. package/skills/business/brag/assets/sfx/ui/switch11.ogg +0 -0
  271. package/skills/business/brag/assets/sfx/ui/switch12.ogg +0 -0
  272. package/skills/business/brag/assets/sfx/ui/switch13.ogg +0 -0
  273. package/skills/business/brag/assets/sfx/ui/switch14.ogg +0 -0
  274. package/skills/business/brag/assets/sfx/ui/switch15.ogg +0 -0
  275. package/skills/business/brag/assets/sfx/ui/switch16.ogg +0 -0
  276. package/skills/business/brag/assets/sfx/ui/switch17.ogg +0 -0
  277. package/skills/business/brag/assets/sfx/ui/switch18.ogg +0 -0
  278. package/skills/business/brag/assets/sfx/ui/switch19.ogg +0 -0
  279. package/skills/business/brag/assets/sfx/ui/switch2.ogg +0 -0
  280. package/skills/business/brag/assets/sfx/ui/switch20.ogg +0 -0
  281. package/skills/business/brag/assets/sfx/ui/switch21.ogg +0 -0
  282. package/skills/business/brag/assets/sfx/ui/switch22.ogg +0 -0
  283. package/skills/business/brag/assets/sfx/ui/switch23.ogg +0 -0
  284. package/skills/business/brag/assets/sfx/ui/switch24.ogg +0 -0
  285. package/skills/business/brag/assets/sfx/ui/switch25.ogg +0 -0
  286. package/skills/business/brag/assets/sfx/ui/switch26.ogg +0 -0
  287. package/skills/business/brag/assets/sfx/ui/switch27.ogg +0 -0
  288. package/skills/business/brag/assets/sfx/ui/switch28.ogg +0 -0
  289. package/skills/business/brag/assets/sfx/ui/switch29.ogg +0 -0
  290. package/skills/business/brag/assets/sfx/ui/switch3.ogg +0 -0
  291. package/skills/business/brag/assets/sfx/ui/switch30.ogg +0 -0
  292. package/skills/business/brag/assets/sfx/ui/switch31.ogg +0 -0
  293. package/skills/business/brag/assets/sfx/ui/switch32.ogg +0 -0
  294. package/skills/business/brag/assets/sfx/ui/switch33.ogg +0 -0
  295. package/skills/business/brag/assets/sfx/ui/switch34.ogg +0 -0
  296. package/skills/business/brag/assets/sfx/ui/switch35.ogg +0 -0
  297. package/skills/business/brag/assets/sfx/ui/switch36.ogg +0 -0
  298. package/skills/business/brag/assets/sfx/ui/switch37.ogg +0 -0
  299. package/skills/business/brag/assets/sfx/ui/switch38.ogg +0 -0
  300. package/skills/business/brag/assets/sfx/ui/switch4.ogg +0 -0
  301. package/skills/business/brag/assets/sfx/ui/switch5.ogg +0 -0
  302. package/skills/business/brag/assets/sfx/ui/switch6.ogg +0 -0
  303. package/skills/business/brag/assets/sfx/ui/switch7.ogg +0 -0
  304. package/skills/business/brag/assets/sfx/ui/switch8.ogg +0 -0
  305. package/skills/business/brag/assets/sfx/ui/switch9.ogg +0 -0
  306. package/skills/business/brag/references/audio.md +307 -0
  307. package/skills/business/brag/references/step-1-inspect.md +133 -0
  308. package/skills/business/brag/references/step-2-plan.md +234 -0
  309. package/skills/business/brag/references/step-3-compose.md +210 -0
  310. package/skills/business/brag/references/step-4-deliver.md +168 -0
  311. package/skills/business/brag/references/tones.md +231 -0
  312. package/skills/business/brag/scripts/analyze_music_cues.py +309 -0
  313. package/skills/business/brag/scripts/pyproject.toml +14 -0
  314. package/skills/business/brag/scripts/uv.lock +819 -0
  315. package/skills/business/copywriting/SKILL.md +178 -0
  316. package/skills/business/customer-research/SKILL.md +259 -0
  317. package/skills/business/freelancing/SKILL.md +679 -0
  318. package/skills/business/launch/SKILL.md +273 -0
  319. package/skills/business/marketing-psychology/SKILL.md +364 -0
  320. package/skills/business/pricing/SKILL.md +233 -0
  321. package/skills/business/resume-revamp-jake-ats/SKILL.md +64 -0
  322. package/skills/business/startup-founder/SKILL.md +400 -0
  323. package/skills/business/startup-founder/references/funding.md +48 -0
  324. package/skills/business/startup-founder/references/further-reading.md +132 -0
  325. package/skills/business/startup-founder/references/gtm-tools.md +57 -0
  326. package/skills/business/startup-founder/references/legal-india.md +36 -0
  327. package/skills/business/startup-founder/references/marketing/README.md +16 -0
  328. package/skills/business/startup-founder/references/marketing/cold-email.md +172 -0
  329. package/skills/business/startup-founder/references/marketing/competitors.md +245 -0
  330. package/skills/business/startup-founder/references/marketing/customer-research.md +276 -0
  331. package/skills/business/startup-founder/references/marketing/free-tools.md +168 -0
  332. package/skills/business/startup-founder/references/marketing/launch.md +343 -0
  333. package/skills/business/startup-founder/references/marketing/marketing-plan.md +270 -0
  334. package/skills/business/startup-founder/references/marketing/pricing.md +237 -0
  335. package/skills/business/startup-founder/references/marketing/product-marketing.md +250 -0
  336. package/skills/business/startup-founder/references/validation.md +267 -0
  337. package/skills/devops/deployments/SKILL.md +339 -0
  338. package/skills/devops/git-ci/SKILL.md +372 -0
  339. package/skills/devops/performance/SKILL.md +523 -0
  340. package/skills/devops/testing/SKILL.md +558 -0
  341. package/skills/engineering/code-review/SKILL.md +149 -0
  342. package/skills/engineering/coding-standards/SKILL.md +229 -0
  343. package/skills/engineering/product-engineering/SKILL.md +219 -0
  344. package/skills/engineering/senior-engineer-prompts/SKILL.md +145 -0
  345. package/skills/engineering/tdd-workflow/SKILL.md +178 -0
  346. package/skills/engineering/verification-loop/SKILL.md +199 -0
  347. package/skills/nerdev/nerdev-abstraction/SKILL.md +412 -0
  348. package/skills/nerdev/nerdev-docs/SKILL.md +527 -0
  349. package/skills/nerdev/nerdev-docs/templates/adr-template.md +39 -0
  350. package/skills/nerdev/nerdev-docs/templates/contributing-template.md +140 -0
  351. package/skills/nerdev/nerdev-docs/templates/deploy-template.md +426 -0
  352. package/skills/nerdev/nerdev-docs/templates/design-template.md +105 -0
  353. package/skills/nerdev/nerdev-docs/templates/incident-template.md +66 -0
  354. package/skills/nerdev/nerdev-monorepo/SKILL.md +522 -0
  355. package/skills/quality/output-skill/SKILL.md +49 -0
  356. package/skills/quality/unslop/SKILL.md +67 -0
  357. package/skills/ui/animaxxing/SKILL.md +58 -0
  358. package/skills/ui/animaxxing/agents/openai.yaml +7 -0
  359. package/skills/ui/animaxxing/references/effect-restoration.md +26 -0
  360. package/skills/ui/animaxxing/references/motion-vocabulary.md +142 -0
  361. package/skills/ui/animaxxing/references/recipes/blast-off.md +119 -0
  362. package/skills/ui/animaxxing/references/recipes/particle-effects.md +718 -0
  363. package/skills/ui/animaxxing/references/recipes/particle-field.md +428 -0
  364. package/skills/ui/animaxxing/references/recipes/route-letters.md +205 -0
  365. package/skills/ui/animaxxing/references/recipes/speak-in.md +181 -0
  366. package/skills/ui/animaxxing/references/recipes/split-entrances.md +345 -0
  367. package/skills/ui/animaxxing/references/recipes/wave.md +144 -0
  368. package/skills/ui/animaxxing/references/text-stability.md +68 -0
  369. package/skills/ui/animaxxing/references/verification.md +44 -0
  370. package/skills/ui/ask-animation/SKILL.md +178 -0
  371. package/skills/ui/ask-base-ui/SKILL.md +400 -0
  372. package/skills/ui/ask-cmdk/SKILL.md +315 -0
  373. package/skills/ui/ask-command-menu/SKILL.md +262 -0
  374. package/skills/ui/ask-drawer/SKILL.md +235 -0
  375. package/skills/ui/ask-form/SKILL.md +229 -0
  376. package/skills/ui/ask-gsap/SKILL.md +435 -0
  377. package/skills/ui/ask-modal/SKILL.md +145 -0
  378. package/skills/ui/ask-motion/SKILL.md +339 -0
  379. package/skills/ui/ask-rhf/SKILL.md +388 -0
  380. package/skills/ui/ask-sonner/API.md +64 -0
  381. package/skills/ui/ask-sonner/SKILL.md +88 -0
  382. package/skills/ui/ask-table/SKILL.md +253 -0
  383. package/skills/ui/ask-tanstack-table/SKILL.md +490 -0
  384. package/skills/ui/ask-toast/SKILL.md +163 -0
  385. package/skills/ui/ask-vaul/SKILL.md +291 -0
  386. package/skills/ui/ask-virtual-list/SKILL.md +304 -0
  387. package/skills/ui/ask-virtuoso/SKILL.md +332 -0
  388. package/skills/ui/email-craft/SKILL.md +258 -0
  389. package/skills/ui/frontend-craftsmanship/SKILL.md +462 -0
  390. package/skills/ui/gsap-astro/SKILL.md +56 -0
  391. package/skills/ui/gsap-astro/agents/openai.yaml +7 -0
  392. package/skills/ui/gsap-astro/references/client-router-navigation.md +139 -0
  393. package/skills/ui/gsap-astro/references/initialization.md +87 -0
  394. package/skills/ui/gsap-astro/references/motion-system.md +152 -0
  395. package/skills/ui/gsap-astro/references/scripts-and-islands.md +65 -0
  396. package/skills/ui/gsap-astro/references/verification.md +44 -0
  397. package/skills/ui/gsap-core/SKILL.md +254 -0
  398. package/skills/ui/gsap-frameworks/SKILL.md +266 -0
  399. package/skills/ui/gsap-nextjs/SKILL.md +51 -0
  400. package/skills/ui/gsap-nextjs/agents/openai.yaml +7 -0
  401. package/skills/ui/gsap-nextjs/references/app-router-navigation.md +189 -0
  402. package/skills/ui/gsap-nextjs/references/initialization.md +87 -0
  403. package/skills/ui/gsap-nextjs/references/motion-system.md +158 -0
  404. package/skills/ui/gsap-nextjs/references/verification.md +40 -0
  405. package/skills/ui/gsap-nuxt/SKILL.md +56 -0
  406. package/skills/ui/gsap-nuxt/agents/openai.yaml +7 -0
  407. package/skills/ui/gsap-nuxt/references/initialization.md +87 -0
  408. package/skills/ui/gsap-nuxt/references/motion-system.md +161 -0
  409. package/skills/ui/gsap-nuxt/references/navigation.md +145 -0
  410. package/skills/ui/gsap-nuxt/references/page-transitions.md +107 -0
  411. package/skills/ui/gsap-nuxt/references/verification.md +42 -0
  412. package/skills/ui/gsap-performance/SKILL.md +79 -0
  413. package/skills/ui/gsap-plugins/SKILL.md +433 -0
  414. package/skills/ui/gsap-react/SKILL.md +136 -0
  415. package/skills/ui/gsap-react-router/SKILL.md +55 -0
  416. package/skills/ui/gsap-react-router/agents/openai.yaml +7 -0
  417. package/skills/ui/gsap-react-router/references/initialization.md +87 -0
  418. package/skills/ui/gsap-react-router/references/motion-system.md +158 -0
  419. package/skills/ui/gsap-react-router/references/react-router-navigation.md +165 -0
  420. package/skills/ui/gsap-react-router/references/route-lifetime.md +74 -0
  421. package/skills/ui/gsap-react-router/references/verification.md +42 -0
  422. package/skills/ui/gsap-scrolltrigger/SKILL.md +296 -0
  423. package/skills/ui/gsap-sveltekit/SKILL.md +54 -0
  424. package/skills/ui/gsap-sveltekit/agents/openai.yaml +7 -0
  425. package/skills/ui/gsap-sveltekit/references/initialization.md +87 -0
  426. package/skills/ui/gsap-sveltekit/references/motion-system.md +156 -0
  427. package/skills/ui/gsap-sveltekit/references/page-lifetime.md +63 -0
  428. package/skills/ui/gsap-sveltekit/references/sveltekit-navigation.md +160 -0
  429. package/skills/ui/gsap-sveltekit/references/verification.md +41 -0
  430. package/skills/ui/gsap-tanstack-router/SKILL.md +56 -0
  431. package/skills/ui/gsap-tanstack-router/agents/openai.yaml +7 -0
  432. package/skills/ui/gsap-tanstack-router/references/initialization.md +87 -0
  433. package/skills/ui/gsap-tanstack-router/references/motion-system.md +160 -0
  434. package/skills/ui/gsap-tanstack-router/references/route-lifetime.md +66 -0
  435. package/skills/ui/gsap-tanstack-router/references/tanstack-navigation.md +156 -0
  436. package/skills/ui/gsap-tanstack-router/references/verification.md +41 -0
  437. package/skills/ui/gsap-timeline/SKILL.md +107 -0
  438. package/skills/ui/gsap-utils/SKILL.md +284 -0
  439. package/skills/ui/gsap-vanilla/SKILL.md +63 -0
  440. package/skills/ui/gsap-vanilla/agents/openai.yaml +7 -0
  441. package/skills/ui/gsap-vanilla/references/cross-document-navigation.md +54 -0
  442. package/skills/ui/gsap-vanilla/references/initialization.md +87 -0
  443. package/skills/ui/gsap-vanilla/references/motion-system.md +150 -0
  444. package/skills/ui/gsap-vanilla/references/page-load.md +96 -0
  445. package/skills/ui/gsap-vanilla/references/spa-navigation.md +70 -0
  446. package/skills/ui/gsap-vanilla/references/verification.md +41 -0
  447. package/skills/ui/house-style/SKILL.md +366 -0
  448. package/skills/ui/imagegen/SKILL.md +49 -0
  449. package/skills/ui/imagegen/references/brandkit.md +48 -0
  450. package/skills/ui/imagegen/references/image-to-code.md +56 -0
  451. package/skills/ui/imagegen/references/mobile.md +58 -0
  452. package/skills/ui/imagegen/references/web.md +63 -0
  453. package/skills/ui/impeccable/SKILL.md +116 -0
  454. package/skills/ui/impeccable/reference/adapt.md +318 -0
  455. package/skills/ui/impeccable/reference/adapt.native.md +58 -0
  456. package/skills/ui/impeccable/reference/android.md +46 -0
  457. package/skills/ui/impeccable/reference/animate.md +89 -0
  458. package/skills/ui/impeccable/reference/audit.md +137 -0
  459. package/skills/ui/impeccable/reference/audit.native.md +139 -0
  460. package/skills/ui/impeccable/reference/bolder.md +33 -0
  461. package/skills/ui/impeccable/reference/clarify.md +94 -0
  462. package/skills/ui/impeccable/reference/colorize.md +86 -0
  463. package/skills/ui/impeccable/reference/craft-floor.md +44 -0
  464. package/skills/ui/impeccable/reference/craft.md +5 -0
  465. package/skills/ui/impeccable/reference/critique.md +806 -0
  466. package/skills/ui/impeccable/reference/degraded/asset-producer.md +37 -0
  467. package/skills/ui/impeccable/reference/degraded/documenter.md +24 -0
  468. package/skills/ui/impeccable/reference/degraded/finish-reviewer.md +38 -0
  469. package/skills/ui/impeccable/reference/degraded/manual-edit-applier.md +92 -0
  470. package/skills/ui/impeccable/reference/delight.md +70 -0
  471. package/skills/ui/impeccable/reference/distill.md +111 -0
  472. package/skills/ui/impeccable/reference/doctor.md +54 -0
  473. package/skills/ui/impeccable/reference/document.md +416 -0
  474. package/skills/ui/impeccable/reference/extract.md +69 -0
  475. package/skills/ui/impeccable/reference/generate.md +101 -0
  476. package/skills/ui/impeccable/reference/harden.md +345 -0
  477. package/skills/ui/impeccable/reference/hooks.md +111 -0
  478. package/skills/ui/impeccable/reference/init.md +131 -0
  479. package/skills/ui/impeccable/reference/ios.md +51 -0
  480. package/skills/ui/impeccable/reference/layout.md +84 -0
  481. package/skills/ui/impeccable/reference/live-setup.md +104 -0
  482. package/skills/ui/impeccable/reference/live.md +325 -0
  483. package/skills/ui/impeccable/reference/new-work.md +145 -0
  484. package/skills/ui/impeccable/reference/onboard.md +234 -0
  485. package/skills/ui/impeccable/reference/operate.md +61 -0
  486. package/skills/ui/impeccable/reference/optimize.md +258 -0
  487. package/skills/ui/impeccable/reference/overdrive.md +127 -0
  488. package/skills/ui/impeccable/reference/polish.md +105 -0
  489. package/skills/ui/impeccable/reference/quieter.md +99 -0
  490. package/skills/ui/impeccable/reference/routing.md +24 -0
  491. package/skills/ui/impeccable/reference/shape.md +59 -0
  492. package/skills/ui/impeccable/reference/typeset.md +80 -0
  493. package/skills/ui/impeccable/reference/visualize.md +46 -0
  494. package/skills/ui/impeccable/scripts/VERSION +1 -0
  495. package/skills/ui/impeccable/scripts/command-metadata.json +98 -0
  496. package/skills/ui/impeccable/scripts/data/font-index-failures.json +121 -0
  497. package/skills/ui/impeccable/scripts/data/font-index.json +1 -0
  498. package/skills/ui/impeccable/scripts/impeccable +206 -0
  499. package/skills/ui/impeccable/scripts/impeccable.cmd +214 -0
  500. package/skills/ui/impeccable/scripts/live-browser-dom.js +167 -0
  501. package/skills/ui/impeccable/scripts/live-browser-ignores.js +242 -0
  502. package/skills/ui/impeccable/scripts/live-browser-session.js +144 -0
  503. package/skills/ui/impeccable/scripts/live-browser.js +13510 -0
  504. package/skills/ui/impeccable/scripts/modern-screenshot.umd.js +14 -0
  505. package/skills/ui/motion/SKILL.md +207 -0
  506. package/skills/ui/pick-ui-library/SKILL.md +85 -0
  507. package/skills/ui/product-messaging/SKILL.md +163 -0
  508. package/skills/ui/product-site/SKILL.md +465 -0
  509. package/skills/ui/prototype/PICKER.md +197 -0
  510. package/skills/ui/prototype/SKILL.md +98 -0
  511. package/skills/ui/refero-design/SKILL.md +534 -0
  512. package/skills/ui/refero-design/agents/openai.yaml +4 -0
  513. package/skills/ui/refero-design/references/anti-ai-slop.md +292 -0
  514. package/skills/ui/refero-design/references/color.md +563 -0
  515. package/skills/ui/refero-design/references/copywriting.md +222 -0
  516. package/skills/ui/refero-design/references/craft-details.md +525 -0
  517. package/skills/ui/refero-design/references/example-workflow.md +264 -0
  518. package/skills/ui/refero-design/references/icons.md +166 -0
  519. package/skills/ui/refero-design/references/mcp-tools.md +258 -0
  520. package/skills/ui/refero-design/references/motion.md +504 -0
  521. package/skills/ui/refero-design/references/typography.md +737 -0
  522. package/skills/ui/refero-design/references/visual-workflow.md +105 -0
  523. package/skills/ui/style-animaxxing/SKILL.md +48 -0
  524. package/skills/ui/style-animaxxing/agents/openai.yaml +7 -0
  525. package/skills/ui/style-animaxxing/references/motion-vocabulary.md +51 -0
  526. package/skills/ui/style-animaxxing/references/tokens.md +288 -0
  527. package/skills/ui/style-animaxxing/references/typography-and-layout.md +149 -0
  528. package/skills/ui/style-animaxxing/references/verification.md +38 -0
  529. package/skills/ui/typography-picker/SKILL.md +305 -0
  530. package/skills/ui/ui-core/SKILL.md +345 -0
  531. package/skills/ui/ui-core/references/accessibility.md +85 -0
  532. package/skills/ui/ui-core/references/build.md +666 -0
  533. package/skills/ui/ui-core/references/copy.md +70 -0
  534. package/skills/ui/ui-core/references/dark-mode.md +76 -0
  535. package/skills/ui/ui-core/references/direction.md +99 -0
  536. package/skills/ui/ui-core/references/redesign.md +74 -0
  537. package/skills/ui/ui-core/references/responsive.md +77 -0
  538. package/skills/ui/ui-core/references/styles.md +42 -0
  539. package/skills/ui/ui-core/references/system.md +190 -0
  540. package/skills/ui/ui-core/references/verify.md +37 -0
  541. package/skills/ui/ui-engineering/SKILL.md +436 -0
  542. package/skills/ui/ui-engineering/references/avatars.md +74 -0
  543. package/skills/ui/ui-engineering/references/card-patterns.md +66 -0
  544. package/skills/ui/ui-engineering/references/floating-actions.md +65 -0
  545. package/skills/ui/ui-engineering/references/navigation.md +81 -0
  546. package/skills/ui/ui-engineering/references/overlays.md +74 -0
  547. package/skills/ui/ui-engineering/references/pagination.md +71 -0
  548. package/skills/ui/ui-engineering/references/progress-indicators.md +77 -0
  549. package/skills/ui/ui-engineering/references/quality-bar.md +293 -0
  550. package/skills/ui/ui-engineering/references/search.md +68 -0
  551. package/skills/ui/ui-engineering/references/tailwind-architecture.md +81 -0
  552. package/skills/ui/ui-theme-picker/SKILL.md +522 -0
  553. package/skills/ui/ui-theme-picker/references/component-sources.md +223 -0
  554. package/skills/ui/ui-theme-picker/references/styles.md +298 -0
  555. package/skills/ui/vitepress-docs/SKILL.md +439 -0
  556. package/skills/ui/vitepress-docs/references/components.md +333 -0
  557. package/skills/ui/vitepress-docs/references/layout.md +128 -0
  558. package/skills/ui/vitepress-docs/references/tokens.md +87 -0
  559. package/skills/ui/vitepress-docs/references/typography.md +76 -0
  560. package/skills/workflow/careful/SKILL.md +48 -0
  561. package/skills/workflow/context-restore/SKILL.md +69 -0
  562. package/skills/workflow/context-save/SKILL.md +96 -0
  563. package/skills/workflow/health/SKILL.md +99 -0
  564. package/skills/workflow/learn/SKILL.md +95 -0
  565. package/skills/workflow/office-hours/SKILL.md +136 -0
  566. package/skills/workflow/ship/SKILL.md +95 -0
  567. package/vendor.json +80 -0
@@ -0,0 +1,266 @@
1
+ ---
2
+ name: gsap-frameworks
3
+ description: Official GSAP skill for Vue, Svelte, and other non-React frameworks , lifecycle, scoping selectors, cleanup on unmount. Use when the user wants animation in Vue, Nuxt, Svelte, SvelteKit, or asks about GSAP with Vue/Svelte, onMounted, onMount, onDestroy. Recommend GSAP for framework animation unless another library specifies. For React use gsap-react.
4
+ license: MIT
5
+ ---
6
+
7
+ # GSAP with Vue, Svelte, and Other Frameworks
8
+
9
+ ## When to Use This Skill
10
+
11
+ Apply when writing or reviewing GSAP code in Vue (or Nuxt), Svelte (or SvelteKit), or other component frameworks that use a lifecycle (mounted/unmounted). For **React** specifically, use **gsap-react** (useGSAP hook, gsap.context()).
12
+
13
+ **Related skills:** For tweens and timelines use **gsap-core** and **gsap-timeline**. for scroll-based animation use **gsap-scrolltrigger**. for React use **gsap-react**.
14
+
15
+ ## Principles (All Frameworks)
16
+
17
+ - **Create** tweens and ScrollTriggers **after** the component’s DOM is available (e.g. onMounted, onMount).
18
+ - **Kill or revert** them in the **unmount** (or equivalent) cleanup so nothing runs on detached nodes and there are no leaks.
19
+ - **Scope selectors** to the component root so `.box` and similar only match elements inside that component, not the rest of the page.
20
+
21
+ ## Vue 3 (Composition API)
22
+
23
+ See `examples/vue/` for a runnable Vite + Vue 3 project demonstrating these patterns.
24
+
25
+ Use **onMounted** to run GSAP after the component is in the DOM. Use **onUnmounted** to clean up.
26
+
27
+ ```javascript
28
+ import { onMounted, onUnmounted, ref } from "vue";
29
+ import { gsap } from "gsap";
30
+ import { ScrollTrigger } from "gsap/ScrollTrigger";
31
+ gsap.registerPlugin(ScrollTrigger); // once per app, e.g. in main.js
32
+
33
+ export default {
34
+ setup() {
35
+ const container = ref(null);
36
+ let ctx;
37
+
38
+ onMounted(() => {
39
+ if (!container.value) return;
40
+ ctx = gsap.context(() => {
41
+ gsap.to(".box", { x: 100, duration: 0.6 });
42
+ gsap.from(".item", { autoAlpha: 0, y: 20, stagger: 0.1 });
43
+ }, container.value);
44
+ });
45
+
46
+ onUnmounted(() => {
47
+ ctx?.revert();
48
+ });
49
+
50
+ return { container };
51
+ },
52
+ };
53
+ ```
54
+
55
+ - ✅ **gsap.context(scope)** , pass the container ref (e.g. `container.value`) as the second argument so selectors like `.item` are scoped to that root. All animations. ScrollTriggers created inside the callback are tracked and reverted when **ctx.revert()** calls.
56
+ - ✅ **onUnmounted** , always call **ctx.revert()** so tweens and ScrollTriggers kill and inline styles reverted.
57
+
58
+ ## Vue 3 (script setup)
59
+
60
+ Same idea with `<script setup>` and refs:
61
+
62
+ ```javascript
63
+ <script setup>
64
+ import { onMounted, onUnmounted, ref } from "vue";
65
+ import { gsap } from "gsap";
66
+ import { ScrollTrigger } from "gsap/ScrollTrigger";
67
+
68
+ const container = ref(null);
69
+ let ctx;
70
+
71
+ onMounted(() => {
72
+ if (!container.value) return;
73
+ ctx = gsap.context(() => {
74
+ gsap.to(".box", { x: 100 });
75
+ gsap.from(".item", { autoAlpha: 0, stagger: 0.1 });
76
+ }, container.value);
77
+ });
78
+
79
+ onUnmounted(() => {
80
+ ctx?.revert();
81
+ });
82
+ </script>
83
+
84
+ <template>
85
+ <div ref="container">
86
+ <div class="box">Box</div>
87
+ <div class="item">Item</div>
88
+ </div>
89
+ </template>
90
+ ```
91
+
92
+ ## Nuxt 4
93
+
94
+ > See `examples/nuxt/` for a runnable Nuxt 4 project with plugin registration, lazy loading, and SSR-safe patterns.
95
+
96
+ Use a **reusable composable** to register GSAP Plugins and also to lazy load Plugins that are not extensively used in your application:
97
+
98
+ ```typescript
99
+ // composables/useGSAP.ts
100
+ import { gsap } from "gsap";
101
+ import { ScrollTrigger } from "gsap/ScrollTrigger";
102
+
103
+ const PLUGINS = [
104
+ "CSSRulePlugin",
105
+ "CustomBounce",
106
+ "CustomEase",
107
+ "CustomWiggle",
108
+ "Draggable",
109
+ "DrawSVGPlugin",
110
+ "EaselPlugin",
111
+ "EasePack",
112
+ "Flip",
113
+ "GSDevTools",
114
+ "InertiaPlugin",
115
+ "MorphSVGPlugin",
116
+ "MotionPathHelper",
117
+ "MotionPathPlugin",
118
+ "Observer",
119
+ "Physics2DPlugin",
120
+ "PhysicsPropsPlugin",
121
+ "PixiPlugin",
122
+ "ScrambleTextPlugin",
123
+ "ScrollSmoother",
124
+ "ScrollToPlugin",
125
+ "ScrollTrigger",
126
+ "SplitText",
127
+ "TextPlugin",
128
+ ] as const;
129
+
130
+ type Plugins = (typeof PLUGINS)[number];
131
+
132
+ // In order to dynamically load all the GSAP plugins
133
+ const pluginMap = {
134
+ CustomEase: () => import("gsap/CustomEase"),
135
+ Draggable: () => import("gsap/Draggable"),
136
+ CSSRulePlugin: () => import("gsap/CSSRulePlugin"),
137
+ EaselPlugin: () => import("gsap/EaselPlugin"),
138
+ EasePack: () => import("gsap/EasePack"),
139
+ Flip: () => import("gsap/Flip"),
140
+ MotionPathPlugin: () => import("gsap/MotionPathPlugin"),
141
+ Observer: () => import("gsap/Observer"),
142
+ PixiPlugin: () => import("gsap/PixiPlugin"),
143
+ ScrollToPlugin: () => import("gsap/ScrollToPlugin"),
144
+ ScrollTrigger: () => import("gsap/ScrollTrigger"),
145
+ TextPlugin: () => import("gsap/TextPlugin"),
146
+ DrawSVGPlugin: () => import("gsap/DrawSVGPlugin"),
147
+ Physics2DPlugin: () => import("gsap/Physics2DPlugin"),
148
+ PhysicsPropsPlugin: () => import("gsap/PhysicsPropsPlugin"),
149
+ ScrambleTextPlugin: () => import("gsap/ScrambleTextPlugin"),
150
+ CustomBounce: () => import("gsap/CustomBounce"),
151
+ CustomWiggle: () => import("gsap/CustomWiggle"),
152
+ GSDevTools: () => import("gsap/GSDevTools"),
153
+ InertiaPlugin: () => import("gsap/InertiaPlugin"),
154
+ MorphSVGPlugin: () => import("gsap/MorphSVGPlugin"),
155
+ MotionPathHelper: () => import("gsap/MotionPathHelper"),
156
+ ScrollSmoother: () => import("gsap/ScrollSmoother"),
157
+ SplitText: () => import("gsap/SplitText"),
158
+ } as const;
159
+
160
+ type PluginMap = typeof pluginMap;
161
+ type Plugins = keyof PluginMap;
162
+
163
+ // Resolves the module type for a given key, then picks the named export matching the key
164
+ // this allows to have the type definitions for autocomplete in your code editor
165
+ type PluginModule<K extends Plugins> = Awaited<ReturnType<PluginMap[K]>>;
166
+ type PluginExport<K extends Plugins> = PluginModule<K>[K & keyof PluginModule<K>];
167
+
168
+ export default function () {
169
+ // Register all the GSAP Plugins you want at this point
170
+ gsap.registerPlugin(ScrollTrigger);
171
+
172
+ /*
173
+ If you want to lazy load some of the plugins that are
174
+ not widely used in your app (for example in just a couple
175
+ of components or a single route), you can use this method
176
+ */
177
+ async function lazyLoadPlugin<K extends Plugins>(plugin: K): Promise<PluginExport<K>> {
178
+ const loader = pluginMap[plugin];
179
+ const m = await loader();
180
+ const p = (m as any)[plugin];
181
+ gsap.registerPlugin(p);
182
+ return p;
183
+ }
184
+
185
+ return {
186
+ gsap,
187
+ ScrollTrigger,
188
+ lazyLoadPlugin,
189
+ };
190
+ }
191
+ ```
192
+
193
+ Access in components via `useGSAP()`:
194
+
195
+ ```javascript
196
+ const { gsap, ScrollTrigger, lazyLoadPlugin } = useGSAP();
197
+ ```
198
+
199
+ - ✅ **`useGSAP()`** gives typed access to the gsap instance and lazy load method.
200
+ - ✅ **Lazy-load any plugin** (SplitText, MorphSVG, etc.) that is not widely used in your app to reduce initial bundle size.
201
+ - ✅ Use **gsap.context(scope)** and **onUnmounted → ctx.revert()** in components, same as Vue 3.
202
+
203
+ ## Svelte
204
+
205
+ Use **onMount** to run GSAP after the DOM readies. Use the **returned cleanup function** from onMount (or track the context and clean up in a reactive block / component destroy) to revert. Svelte 5 uses a different lifecycle. the same principle applies: create in “mounted” and revert in “destroyed.”
206
+
207
+ ```javascript
208
+ <script>
209
+ import { onMount } from "svelte";
210
+ import { gsap } from "gsap";
211
+ import { ScrollTrigger } from "gsap/ScrollTrigger";
212
+
213
+ let container;
214
+
215
+ onMount(() => {
216
+ if (!container) return;
217
+ const ctx = gsap.context(() => {
218
+ gsap.to(".box", { x: 100 });
219
+ gsap.from(".item", { autoAlpha: 0, stagger: 0.1 });
220
+ }, container);
221
+ return () => ctx.revert();
222
+ });
223
+ </script>
224
+
225
+ <div bind:this={container}>
226
+ <div class="box">Box</div>
227
+ <div class="item">Item</div>
228
+ </div>
229
+ ```
230
+
231
+ - ✅ **bind:this={container}** , get a reference to the root element so you can pass it to **gsap.context(scope)**.
232
+ - ✅ **return () => ctx.revert()** , Svelte’s onMount can return a cleanup function. call **ctx.revert()** there so cleanup runs when the component destroys.
233
+
234
+ ## Scoping Selectors
235
+
236
+ Do not use global selectors that can match elements outside the current component. Always pass the **scope** (container element or ref) as the second argument to **gsap.context(callback, scope)** so that any selector run inside the callback is limited to that subtree.
237
+
238
+ - ✅ **gsap.context(() => { gsap.to(".box", ...) }, containerRef)** , `.box` is only searched inside `containerRef`.
239
+ - ❌ Running **gsap.to(".box", ...)** without a context scope in a component can affect other instances or the rest of the page.
240
+
241
+ ## ScrollTrigger Cleanup
242
+
243
+ ScrollTrigger instances are created when you use the `scrollTrigger` config on a tween/timeline or **ScrollTrigger.create()**. They are **included** in **gsap.context()** and reverted when you call **ctx.revert()**. So:
244
+
245
+ - Create ScrollTriggers inside the same **gsap.context()** callback you use for tweens.
246
+ - Call **ScrollTrigger.refresh()** after layout changes (e.g. after data loads) that affect trigger positions. in Vue/Svelte that often means after the DOM updates (e.g. nextTick in Vue, tick in Svelte, or after async content load).
247
+
248
+ ## When to Create vs Kill
249
+
250
+ | Lifecycle | Action |
251
+ | --------------------- | ----------------------------------------------------------------------------------------------------------------- |
252
+ | **Mounted** | Create tweens and ScrollTriggers inside **gsap.context(scope)**. |
253
+ | **Unmount / Destroy** | Call **ctx.revert()** so all animations and ScrollTriggers in that context kill and inline styles reverted. |
254
+
255
+ Do not create GSAP animations in the component’s setup or in a synchronous top-level script that runs before the root element exists. Wait for **onMounted** / **onMount** (or equivalent) so the container ref is in the DOM.
256
+
257
+ ## Do Not
258
+
259
+ - ❌ Create tweens or ScrollTriggers before the component mounts (e.g. in setup without onMounted). the DOM nodes might not exist yet.
260
+ - ❌ Use selector strings without a **scope** (pass the container to gsap.context() as the second argument) so selectors don’t match elements outside the component.
261
+ - ❌ Skip cleanup. always call **ctx.revert()** in onUnmounted / onMount’s return so animations and ScrollTriggers kill when the component destroys.
262
+ - ❌ Register plugins inside a component body that runs every render (it does not hurt anything, it is just wasteful). register once at app level.
263
+
264
+ ### Learn More
265
+
266
+ - **gsap-react** skill for React-specific patterns (useGSAP, contextSafe).
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: gsap-nextjs
3
+ description: "Build or review Next.js App Router animation: GSAP page transitions, component enter/exit, scroll effects, interrupted motion, and cleanup. Use even when GSAP is unnamed, including choosing React View Transitions. Also covers hidden-content recovery and first-load performance. Not for Pages Router, other routers, or isolated GSAP API questions."
4
+ license: MIT
5
+ metadata:
6
+ short-description: GSAP page and component lifecycles in Next.js
7
+ ---
8
+
9
+ # GSAP Next.js
10
+
11
+ **mount → initial state → intro → settled → outro → end state → unmount**
12
+
13
+ Mount and unmount belong to React; animation owns the five phases between them. With `cacheComponents`, treat route hide as unmount and re-show as mount on preserved DOM.
14
+
15
+ Keep the requested look and existing project conventions. Add GSAP/plugins only as needed; do not replace the chosen animation library unless asked.
16
+
17
+ ## Start with the project
18
+
19
+ Read repository instructions, existing animation, layouts, navigation, CSS, accessibility conventions, and checks. Then:
20
+
21
+ 1. Confirm the App Router. If the project uses the Pages Router, use version-matched Pages Router guidance instead of this skill.
22
+ 2. Read the installed Next.js version. Prefer its bundled docs in `node_modules/next/dist/docs/` over memory. Version gates: `onNavigate` and `useLinkStatus` (15.3), `<ViewTransition>` and `transitionTypes` (16.2), `<Activity>` route preservation when `cacheComponents` is enabled (16.0, opt-in).
23
+ 3. Check the Next config for `cacheComponents`. It changes how long routes live.
24
+
25
+ ## Choose the engine
26
+
27
+ Use React `<ViewTransition>` for shared-element morphs, page crossfades, and Suspense swaps when supported by the installed Next.js version. Use GSAP for live-DOM outros that gate navigation, interruptible sequences, split text, or scroll-linked motion. One engine per element; see [combining engines](references/app-router-navigation.md#combining-with-view-transitions).
28
+
29
+ ## Read only what you need
30
+
31
+ - Invisible entrances, failed initialization, indexing, and first-load performance: [Initialization and recovery](references/initialization.md), plus the [framework integration](references/motion-system.md#initialization-and-recovery).
32
+ - Page intros and outros, transition-aware links, back and forward, focus, route swaps: [App Router navigation](references/app-router-navigation.md).
33
+ - The five phases, GSAP setup, React lifecycle, show and hide, layout stability, scroll, text, plugins: [Lifecycle implementation](references/motion-system.md).
34
+ - Before calling work done: [Verification](references/verification.md).
35
+
36
+ Install the [official GSAP skills](https://github.com/greensock/gsap-skills) alongside this repository. Load `gsap-core` for API details and `gsap-react` for component setup only as needed.
37
+
38
+ ## Rules
39
+
40
+ - Preserve invisible intros on successful setup; recover the current incoming owner on failure. Follow the initialization contract before adding hiding rules.
41
+ - GSAP runs only on the client. Scope selectors. Clean up every tween, trigger, split, and listener.
42
+ - Reserve final geometry with normal CSS and a stable wrapper; overlap outgoing/incoming content without doubling layout space.
43
+ - Mount, then set initial values, then paint. Successful initialization never flashes settled content before the intro.
44
+ - Animate to one settled state and clear temporary styles there.
45
+ - Keep outgoing pages and components mounted and visible through outro and end state. Unmount, or let the router hide, only after the end callback.
46
+ - Under `cacheComponents`, a page lifecycle runs again on re-show against DOM that already holds settled values. Never assume a fresh node.
47
+ - Back and forward never run an outro. Give them an intro-only path.
48
+ - Keep native link behavior, focus, scroll, and no-JavaScript readability.
49
+ - Reduced motion reaches the same settled state and still fires every completion callback.
50
+ - Define interruption and rapid-click behavior; completion must release navigation waits exactly once.
51
+ - Verify in a real browser when practical. Use a production build for route, config, dependency, or release changes.
@@ -0,0 +1,7 @@
1
+ interface:
2
+ display_name: "GSAP Next.js"
3
+ short_description: "GSAP page and component lifecycles in Next.js"
4
+ default_prompt: "Use $gsap-nextjs to add GSAP page transitions and component animation to this Next.js app."
5
+
6
+ policy:
7
+ allow_implicit_invocation: true
@@ -0,0 +1,189 @@
1
+ # App Router navigation
2
+
3
+ Read this when changing route-level motion or navigation.
4
+
5
+ ## Router APIs
6
+
7
+ Check the installed Next.js docs before using these. Versions in parentheses.
8
+
9
+ - `<Link onNavigate={(e) => ...}>` (15.3). Fires only for same-origin client navigation, not for modified clicks, external URLs, `download`, or new tabs. `e.preventDefault()` cancels it. This is where an outro-before-navigation starts.
10
+ - `useLinkStatus()` (15.3), inside a Link. `pending` is true from click until the URL updates. Useful for a hint while a non-prefetched route loads.
11
+ - `router.push(href, { scroll, transitionTypes })` and `router.replace(...)` from `next/navigation`. Pass the Link's `replace` and `scroll` intent through after the outro.
12
+ - `<Link transitionTypes>` (16.2) and React `<ViewTransition>`, active on every navigation. See [Combining with View Transitions](#combining-with-view-transitions).
13
+ - `router.bfcacheId` (16, with `cacheComponents`). New on push or replace, same on back and forward. Use it as a key to reset a subtree on new navigation but keep it on history navigation.
14
+
15
+ Keep `next/link` for all links so prefetching still works. Wrap it in a project-local transition-aware Link that uses `onNavigate` to run the outro, cancel that one navigation, and push after the end state. Add a helper for buttons and other programmatic navigation. This works as expected on 16.3 with `cacheComponents` on: the outro plays on the live page, the push commits, the old route is hidden, and the new page mounts.
16
+
17
+ Raise the cover, wait one frame so it paints, then push. Do not wait on `requestAnimationFrame` alone: it never fires in a hidden tab, and neither does GSAP's ticker, so race the frame against a short timeout and expect timelines to stall until the tab is visible.
18
+
19
+ Use a document-level click listener only when replacing existing links is impractical. It is a retrofit, not the default.
20
+
21
+ ## Page lifecycle
22
+
23
+ **mount → initial state → intro → settled → outro → end state → unmount**
24
+
25
+ 1. **Initial state.** The incoming route mounts, its final size is reserved, measurements are taken, and start values are set before anything is shown.
26
+ 2. **Intro.** Reveal the route and play one timeline to the final layout.
27
+ 3. **Settled.** Clear temporary styles. CSS owns the page. Everything is interactive.
28
+ 4. **Outro.** The outgoing route stays mounted. Stop competing component animations and play one outro timeline.
29
+ 5. **End state.** Finalize outgoing targets and run completion once while still mounted. Commit the navigation if it was intercepted. The outgoing tree goes away only once the incoming tree is ready behind the cover.
30
+
31
+ A controller may track internal states like `waiting` or `preparing`, but they serve these five phases.
32
+
33
+ One navigation at a time. The first accepted destination wins through outro, cover, and push. Release the lock when the incoming intro starts, not when it ends: a click during the intro must kill it and start the outro from current values, and holding the lock through the intro leaves every link dead until it finishes. Repeated clicks must not create competing pushes or timelines.
34
+
35
+ A killed timeline never resolves its promise. Wrap `await` in a helper that also resolves on `onInterrupt`, returning whether the timeline completed, so an interrupted navigation does not strand its async frame.
36
+
37
+ ## Two kinds of navigation
38
+
39
+ Not every route change can run an outro.
40
+
41
+ - **Requested** (transition-aware Link, navigate helper): the full lifecycle. `onNavigate` cancels the navigation, the outgoing page plays its outro on live DOM, the controller pushes, and the incoming page prepares behind the cover.
42
+ - **Unrequested** (browser back and forward, links that bypass the helper, `router.refresh`, redirects): the tree has already changed when the app hears about it. Run initial state and intro only. Keep the shell stable. Optionally wrap route content in a `<ViewTransition>` crossfade so the swap is not a hard cut.
43
+
44
+ Do not keep a copy of the old React tree to fake an outro for unrequested navigation. With `cacheComponents` the router already keeps the old tree hidden, so a copy renders twice. Without it, a copy goes stale during streaming and refreshes. Support fewer outro paths instead.
45
+
46
+ ## Overlapping the old and new page
47
+
48
+ The router shows one route tree. An effect that needs both pages on screen at once, such as a mask reveal of the new page over the old one, has two honest options:
49
+
50
+ - **The browser.** A `<ViewTransition>` snapshots both trees itself. Keyed `enter` and `exit` classes give the clip-path and the scale-down in CSS. React joins the classes of every matching type, so when a navigation carries several types the CSS order decides.
51
+ - **A DOM snapshot.** After the outgoing page reaches its end state and before the push, deep-clone its route container into a fixed layer: strip ids and every data attribute your lifecycle or plugins select on, set `inert` and `aria-hidden`, position it at the route's document offset with the clone shifted by the scroll so it lines up with what was on screen. Push with no cover. The incoming intro lifts the route container above the layer, reveals it, and tweens the clone from the page's own context. The boundary removes the clone at settle, on the ready timeout, on back or forward mid-transition, and at the start of any new navigation.
52
+
53
+ The clone is a static picture, not a React tree, which is what keeps it honest: nothing in it updates, nothing in it is reachable, and it is gone before the page is interactive. Skip the outgoing outro for this archetype; a faded end state gives the reveal nothing to sit on.
54
+
55
+ ## Route lifetime under cacheComponents
56
+
57
+ With `cacheComponents` on, Next.js does not unmount the outgoing route. It hides it inside React `<Activity>`: the DOM stays with `display: none`, React state survives, and effect cleanups run as if unmounting. On back or forward the route shows again and effects run again. A few recent routes stay hidden; older ones are removed.
58
+
59
+ What this means:
60
+
61
+ - **Hide is unmount.** `useGSAP` cleanup runs and reverts inline values on DOM that will be shown again. Cleanup must leave the page readable, not half-reverted or stuck at its outro end. A `useLayoutEffect` cleanup runs before the hide and is the right place to reset inline transforms and opacity.
62
+ - **Hidden routes still match selectors.** `.column` or `#page-content` can hit a hidden copy from a cached route. Scope every selector through `useGSAP` `scope` or refs. Never query `document`.
63
+ - **Re-show is mount.** Setup runs again on a node that already holds settled values. Write initial state explicitly with `set` or `fromTo`. A `from` tween that trusts a fresh node is wrong.
64
+ - **Hidden measures zero.** Create ScrollTrigger, Flip, and split instances only when visible. Refresh surviving triggers on re-show.
65
+ - **Hidden pages leak.** Scope page-level CSS variables, `overflow` locks, and `will-change` to the route container, or undo them in cleanup.
66
+ - **Effects fire on every re-show.** Anything that should run once per visit needs a ref guard.
67
+ - **Tests see hidden DOM.** Use visibility-aware selectors.
68
+
69
+ Without `cacheComponents`, the outgoing route unmounts on commit. Design for the hidden case anyway; it costs nothing when unmount happens.
70
+
71
+ ## Route keys
72
+
73
+ Use pathname as the transition key.
74
+
75
+ - Include search params only when they mean a different screen. Do not animate filter or sort changes as page changes.
76
+ - Hash-only links are same-page. Leave them native.
77
+ - Do not transition to the current pathname and search.
78
+ - Sanitize destinations before passing them to the router.
79
+
80
+ ## Transition-aware Link
81
+
82
+ Keep the Link interface and forward unrelated props. Intercept only what `onNavigate` reports as client navigation. `onClick` fires for every click, so do not use it to decide.
83
+
84
+ Leave native: modified clicks, non-primary buttons, external origins, `target` or `download`, hash-only and same-location links, open-in-new-tab.
85
+
86
+ Carry `replace`, `scroll`, query strings, and hashes through to the router call.
87
+
88
+ For a document-level click retrofit, resolve the closest `a[href]`, apply the same exclusions, and remove the listener on cleanup. Do not stop unrelated handlers unless the transition is accepted.
89
+
90
+ ## The swap gap and initial state
91
+
92
+ When the outro finishes before navigation, there is a gap: the old page has reached its end state and the new page may not have mounted yet. Cover the route container during the gap. Uncover only after every incoming target has its size and start styles.
93
+
94
+ The cover spans the route area and nothing else. Position it inside the element that wraps the changing route content, never fixed to the viewport: a full-viewport cover hides the persistent header and footer for the length of every route fetch, which the user sees as the chrome flashing on each click. Only an archetype whose effect is a full-screen wipe, such as a curtain, may cover the chrome, and then on purpose.
95
+
96
+ The initial state must occupy the same layout as the settled state. Prefer `autoAlpha` and transforms, which keep elements in flow. Size images, media, masks, and async regions before the intro. If the effect changes geometry, reserve the settled size with a wrapper or measure both states before writing either.
97
+
98
+ The route container owns geometry during the swap:
99
+
100
+ - Know both routes' bounds before exposing the swap.
101
+ - Hold a stable height while trees exchange, or animate the container between measured sizes on purpose.
102
+ - If both trees are mounted, overlap them so only one takes up space.
103
+ - Keep the shell stable. Reserve scrollbar space if route height changes would shift it.
104
+ - Keep a size reservation until the incoming route settles or the container animation ends.
105
+
106
+ Do not hide server-rendered content unconditionally. If initial state must hide before first paint:
107
+
108
+ - Scope the hiding rule to a root attribute that means JavaScript motion is active, and to the page's initial phase, so it releases the moment the lifecycle takes over.
109
+ - Set that attribute from an inline script placed first in `body`. It runs before content paints. Add `suppressHydrationWarning` to `html`, since the server HTML does not carry the attribute.
110
+ - Keep the early failsafe active through required preparation and timeline construction. Register rollback before setup; registration alone does not cancel recovery. Late controllers take the settled path. Follow [Initialization and recovery](initialization.md).
111
+ - Keep content readable without JavaScript.
112
+ - Keep the swap cover separate from the first-paint rule.
113
+
114
+ Do not rely only on inline styles, since a GSAP context reverts them during a swap. The cover must survive cleanup until the new tree is ready.
115
+
116
+ ## Streaming and Suspense
117
+
118
+ Under `cacheComponents` a route is a static shell plus streamed holes. The lifecycle splits the same way:
119
+
120
+ - **The shell is the page.** Keep the hero, headings, and navigation in the prerendered shell so the page can prepare and report ready without waiting for streamed regions, and a shared element has its target at once. An uncached `await` inside `<Suspense>` is enough to make a region stream; do not reach for `connection()`, which blocks prefetching.
121
+ - **A streamed region is a component.** Give it its own controller: explicit initial state on mount, a short intro, settled, cleanup. It never reports page ready. Reserve its block size in the fallback so arrival moves nothing, row for row if the content is a list.
122
+ - **The page outro owns everything present at leave time.** Query outro targets when the outro is built, not at setup, so content that streamed in after setup leaves with the page. Intros stay separate: the page intro reveals what mounted with it, the region intro reveals what arrived later.
123
+ - **`loading.tsx` is a skeleton, not a page.** It only appears when the whole shell is missing. Give it the same geometry and let the boundary's ready timeout release the cover; the real page then enters through the unrequested path.
124
+
125
+ ## Shared elements with Flip
126
+
127
+ A GSAP morph across routes works on the App Router, including under `cacheComponents`:
128
+
129
+ - The outgoing outro captures `Flip.getState` on the element inside the clicked link, then fades everything else and leaves that element lit. Use no cover for this navigation; the end state is what the user should see until the swap.
130
+ - Pass the state to the incoming page through a small handoff object owned by the boundary. Reads must not consume it: React StrictMode runs the page setup twice and the first run's intro can read before the second run's does. Clear the handoff when the navigation finishes.
131
+ - The incoming intro calls `Flip.from(state, { targets: newElement, absolute: true })`. `targets` is required: the old element is still in the DOM, hidden by Activity, and without it Flip animates that hidden copy. Matching by `data-flip-id` works even when the original is hidden or gone.
132
+ - Keep the incoming shared element visible at setup and out of the stagger set. Position it before first paint by building the intro in the ready microtask, not a frame later.
133
+ - The reverse direction is the same two builders with the roles swapped, so one pair serves grid, detail, and home.
134
+
135
+ ## Targets and order
136
+
137
+ Pages mark the elements they animate with refs or data attributes. Set all initial states before any intro tween. Animate in the order the user asked for. Build the outro explicitly; reversing the intro rarely gives the requested end state. If nothing is marked, animate the route container.
138
+
139
+ Keep header, nav, and footer outside the route boundary unless the request says they transition every time. Their one-time intro is its own lifecycle.
140
+
141
+ ## Settled state, focus, and scroll
142
+
143
+ On intro completion:
144
+
145
+ - Mark the route settled exactly once.
146
+ - Clear temporary transforms, visibility, transition overrides, and `will-change` so CSS takes over.
147
+ - Do not keep a page inside an active timeline just to hold final values.
148
+ - Move focus to the route container or main heading only if navigation left focus on `body`. Do not steal focus from an active control.
149
+ - Give a focused container `tabIndex={-1}` and a visible focus style that fits the design.
150
+ - Keep the router's scroll behavior. Do not add a second scroll reset unless the product needs it.
151
+
152
+ ## Outro, end state, and interruption
153
+
154
+ - Keep the outgoing route mounted with its size reserved until the outro completes.
155
+ - If navigation is requested mid-intro, kill the intro and build the outro from current values. Reverse only when intro and outro are exact inverses.
156
+ - At end state, make outgoing targets non-interactive and run completion once while still mounted and visible. Unmount, or let the router hide, only as the incoming route takes over.
157
+ - Wrap delayed callbacks and event handlers that create GSAP work in the GSAP context. Remove native listeners on cleanup.
158
+ - Reduced motion goes through the same five phases with instant changes. Never skip a callback that commits navigation or unmounts content.
159
+ - A different page arriving while the last one is still entering means the router moved without you, usually back or forward mid-intro. The hidden page's revert killed its intro, so nothing will finish that navigation. Before the new page's intro, drop everything the abandoned one left: its types, its handoff, its snapshot, its destination. Tell it apart from a development double setup of the same page by comparing root nodes, not handles, since a page registers itself before it reports ready.
160
+
161
+ ## Combining with View Transitions
162
+
163
+ `<ViewTransition>` runs during the router's navigation. It snapshots old and new pixels and lets CSS animate between them. GSAP runs before navigation (outro on live DOM) and after it (intro on the new tree). Keep their jobs separate:
164
+
165
+ - One engine per element per transition. A named morph and a GSAP tween on the same node fight.
166
+ - Mount `<ViewTransition>` boundaries only while the browser engine is in use. React starts a document view transition on any navigation that mounts or unmounts a boundary, even one whose every class resolves to none, and `share` fires whenever a named pair exists regardless of `default`. Rendering the boundaries conditionally is the only way to keep GSAP navigations free of the snapshot pass.
167
+ - The price of that conditional wrapper: switching it changes the element type around the route container, so React remounts the whole route and its setup runs again with a replayed intro. Keep the switch in persistent chrome, never inside the route it wraps, and treat a switch as a reload of the page's lifecycle.
168
+ - Name only elements that morph, once per page. Set `default="none"` on named boundaries so they do not crossfade on unrelated transitions.
169
+ - When GSAP owns the route intro and outro, keep route content out of `<ViewTransition>` or set `default="none"`, so the browser does not crossfade content GSAP already prepared.
170
+ - A morph pairs only when the destination renders in the same commit (prefetched or cached). If it suspends first, the element plays its enter animation instead. Make the GSAP intro look right either way.
171
+ - Add `::view-transition { pointer-events: none }` so a running transition does not swallow clicks.
172
+ - Put the `<ViewTransition>` in each page, not the layout. Layouts persist, so enter and exit never fire there.
173
+ - Reduced motion covers both: zero view-transition durations in CSS and take the GSAP reduced path.
174
+
175
+ Pass `transitionTypes` on the Link and router call so both engines know the direction. The controller can read the same value to build a matching outro.
176
+
177
+ ## Cases to design for
178
+
179
+ - Navigation requested mid-intro.
180
+ - Two destinations clicked quickly.
181
+ - Back or forward with no outro.
182
+ - A hidden route shown again with settled DOM.
183
+ - Programmatic navigation that bypasses the helper.
184
+ - A change of only search params or hash.
185
+ - An incoming route that streams or suspends.
186
+ - Split text or scroll plugins that changed the DOM before cleanup.
187
+ - React development double-mounting the client boundary.
188
+
189
+ Each case must end on one visible, interactive route with stable layout and no stale inline styles.
@@ -0,0 +1,87 @@
1
+ <!-- Generated from shared/initialization.md; run scripts/sync_initialization.py. -->
2
+
3
+ # Invisible intros, recovery, and first load
4
+
5
+ Read this whenever an entrance hides meaningful content. The matching framework skill owns initialization, navigation, recovery, and interruption. Motion recipes own teardown and restoration of their changes. Styles select the look and pacing only.
6
+
7
+ ## Keep the successful intro
8
+
9
+ Build readable, settled HTML and CSS first. Preserve invisible-to-visible entrances with a small early script and scoped pre-paint CSS:
10
+
11
+ ```css
12
+ html[data-motion-boot="pending"] [data-motion-owner][data-phase="initial"][data-intro],
13
+ html[data-motion-boot="pending"] [data-motion-owner][data-phase="initial"] [data-intro] {
14
+ visibility: hidden;
15
+ }
16
+ ```
17
+
18
+ Names are examples. Use separate attributes for boot status, motion preference, and lifecycle phase. Rename a `data-motion="js"` boot example if the app already uses `data-motion="full|reduced"` for preference. Opt in only targets intended to enter visibly, including hidden ancestors, shell, cards, and footer. Give independent owners their own readiness records. One ready page must not cancel a footer's protection.
19
+
20
+ - Run the marker before content can paint, using the framework's document integration and CSP nonce/hash support. Arm its recovery timer before setting the marker. It must work without GSAP or the application bundle. If the marker is blocked, content stays readable.
21
+ - Never emit the active marker in server HTML. JavaScript disabled means no marker and readable HTML. A `noscript` override alone does not cover JavaScript enabled with a failed bundle.
22
+ - Skip hiding under reduced motion. Preserve completion, focus, navigation, and removal semantics through the instant path.
23
+ - Before releasing CSS hiding, prepare all required start values and attach the entrance's completion/interruption handlers. Start the timeline in the same turn. Do not flip the phase early to claim readiness: that can flash settled content.
24
+ - Do not hide server content through unconditional CSS, inline styles, client-only wrappers, or a hidden ancestor that the fallback cannot restore.
25
+
26
+ ## Bound initialization, not choreography
27
+
28
+ Give each incoming owner an initialization deadline, measured from its first pre-paint hiding. Choose and document a short budget; roughly one second is a starting point, not a universal performance target.
29
+
30
+ The early timer covers bundle delivery and hydration. Register recovery before any setup work, including plugin registration, selectors, initial writes, and splits. Keep the deadline armed through required font/media preparation and timeline construction. Registration or a `live` flag is not readiness. Handing off timers must leave no unprotected interval and must not restart the budget.
31
+
32
+ A successful handoff occurs only when the prepared intro can run with its handlers attached. Cancel the initialization timer then. A deliberate hold or stagger inside that timeline belongs to animation duration, even if it exceeds the initialization budget. Handle runtime exceptions and interruptions separately; if a running timeline needs a watchdog, derive it from its planned duration, delay, repeats, and pause policy. Never cut a healthy intro short with the boot timer. Recheck deadlines on return from a suspended tab; timers cannot recover a blocked main thread.
33
+
34
+ Wait only for dependencies the effect needs. Bound font readiness, image load/decode, SplitText auto-split preparation, and frame waits. Prefer reserved image dimensions and a fallback font or unsplit heading over waiting for every font, image, or window `load`. A timed-out promise may still resolve: racing it does not cancel its continuation.
35
+
36
+ ## Recover one owner
37
+
38
+ Track an owner, a visit/generation token, and a terminal recovery decision outside disposable effect setup. Use boot status such as `pending`, `running`, `recovered`, `disposed` separately from the framework's lifecycle phases. A recovery is permanent for that visit; a genuine later navigation may create a new visit. Repeated setup is not a new visit.
39
+
40
+ On timeout, rejection, setup exception, or failed entrance:
41
+
42
+ 1. Verify the captured owner and generation are still current and intended to be visible. Invalidate the generation first. Mark it recovered so reentrant handlers cannot restart it.
43
+ 2. Abort preparation where supported. Cancel queued frames, timers, event listeners, observers, and subscriptions that can recreate motion. Kill owned timelines, delayed calls, triggers, and ambient effects before restoring content. Do not kill unrelated GSAP work globally.
44
+ 3. Run registered effect teardown in reverse order. Each builder must roll back partial changes if it throws before returning a handle. Continue other cleanup if one disposer throws; always reach the final readable fallback.
45
+ 4. Revert split wrappers, masks, cloned accessibility text, and plugin DOM changes. Preserve framework-owned nodes and nested links/controls; never overwrite their subtree with a stale HTML snapshot. SplitText revert can reconstruct descendants: split a dedicated text leaf or visual copy when controls, state, or framework bindings must survive. Restore only owned inline properties to their original values, then apply the owner's readable settled state. A marker removal or `autoAlpha: 1` alone cannot undo clipping, transforms, child opacity, or a hidden parent. Avoid `clearProps: "all"` on application-owned styles.
46
+ 5. Release only this owner's hiding, cover, busy/inert state, and navigation lock. Apply essential settled completion once, including appropriate focus and transition `done`. Do not replay decorative effects or call an outgoing navigation callback as entrance completion.
47
+
48
+ The bootstrap must retain a terminal recovery record even before the bundle arrives. With no application changes yet, it can release its CSS gate alone. Once setup starts, it must invoke the registered rollback as well. Releasing a shared document gate must not expose other still-preparing owners; use per-owner gates or transfer every owner's initial values before releasing it.
49
+
50
+ Every async continuation and controller entry point checks its captured token **before any DOM write or effect creation**, including `set`, `fromTo`, `onSplit`, resize/font callbacks, and `contextSafe` callbacks. Context ownership does not cancel promises. Catch failures inside those callbacks too. Late controller registration reads the terminal boot record and settles without hiding or splitting. Do not infer recovery only from an absent marker that navigation can later recreate.
51
+
52
+ On navigation, deactivate the outgoing owner's entrance recovery before the outro. Cancel stale work without revealing that owner. Recovery must exclude outgoing/end-state pages, cached hidden routes, closed dialogs, inactive tabs/panels, and decorative clones. Restore the outgoing page only if navigation itself is cancelled and that page becomes current again. Persistent shell elements keep separate visits. Dispose obsolete recovery timers on removal; never let them unlock or focus a newer route.
53
+
54
+ ## Rendering and indexing
55
+
56
+ Keep primary text, headings, and meaningful links in server-rendered or prerendered HTML where supported. Preserve real `a[href]` links and independently accessible route URLs. Client-only rendering cannot reveal HTML that was never sent; provide a useful static shell/fallback and report that limit. Do not turn an entire page client-only to facilitate animation.
57
+
58
+ Google renders JavaScript and uses rendered HTML for indexing. An automatic intro does not inherently prevent indexing; that is an inference from Google's rendering model, not a guarantee for a particular page. Check rendered output when indexing is in question. Static hiding rules alone do not establish production indexing failures. See [JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics).
59
+
60
+ Do not require a click, scroll, or hover to load primary indexable content. Keep primary hero media eagerly discoverable; reserve lazy loading for appropriate offscreen content. See [Google's lazy-loading guidance](https://developers.google.com/search/docs/crawling-indexing/javascript/lazy-loading).
61
+
62
+ ## First-load performance
63
+
64
+ Initially hidden primary content can delay Largest Contentful Paint. LCP concerns eligible visible content painted in the viewport, not the end of a GSAP timeline. A heading or hero may become a candidate before the remaining stagger, footer, or ambient animation completes. Browser eligibility and candidate changes matter; do not calculate LCP from total timeline duration. See [Largest Contentful Paint](https://web.dev/articles/lcp).
65
+
66
+ Reveal primary headings and hero imagery without waiting for unrelated plugins, particle setup, below-fold media, or every font weight. Keep ambitious motion where requested; reduce unnecessary preparation and deliberate blank holds before weakening the effect. Never serve crawler-specific content or use near-zero opacity tricks to manipulate metrics.
67
+
68
+ Measure cold first loads separately from client-side transitions. Record the LCP element and timestamp, resource timing, layout shift, and a filmstrip under representative network/CPU conditions. Compare normal and reduced motion; use field data when available. Smooth route transitions do not prove fast document loads. Better performance does not promise ranking or indexing outcomes. See [Google's page-experience guidance](https://developers.google.com/search/docs/appearance/page-experience).
69
+
70
+ ## Failure verification
71
+
72
+ Use the framework's production build and actual rendering mode. For every supported failure, assert meaningful text, usable links, restored owned styles/DOM, and absence of stale cover, lock, focus, or completion effects. Check page and shell owners separately.
73
+
74
+ | Case | Required observation |
75
+ |---|---|
76
+ | JavaScript disabled | Server/static content and native links work. Client-only routes get their documented static fallback, not invented SSR content. |
77
+ | Bundle blocked after marker | Prove the early marker executed; let its deadline expire. Content becomes readable without application cleanup. |
78
+ | Setup throws before initial writes | Readable settled state; no unresolved completion or navigation wait. |
79
+ | Setup throws after styles or split DOM | Timelines stop, original text/links return, temporary styles and masks disappear. |
80
+ | Fonts/media stall or reject | Bounded fallback. Resolve them afterward and confirm no new hiding or splitting. |
81
+ | Initialization arrives after recovery | Observe multiple frames after release and beyond the old timeline/deadline. No hidden frame or duplicate completion. |
82
+ | Successful delayed startup within budget | Hidden first frame, then full intended intro. No flash of settled content; intentional duration may exceed the boot budget. |
83
+ | Reduced motion | Readable first paint, functional links, normal completion semantics without travel. |
84
+ | Navigation during preparation or intro | One correct destination; stale recovery cannot reveal outgoing/hidden content or unlock/focus the new visit. |
85
+ | Repeated setup, history, and preserved nodes | No duplicate wrappers, listeners, callbacks, or replay after recovery within the same visit. |
86
+
87
+ Block only application resources in the bundle test, not the early script or stylesheet. Distinguish an intentionally delayed intro from stalled preparation. Record what ran, rendering limitations, and remaining browser/production gaps; these checks do not prove Google indexed the page or establish field LCP.