jfl 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +313 -0
  3. package/clawdbot-skill/README.md +328 -0
  4. package/clawdbot-skill/SKILL.md +362 -0
  5. package/clawdbot-skill/index.ts +486 -0
  6. package/clawdbot-skill/package.json +28 -0
  7. package/clawdbot-skill/skill.json +28 -0
  8. package/dist/commands/agents.d.ts +5 -0
  9. package/dist/commands/agents.d.ts.map +1 -0
  10. package/dist/commands/agents.js +399 -0
  11. package/dist/commands/agents.js.map +1 -0
  12. package/dist/commands/context-hub.d.ts +12 -0
  13. package/dist/commands/context-hub.d.ts.map +1 -0
  14. package/dist/commands/context-hub.js +642 -0
  15. package/dist/commands/context-hub.js.map +1 -0
  16. package/dist/commands/deploy.d.ts +5 -0
  17. package/dist/commands/deploy.d.ts.map +1 -0
  18. package/dist/commands/deploy.js +370 -0
  19. package/dist/commands/deploy.js.map +1 -0
  20. package/dist/commands/feedback.d.ts +2 -0
  21. package/dist/commands/feedback.d.ts.map +1 -0
  22. package/dist/commands/feedback.js +178 -0
  23. package/dist/commands/feedback.js.map +1 -0
  24. package/dist/commands/hud.d.ts +4 -0
  25. package/dist/commands/hud.d.ts.map +1 -0
  26. package/dist/commands/hud.js +262 -0
  27. package/dist/commands/hud.js.map +1 -0
  28. package/dist/commands/init.d.ts +4 -0
  29. package/dist/commands/init.d.ts.map +1 -0
  30. package/dist/commands/init.js +553 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/login.d.ts +23 -0
  33. package/dist/commands/login.d.ts.map +1 -0
  34. package/dist/commands/login.js +818 -0
  35. package/dist/commands/login.js.map +1 -0
  36. package/dist/commands/ralph.d.ts +9 -0
  37. package/dist/commands/ralph.d.ts.map +1 -0
  38. package/dist/commands/ralph.js +67 -0
  39. package/dist/commands/ralph.js.map +1 -0
  40. package/dist/commands/repair.d.ts +7 -0
  41. package/dist/commands/repair.d.ts.map +1 -0
  42. package/dist/commands/repair.js +283 -0
  43. package/dist/commands/repair.js.map +1 -0
  44. package/dist/commands/session-mgmt.d.ts +33 -0
  45. package/dist/commands/session-mgmt.d.ts.map +1 -0
  46. package/dist/commands/session-mgmt.js +404 -0
  47. package/dist/commands/session-mgmt.js.map +1 -0
  48. package/dist/commands/session.d.ts +2 -0
  49. package/dist/commands/session.d.ts.map +1 -0
  50. package/dist/commands/session.js +639 -0
  51. package/dist/commands/session.js.map +1 -0
  52. package/dist/commands/skills.d.ts +31 -0
  53. package/dist/commands/skills.d.ts.map +1 -0
  54. package/dist/commands/skills.js +314 -0
  55. package/dist/commands/skills.js.map +1 -0
  56. package/dist/commands/status.d.ts +2 -0
  57. package/dist/commands/status.d.ts.map +1 -0
  58. package/dist/commands/status.js +127 -0
  59. package/dist/commands/status.js.map +1 -0
  60. package/dist/commands/synopsis.d.ts +10 -0
  61. package/dist/commands/synopsis.d.ts.map +1 -0
  62. package/dist/commands/synopsis.js +277 -0
  63. package/dist/commands/synopsis.js.map +1 -0
  64. package/dist/commands/update.d.ts +10 -0
  65. package/dist/commands/update.d.ts.map +1 -0
  66. package/dist/commands/update.js +165 -0
  67. package/dist/commands/update.js.map +1 -0
  68. package/dist/commands/voice.d.ts +410 -0
  69. package/dist/commands/voice.d.ts.map +1 -0
  70. package/dist/commands/voice.js +4763 -0
  71. package/dist/commands/voice.js.map +1 -0
  72. package/dist/index.d.ts +9 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +512 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/mcp/context-hub-mcp.d.ts +11 -0
  77. package/dist/mcp/context-hub-mcp.d.ts.map +1 -0
  78. package/dist/mcp/context-hub-mcp.js +548 -0
  79. package/dist/mcp/context-hub-mcp.js.map +1 -0
  80. package/dist/telegram/voice.d.ts +146 -0
  81. package/dist/telegram/voice.d.ts.map +1 -0
  82. package/dist/telegram/voice.js +351 -0
  83. package/dist/telegram/voice.js.map +1 -0
  84. package/dist/types/skills.d.ts +44 -0
  85. package/dist/types/skills.d.ts.map +1 -0
  86. package/dist/types/skills.js +5 -0
  87. package/dist/types/skills.js.map +1 -0
  88. package/dist/ui/banner.d.ts +18 -0
  89. package/dist/ui/banner.d.ts.map +1 -0
  90. package/dist/ui/banner.js +323 -0
  91. package/dist/ui/banner.js.map +1 -0
  92. package/dist/ui/index.d.ts +8 -0
  93. package/dist/ui/index.d.ts.map +1 -0
  94. package/dist/ui/index.js +8 -0
  95. package/dist/ui/index.js.map +1 -0
  96. package/dist/ui/prompts.d.ts +52 -0
  97. package/dist/ui/prompts.d.ts.map +1 -0
  98. package/dist/ui/prompts.js +72 -0
  99. package/dist/ui/prompts.js.map +1 -0
  100. package/dist/ui/theme.d.ts +82 -0
  101. package/dist/ui/theme.d.ts.map +1 -0
  102. package/dist/ui/theme.js +142 -0
  103. package/dist/ui/theme.js.map +1 -0
  104. package/dist/utils/auth-guard.d.ts +66 -0
  105. package/dist/utils/auth-guard.d.ts.map +1 -0
  106. package/dist/utils/auth-guard.js +348 -0
  107. package/dist/utils/auth-guard.js.map +1 -0
  108. package/dist/utils/ensure-project.d.ts +11 -0
  109. package/dist/utils/ensure-project.d.ts.map +1 -0
  110. package/dist/utils/ensure-project.js +70 -0
  111. package/dist/utils/ensure-project.js.map +1 -0
  112. package/dist/utils/git.d.ts +73 -0
  113. package/dist/utils/git.d.ts.map +1 -0
  114. package/dist/utils/git.js +219 -0
  115. package/dist/utils/git.js.map +1 -0
  116. package/dist/utils/github-auth.d.ts +54 -0
  117. package/dist/utils/github-auth.d.ts.map +1 -0
  118. package/dist/utils/github-auth.js +375 -0
  119. package/dist/utils/github-auth.js.map +1 -0
  120. package/dist/utils/github-repo.d.ts +30 -0
  121. package/dist/utils/github-repo.d.ts.map +1 -0
  122. package/dist/utils/github-repo.js +219 -0
  123. package/dist/utils/github-repo.js.map +1 -0
  124. package/dist/utils/platform-auth.d.ts +81 -0
  125. package/dist/utils/platform-auth.d.ts.map +1 -0
  126. package/dist/utils/platform-auth.js +191 -0
  127. package/dist/utils/platform-auth.js.map +1 -0
  128. package/dist/utils/project-config.d.ts +43 -0
  129. package/dist/utils/project-config.d.ts.map +1 -0
  130. package/dist/utils/project-config.js +97 -0
  131. package/dist/utils/project-config.js.map +1 -0
  132. package/dist/utils/skill-registry.d.ts +49 -0
  133. package/dist/utils/skill-registry.d.ts.map +1 -0
  134. package/dist/utils/skill-registry.js +192 -0
  135. package/dist/utils/skill-registry.js.map +1 -0
  136. package/dist/utils/wallet.d.ts +62 -0
  137. package/dist/utils/wallet.d.ts.map +1 -0
  138. package/dist/utils/wallet.js +252 -0
  139. package/dist/utils/wallet.js.map +1 -0
  140. package/dist/utils/x402-client.d.ts +86 -0
  141. package/dist/utils/x402-client.d.ts.map +1 -0
  142. package/dist/utils/x402-client.js +265 -0
  143. package/dist/utils/x402-client.js.map +1 -0
  144. package/package.json +76 -0
  145. package/scripts/postinstall.js +116 -0
  146. package/scripts/test-onboarding.sh +121 -0
  147. package/scripts/voice-start.sh +128 -0
  148. package/scripts/voice-stop.sh +33 -0
  149. package/template/.claude/settings.json +92 -0
  150. package/template/.claude/skills/agent-browser/SKILL.md +116 -0
  151. package/template/.claude/skills/brand-architect/SKILL.md +240 -0
  152. package/template/.claude/skills/brand-architect/config.yaml +137 -0
  153. package/template/.claude/skills/campaign-hud/config.yaml +112 -0
  154. package/template/.claude/skills/content-creator/SKILL.md +294 -0
  155. package/template/.claude/skills/debug/MULTI_AGENT.md +360 -0
  156. package/template/.claude/skills/debug/SKILL.md +549 -0
  157. package/template/.claude/skills/fly-deploy/SKILL.md +676 -0
  158. package/template/.claude/skills/founder-video/SKILL.md +467 -0
  159. package/template/.claude/skills/hud/SKILL.md +157 -0
  160. package/template/.claude/skills/ralph-tui/SKILL.md +210 -0
  161. package/template/.claude/skills/react-best-practices/AGENTS.md +2249 -0
  162. package/template/.claude/skills/react-best-practices/README.md +123 -0
  163. package/template/.claude/skills/react-best-practices/SKILL.md +125 -0
  164. package/template/.claude/skills/react-best-practices/metadata.json +15 -0
  165. package/template/.claude/skills/react-best-practices/rules/_sections.md +46 -0
  166. package/template/.claude/skills/react-best-practices/rules/_template.md +28 -0
  167. package/template/.claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  168. package/template/.claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  169. package/template/.claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
  170. package/template/.claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
  171. package/template/.claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
  172. package/template/.claude/skills/react-best-practices/rules/async-parallel.md +28 -0
  173. package/template/.claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  174. package/template/.claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  175. package/template/.claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  176. package/template/.claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  177. package/template/.claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  178. package/template/.claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
  179. package/template/.claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  180. package/template/.claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  181. package/template/.claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  182. package/template/.claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  183. package/template/.claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  184. package/template/.claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  185. package/template/.claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  186. package/template/.claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
  187. package/template/.claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  188. package/template/.claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
  189. package/template/.claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  190. package/template/.claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  191. package/template/.claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  192. package/template/.claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  193. package/template/.claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
  194. package/template/.claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  195. package/template/.claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  196. package/template/.claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  197. package/template/.claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  198. package/template/.claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  199. package/template/.claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  200. package/template/.claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  201. package/template/.claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  202. package/template/.claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  203. package/template/.claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  204. package/template/.claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  205. package/template/.claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
  206. package/template/.claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  207. package/template/.claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  208. package/template/.claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  209. package/template/.claude/skills/react-best-practices/rules/server-cache-react.md +26 -0
  210. package/template/.claude/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
  211. package/template/.claude/skills/react-best-practices/rules/server-serialization.md +38 -0
  212. package/template/.claude/skills/remotion-best-practices/SKILL.md +43 -0
  213. package/template/.claude/skills/remotion-best-practices/rules/3d.md +86 -0
  214. package/template/.claude/skills/remotion-best-practices/rules/animations.md +29 -0
  215. package/template/.claude/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  216. package/template/.claude/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  217. package/template/.claude/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  218. package/template/.claude/skills/remotion-best-practices/rules/assets.md +78 -0
  219. package/template/.claude/skills/remotion-best-practices/rules/audio.md +172 -0
  220. package/template/.claude/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
  221. package/template/.claude/skills/remotion-best-practices/rules/can-decode.md +75 -0
  222. package/template/.claude/skills/remotion-best-practices/rules/charts.md +58 -0
  223. package/template/.claude/skills/remotion-best-practices/rules/compositions.md +146 -0
  224. package/template/.claude/skills/remotion-best-practices/rules/display-captions.md +126 -0
  225. package/template/.claude/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  226. package/template/.claude/skills/remotion-best-practices/rules/fonts.md +152 -0
  227. package/template/.claude/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  228. package/template/.claude/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  229. package/template/.claude/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
  230. package/template/.claude/skills/remotion-best-practices/rules/gifs.md +138 -0
  231. package/template/.claude/skills/remotion-best-practices/rules/images.md +130 -0
  232. package/template/.claude/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
  233. package/template/.claude/skills/remotion-best-practices/rules/lottie.md +68 -0
  234. package/template/.claude/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
  235. package/template/.claude/skills/remotion-best-practices/rules/measuring-text.md +143 -0
  236. package/template/.claude/skills/remotion-best-practices/rules/sequencing.md +106 -0
  237. package/template/.claude/skills/remotion-best-practices/rules/tailwind.md +11 -0
  238. package/template/.claude/skills/remotion-best-practices/rules/text-animations.md +20 -0
  239. package/template/.claude/skills/remotion-best-practices/rules/timing.md +179 -0
  240. package/template/.claude/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
  241. package/template/.claude/skills/remotion-best-practices/rules/transitions.md +122 -0
  242. package/template/.claude/skills/remotion-best-practices/rules/trimming.md +53 -0
  243. package/template/.claude/skills/remotion-best-practices/rules/videos.md +171 -0
  244. package/template/.claude/skills/search/SKILL.md +220 -0
  245. package/template/.claude/skills/spec/SKILL.md +377 -0
  246. package/template/.claude/skills/startup/SKILL.md +310 -0
  247. package/template/.claude/skills/web-architect/SKILL.md +309 -0
  248. package/template/.claude/skills/x-algorithm/SKILL.md +305 -0
  249. package/template/.jfl/config.json +8 -0
  250. package/template/.mcp.json +11 -0
  251. package/template/CLAUDE.md +960 -0
  252. package/template/content/.gitkeep +0 -0
  253. package/template/context-hub +3 -0
  254. package/template/knowledge/BRAND_BRIEF.md +124 -0
  255. package/template/knowledge/BRAND_DECISIONS.md +168 -0
  256. package/template/knowledge/NARRATIVE.md +114 -0
  257. package/template/knowledge/ROADMAP.md +128 -0
  258. package/template/knowledge/THESIS.md +108 -0
  259. package/template/knowledge/VISION.md +74 -0
  260. package/template/knowledge/VOICE_AND_TONE.md +146 -0
  261. package/template/previews/.gitkeep +0 -0
  262. package/template/scripts/session/auto-commit.sh +245 -0
  263. package/template/scripts/session/auto-merge.sh +325 -0
  264. package/template/scripts/session/jfl-doctor.sh +587 -0
  265. package/template/scripts/session/session-end.sh +194 -0
  266. package/template/scripts/session/session-init.sh +163 -0
  267. package/template/scripts/session/session-sync.sh +167 -0
  268. package/template/scripts/session/test-context-preservation.sh +160 -0
  269. package/template/skills/agent-browser/SKILL.md +116 -0
  270. package/template/skills/brand-architect/SKILL.md +240 -0
  271. package/template/skills/brand-architect/config.yaml +137 -0
  272. package/template/skills/campaign-hud/config.yaml +112 -0
  273. package/template/skills/content-creator/SKILL.md +294 -0
  274. package/template/skills/debug/MULTI_AGENT.md +360 -0
  275. package/template/skills/debug/SKILL.md +549 -0
  276. package/template/skills/fly-deploy/SKILL.md +676 -0
  277. package/template/skills/founder-video/SKILL.md +467 -0
  278. package/template/skills/hud/SKILL.md +204 -0
  279. package/template/skills/ralph-tui/SKILL.md +210 -0
  280. package/template/skills/react-best-practices/AGENTS.md +2249 -0
  281. package/template/skills/react-best-practices/README.md +123 -0
  282. package/template/skills/react-best-practices/SKILL.md +125 -0
  283. package/template/skills/react-best-practices/metadata.json +15 -0
  284. package/template/skills/react-best-practices/rules/_sections.md +46 -0
  285. package/template/skills/react-best-practices/rules/_template.md +28 -0
  286. package/template/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  287. package/template/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  288. package/template/skills/react-best-practices/rules/async-api-routes.md +38 -0
  289. package/template/skills/react-best-practices/rules/async-defer-await.md +80 -0
  290. package/template/skills/react-best-practices/rules/async-dependencies.md +36 -0
  291. package/template/skills/react-best-practices/rules/async-parallel.md +28 -0
  292. package/template/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  293. package/template/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  294. package/template/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  295. package/template/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  296. package/template/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  297. package/template/skills/react-best-practices/rules/bundle-preload.md +50 -0
  298. package/template/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  299. package/template/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  300. package/template/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  301. package/template/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  302. package/template/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  303. package/template/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  304. package/template/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  305. package/template/skills/react-best-practices/rules/js-early-exit.md +50 -0
  306. package/template/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  307. package/template/skills/react-best-practices/rules/js-index-maps.md +37 -0
  308. package/template/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  309. package/template/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  310. package/template/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  311. package/template/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  312. package/template/skills/react-best-practices/rules/rendering-activity.md +26 -0
  313. package/template/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  314. package/template/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  315. package/template/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  316. package/template/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  317. package/template/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  318. package/template/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  319. package/template/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  320. package/template/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  321. package/template/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  322. package/template/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  323. package/template/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  324. package/template/skills/react-best-practices/rules/rerender-memo.md +44 -0
  325. package/template/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  326. package/template/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  327. package/template/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  328. package/template/skills/react-best-practices/rules/server-cache-react.md +26 -0
  329. package/template/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
  330. package/template/skills/react-best-practices/rules/server-serialization.md +38 -0
  331. package/template/skills/remotion-best-practices/SKILL.md +43 -0
  332. package/template/skills/remotion-best-practices/rules/3d.md +86 -0
  333. package/template/skills/remotion-best-practices/rules/animations.md +29 -0
  334. package/template/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  335. package/template/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  336. package/template/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  337. package/template/skills/remotion-best-practices/rules/assets.md +78 -0
  338. package/template/skills/remotion-best-practices/rules/audio.md +172 -0
  339. package/template/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
  340. package/template/skills/remotion-best-practices/rules/can-decode.md +75 -0
  341. package/template/skills/remotion-best-practices/rules/charts.md +58 -0
  342. package/template/skills/remotion-best-practices/rules/compositions.md +146 -0
  343. package/template/skills/remotion-best-practices/rules/display-captions.md +126 -0
  344. package/template/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  345. package/template/skills/remotion-best-practices/rules/fonts.md +152 -0
  346. package/template/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  347. package/template/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  348. package/template/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
  349. package/template/skills/remotion-best-practices/rules/gifs.md +138 -0
  350. package/template/skills/remotion-best-practices/rules/images.md +130 -0
  351. package/template/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
  352. package/template/skills/remotion-best-practices/rules/lottie.md +68 -0
  353. package/template/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
  354. package/template/skills/remotion-best-practices/rules/measuring-text.md +143 -0
  355. package/template/skills/remotion-best-practices/rules/sequencing.md +106 -0
  356. package/template/skills/remotion-best-practices/rules/tailwind.md +11 -0
  357. package/template/skills/remotion-best-practices/rules/text-animations.md +20 -0
  358. package/template/skills/remotion-best-practices/rules/timing.md +179 -0
  359. package/template/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
  360. package/template/skills/remotion-best-practices/rules/transitions.md +122 -0
  361. package/template/skills/remotion-best-practices/rules/trimming.md +53 -0
  362. package/template/skills/remotion-best-practices/rules/videos.md +171 -0
  363. package/template/skills/search/SKILL.md +220 -0
  364. package/template/skills/spec/SKILL.md +377 -0
  365. package/template/skills/startup/SKILL.md +310 -0
  366. package/template/skills/web-architect/SKILL.md +309 -0
  367. package/template/skills/x-algorithm/SKILL.md +305 -0
  368. package/template/suggestions/.gitkeep +0 -0
  369. package/template/templates/QUICKSTART_SKILL_TO_PRODUCT.md +242 -0
  370. package/template/templates/brand/BRAND_BRIEF.md +124 -0
  371. package/template/templates/brand/BRAND_DECISIONS.md +168 -0
  372. package/template/templates/brand/BRAND_GUIDELINES.md +251 -0
  373. package/template/templates/brand/VOICE_AND_TONE.md +146 -0
  374. package/template/templates/brand/global.css +240 -0
  375. package/template/templates/collaboration/CONTRIBUTOR.md +74 -0
  376. package/template/templates/collaboration/CRM.md +97 -0
  377. package/template/templates/collaboration/TASKS.md +83 -0
  378. package/template/templates/strategic/NARRATIVE.md +114 -0
  379. package/template/templates/strategic/ROADMAP.md +128 -0
  380. package/template/templates/strategic/THESIS.md +108 -0
  381. package/template/templates/strategic/VISION.md +74 -0
@@ -0,0 +1,130 @@
1
+ ---
2
+ name: images
3
+ description: Embedding images in Remotion using the <Img> component
4
+ metadata:
5
+ tags: images, img, staticFile, png, jpg, svg, webp
6
+ ---
7
+
8
+ # Using images in Remotion
9
+
10
+ ## The `<Img>` component
11
+
12
+ Always use the `<Img>` component from `remotion` to display images:
13
+
14
+ ```tsx
15
+ import { Img, staticFile } from "remotion";
16
+
17
+ export const MyComposition = () => {
18
+ return <Img src={staticFile("photo.png")} />;
19
+ };
20
+ ```
21
+
22
+ ## Important restrictions
23
+
24
+ **You MUST use the `<Img>` component from `remotion`.** Do not use:
25
+
26
+ - Native HTML `<img>` elements
27
+ - Next.js `<Image>` component
28
+ - CSS `background-image`
29
+
30
+ The `<Img>` component ensures images are fully loaded before rendering, preventing flickering and blank frames during video export.
31
+
32
+ ## Local images with staticFile()
33
+
34
+ Place images in the `public/` folder and use `staticFile()` to reference them:
35
+
36
+ ```
37
+ my-video/
38
+ ├─ public/
39
+ │ ├─ logo.png
40
+ │ ├─ avatar.jpg
41
+ │ └─ icon.svg
42
+ ├─ src/
43
+ ├─ package.json
44
+ ```
45
+
46
+ ```tsx
47
+ import { Img, staticFile } from "remotion";
48
+
49
+ <Img src={staticFile("logo.png")} />
50
+ ```
51
+
52
+ ## Remote images
53
+
54
+ Remote URLs can be used directly without `staticFile()`:
55
+
56
+ ```tsx
57
+ <Img src="https://example.com/image.png" />
58
+ ```
59
+
60
+ Ensure remote images have CORS enabled.
61
+
62
+ For animated GIFs, use the `<Gif>` component from `@remotion/gif` instead.
63
+
64
+ ## Sizing and positioning
65
+
66
+ Use the `style` prop to control size and position:
67
+
68
+ ```tsx
69
+ <Img
70
+ src={staticFile("photo.png")}
71
+ style={{
72
+ width: 500,
73
+ height: 300,
74
+ position: "absolute",
75
+ top: 100,
76
+ left: 50,
77
+ objectFit: "cover",
78
+ }}
79
+ />
80
+ ```
81
+
82
+ ## Dynamic image paths
83
+
84
+ Use template literals for dynamic file references:
85
+
86
+ ```tsx
87
+ import { Img, staticFile, useCurrentFrame } from "remotion";
88
+
89
+ const frame = useCurrentFrame();
90
+
91
+ // Image sequence
92
+ <Img src={staticFile(`frames/frame${frame}.png`)} />
93
+
94
+ // Selecting based on props
95
+ <Img src={staticFile(`avatars/${props.userId}.png`)} />
96
+
97
+ // Conditional images
98
+ <Img src={staticFile(`icons/${isActive ? "active" : "inactive"}.svg`)} />
99
+ ```
100
+
101
+ This pattern is useful for:
102
+
103
+ - Image sequences (frame-by-frame animations)
104
+ - User-specific avatars or profile images
105
+ - Theme-based icons
106
+ - State-dependent graphics
107
+
108
+ ## Getting image dimensions
109
+
110
+ Use `getImageDimensions()` to get the dimensions of an image:
111
+
112
+ ```tsx
113
+ import { getImageDimensions, staticFile } from "remotion";
114
+
115
+ const { width, height } = await getImageDimensions(staticFile("photo.png"));
116
+ ```
117
+
118
+ This is useful for calculating aspect ratios or sizing compositions:
119
+
120
+ ```tsx
121
+ import { getImageDimensions, staticFile, CalculateMetadataFunction } from "remotion";
122
+
123
+ const calculateMetadata: CalculateMetadataFunction = async () => {
124
+ const { width, height } = await getImageDimensions(staticFile("photo.png"));
125
+ return {
126
+ width,
127
+ height,
128
+ };
129
+ };
130
+ ```
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: import-srt-captions
3
+ description: Importing .srt subtitle files into Remotion using @remotion/captions
4
+ metadata:
5
+ tags: captions, subtitles, srt, import, parse
6
+ ---
7
+
8
+ # Importing .srt subtitles into Remotion
9
+
10
+ If you have an existing `.srt` subtitle file, you can import it into Remotion using `parseSrt()` from `@remotion/captions`.
11
+
12
+ ## Prerequisites
13
+
14
+ First, the @remotion/captions package needs to be installed.
15
+ If it is not installed, use the following command:
16
+
17
+ ```bash
18
+ npx remotion add @remotion/captions # If project uses npm
19
+ bunx remotion add @remotion/captions # If project uses bun
20
+ yarn remotion add @remotion/captions # If project uses yarn
21
+ pnpm exec remotion add @remotion/captions # If project uses pnpm
22
+ ```
23
+
24
+ ## Reading an .srt file
25
+
26
+ Use `staticFile()` to reference an `.srt` file in your `public` folder, then fetch and parse it:
27
+
28
+ ```tsx
29
+ import {useState, useEffect, useCallback} from 'react';
30
+ import {AbsoluteFill, staticFile, useDelayRender} from 'remotion';
31
+ import {parseSrt} from '@remotion/captions';
32
+ import type {Caption} from '@remotion/captions';
33
+
34
+ export const MyComponent: React.FC = () => {
35
+ const [captions, setCaptions] = useState<Caption[] | null>(null);
36
+ const {delayRender, continueRender, cancelRender} = useDelayRender();
37
+ const [handle] = useState(() => delayRender());
38
+
39
+ const fetchCaptions = useCallback(async () => {
40
+ try {
41
+ const response = await fetch(staticFile('subtitles.srt'));
42
+ const text = await response.text();
43
+ const {captions: parsed} = parseSrt({input: text});
44
+ setCaptions(parsed);
45
+ continueRender(handle);
46
+ } catch (e) {
47
+ cancelRender(e);
48
+ }
49
+ }, [continueRender, cancelRender, handle]);
50
+
51
+ useEffect(() => {
52
+ fetchCaptions();
53
+ }, [fetchCaptions]);
54
+
55
+ if (!captions) {
56
+ return null;
57
+ }
58
+
59
+ return <AbsoluteFill>{/* Use captions here */}</AbsoluteFill>;
60
+ };
61
+ ```
62
+
63
+ Remote URLs are also supported - you can `fetch()` a remote file via URL instead of using `staticFile()`.
64
+
65
+ ## Using imported captions
66
+
67
+ Once parsed, the captions are in the `Caption` format and can be used with all `@remotion/captions` utilities.
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: lottie
3
+ description: Embedding Lottie animations in Remotion.
4
+ metadata:
5
+ category: Animation
6
+ ---
7
+
8
+ # Using Lottie Animations in Remotion
9
+
10
+ ## Prerequisites
11
+
12
+ First, the @remotion/lottie package needs to be installed.
13
+ If it is not, use the following command:
14
+
15
+ ```bash
16
+ npx remotion add @remotion/lottie # If project uses npm
17
+ bunx remotion add @remotion/lottie # If project uses bun
18
+ yarn remotion add @remotion/lottie # If project uses yarn
19
+ pnpm exec remotion add @remotion/lottie # If project uses pnpm
20
+ ```
21
+
22
+ ## Displaying a Lottie file
23
+
24
+ To import a Lottie animation:
25
+
26
+ - Fetch the Lottie asset
27
+ - Wrap the loading process in `delayRender()` and `continueRender()`
28
+ - Save the animation data in a state
29
+ - Render the Lottie animation using the `Lottie` component from the `@remotion/lottie` package
30
+
31
+ ```tsx
32
+ import {Lottie, LottieAnimationData} from '@remotion/lottie';
33
+ import {useEffect, useState} from 'react';
34
+ import {cancelRender, continueRender, delayRender} from 'remotion';
35
+
36
+ export const MyAnimation = () => {
37
+ const [handle] = useState(() => delayRender('Loading Lottie animation'));
38
+
39
+ const [animationData, setAnimationData] = useState<LottieAnimationData | null>(null);
40
+
41
+ useEffect(() => {
42
+ fetch('https://assets4.lottiefiles.com/packages/lf20_zyquagfl.json')
43
+ .then((data) => data.json())
44
+ .then((json) => {
45
+ setAnimationData(json);
46
+ continueRender(handle);
47
+ })
48
+ .catch((err) => {
49
+ cancelRender(err);
50
+ });
51
+ }, [handle]);
52
+
53
+ if (!animationData) {
54
+ return null;
55
+ }
56
+
57
+ return <Lottie animationData={animationData} />;
58
+ };
59
+ ```
60
+
61
+ ## Styling and animating
62
+
63
+ Lottie supports the `style` prop to allow styles and animations:
64
+
65
+ ```tsx
66
+ return <Lottie animationData={animationData} style={{width: 400, height: 400}} />;
67
+ ```
68
+
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: measuring-dom-nodes
3
+ description: Measuring DOM element dimensions in Remotion
4
+ metadata:
5
+ tags: measure, layout, dimensions, getBoundingClientRect, scale
6
+ ---
7
+
8
+ # Measuring DOM nodes in Remotion
9
+
10
+ Remotion applies a `scale()` transform to the video container, which affects values from `getBoundingClientRect()`. Use `useCurrentScale()` to get correct measurements.
11
+
12
+ ## Measuring element dimensions
13
+
14
+ ```tsx
15
+ import { useCurrentScale } from "remotion";
16
+ import { useRef, useEffect, useState } from "react";
17
+
18
+ export const MyComponent = () => {
19
+ const ref = useRef<HTMLDivElement>(null);
20
+ const scale = useCurrentScale();
21
+ const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
22
+
23
+ useEffect(() => {
24
+ if (!ref.current) return;
25
+ const rect = ref.current.getBoundingClientRect();
26
+ setDimensions({
27
+ width: rect.width / scale,
28
+ height: rect.height / scale,
29
+ });
30
+ }, [scale]);
31
+
32
+ return <div ref={ref}>Content to measure</div>;
33
+ };
34
+ ```
35
+
@@ -0,0 +1,143 @@
1
+ ---
2
+ name: measuring-text
3
+ description: Measuring text dimensions, fitting text to containers, and checking overflow
4
+ metadata:
5
+ tags: measure, text, layout, dimensions, fitText, fillTextBox
6
+ ---
7
+
8
+ # Measuring text in Remotion
9
+
10
+ ## Prerequisites
11
+
12
+ Install @remotion/layout-utils if it is not already installed:
13
+
14
+ ```bash
15
+ npx remotion add @remotion/layout-utils # If project uses npm
16
+ bunx remotion add @remotion/layout-utils # If project uses bun
17
+ yarn remotion add @remotion/layout-utils # If project uses yarn
18
+ pnpm exec remotion add @remotion/layout-utils # If project uses pnpm
19
+ ```
20
+
21
+ ## Measuring text dimensions
22
+
23
+ Use `measureText()` to calculate the width and height of text:
24
+
25
+ ```tsx
26
+ import { measureText } from "@remotion/layout-utils";
27
+
28
+ const { width, height } = measureText({
29
+ text: "Hello World",
30
+ fontFamily: "Arial",
31
+ fontSize: 32,
32
+ fontWeight: "bold",
33
+ });
34
+ ```
35
+
36
+ Results are cached - duplicate calls return the cached result.
37
+
38
+ ## Fitting text to a width
39
+
40
+ Use `fitText()` to find the optimal font size for a container:
41
+
42
+ ```tsx
43
+ import { fitText } from "@remotion/layout-utils";
44
+
45
+ const { fontSize } = fitText({
46
+ text: "Hello World",
47
+ withinWidth: 600,
48
+ fontFamily: "Inter",
49
+ fontWeight: "bold",
50
+ });
51
+
52
+ return (
53
+ <div
54
+ style={{
55
+ fontSize: Math.min(fontSize, 80), // Cap at 80px
56
+ fontFamily: "Inter",
57
+ fontWeight: "bold",
58
+ }}
59
+ >
60
+ Hello World
61
+ </div>
62
+ );
63
+ ```
64
+
65
+ ## Checking text overflow
66
+
67
+ Use `fillTextBox()` to check if text exceeds a box:
68
+
69
+ ```tsx
70
+ import { fillTextBox } from "@remotion/layout-utils";
71
+
72
+ const box = fillTextBox({ maxBoxWidth: 400, maxLines: 3 });
73
+
74
+ const words = ["Hello", "World", "This", "is", "a", "test"];
75
+ for (const word of words) {
76
+ const { exceedsBox } = box.add({
77
+ text: word + " ",
78
+ fontFamily: "Arial",
79
+ fontSize: 24,
80
+ });
81
+ if (exceedsBox) {
82
+ // Text would overflow, handle accordingly
83
+ break;
84
+ }
85
+ }
86
+ ```
87
+
88
+ ## Best practices
89
+
90
+ **Load fonts first:** Only call measurement functions after fonts are loaded.
91
+
92
+ ```tsx
93
+ import { loadFont } from "@remotion/google-fonts/Inter";
94
+
95
+ const { fontFamily, waitUntilDone } = loadFont("normal", {
96
+ weights: ["400"],
97
+ subsets: ["latin"],
98
+ });
99
+
100
+ waitUntilDone().then(() => {
101
+ // Now safe to measure
102
+ const { width } = measureText({
103
+ text: "Hello",
104
+ fontFamily,
105
+ fontSize: 32,
106
+ });
107
+ })
108
+ ```
109
+
110
+ **Use validateFontIsLoaded:** Catch font loading issues early:
111
+
112
+ ```tsx
113
+ measureText({
114
+ text: "Hello",
115
+ fontFamily: "MyCustomFont",
116
+ fontSize: 32,
117
+ validateFontIsLoaded: true, // Throws if font not loaded
118
+ });
119
+ ```
120
+
121
+ **Match font properties:** Use the same properties for measurement and rendering:
122
+
123
+ ```tsx
124
+ const fontStyle = {
125
+ fontFamily: "Inter",
126
+ fontSize: 32,
127
+ fontWeight: "bold" as const,
128
+ letterSpacing: "0.5px",
129
+ };
130
+
131
+ const { width } = measureText({
132
+ text: "Hello",
133
+ ...fontStyle,
134
+ });
135
+
136
+ return <div style={fontStyle}>Hello</div>;
137
+ ```
138
+
139
+ **Avoid padding and border:** Use `outline` instead of `border` to prevent layout differences:
140
+
141
+ ```tsx
142
+ <div style={{ outline: "2px solid red" }}>Text</div>
143
+ ```
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: sequencing
3
+ description: Sequencing patterns for Remotion - delay, trim, limit duration of items
4
+ metadata:
5
+ tags: sequence, series, timing, delay, trim
6
+ ---
7
+
8
+ Use `<Sequence>` to delay when an element appears in the timeline.
9
+
10
+ ```tsx
11
+ import { Sequence } from "remotion";
12
+
13
+ const {fps} = useVideoConfig();
14
+
15
+ <Sequence from={1 * fps} durationInFrames={2 * fps} premountFor={1 * fps}>
16
+ <Title />
17
+ </Sequence>
18
+ <Sequence from={2 * fps} durationInFrames={2 * fps} premountFor={1 * fps}>
19
+ <Subtitle />
20
+ </Sequence>
21
+ ```
22
+
23
+ This will by default wrap the component in an absolute fill element.
24
+ If the items should not be wrapped, use the `layout` prop:
25
+
26
+ ```tsx
27
+ <Sequence layout="none">
28
+ <Title />
29
+ </Sequence>
30
+ ```
31
+
32
+ ## Premounting
33
+
34
+ This loads the component in the timeline before it is actually played.
35
+ Always premount any `<Sequence>`!
36
+
37
+ ```tsx
38
+ <Sequence premountFor={1 * fps}>
39
+ <Title />
40
+ </Sequence>
41
+ ```
42
+
43
+ ## Series
44
+
45
+ Use `<Series>` when elements should play one after another without overlap.
46
+
47
+ ```tsx
48
+ import {Series} from 'remotion';
49
+
50
+ <Series>
51
+ <Series.Sequence durationInFrames={45}>
52
+ <Intro />
53
+ </Series.Sequence>
54
+ <Series.Sequence durationInFrames={60}>
55
+ <MainContent />
56
+ </Series.Sequence>
57
+ <Series.Sequence durationInFrames={30}>
58
+ <Outro />
59
+ </Series.Sequence>
60
+ </Series>;
61
+ ```
62
+
63
+ Same as with `<Sequence>`, the items will be wrapped in an absolute fill element by default when using `<Series.Sequence>`, unless the `layout` prop is set to `none`.
64
+
65
+ ### Series with overlaps
66
+
67
+ Use negative offset for overlapping sequences:
68
+
69
+ ```tsx
70
+ <Series>
71
+ <Series.Sequence durationInFrames={60}>
72
+ <SceneA />
73
+ </Series.Sequence>
74
+ <Series.Sequence offset={-15} durationInFrames={60}>
75
+ {/* Starts 15 frames before SceneA ends */}
76
+ <SceneB />
77
+ </Series.Sequence>
78
+ </Series>
79
+ ```
80
+
81
+ ## Frame References Inside Sequences
82
+
83
+ Inside a Sequence, `useCurrentFrame()` returns the local frame (starting from 0):
84
+
85
+ ```tsx
86
+ <Sequence from={60} durationInFrames={30}>
87
+ <MyComponent />
88
+ {/* Inside MyComponent, useCurrentFrame() returns 0-29, not 60-89 */}
89
+ </Sequence>
90
+ ```
91
+
92
+ ## Nested Sequences
93
+
94
+ Sequences can be nested for complex timing:
95
+
96
+ ```tsx
97
+ <Sequence from={0} durationInFrames={120}>
98
+ <Background />
99
+ <Sequence from={15} durationInFrames={90} layout="none">
100
+ <Title />
101
+ </Sequence>
102
+ <Sequence from={45} durationInFrames={60} layout="none">
103
+ <Subtitle />
104
+ </Sequence>
105
+ </Sequence>
106
+ ```
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: tailwind
3
+ description: Using TailwindCSS in Remotion.
4
+ metadata:
5
+ ---
6
+
7
+ You can and should use TailwindCSS in Remotion, if TailwindCSS is installed in the project.
8
+
9
+ Don't use `transition-*` or `animate-*` classes - always animate using the `useCurrentFrame()` hook.
10
+
11
+ Tailwind must be installed and enabled first in a Remotion project - fetch https://www.remotion.dev/docs/tailwind using WebFetch for instructions.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: text-animations
3
+ description: Typography and text animation patterns for Remotion.
4
+ metadata:
5
+ tags: typography, text, typewriter, highlighter ken
6
+ ---
7
+
8
+ ## Text animations
9
+
10
+ Based on `useCurrentFrame()`, reduce the string character by character to create a typewriter effect.
11
+
12
+ ## Typewriter Effect
13
+
14
+ See [Typewriter](assets/text-animations-typewriter.tsx) for an advanced example with a blinking cursor and a pause after the first sentence.
15
+
16
+ Always use string slicing for typewriter effects. Never use per-character opacity.
17
+
18
+ ## Word Highlighting
19
+
20
+ See [Word Highlight](assets/text-animations-word-highlight.tsx) for an example for how a word highlight is animated, like with a highlighter pen.