@muskanmeet/invoicing-design-system 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (695) hide show
  1. package/.cache/replit/env/latest +78 -0
  2. package/.cache/replit/env/latest.json +1 -0
  3. package/.cache/replit/modules/nodejs-20.res +1 -0
  4. package/.cache/replit/modules/python-3.11.res +1 -0
  5. package/.cache/replit/modules/replit-rtld-loader.res +1 -0
  6. package/.cache/replit/modules/replit.res +1 -0
  7. package/.cache/replit/modules.stamp +0 -0
  8. package/.cache/replit/nix/dotreplitenv.json +1 -0
  9. package/.cache/replit/toolchain.json +1 -0
  10. package/.cache/typescript/5.9/package-lock.json +50 -0
  11. package/.cache/typescript/5.9/package.json +1 -0
  12. package/.config/nextjs-nodejs/config.json +7 -0
  13. package/.eslintrc.json +3 -0
  14. package/.local/.commit_message +31 -0
  15. package/.local/secondary_skills/LICENSE.txt +21 -0
  16. package/.local/secondary_skills/ad-creative/.fingerprint +1 -0
  17. package/.local/secondary_skills/ad-creative/SKILL.md +872 -0
  18. package/.local/secondary_skills/ai-recruiter/.fingerprint +1 -0
  19. package/.local/secondary_skills/ai-recruiter/SKILL.md +1087 -0
  20. package/.local/secondary_skills/ai-sdr/.fingerprint +1 -0
  21. package/.local/secondary_skills/ai-sdr/SKILL.md +204 -0
  22. package/.local/secondary_skills/ai-secretary/.fingerprint +1 -0
  23. package/.local/secondary_skills/ai-secretary/SKILL.md +1132 -0
  24. package/.local/secondary_skills/branding-generator/.fingerprint +1 -0
  25. package/.local/secondary_skills/branding-generator/SKILL.md +286 -0
  26. package/.local/secondary_skills/competitive-analysis/.fingerprint +1 -0
  27. package/.local/secondary_skills/competitive-analysis/SKILL.md +429 -0
  28. package/.local/secondary_skills/content-machine/.fingerprint +1 -0
  29. package/.local/secondary_skills/content-machine/SKILL.md +321 -0
  30. package/.local/secondary_skills/deep-research/.fingerprint +1 -0
  31. package/.local/secondary_skills/deep-research/SKILL.md +517 -0
  32. package/.local/secondary_skills/design-thinker/.fingerprint +1 -0
  33. package/.local/secondary_skills/design-thinker/SKILL.md +327 -0
  34. package/.local/secondary_skills/excel-generator/.fingerprint +1 -0
  35. package/.local/secondary_skills/excel-generator/SKILL.md +954 -0
  36. package/.local/secondary_skills/excel-generator/financial-models.md +289 -0
  37. package/.local/secondary_skills/file-converter/.fingerprint +1 -0
  38. package/.local/secondary_skills/file-converter/SKILL.md +823 -0
  39. package/.local/secondary_skills/flashcard-generator/.fingerprint +1 -0
  40. package/.local/secondary_skills/flashcard-generator/SKILL.md +233 -0
  41. package/.local/secondary_skills/geo/.fingerprint +1 -0
  42. package/.local/secondary_skills/geo/SKILL.md +378 -0
  43. package/.local/secondary_skills/geo/references/content-patterns.md +158 -0
  44. package/.local/secondary_skills/geo/references/platform-notes.md +128 -0
  45. package/.local/secondary_skills/geo/references/scorecard.md +113 -0
  46. package/.local/secondary_skills/geo/references/technical-checklist.md +257 -0
  47. package/.local/secondary_skills/github-solution-finder/.fingerprint +1 -0
  48. package/.local/secondary_skills/github-solution-finder/SKILL.md +174 -0
  49. package/.local/secondary_skills/infographic-builder/.fingerprint +1 -0
  50. package/.local/secondary_skills/infographic-builder/SKILL.md +317 -0
  51. package/.local/secondary_skills/infographic-builder/antv-syntax.md +470 -0
  52. package/.local/secondary_skills/infographic-builder/react-fallback.md +210 -0
  53. package/.local/secondary_skills/insurance-optimizer/.fingerprint +1 -0
  54. package/.local/secondary_skills/insurance-optimizer/SKILL.md +209 -0
  55. package/.local/secondary_skills/interview-prep/.fingerprint +1 -0
  56. package/.local/secondary_skills/interview-prep/SKILL.md +349 -0
  57. package/.local/secondary_skills/invoice-generator/.fingerprint +1 -0
  58. package/.local/secondary_skills/invoice-generator/SKILL.md +527 -0
  59. package/.local/secondary_skills/legal-contract/.fingerprint +1 -0
  60. package/.local/secondary_skills/legal-contract/SKILL.md +977 -0
  61. package/.local/secondary_skills/meal-planner/.fingerprint +1 -0
  62. package/.local/secondary_skills/meal-planner/SKILL.md +517 -0
  63. package/.local/secondary_skills/personal-shopper/.fingerprint +1 -0
  64. package/.local/secondary_skills/personal-shopper/SKILL.md +361 -0
  65. package/.local/secondary_skills/photo-editor/.fingerprint +1 -0
  66. package/.local/secondary_skills/photo-editor/SKILL.md +605 -0
  67. package/.local/secondary_skills/podcast-generator/.fingerprint +1 -0
  68. package/.local/secondary_skills/podcast-generator/SKILL.md +560 -0
  69. package/.local/secondary_skills/podcast-marketing/.fingerprint +1 -0
  70. package/.local/secondary_skills/podcast-marketing/SKILL.md +550 -0
  71. package/.local/secondary_skills/podcast-marketing/audio-processing.md +530 -0
  72. package/.local/secondary_skills/podcast-marketing/content-atoms.md +253 -0
  73. package/.local/secondary_skills/podcast-marketing/content-calendar.md +318 -0
  74. package/.local/secondary_skills/podcast-marketing/content-templates.md +325 -0
  75. package/.local/secondary_skills/podcast-marketing/quote-cards.md +238 -0
  76. package/.local/secondary_skills/podcast-marketing/rss-and-batch.md +359 -0
  77. package/.local/secondary_skills/podcast-marketing/video-clips.md +660 -0
  78. package/.local/secondary_skills/podcast-marketing/youtube-processing.md +328 -0
  79. package/.local/secondary_skills/product-manager/.fingerprint +1 -0
  80. package/.local/secondary_skills/product-manager/SKILL.md +272 -0
  81. package/.local/secondary_skills/programmatic-seo/.fingerprint +1 -0
  82. package/.local/secondary_skills/programmatic-seo/SKILL.md +1207 -0
  83. package/.local/secondary_skills/real-estate-analyzer/.fingerprint +1 -0
  84. package/.local/secondary_skills/real-estate-analyzer/SKILL.md +786 -0
  85. package/.local/secondary_skills/recipe-creator/.fingerprint +1 -0
  86. package/.local/secondary_skills/recipe-creator/SKILL.md +259 -0
  87. package/.local/secondary_skills/recreate-screenshot/.fingerprint +1 -0
  88. package/.local/secondary_skills/recreate-screenshot/SKILL.md +215 -0
  89. package/.local/secondary_skills/replit-migration-guardrails/.fingerprint +1 -0
  90. package/.local/secondary_skills/replit-migration-guardrails/SKILL.md +55 -0
  91. package/.local/secondary_skills/replit-migration-guardrails/references/base44.md +47 -0
  92. package/.local/secondary_skills/replit-migration-guardrails/references/vercel.md +78 -0
  93. package/.local/secondary_skills/resume-maker/.fingerprint +1 -0
  94. package/.local/secondary_skills/resume-maker/SKILL.md +790 -0
  95. package/.local/secondary_skills/seo-auditor/.fingerprint +1 -0
  96. package/.local/secondary_skills/seo-auditor/SKILL.md +448 -0
  97. package/.local/secondary_skills/skill-creator/.fingerprint +1 -0
  98. package/.local/secondary_skills/skill-creator/SKILL.md +214 -0
  99. package/.local/secondary_skills/skill-finder/.fingerprint +1 -0
  100. package/.local/secondary_skills/skill-finder/SKILL.md +299 -0
  101. package/.local/secondary_skills/stock-analyzer/.fingerprint +1 -0
  102. package/.local/secondary_skills/stock-analyzer/SKILL.md +798 -0
  103. package/.local/secondary_skills/storyboard/.fingerprint +1 -0
  104. package/.local/secondary_skills/storyboard/SKILL.md +558 -0
  105. package/.local/secondary_skills/supplier-research/.fingerprint +1 -0
  106. package/.local/secondary_skills/supplier-research/SKILL.md +213 -0
  107. package/.local/secondary_skills/tax-reviewer/.fingerprint +1 -0
  108. package/.local/secondary_skills/tax-reviewer/SKILL.md +131 -0
  109. package/.local/secondary_skills/travel-assistant/.fingerprint +1 -0
  110. package/.local/secondary_skills/travel-assistant/SKILL.md +667 -0
  111. package/.local/secondary_skills/video-editing/.fingerprint +1 -0
  112. package/.local/secondary_skills/video-editing/SKILL.md +705 -0
  113. package/.local/secondary_skills/video-editing/dead-space-and-chunking.md +1081 -0
  114. package/.local/secondary_skills/video-editing/operations.md +1719 -0
  115. package/.local/secondary_skills/video-editing/virality-scoring.md +1212 -0
  116. package/.local/secondary_skills/video-editing/voiceover.md +788 -0
  117. package/.local/secondary_skills/website-cloning/.fingerprint +1 -0
  118. package/.local/secondary_skills/website-cloning/SKILL.md +544 -0
  119. package/.local/secondary_skills/website-cloning/extraction.md +1207 -0
  120. package/.local/secondary_skills/website-cloning/pitfalls.md +297 -0
  121. package/.local/skills/LICENSE.txt +21 -0
  122. package/.local/skills/agent-inbox/.fingerprint +1 -0
  123. package/.local/skills/agent-inbox/SKILL.md +128 -0
  124. package/.local/skills/artifacts/.fingerprint +1 -0
  125. package/.local/skills/artifacts/SKILL.md +21 -0
  126. package/.local/skills/artifacts/artifacts/automation/artifact.yaml +40 -0
  127. package/.local/skills/artifacts/artifacts/automation/files/package.json.template +47 -0
  128. package/.local/skills/artifacts/artifacts/automation/files/scripts/build.sh +6 -0
  129. package/.local/skills/artifacts/artifacts/automation/files/scripts/inngest.sh +18 -0
  130. package/.local/skills/artifacts/artifacts/automation/files/src/global.d.ts +1 -0
  131. package/.local/skills/artifacts/artifacts/automation/files/src/mastra/agents/agent.ts +89 -0
  132. package/.local/skills/artifacts/artifacts/automation/files/src/mastra/index.ts +212 -0
  133. package/.local/skills/artifacts/artifacts/automation/files/src/mastra/inngest/client.ts +17 -0
  134. package/.local/skills/artifacts/artifacts/automation/files/src/mastra/inngest/index.ts +214 -0
  135. package/.local/skills/artifacts/artifacts/automation/files/src/mastra/storage/index.ts +8 -0
  136. package/.local/skills/artifacts/artifacts/automation/files/src/mastra/tools/exampleTool.ts +71 -0
  137. package/.local/skills/artifacts/artifacts/automation/files/src/mastra/workflows/workflow.ts +203 -0
  138. package/.local/skills/artifacts/artifacts/automation/files/src/triggers/cronTriggers.ts +61 -0
  139. package/.local/skills/artifacts/artifacts/automation/files/src/triggers/exampleConnectorTrigger.ts +153 -0
  140. package/.local/skills/artifacts/artifacts/automation/files/src/triggers/slackTriggers.ts +638 -0
  141. package/.local/skills/artifacts/artifacts/automation/files/src/triggers/telegramTriggers.ts +94 -0
  142. package/.local/skills/artifacts/artifacts/automation/files/tests/testCronAutomation.ts +86 -0
  143. package/.local/skills/artifacts/artifacts/automation/files/tests/testWebhookAutomation.ts +118 -0
  144. package/.local/skills/artifacts/artifacts/automation/files/tsconfig.json +26 -0
  145. package/.local/skills/artifacts/artifacts/data-visualization/artifact.yaml +48 -0
  146. package/.local/skills/artifacts/artifacts/expo/OWNERS +2 -0
  147. package/.local/skills/artifacts/artifacts/expo/artifact.yaml +47 -0
  148. package/.local/skills/artifacts/artifacts/expo/files/app/(tabs)/_layout.tsx +86 -0
  149. package/.local/skills/artifacts/artifacts/expo/files/app/(tabs)/index.tsx +28 -0
  150. package/.local/skills/artifacts/artifacts/expo/files/app/+not-found.tsx +45 -0
  151. package/.local/skills/artifacts/artifacts/expo/files/app/_layout.tsx +60 -0
  152. package/.local/skills/artifacts/artifacts/expo/files/app.json.template +38 -0
  153. package/.local/skills/artifacts/artifacts/expo/files/assets/images/icon.png +0 -0
  154. package/.local/skills/artifacts/artifacts/expo/files/babel.config.js +6 -0
  155. package/.local/skills/artifacts/artifacts/expo/files/components/ErrorBoundary.tsx +54 -0
  156. package/.local/skills/artifacts/artifacts/expo/files/components/ErrorFallback.tsx +278 -0
  157. package/.local/skills/artifacts/artifacts/expo/files/components/KeyboardAwareScrollViewCompat.tsx +29 -0
  158. package/.local/skills/artifacts/artifacts/expo/files/constants/colors.ts +59 -0
  159. package/.local/skills/artifacts/artifacts/expo/files/hooks/useColors.ts +24 -0
  160. package/.local/skills/artifacts/artifacts/expo/files/metro.config.js +3 -0
  161. package/.local/skills/artifacts/artifacts/expo/files/package.json.template +58 -0
  162. package/.local/skills/artifacts/artifacts/expo/files/scripts/build.js +573 -0
  163. package/.local/skills/artifacts/artifacts/expo/files/server/serve.js +135 -0
  164. package/.local/skills/artifacts/artifacts/expo/files/server/templates/landing-page.html +460 -0
  165. package/.local/skills/artifacts/artifacts/expo/files/tsconfig.json +23 -0
  166. package/.local/skills/artifacts/artifacts/mockup-sandbox/artifact.yaml +15 -0
  167. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/components.json +21 -0
  168. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/index.html +31 -0
  169. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/mockupPreviewPlugin.ts +199 -0
  170. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/package.json.template +75 -0
  171. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/public/favicon.svg +3 -0
  172. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/.generated/mockup-components.ts +3 -0
  173. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/App.tsx +146 -0
  174. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/accordion.tsx +55 -0
  175. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/alert-dialog.tsx +139 -0
  176. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/alert.tsx +59 -0
  177. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/aspect-ratio.tsx +5 -0
  178. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/avatar.tsx +50 -0
  179. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/badge.tsx +43 -0
  180. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/breadcrumb.tsx +115 -0
  181. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/button-group.tsx +83 -0
  182. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/button.tsx +65 -0
  183. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/calendar.tsx +213 -0
  184. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/card.tsx +76 -0
  185. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/carousel.tsx +260 -0
  186. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/chart.tsx +367 -0
  187. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/checkbox.tsx +28 -0
  188. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/collapsible.tsx +11 -0
  189. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/command.tsx +153 -0
  190. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/context-menu.tsx +198 -0
  191. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/dialog.tsx +120 -0
  192. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/drawer.tsx +116 -0
  193. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/dropdown-menu.tsx +201 -0
  194. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/empty.tsx +104 -0
  195. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/field.tsx +244 -0
  196. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/form.tsx +176 -0
  197. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/hover-card.tsx +27 -0
  198. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/input-group.tsx +168 -0
  199. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/input-otp.tsx +69 -0
  200. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/input.tsx +22 -0
  201. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/item.tsx +193 -0
  202. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/kbd.tsx +28 -0
  203. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/label.tsx +26 -0
  204. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/menubar.tsx +254 -0
  205. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/navigation-menu.tsx +128 -0
  206. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/pagination.tsx +117 -0
  207. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/popover.tsx +31 -0
  208. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/progress.tsx +28 -0
  209. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/radio-group.tsx +42 -0
  210. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/resizable.tsx +45 -0
  211. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/scroll-area.tsx +46 -0
  212. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/select.tsx +159 -0
  213. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/separator.tsx +29 -0
  214. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/sheet.tsx +140 -0
  215. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/sidebar.tsx +727 -0
  216. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/skeleton.tsx +15 -0
  217. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/slider.tsx +26 -0
  218. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/sonner.tsx +31 -0
  219. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/spinner.tsx +16 -0
  220. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/switch.tsx +27 -0
  221. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/table.tsx +120 -0
  222. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/tabs.tsx +53 -0
  223. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/textarea.tsx +22 -0
  224. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/toast.tsx +127 -0
  225. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/toaster.tsx +33 -0
  226. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/toggle-group.tsx +61 -0
  227. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/toggle.tsx +43 -0
  228. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/components/ui/tooltip.tsx +32 -0
  229. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/hooks/use-mobile.tsx +19 -0
  230. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/hooks/use-toast.ts +189 -0
  231. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/index.css +158 -0
  232. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/lib/utils.ts +6 -0
  233. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/src/main.tsx +5 -0
  234. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/tsconfig.json +20 -0
  235. package/.local/skills/artifacts/artifacts/mockup-sandbox/files/vite.config.ts +72 -0
  236. package/.local/skills/artifacts/artifacts/react-vite/artifact.yaml +41 -0
  237. package/.local/skills/artifacts/artifacts/react-vite/files/components.json +20 -0
  238. package/.local/skills/artifacts/artifacts/react-vite/files/index.html.template +24 -0
  239. package/.local/skills/artifacts/artifacts/react-vite/files/package.json.template +77 -0
  240. package/.local/skills/artifacts/artifacts/react-vite/files/public/favicon.svg +3 -0
  241. package/.local/skills/artifacts/artifacts/react-vite/files/public/robots.txt +2 -0
  242. package/.local/skills/artifacts/artifacts/react-vite/files/src/App.tsx +42 -0
  243. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/accordion.tsx +55 -0
  244. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/alert-dialog.tsx +139 -0
  245. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/alert.tsx +59 -0
  246. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/aspect-ratio.tsx +5 -0
  247. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/avatar.tsx +50 -0
  248. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/badge.tsx +43 -0
  249. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/breadcrumb.tsx +115 -0
  250. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/button-group.tsx +83 -0
  251. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/button.tsx +65 -0
  252. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/calendar.tsx +213 -0
  253. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/card.tsx +76 -0
  254. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/carousel.tsx +260 -0
  255. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/chart.tsx +367 -0
  256. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/checkbox.tsx +28 -0
  257. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/collapsible.tsx +11 -0
  258. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/command.tsx +153 -0
  259. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/context-menu.tsx +198 -0
  260. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/dialog.tsx +120 -0
  261. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/drawer.tsx +116 -0
  262. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/dropdown-menu.tsx +201 -0
  263. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/empty.tsx +104 -0
  264. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/field.tsx +244 -0
  265. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/form.tsx +176 -0
  266. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/hover-card.tsx +27 -0
  267. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/input-group.tsx +168 -0
  268. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/input-otp.tsx +69 -0
  269. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/input.tsx +22 -0
  270. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/item.tsx +193 -0
  271. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/kbd.tsx +28 -0
  272. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/label.tsx +26 -0
  273. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/menubar.tsx +254 -0
  274. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/navigation-menu.tsx +128 -0
  275. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/pagination.tsx +117 -0
  276. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/popover.tsx +31 -0
  277. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/progress.tsx +28 -0
  278. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/radio-group.tsx +42 -0
  279. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/resizable.tsx +45 -0
  280. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/scroll-area.tsx +46 -0
  281. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/select.tsx +159 -0
  282. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/separator.tsx +29 -0
  283. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/sheet.tsx +140 -0
  284. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/sidebar.tsx +727 -0
  285. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/skeleton.tsx +15 -0
  286. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/slider.tsx +26 -0
  287. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/sonner.tsx +31 -0
  288. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/spinner.tsx +16 -0
  289. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/switch.tsx +27 -0
  290. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/table.tsx +120 -0
  291. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/tabs.tsx +53 -0
  292. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/textarea.tsx +22 -0
  293. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/toast.tsx +127 -0
  294. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/toaster.tsx +33 -0
  295. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/toggle-group.tsx +61 -0
  296. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/toggle.tsx +43 -0
  297. package/.local/skills/artifacts/artifacts/react-vite/files/src/components/ui/tooltip.tsx +32 -0
  298. package/.local/skills/artifacts/artifacts/react-vite/files/src/hooks/use-mobile.tsx +19 -0
  299. package/.local/skills/artifacts/artifacts/react-vite/files/src/hooks/use-toast.ts +191 -0
  300. package/.local/skills/artifacts/artifacts/react-vite/files/src/index.css +393 -0
  301. package/.local/skills/artifacts/artifacts/react-vite/files/src/lib/utils.ts +6 -0
  302. package/.local/skills/artifacts/artifacts/react-vite/files/src/main.tsx +5 -0
  303. package/.local/skills/artifacts/artifacts/react-vite/files/src/pages/not-found.tsx +21 -0
  304. package/.local/skills/artifacts/artifacts/react-vite/files/tsconfig.json +22 -0
  305. package/.local/skills/artifacts/artifacts/react-vite/files/vite.config.ts +75 -0
  306. package/.local/skills/artifacts/artifacts/slides/artifact.yaml +33 -0
  307. package/.local/skills/artifacts/artifacts/slides/files/index.html.template +46 -0
  308. package/.local/skills/artifacts/artifacts/slides/files/package.json.template +30 -0
  309. package/.local/skills/artifacts/artifacts/slides/files/public/favicon.svg +3 -0
  310. package/.local/skills/artifacts/artifacts/slides/files/scripts/validate-slides.ts +193 -0
  311. package/.local/skills/artifacts/artifacts/slides/files/src/App.tsx +251 -0
  312. package/.local/skills/artifacts/artifacts/slides/files/src/data/slides-manifest.json +1 -0
  313. package/.local/skills/artifacts/artifacts/slides/files/src/data/slidesManifestSchema.ts +33 -0
  314. package/.local/skills/artifacts/artifacts/slides/files/src/index.css +48 -0
  315. package/.local/skills/artifacts/artifacts/slides/files/src/main.tsx +14 -0
  316. package/.local/skills/artifacts/artifacts/slides/files/src/slideLoader.ts +51 -0
  317. package/.local/skills/artifacts/artifacts/slides/files/tsconfig.json +17 -0
  318. package/.local/skills/artifacts/artifacts/slides/files/vite.config.ts +74 -0
  319. package/.local/skills/artifacts/artifacts/video-js/artifact.yaml +38 -0
  320. package/.local/skills/artifacts/artifacts/video-js/files/index.html.template +27 -0
  321. package/.local/skills/artifacts/artifacts/video-js/files/package.json.template +36 -0
  322. package/.local/skills/artifacts/artifacts/video-js/files/public/favicon.svg +3 -0
  323. package/.local/skills/artifacts/artifacts/video-js/files/scripts/validate-recording.sh +38 -0
  324. package/.local/skills/artifacts/artifacts/video-js/files/src/App.tsx +5 -0
  325. package/.local/skills/artifacts/artifacts/video-js/files/src/components/video/ReplitLoadingScene.tsx +105 -0
  326. package/.local/skills/artifacts/artifacts/video-js/files/src/components/video/VideoTemplate.tsx +30 -0
  327. package/.local/skills/artifacts/artifacts/video-js/files/src/components/video/index.ts +1 -0
  328. package/.local/skills/artifacts/artifacts/video-js/files/src/hooks/use-mobile.tsx +19 -0
  329. package/.local/skills/artifacts/artifacts/video-js/files/src/index.css +50 -0
  330. package/.local/skills/artifacts/artifacts/video-js/files/src/lib/utils.ts +6 -0
  331. package/.local/skills/artifacts/artifacts/video-js/files/src/lib/video/animations.ts +239 -0
  332. package/.local/skills/artifacts/artifacts/video-js/files/src/lib/video/hooks.ts +104 -0
  333. package/.local/skills/artifacts/artifacts/video-js/files/src/lib/video/index.ts +19 -0
  334. package/.local/skills/artifacts/artifacts/video-js/files/src/main.tsx +5 -0
  335. package/.local/skills/artifacts/artifacts/video-js/files/tsconfig.json +16 -0
  336. package/.local/skills/artifacts/artifacts/video-js/files/vite.config.ts +79 -0
  337. package/.local/skills/artifacts/bootstrap-legacy.js +115 -0
  338. package/.local/skills/artifacts/bootstrap.js +118 -0
  339. package/.local/skills/artifacts/references/multi-artifact-creation.md +94 -0
  340. package/.local/skills/canvas/.fingerprint +1 -0
  341. package/.local/skills/canvas/SKILL.md +534 -0
  342. package/.local/skills/canvas/__init__.py +1 -0
  343. package/.local/skills/code_review/.fingerprint +1 -0
  344. package/.local/skills/code_review/SKILL.md +82 -0
  345. package/.local/skills/database/.fingerprint +1 -0
  346. package/.local/skills/database/SKILL.md +351 -0
  347. package/.local/skills/database/references/database-migrations-on-publish.md +57 -0
  348. package/.local/skills/delegation/.fingerprint +1 -0
  349. package/.local/skills/delegation/SKILL.md +200 -0
  350. package/.local/skills/deployment/.fingerprint +1 -0
  351. package/.local/skills/deployment/SKILL.md +261 -0
  352. package/.local/skills/deployment/references/deployment-failure-debugging.md +243 -0
  353. package/.local/skills/deployment/references/deployment-logs.md +147 -0
  354. package/.local/skills/design/.fingerprint +1 -0
  355. package/.local/skills/design/SKILL.md +235 -0
  356. package/.local/skills/design-exploration/.fingerprint +1 -0
  357. package/.local/skills/design-exploration/SKILL.md +95 -0
  358. package/.local/skills/diagnostics/.fingerprint +1 -0
  359. package/.local/skills/diagnostics/SKILL.md +122 -0
  360. package/.local/skills/environment-secrets/.fingerprint +1 -0
  361. package/.local/skills/environment-secrets/SKILL.md +201 -0
  362. package/.local/skills/expo/.fingerprint +1 -0
  363. package/.local/skills/expo/OWNERS +2 -0
  364. package/.local/skills/expo/SKILL.md +298 -0
  365. package/.local/skills/expo/references/design_and_aesthetics.md +141 -0
  366. package/.local/skills/expo/references/device_features_and_permissions.md +48 -0
  367. package/.local/skills/expo/references/first_build.md +114 -0
  368. package/.local/skills/expo/references/react_context.md +54 -0
  369. package/.local/skills/external_apis/.fingerprint +1 -0
  370. package/.local/skills/external_apis/SKILL.md +25 -0
  371. package/.local/skills/external_apis/references/brave.md +116 -0
  372. package/.local/skills/external_apis/references/elevenlabs.md +44 -0
  373. package/.local/skills/external_apis/references/exa.md +34 -0
  374. package/.local/skills/external_apis/references/firecrawl.md +37 -0
  375. package/.local/skills/external_apis/references/nano_banana.md +33 -0
  376. package/.local/skills/follow-up-tasks/.fingerprint +1 -0
  377. package/.local/skills/follow-up-tasks/SKILL.md +80 -0
  378. package/.local/skills/image-search/.fingerprint +1 -0
  379. package/.local/skills/image-search/SKILL.md +150 -0
  380. package/.local/skills/integrations/.fingerprint +1 -0
  381. package/.local/skills/integrations/SKILL.md +205 -0
  382. package/.local/skills/media-generation/.fingerprint +1 -0
  383. package/.local/skills/media-generation/SKILL.md +170 -0
  384. package/.local/skills/media-generation/audio_generation.md +138 -0
  385. package/.local/skills/media-generation/video_generation.md +82 -0
  386. package/.local/skills/mockup-extract/.fingerprint +1 -0
  387. package/.local/skills/mockup-extract/SKILL.md +123 -0
  388. package/.local/skills/mockup-graduate/.fingerprint +1 -0
  389. package/.local/skills/mockup-graduate/SKILL.md +97 -0
  390. package/.local/skills/mockup-sandbox/.fingerprint +1 -0
  391. package/.local/skills/mockup-sandbox/SKILL.md +750 -0
  392. package/.local/skills/package-management/.fingerprint +1 -0
  393. package/.local/skills/package-management/SKILL.md +264 -0
  394. package/.local/skills/post_merge_setup/.fingerprint +1 -0
  395. package/.local/skills/post_merge_setup/SKILL.md +102 -0
  396. package/.local/skills/project_tasks/.fingerprint +1 -0
  397. package/.local/skills/project_tasks/SKILL.md +361 -0
  398. package/.local/skills/query-integration-data/.fingerprint +1 -0
  399. package/.local/skills/query-integration-data/SKILL.md +385 -0
  400. package/.local/skills/react-vite/.fingerprint +1 -0
  401. package/.local/skills/react-vite/SKILL.md +110 -0
  402. package/.local/skills/react-vite/references/frontend_general_rules.md +66 -0
  403. package/.local/skills/react-vite/references/seo.md +158 -0
  404. package/.local/skills/remove-image-background/.fingerprint +1 -0
  405. package/.local/skills/remove-image-background/SKILL.md +55 -0
  406. package/.local/skills/repl_setup/.fingerprint +1 -0
  407. package/.local/skills/repl_setup/SKILL.md +90 -0
  408. package/.local/skills/repl_setup/references/angular.md +103 -0
  409. package/.local/skills/repl_setup/references/react_vite.md +121 -0
  410. package/.local/skills/repl_setup/references/vue.md +102 -0
  411. package/.local/skills/replit-docs/.fingerprint +1 -0
  412. package/.local/skills/replit-docs/SKILL.md +81 -0
  413. package/.local/skills/revenuecat/.fingerprint +1 -0
  414. package/.local/skills/revenuecat/SKILL.md +133 -0
  415. package/.local/skills/revenuecat/references/initial-setup.md +566 -0
  416. package/.local/skills/revenuecat/references/replit-revenuecat-sdk-docs.md +279 -0
  417. package/.local/skills/revenuecat/references/subsequent-management.md +63 -0
  418. package/.local/skills/security_scan/.fingerprint +1 -0
  419. package/.local/skills/security_scan/SKILL.md +51 -0
  420. package/.local/skills/skill-authoring/.fingerprint +1 -0
  421. package/.local/skills/skill-authoring/SKILL.md +99 -0
  422. package/.local/skills/slides/.fingerprint +1 -0
  423. package/.local/skills/slides/SKILL.md +523 -0
  424. package/.local/skills/slides/references/brand_research.md +86 -0
  425. package/.local/skills/slides/references/export_failures.md +36 -0
  426. package/.local/skills/slides/references/exporting.md +49 -0
  427. package/.local/skills/slides/references/importing.md +40 -0
  428. package/.local/skills/slides/references/visual_qa.md +121 -0
  429. package/.local/skills/slides/templates/90s-board-deck.md +285 -0
  430. package/.local/skills/slides/templates/academic-lecture.md +437 -0
  431. package/.local/skills/slides/templates/adventure-outdoor.md +845 -0
  432. package/.local/skills/slides/templates/analytics-dashboard.md +407 -0
  433. package/.local/skills/slides/templates/annual-report-cover.md +592 -0
  434. package/.local/skills/slides/templates/apple-minimal.md +570 -0
  435. package/.local/skills/slides/templates/architecture-studio.md +339 -0
  436. package/.local/skills/slides/templates/arctic-expedition.md +582 -0
  437. package/.local/skills/slides/templates/arctic-minimal.md +364 -0
  438. package/.local/skills/slides/templates/art-deco.md +308 -0
  439. package/.local/skills/slides/templates/artisan-ceramics.md +659 -0
  440. package/.local/skills/slides/templates/artisan-food.md +709 -0
  441. package/.local/skills/slides/templates/artisanal-chalkboard.md +623 -0
  442. package/.local/skills/slides/templates/astronomy-log.md +562 -0
  443. package/.local/skills/slides/templates/aurora-expedition.md +754 -0
  444. package/.local/skills/slides/templates/automotive-electric.md +339 -0
  445. package/.local/skills/slides/templates/bauhaus-avant-garde.md +443 -0
  446. package/.local/skills/slides/templates/bioluminescent-sea.md +814 -0
  447. package/.local/skills/slides/templates/biophilic-urban.md +565 -0
  448. package/.local/skills/slides/templates/blackboard-chalk.md +517 -0
  449. package/.local/skills/slides/templates/blueprint.md +478 -0
  450. package/.local/skills/slides/templates/botanical-index.md +822 -0
  451. package/.local/skills/slides/templates/botanical-wellness.md +611 -0
  452. package/.local/skills/slides/templates/brand-book-page.md +466 -0
  453. package/.local/skills/slides/templates/brutalist-concrete.md +362 -0
  454. package/.local/skills/slides/templates/brutalist-studio.md +325 -0
  455. package/.local/skills/slides/templates/brutalist-web-punk.md +591 -0
  456. package/.local/skills/slides/templates/celestial-observatory.md +453 -0
  457. package/.local/skills/slides/templates/ceramics-artisan.md +740 -0
  458. package/.local/skills/slides/templates/cinema-verite.md +415 -0
  459. package/.local/skills/slides/templates/claymorphism.md +737 -0
  460. package/.local/skills/slides/templates/collage-zine.md +357 -0
  461. package/.local/skills/slides/templates/copper-sage.md +325 -0
  462. package/.local/skills/slides/templates/coral-reef.md +508 -0
  463. package/.local/skills/slides/templates/corporate-grid.md +331 -0
  464. package/.local/skills/slides/templates/corporate-memphis-flat.md +938 -0
  465. package/.local/skills/slides/templates/cosmos-explorer.md +998 -0
  466. package/.local/skills/slides/templates/cpg-coffee.md +850 -0
  467. package/.local/skills/slides/templates/craft-coffee-roast.md +693 -0
  468. package/.local/skills/slides/templates/creative-agency.md +244 -0
  469. package/.local/skills/slides/templates/creative-director.md +875 -0
  470. package/.local/skills/slides/templates/culinary-brand.md +698 -0
  471. package/.local/skills/slides/templates/de-stijl-construct.md +320 -0
  472. package/.local/skills/slides/templates/desert-dunes-photo.md +483 -0
  473. package/.local/skills/slides/templates/desert-mirror.md +577 -0
  474. package/.local/skills/slides/templates/desert-modernism.md +439 -0
  475. package/.local/skills/slides/templates/developer-api-docs.md +654 -0
  476. package/.local/skills/slides/templates/editorial-magazine.md +694 -0
  477. package/.local/skills/slides/templates/engineering-blueprint.md +730 -0
  478. package/.local/skills/slides/templates/executive-mono.md +363 -0
  479. package/.local/skills/slides/templates/expedition-peak.md +298 -0
  480. package/.local/skills/slides/templates/fashion-campaign.md +681 -0
  481. package/.local/skills/slides/templates/fashion-editorial.md +497 -0
  482. package/.local/skills/slides/templates/figma-geometric.md +420 -0
  483. package/.local/skills/slides/templates/film-noir.md +857 -0
  484. package/.local/skills/slides/templates/fitness-athletics.md +663 -0
  485. package/.local/skills/slides/templates/flat-vector.md +912 -0
  486. package/.local/skills/slides/templates/fluid-luxe.md +665 -0
  487. package/.local/skills/slides/templates/furniture-brand.md +505 -0
  488. package/.local/skills/slides/templates/gallery-modern.md +436 -0
  489. package/.local/skills/slides/templates/gaming-esports.md +410 -0
  490. package/.local/skills/slides/templates/geodesic-future.md +368 -0
  491. package/.local/skills/slides/templates/glass-artisan.md +666 -0
  492. package/.local/skills/slides/templates/glassmorphism.md +320 -0
  493. package/.local/skills/slides/templates/greenhouse-botanical.md +662 -0
  494. package/.local/skills/slides/templates/healthcare-clarity.md +468 -0
  495. package/.local/skills/slides/templates/holographic-drop.md +663 -0
  496. package/.local/skills/slides/templates/hospitality-resort.md +608 -0
  497. package/.local/skills/slides/templates/hypercar-launch.md +557 -0
  498. package/.local/skills/slides/templates/infographic-title.md +306 -0
  499. package/.local/skills/slides/templates/ink-wash.md +244 -0
  500. package/.local/skills/slides/templates/investor-memo.md +509 -0
  501. package/.local/skills/slides/templates/isometric-data.md +703 -0
  502. package/.local/skills/slides/templates/ivory-boardroom.md +439 -0
  503. package/.local/skills/slides/templates/japanese-minimal.md +308 -0
  504. package/.local/skills/slides/templates/jazz-blue-note.md +478 -0
  505. package/.local/skills/slides/templates/kinetic-type.md +206 -0
  506. package/.local/skills/slides/templates/lagoon-luxury.md +320 -0
  507. package/.local/skills/slides/templates/lavender-pastoral.md +577 -0
  508. package/.local/skills/slides/templates/linear-precise.md +460 -0
  509. package/.local/skills/slides/templates/lineart-sketch.md +930 -0
  510. package/.local/skills/slides/templates/lost-temple.md +689 -0
  511. package/.local/skills/slides/templates/luxury-fashion.md +269 -0
  512. package/.local/skills/slides/templates/luxury-watch.md +678 -0
  513. package/.local/skills/slides/templates/marble-elegance.md +673 -0
  514. package/.local/skills/slides/templates/mediterranean-travel.md +811 -0
  515. package/.local/skills/slides/templates/memphis-design.md +426 -0
  516. package/.local/skills/slides/templates/midnight-jazz.md +260 -0
  517. package/.local/skills/slides/templates/minimalist-poster.md +538 -0
  518. package/.local/skills/slides/templates/molten-craft.md +743 -0
  519. package/.local/skills/slides/templates/moroccan-tile.md +738 -0
  520. package/.local/skills/slides/templates/motorsport.md +782 -0
  521. package/.local/skills/slides/templates/mountain-drift.md +311 -0
  522. package/.local/skills/slides/templates/music-label.md +641 -0
  523. package/.local/skills/slides/templates/neo-tokyo.md +637 -0
  524. package/.local/skills/slides/templates/neobrutalism.md +334 -0
  525. package/.local/skills/slides/templates/newspaper-broadsheet.md +687 -0
  526. package/.local/skills/slides/templates/noir-fragrance.md +672 -0
  527. package/.local/skills/slides/templates/non-profit-impact.md +320 -0
  528. package/.local/skills/slides/templates/ocean-breeze.md +398 -0
  529. package/.local/skills/slides/templates/origami-couture.md +636 -0
  530. package/.local/skills/slides/templates/origami-paper.md +308 -0
  531. package/.local/skills/slides/templates/pastel-playground.md +1114 -0
  532. package/.local/skills/slides/templates/perfume-noir.md +646 -0
  533. package/.local/skills/slides/templates/prairie-storm.md +625 -0
  534. package/.local/skills/slides/templates/private-equity-dark.md +506 -0
  535. package/.local/skills/slides/templates/renaissance-florals.md +225 -0
  536. package/.local/skills/slides/templates/retro-print.md +880 -0
  537. package/.local/skills/slides/templates/retro-vinyl-sleeve.md +229 -0
  538. package/.local/skills/slides/templates/riso-zine.md +1094 -0
  539. package/.local/skills/slides/templates/risograph.md +1151 -0
  540. package/.local/skills/slides/templates/saas-product-launch.md +972 -0
  541. package/.local/skills/slides/templates/scandinavian.md +372 -0
  542. package/.local/skills/slides/templates/skater-culture.md +583 -0
  543. package/.local/skills/slides/templates/slate-modern.md +469 -0
  544. package/.local/skills/slides/templates/sneaker-drop.md +1006 -0
  545. package/.local/skills/slides/templates/social-campaign.md +321 -0
  546. package/.local/skills/slides/templates/stained-glass.md +574 -0
  547. package/.local/skills/slides/templates/strategy-one-pager.md +508 -0
  548. package/.local/skills/slides/templates/street-drop.md +677 -0
  549. package/.local/skills/slides/templates/street-mural.md +588 -0
  550. package/.local/skills/slides/templates/studio-noir.md +466 -0
  551. package/.local/skills/slides/templates/sustainability-esg.md +686 -0
  552. package/.local/skills/slides/templates/swiss-archive.md +648 -0
  553. package/.local/skills/slides/templates/swiss-typographic.md +364 -0
  554. package/.local/skills/slides/templates/tea-ceremony.md +456 -0
  555. package/.local/skills/slides/templates/tech-earbuds.md +870 -0
  556. package/.local/skills/slides/templates/terracotta-studio.md +235 -0
  557. package/.local/skills/slides/templates/thesis-defense.md +390 -0
  558. package/.local/skills/slides/templates/travel-aerial.md +648 -0
  559. package/.local/skills/slides/templates/treasury-policy.md +475 -0
  560. package/.local/skills/slides/templates/tropical-lush.md +332 -0
  561. package/.local/skills/slides/templates/underwater-dream.md +627 -0
  562. package/.local/skills/slides/templates/urban-golden.md +342 -0
  563. package/.local/skills/slides/templates/vintage-apothecary.md +552 -0
  564. package/.local/skills/slides/templates/vintage-ticket-stub.md +637 -0
  565. package/.local/skills/slides/templates/vinyl-crate.md +550 -0
  566. package/.local/skills/slides/templates/vision-editorial.md +612 -0
  567. package/.local/skills/slides/templates/volcanic-edge.md +347 -0
  568. package/.local/skills/slides/templates/watercolor-city.md +827 -0
  569. package/.local/skills/slides/templates/wine-spirits.md +203 -0
  570. package/.local/skills/slides/templates/wireframe-prototype.md +718 -0
  571. package/.local/skills/slides/templates/workspace-design.md +782 -0
  572. package/.local/skills/slides/templates/workspace-modern.md +406 -0
  573. package/.local/skills/slides/templates/zen-meditation.md +284 -0
  574. package/.local/skills/slides/templates/zen-void.md +244 -0
  575. package/.local/skills/stripe/.fingerprint +1 -0
  576. package/.local/skills/stripe/SKILL.md +455 -0
  577. package/.local/skills/stripe/references/code-templates.md +588 -0
  578. package/.local/skills/threat_modeling/.fingerprint +1 -0
  579. package/.local/skills/threat_modeling/SKILL.md +240 -0
  580. package/.local/skills/validation/.fingerprint +1 -0
  581. package/.local/skills/validation/SKILL.md +237 -0
  582. package/.local/skills/video-js/.fingerprint +1 -0
  583. package/.local/skills/video-js/SKILL.md +793 -0
  584. package/.local/skills/video-js/references/audio.md +237 -0
  585. package/.local/skills/video-js/references/finalize_playback.md +16 -0
  586. package/.local/skills/video-js/references/first_build.md +87 -0
  587. package/.local/skills/video-js/references/scene_selectors.md +428 -0
  588. package/.local/skills/web-search/.fingerprint +1 -0
  589. package/.local/skills/web-search/SKILL.md +110 -0
  590. package/.local/skills/whop/.fingerprint +1 -0
  591. package/.local/skills/whop/SKILL.md +104 -0
  592. package/.local/skills/whop/references/code-templates.md +66 -0
  593. package/.local/skills/whop/references/whop-api.mjs +22 -0
  594. package/.local/skills/whop/references/whop-mcp.mjs +40 -0
  595. package/.local/skills/whop/references/whopClient.ts +54 -0
  596. package/.local/skills/workflows/.fingerprint +1 -0
  597. package/.local/skills/workflows/SKILL.md +245 -0
  598. package/.local/state/replit/agent/.agent_state_037313043e76b5c652f276153ea014a68570e145.bin +0 -0
  599. package/.local/state/replit/agent/.agent_state_0f5361c2a53ab324b2a941a797f6494891be084c.bin +0 -0
  600. package/.local/state/replit/agent/.agent_state_4272443827dc90eac8c5b1963a34ee86da70bb99.bin +0 -0
  601. package/.local/state/replit/agent/.agent_state_4f14655950cbd611b228b4f0e1f664b66a56af24.bin +0 -0
  602. package/.local/state/replit/agent/.agent_state_ce28955a30856aa3d095b3568c322c8ec098993f.bin +0 -0
  603. package/.local/state/replit/agent/.agent_state_ec5347d04ebfbf6cf850fe04e15590d423e96d1d.bin +0 -0
  604. package/.local/state/replit/agent/.agent_state_f68f8c104d815ccc387290f0fba2c87c818d29f1.bin +0 -0
  605. package/.local/state/replit/agent/.agent_state_f87c1803a179510408c57c7a380c26f5c2197a30.bin +0 -0
  606. package/.local/state/replit/agent/.agent_state_main.bin +0 -0
  607. package/.local/state/replit/agent/.latest.json +1 -0
  608. package/.local/state/replit/agent/repl_state.bin +0 -0
  609. package/.local/state/scribe/scribe.db +0 -0
  610. package/.local/state/scribe/scribe.db-shm +0 -0
  611. package/.local/state/scribe/scribe.db-wal +0 -0
  612. package/.local/state/workflow-logs/2tfQP52ibxJTy4lpZ7_JX/start_application.shell.exec.0 +27 -0
  613. package/.local/state/workflow-logs/6QjtmQThaHrR_QHf4v8HA/validation.external.managed.0 +31 -0
  614. package/.local/state/workflow-logs/6QjtmQThaHrR_QHf4v8HA/validation.json +1 -0
  615. package/.local/state/workflow-logs/85n-z_SHy4JSGaUeJIcxy/start_application.shell.exec.0 +18 -0
  616. package/.local/state/workflow-logs/GIL2Ql5124lrEqGrfRO4k/start_application.shell.exec.0 +222 -0
  617. package/.local/state/workflow-logs/LiH2MjG_9FwFummNHhDtO/validation.external.managed.0 +45 -0
  618. package/.local/state/workflow-logs/LiH2MjG_9FwFummNHhDtO/validation.json +1 -0
  619. package/.local/state/workflow-logs/OKp1t-fEO5U_zQi1SKOQ-/start_application.shell.exec.0 +10 -0
  620. package/.local/state/workflow-logs/Tpp7d6Hu6CO1NKGo_eAi7/validation.external.managed.0 +43 -0
  621. package/.local/state/workflow-logs/Tpp7d6Hu6CO1NKGo_eAi7/validation.json +1 -0
  622. package/.local/state/workflow-logs/UDYycRqPV-N4B7whZP-yX/start_application.shell.exec.0 +252 -0
  623. package/.local/state/workflow-logs/V8Anmvz-HuvAztflZ8yCo/start_application.shell.exec.0 +87 -0
  624. package/.local/state/workflow-logs/a5fMnjr9tCwoaFY93pYuN/start_application.shell.exec.0 +2519 -0
  625. package/.local/state/workflow-logs/ggFzYcdHfIlW0owP2pb0U/start_application.shell.exec.0 +28 -0
  626. package/.local/state/workflow-logs/hIHNKfUtPX3jZs8qXw_Vt/validation.external.managed.0 +41 -0
  627. package/.local/state/workflow-logs/hIHNKfUtPX3jZs8qXw_Vt/validation.json +1 -0
  628. package/.local/state/workflow-logs/nbLvtuGJXB0wPmnruB3BE/start_application.shell.exec.0 +199 -0
  629. package/.local/state/workflow-logs/uDhN6S0ypUEh0MphXaFGY/start_application.shell.exec.0 +73 -0
  630. package/.local/state/workflow-logs/xZqU5CdTivcY6KEDEcVmD/start_application.shell.exec.0 +17 -0
  631. package/.local/tasks/breadcrumb-component.md +89 -0
  632. package/.local/tasks/calendar-component.md +93 -0
  633. package/.local/tasks/invoicing-design-system-app.md +39 -0
  634. package/.local/tasks/task-1.md +42 -0
  635. package/.local/tasks/task-7.md +92 -0
  636. package/.local/tasks/task-8.md +96 -0
  637. package/.replit +34 -0
  638. package/.upm/store.json +1 -0
  639. package/README.md +121 -0
  640. package/app/dashboard/page.tsx +10 -0
  641. package/app/design-system/page.tsx +802 -0
  642. package/app/invoices/page.tsx +10 -0
  643. package/app/layout.tsx +28 -0
  644. package/app/login/page.tsx +5 -0
  645. package/app/page.tsx +93 -0
  646. package/app/signup/page.tsx +5 -0
  647. package/attached_assets/Colors_1779781016394.png +0 -0
  648. package/attached_assets/Navy_1779781016404.png +0 -0
  649. package/attached_assets/Orange_1779781016405.png +0 -0
  650. package/attached_assets/Screenshot_2026-05-26_at_1.14.29_PM_1779781472515.png +0 -0
  651. package/attached_assets/Screenshot_2026-05-26_at_11.28.20_AM_1779775171071.png +0 -0
  652. package/attached_assets/Screenshot_2026-05-26_at_2.04.42_PM_1779784485318.png +0 -0
  653. package/attached_assets/Typography_1779781016406.png +0 -0
  654. package/design-system/components/avatar.tsx +46 -0
  655. package/design-system/components/badge.tsx +34 -0
  656. package/design-system/components/breadcrumb.tsx +149 -0
  657. package/design-system/components/button.tsx +57 -0
  658. package/design-system/components/calendar.tsx +77 -0
  659. package/design-system/components/card.tsx +62 -0
  660. package/design-system/components/checkbox.tsx +27 -0
  661. package/design-system/components/date-picker.tsx +153 -0
  662. package/design-system/components/dialog.tsx +106 -0
  663. package/design-system/components/dropdown-menu.tsx +88 -0
  664. package/design-system/components/form-field.tsx +78 -0
  665. package/design-system/components/input.tsx +25 -0
  666. package/design-system/components/label.tsx +25 -0
  667. package/design-system/components/popover.tsx +30 -0
  668. package/design-system/components/radio-group.tsx +35 -0
  669. package/design-system/components/select.tsx +84 -0
  670. package/design-system/components/separator.tsx +24 -0
  671. package/design-system/components/switch.tsx +28 -0
  672. package/design-system/components/table.tsx +80 -0
  673. package/design-system/components/tabs.tsx +54 -0
  674. package/design-system/components/textarea.tsx +25 -0
  675. package/design-system/components/toast.tsx +118 -0
  676. package/design-system/components/toaster.tsx +38 -0
  677. package/design-system/components/tooltip.tsx +27 -0
  678. package/design-system/hooks/index.ts +2 -0
  679. package/design-system/hooks/use-media-query.ts +27 -0
  680. package/design-system/hooks/use-toast.ts +91 -0
  681. package/design-system/index.ts +36 -0
  682. package/design-system/lib/cn.ts +6 -0
  683. package/design-system/styles.css +142 -0
  684. package/design-system/tokens/tokens.css +149 -0
  685. package/design-system/tokens/tokens.ts +190 -0
  686. package/next.config.mjs +6 -0
  687. package/package.json +46 -0
  688. package/postcss.config.mjs +6 -0
  689. package/screens/_shared/app-shell.tsx +145 -0
  690. package/screens/auth/auth-screen.tsx +156 -0
  691. package/screens/dashboard/dashboard-screen.tsx +207 -0
  692. package/screens/index.ts +17 -0
  693. package/screens/invoices/invoices-screen.tsx +317 -0
  694. package/tailwind.config.ts +110 -0
  695. package/tsconfig.json +26 -0
@@ -0,0 +1,793 @@
1
+ ---
2
+ name: video-js
3
+ description: Create agency-quality short animated videos (up to ~2 minutes max — longer runs are much harder to export, so size to the content) programmatically using React, Framer Motion, GSAP, and Three.js. Use for marketing clips, motion graphics, animated explainers, social media content, product demos, or broadcast-quality animated content that runs in the browser. Videos auto-play, have no interactive elements, and rival professional studio productions. Attached media assets (images, video clips) can be used as elements in animations. This is NOT a video editor -- users cannot trim, splice, or do timeline-based editing of footage.
4
+ ---
5
+
6
+ # Animated Video - Motion Graphics in Code
7
+
8
+ <delegation_required>
9
+ **Always delegate animated video work to the design subagent.** Do not do the work yourself -- immediately start a design subagent and let it handle the entire video from start to finish. The design subagent has capabilities you don't have (image generation, video generation, stock photo search, web search) that are critical for producing high-quality videos. Animated video is a design task -- it belongs with the design subagent for both initial builds and iterations.
10
+
11
+ **What to do:**
12
+
13
+ 1. Call `subagent()` with `specialization="DESIGN"`, passing:
14
+ - The user's request as the task, unchanged, prefixed with: "You are the subagent executing this task, see the skill: .local/skills/video-js/SKILL.md\n\n"
15
+ - `.local/skills/video-js/SKILL.md` and `.local/skills/video-js/references/finalize_playback.md` as `relevantFiles` -- this auto-opens the skill for the subagent so it can read it directly
16
+ - Any user-attached assets or context
17
+ 2. Do not add your own style instructions, color guidance, typography, creative direction, or any other prescriptive instructions. The subagent will read the skill file directly from its opened files. The design subagent is the creative expert; let it make all creative and implementation decisions.
18
+ 3. After the design subagent completes, restart the workflow.
19
+ 4. Then delegate finalization as described in `<completing_your_run>`.
20
+
21
+ ```javascript
22
+ const result = await subagent({
23
+ task: `You are the subagent executing this task, see the skill: .local/skills/video-js/SKILL.md\n\n${userRequest}`,
24
+ specialization: "DESIGN",
25
+ relevantFiles: [".local/skills/video-js/SKILL.md", ".local/skills/video-js/references/finalize_playback.md"]
26
+ });
27
+ console.log(result);
28
+ ```
29
+
30
+ </delegation_required>
31
+
32
+ You are an expert Motion Graphics Director and Design Engineer. Your goal is to direct and execute a visually stunning motion piece that rivals output from a top-tier motion design studio - built entirely with React, Framer Motion, GSAP, and Tailwind CSS. Prioritize impact, rhythm, and visual surprise over code structure. Your work should feel "crafted," not "assembled."
33
+
34
+ **This stack is for creating short animated videos (up to ~2 minutes max — that's a ceiling, not a target; long videos are much harder to export), not a video editor.** Pick the length the content wants; most pieces are 30-60 seconds. It auto-plays on load, loops seamlessly, and has zero interactivity. No exceptions. Users can include attached media assets (images, video clips) as elements in their animations, but they cannot trim, splice, or do timeline-based editing of existing video files here. If a user is looking for video editing capabilities, this is the wrong stack -- they should use a full-stack app instead.
35
+
36
+ Do not produce generic motion graphics. If your first instinct is centered white text on a dark gradient with a fade-in, stop and push harder. Every video should have a specific, nameable aesthetic direction -- not "clean and modern" (that's not a direction, that's a default). Reject mediocrity. Build something with a point of view.
37
+
38
+ <no_interactivity>
39
+ This is a video. It plays automatically and the viewer watches -- they do not click, hover, or interact with anything. Common mistakes to avoid:
40
+
41
+ - No CTA buttons ("Get started", "Learn more", "Sign up", "Try it free")
42
+ - No navigation elements (arrows, menus, tabs, pagination dots)
43
+ - No interactive form elements of any kind
44
+
45
+ The video auto-plays on mount and loops continuously. Zero user interaction. If you're showing a product mockup that contains a button, render it as a purely visual element with no interactivity attached.
46
+ </no_interactivity>
47
+
48
+ <before_you_start>
49
+ Before writing any code, establish your creative direction:
50
+
51
+ 1. **Brand research**: For real companies, use web search to find their official brand guidelines, colors, fonts, and visual identity. Use their real palette and typography - don't guess. If official guidelines aren't available, base your palette on the company's public-facing website and explicitly note that the colors are inferred, not official.
52
+ 2. **Color palette**: Pick a bold, intentional palette that pops. State exact hex codes. You want 1 primary, 1 accent, 1-2 neutrals, and a background tone. The palette should have a clear vibe -- editorial, playful, luxurious, energetic, whatever fits the content. Avoid generic or muddy colors. Every color should feel like a deliberate choice. Build the entire video from these colors - consistency is what makes it feel designed, not generated.
53
+ 3. **Typography**: Pick ONE display font + ONE body font from Google Fonts. Max 2 fonts. Avoid system fonts. Analyze the emotional goal of the video, then select fonts that amplify it:
54
+ - Trust/Authority -> strong geometric sans (e.g., `Plus Jakarta Sans`, `Satoshi`)
55
+ - Excitement/Energy -> condensed bold display (e.g., `Bebas Neue`, `Anton`)
56
+ - Luxury/Premium -> refined serif or high-contrast sans (e.g., `Cormorant Garamond`, `Playfair Display`)
57
+ - Tech/Developer -> stylized mono or geometric (e.g., `JetBrains Mono`, `Space Grotesk`)
58
+ - Playful/Creative -> rounded or expressive (e.g., `Nunito`, `Baloo 2`)
59
+ - Editorial/Culture -> elegant serif + clean sans (e.g., `Fraunces` + `Inter`)
60
+ The font IS the personality of the video. A wrong font choice undermines everything else.
61
+ 4. **Motion direction**: Pick a specific aesthetic direction and commit. The direction dictates everything -- how elements enter, how scenes transition, how fast things move, what the whole video *feels* like. Some examples to spark your thinking:
62
+ - **Cinematic Minimal** -- slow reveals, massive type, black + one accent, lots of negative space, editorial pacing
63
+ - **Kinetic Energy** -- fast cuts, bold color, rapid stagger animations, high contrast, energetic springs
64
+ - **Luxury/Editorial** -- refined serifs, smooth ease curves, muted tones, subtle parallax, gold/cream accents
65
+ - **Tech Product** -- clean geometric sans, crisp snappy transitions, dark UI aesthetic, code-inspired grid layouts
66
+ - **Playful/Pop** -- rounded fonts, bouncy springs, saturated colors, shape morphs, playful character animation
67
+ - **Abstract/Atmospheric** -- particle systems, generative shapes, slow drifting motion, ambient textures, ethereal
68
+ These are just starting points -- invent your own direction if the content calls for something different. The point is to have a nameable aesthetic, not a vague "clean and modern."
69
+ 5. **2-3 visual motifs**: Shapes, textures, or transition types you'll use consistently.
70
+ 6. **Director's treatment**: Write 3 bullets describing the vibe/mood, camera movement style, and emotional arc.
71
+ 7. **Asset planning**: Inventory any assets the user attached (logos, product shots, brand images, etc.) and decide where each one appears in the video. Then plan what additional images, textures, or video clips you need — AI-generated images, stock photos, and AI-generated video clips — to fill the remaining scenes. Every video needs rich visual material -- plan it upfront, not as an afterthought.
72
+
73
+ Commit to a direction and execute. Don't overthink.
74
+ </before_you_start>
75
+
76
+ <motion_system>
77
+ Before coding, define your motion system. This is what separates a coherent video from a bag of random transitions:
78
+
79
+ - **How do elements enter?** Spring-in? Blur-to-sharp? Clip-path reveal? Scale-up? Pick one default entrance and stick with it.
80
+ - **How do they exit?** Scale-up-and-blur? Directional push? Dissolve? The exit should feel like the natural inverse of the entrance.
81
+ - **What's the default easing?** One easing curve for most motion (e.g., circOut for snappy, or a custom cubic-bezier for smooth). Save springs for accent moments.
82
+ - **What's the accent transition?** For hero moments (title reveals, key stats, product shots), use a more dramatic version of your default -- bigger scale, longer duration, more overshoot.
83
+ - **What's the scene transition style?** Pick 1-2 transition types and reuse them. Consistency reads as intentional.
84
+
85
+ Define these once, apply them everywhere. A video with a coherent motion system looks 10x more polished than one with random transitions per element.
86
+ </motion_system>
87
+
88
+ <resolution>
89
+ Videos should be composed for **16:9 aspect ratio**. Set your root video container to fill the viewport with `w-full h-screen` and design all scenes assuming a widescreen canvas. Use viewport-relative units (vw/vh) for sizing to ensure consistent proportions. All text, images, and animated elements should be positioned for a 16:9 frame, even on mobile.
90
+ </resolution>
91
+
92
+ <critical_rules>
93
+ **Asset paths — this breaks every video if you get it wrong:**
94
+
95
+ When referencing files in `public/` (images, videos) from scene components, NEVER use bare absolute paths like `src="/videos/hero.mp4"` or `src="/images/engine.png"`. The app is served at a subpath (e.g., `/ferrari-video/`), so bare paths will 404. Always use `import.meta.env.BASE_URL`:
96
+
97
+ - **Correct:** `` src={`${import.meta.env.BASE_URL}videos/hero.mp4`} `` or `` src={`${import.meta.env.BASE_URL}images/engine.png`} ``
98
+ - **Wrong:** `src="/videos/hero.mp4"` or `src="/images/engine.png"`
99
+
100
+ This applies to ALL `<video>`, `<img>`, and `backgroundImage` references to public assets. Also applies to CSS `url()` in inline styles.
101
+
102
+ When generating video clips or images via tools, always use the exact file path and extension returned by the generation tool in your `src` attributes. Do not assume or change the file extension — if the tool returns `.webm`, use `.webm`, not `.mp4`.
103
+
104
+ **AnimatePresence mode:** Use `mode="popLayout"` or `mode="sync"`. **Never use `mode="wait"`** — it causes blank frames between scenes.
105
+
106
+ **Scene files:** Place scenes in `src/components/video/video_scenes/` (e.g., `Scene1.tsx` through `Scene5.tsx`). Export as named exports matching the filename.
107
+
108
+ **Do not modify `src/lib/video/hooks.ts`** — the recording/export pipeline depends on its exact implementation.
109
+ </critical_rules>
110
+
111
+ <slideshow_vs_motion_graphics>
112
+ This is the single most important section. If you ignore everything else, read this.
113
+
114
+ **The #1 failure mode is producing a slideshow with animations.** A slideshow is: static composition appears, plays a simple entrance animation, sits there, fades out, next static composition appears. This is what most AI-generated videos look like. You must do better.
115
+
116
+ **What makes it a slideshow (DO NOT DO THIS):**
117
+
118
+ - Each scene is centered text on a solid-color background
119
+ - Elements fade/slide in, sit static, then fade/slide out
120
+ - Nothing persists or transforms between scenes -- each scene is a complete reset
121
+ - Only one thing animates at a time
122
+ - Every scene has the same visual structure and rhythm
123
+ - Flat composition: just content on a background, no layers
124
+ - Every element lives inside `AnimatePresence` -- nothing persists or transforms between scenes
125
+ - Using `slideLeft`, `fadeBlur`, or `crossDissolve` presets for scene transitions (these ARE slideshow transitions)
126
+
127
+ **What makes it motion graphics (DO THIS):**
128
+
129
+ - Multiple elements animate at DIFFERENT times within each scene (choreography, not a single entrance)
130
+ - Background layers are alive -- gradients shift, shapes drift, particles float, textures pulse
131
+ - Elements from one scene TRANSFORM into the next (a headline scales up to become the background, a shape morphs into a divider)
132
+ - At least 2-3 visual layers per scene: background (gradient/texture/video), midground (shapes/accents), foreground (type/content)
133
+ - Timing varies dramatically: quick snaps (0.2s) mixed with slow reveals (1.2s) mixed with springs
134
+ - Persistent elements that evolve across scenes (a logo stays in the corner, a color accent travels across the screen)
135
+ - Motion never fully stops -- when text needs to be read, background elements keep drifting
136
+ - 30-50% of visual elements live OUTSIDE `AnimatePresence` and animate to new positions/scales/colors when `currentScene` changes -- creating visual continuity instead of hard cuts
137
+ - Scene transitions use clip-path reveals, morph-expands, perspective flips, or custom combos -- never basic fades or slides
138
+
139
+ **Amateur vs Agency:**
140
+
141
+ | Aspect | Amateur (slideshow) | Agency (motion graphics) |
142
+ | --- | --- | --- |
143
+ | Scene structure | One centered text block on flat color | Layered: bg gradient + floating shapes + foreground type + accent elements |
144
+ | Transitions | Scene A fades out, Scene B fades in | Element from Scene A scales/morphs/wipes INTO Scene B with no gap |
145
+ | Intra-scene motion | Everything appears at once, sits static | 4-6 elements stagger in at different times, background drifts, accents pulse |
146
+ | Timing | Every animation 0.5s ease-in-out | 0.15s snaps + 0.4s springs + 1.2s reveals, varied per element |
147
+ | Typography | Text slides up | Chars stagger in with scale/rotation variation per character, settle with micro-spring |
148
+ | Pacing | Every scene same length | Short punchy beats (2s) mixed with slow dramatic moments (5s) |
149
+
150
+ </slideshow_vs_motion_graphics>
151
+
152
+ <visual_layering>
153
+ Every scene should have visual depth through layering. Never place text directly on a flat solid color.
154
+
155
+ **Minimum layers per scene:**
156
+
157
+ 1. **Background**: Gradient, generated image, video loop, or animated gradient that shifts during the scene
158
+ 2. **Midground**: Floating shapes, accent lines, subtle geometric patterns, blurred elements, light effects
159
+ 3. **Foreground**: Your primary content (typography, images, cards) -- this is the main message
160
+
161
+ **Asset hierarchy -- use real visual assets, not just shapes and text:**
162
+
163
+ Every video must include at least 2-3 visual assets beyond CSS shapes and gradients. Follow this priority order:
164
+
165
+ 1. **User-attached assets come first.** If the user attached logos, product shots, brand images, photos, or any other visual material, those are your primary assets. Feature them prominently -- they are the reason the user attached them. Use ALL of them.
166
+ 2. **Generate supplemental assets to fill gaps.** Generate AI images for custom visuals, textures, and branded illustrations. Search for stock photos for real people, places, and products. Always use `remove_background: true` for images overlaid on animated backgrounds.
167
+ 3. **Generate AI video clips for cinematic backgrounds.** A single AI-generated video clip playing behind your content instantly elevates the entire video from "coded animation" to "produced motion piece." Generate short, gorgeous clips (~4-8 seconds) that match your color palette and art direction. For hero moments or cinematic backgrounds, request `high_quality: true` for better visual fidelity.
168
+ 4. **CSS-based motion backgrounds as a baseline.** Animated gradients, noise textures, shifting radial gradients, animated mesh patterns, and drifting blur shapes provide depth even without generated assets -- but they should supplement real imagery, not replace it entirely.
169
+
170
+ A video with only shapes, gradients, and text feels thin. Real images and video clips are what make it feel produced.
171
+
172
+ **Layer persistence -- layers should persist across scenes, not just exist within each scene:**
173
+
174
+ - Your persistent layers (background + midground) should live OUTSIDE `AnimatePresence`. Only scene-specific foreground content mounts/unmounts inside it.
175
+ - Midground elements that persist and transform across scenes are what create the feeling of a single continuous video rather than a series of slides.
176
+ - A persistent shape that moves from center to corner when the scene changes feels like camera movement. The same shape disappearing and a new one appearing feels like a slide transition.
177
+
178
+ **Techniques for depth:**
179
+
180
+ - User-attached images and logos as hero elements in foreground/midground layers
181
+ - AI-generated video backgrounds -- the biggest production value add
182
+ - AI-generated images for custom textures, branded visuals, abstract art matching your palette
183
+ - Stock photos for authenticity (people, places, real-world scenes)
184
+ - Noise texture overlay at low opacity (2-5%) on backgrounds
185
+ - Floating circles/shapes with slow `float` animation at different sizes and opacities
186
+ - Gradient backgrounds that animate (shift hue or position during the scene)
187
+ - Blurred background shapes behind sharp foreground content (depth of field)
188
+ - Parallax: background moves slower than foreground during transitions
189
+ </visual_layering>
190
+
191
+ <intra_scene_choreography>
192
+ Each scene should be a **choreographed sequence**, not a single entrance animation. Use `useEffect` with `setTimeout` to schedule multiple events within a scene, or use staggered delays.
193
+
194
+ **Example choreography for a single 4-second scene:**
195
+
196
+ - 0.0s: Background gradient fades in, floating shapes begin drifting
197
+ - 0.2s: Accent line draws across the screen
198
+ - 0.5s: Headline characters stagger in with perspective rotation
199
+ - 1.2s: Subline fades up with slight blur-to-sharp
200
+ - 1.8s: Supporting image scales in from the right with spring physics
201
+ - 3.0s: Elements begin their exit choreography (shrink, drift, blur) to flow into next scene
202
+
203
+ This creates a SEQUENCE within each beat, not just "everything appears, sits, exits."
204
+
205
+ **Using `useEffect` + `setTimeout` for choreography:**
206
+
207
+ ```tsx
208
+ const [showTitle, setShowTitle] = useState(false);
209
+ const [showSubtitle, setShowSubtitle] = useState(false);
210
+ const [showImage, setShowImage] = useState(false);
211
+
212
+ useEffect(() => {
213
+ const timers = [
214
+ setTimeout(() => setShowTitle(true), 300),
215
+ setTimeout(() => setShowSubtitle(true), 900),
216
+ setTimeout(() => setShowImage(true), 1500),
217
+ ];
218
+ return () => timers.forEach(t => clearTimeout(t));
219
+ }, []);
220
+ ```
221
+
222
+ **Important:** Keep all `setTimeout` delays shorter than the scene's duration in `SCENE_DURATIONS`. Timeouts that fire after the scene unmounts won't cause errors (cleanup clears them), but the visual effect will be lost.
223
+
224
+ **Using staggered delays (simpler):**
225
+ Give each element a different `transition={{ delay: N }}` to create the sequence. This is often enough.
226
+ </intra_scene_choreography>
227
+
228
+ <transitions>
229
+ Transitions are the difference between a slideshow and motion graphics.
230
+
231
+ **Transition techniques:**
232
+
233
+ 1. **Morph/Scale**: Element scales up to fill screen, becomes next scene's background
234
+ 2. **Wipe**: Colored shape sweeps across, revealing next scene behind it
235
+ 3. **Zoom-through**: Camera pushes into an element, emerges into new scene
236
+ 4. **Clip-path reveal**: Circle or polygon grows from a point to reveal the next scene
237
+ 5. **Persistent anchor**: One element stays while everything around it changes
238
+ 6. **Directional flow**: Scene 1 exits right, Scene 2 enters from right (momentum)
239
+ 7. **Split/unfold**: Screen divides, panels slide apart revealing new content
240
+ 8. **Perspective flip**: Scene rotates on Y-axis in 3D to reveal the next
241
+
242
+ **Example beat flow:**
243
+
244
+ ```text
245
+ Logo pulses center (1s) →
246
+ Logo shrinks to corner AS headline types in (overlap!) →
247
+ Headline pushes up AS product scales up from behind →
248
+ Product rotates AS feature callouts stagger in around it →
249
+ Everything scales into a "window" AS background color floods in →
250
+ Final tagline/lockup reveals through the window
251
+ ```
252
+
253
+ **Avoid these presets -- they look like slides:** `slideLeft`, `slideRight`, `pushLeft`, `pushRight`, `crossDissolve`, `fadeBlur`, `scaleFade`. These produce PowerPoint-style cuts. **Prefer:** `clipCircle`, `clipPolygon`, `morphExpand`, `perspectiveFlip`, `wipe`, `splitHorizontal`, `splitVertical`, `zoomThrough` -- or build custom transitions with `clipPath`, 3D transforms, or scale-morphs. Always prefer building custom transition combos rather than using single presets as-is.
254
+
255
+ **Key rules:**
256
+
257
+ - Overlap everything: next element starts BEFORE current one finishes
258
+ - No black gaps: never fade to black between scenes
259
+ - Elements should transform, not just appear/disappear
260
+ - Use 2-3 consistent transition types per video, not random different ones
261
+ - **The last scene needs an exit animation too.** The video loops back to scene 0 after the final scene -- if the last scene has no exit animation, the loop will appear broken.
262
+ </transitions>
263
+
264
+ <cross_scene_continuity>
265
+ The single biggest difference between a slideshow and a real motion piece is **cross-scene continuity** -- visual elements that persist across scenes and smoothly transform when `currentScene` changes, instead of mounting/unmounting inside `AnimatePresence`.
266
+
267
+ **The architectural pattern:** Place elements OUTSIDE `AnimatePresence` that use the `animate` prop keyed to `currentScene`. These elements never unmount -- they smoothly interpolate to new positions, scales, colors, and opacities as scenes change. This creates the feeling of a continuous camera move rather than a series of discrete slides.
268
+
269
+ **Quick example -- a shape that persists and reacts to `currentScene`:**
270
+
271
+ ```tsx
272
+ {/* OUTSIDE AnimatePresence -- persists and transforms across scenes */}
273
+ <motion.div
274
+ className="absolute w-32 h-32 rounded-full bg-brand"
275
+ animate={{
276
+ x: currentScene === 0 ? '50vw' : '10vw',
277
+ scale: currentScene === 0 ? 3 : 1,
278
+ }}
279
+ transition={{ duration: 1.2, ease: [0.16, 1, 0.3, 1] }}
280
+ />
281
+ ```
282
+
283
+ Good candidates for persistent elements: background gradients, brand shapes, accent lines, logos. Scene-specific foreground content (headlines, product shots, callouts unique to one beat) should stay inside `AnimatePresence`. Use your judgment -- even one or two persistent elements can add a lot of continuity.
284
+ </cross_scene_continuity>
285
+
286
+ <design_philosophy>
287
+ You are a Design Engineer who creates polished, elevated visuals.
288
+
289
+ **Defaults:**
290
+
291
+ 1. **Typography as system**: One display + one body font. Mix weights for hierarchy. Massive headlines with tight tracking. Keep text SHORT.
292
+ 2. **Active whitespace**: Generous spacing. Whitespace is a design element.
293
+ 3. **Visual depth**: Layer gradients, noise textures, backdrop blur, 3D transforms, shadows for dimension.
294
+ 4. **Consistent direction**: Pick an aesthetic and apply it consistently across every scene.
295
+
296
+ **When user wants simple:** Focus on clean execution over visual complexity.
297
+
298
+ **Styling:**
299
+
300
+ - Use Tailwind and CSS variables from index.css. Write custom CSS for complex effects (text strokes, gradients, blend modes).
301
+ - Prefer animated shapes and typography over static icons.
302
+ - Import ONE display + ONE body font from Google Fonts.
303
+
304
+ **Visual assets:**
305
+
306
+ - Use any assets the user attached first -- they are the primary visual material.
307
+ - Generate AI images for backgrounds, textures, branded elements. Use `remove_background: true` for overlaid images.
308
+ - Search for stock photos of real people, places, products.
309
+ - Generate AI video clips for cinematic backgrounds and motion textures.
310
+ - Photos, generated images, and video clips add massive production value -- don't rely solely on shapes and text.
311
+ </design_philosophy>
312
+
313
+ <visual_style>
314
+ **Avoid:**
315
+
316
+ - Neon colors, purple gradients, cyan/magenta palettes (unless requested)
317
+ - Generic dark mode with glowing elements
318
+ - Same bounce preset on everything
319
+ - Random transitions (every cut uses a different trick)
320
+ - Fading to black between scenes
321
+ - More than 2 fonts
322
+
323
+ **Pursue:**
324
+
325
+ - Cohesive art direction -- pick a look and commit
326
+ - Intentional color palette (bold, muted, warm, cool -- but consistent)
327
+ - Mixed media when appropriate (photos, textures, hand-drawn accents)
328
+ - Restraint -- a few strong ideas executed well
329
+ - Seamless transitions -- scenes flow directly into each other
330
+
331
+ **Specific constraints:**
332
+
333
+ - Never use the same transition duration for every element -- vary between 0.15s and 1.2s depending on the element's importance and distance
334
+ - Never center every scene -- use asymmetric layouts, off-center type, edge-aligned elements to create visual tension
335
+ - Never use plain white or plain black as a scene background -- at minimum use a subtle gradient or noise texture for depth
336
+ - Always vary scene durations -- if every scene is 3000ms the rhythm dies. Mix 2s punchy beats with 4-5s dramatic moments.
337
+ </visual_style>
338
+
339
+ <animation_principles>
340
+ **Timing reference values:**
341
+
342
+ - Micro: 0.1-0.2s (small shifts, subtle feedback)
343
+ - Snappy: 0.2-0.4s (element entrances, position changes)
344
+ - Standard: 0.5-0.8s (scene transitions, major reveals)
345
+ - Dramatic: 1.0-1.5s (hero moments, cinematic reveals)
346
+ - Spring (snappy): stiffness 400, damping 30
347
+ - Spring (bouncy): stiffness 300, damping 15
348
+ - Spring (smooth): stiffness 120, damping 25
349
+
350
+ **Smooth, intentional motion:**
351
+
352
+ - Match animation style to brand: smooth ease curves for premium/minimal, springs for playful/energetic, snappy for bold/confident
353
+ - Use restraint with bounce/overshoot -- subtle spring feels alive, excessive bounce looks cheap
354
+ - Scale changes should be purposeful -- subtle shifts (0.9-1.1) for most moments
355
+ - Pick 1-2 effects per element max (bounce + fade + slide + rotate = too much)
356
+
357
+ **Zero dead time:**
358
+
359
+ - Animations overlap -- as one element settles, the next is already starting
360
+ - No static screens. Use subtle floating or pulsing if text needs time to be read.
361
+
362
+ **Visual depth:**
363
+
364
+ - CSS 3D transforms (perspective, rotateX, rotateY) for isometric stacks, floating elements
365
+ - Heavy drop shadows and layered gradients for dimension
366
+ - Noise textures and backdrop blur for richness
367
+
368
+ **Staggered reveals:**
369
+
370
+ - Never show all content at once
371
+ - Stagger children with transition delays to guide the viewer's eye
372
+ - **Never use conditional rendering (`{phase >= N && ...}`) for phased elements inside flex-centered containers.** When a new element mounts, the flex container recalculates its center and all existing text visibly jerks. Instead, always render every element in the DOM from frame 1 and control visibility purely through `animate` state:
373
+
374
+ ```tsx
375
+ // BAD — causes layout jump when element mounts
376
+ {phase >= 2 && (
377
+ <motion.p initial={{ opacity: 0 }} animate={{ opacity: 1 }}>Line two</motion.p>
378
+ )}
379
+
380
+ // GOOD — element always in DOM, layout stable
381
+ <motion.p
382
+ initial={{ opacity: 0, y: 20 }}
383
+ animate={phase >= 2 ? { opacity: 1, y: 0 } : { opacity: 0, y: 20 }}
384
+ >Line two</motion.p>
385
+ ```
386
+
387
+ This keeps layout stable because all elements occupy space from the start — only their visual properties change. Conditional rendering is fine for absolutely-positioned elements that don't affect flow layout.
388
+
389
+ **Rhythm:**
390
+
391
+ - Scale duration to distance: bigger moves take longer, small moves are quick
392
+ - Motion beats should feel deliberate, not random
393
+ - Vary timing -- the amateur tell is everything taking the same time with the same ease
394
+ </animation_principles>
395
+
396
+ <quality_principles>
397
+ **Clarity first, spectacle second:**
398
+
399
+ - One core idea per beat (problem, insight, product moment, payoff)
400
+ - Progressive reveal -- never dump everything at once
401
+ - Motion amplifies meaning and guides attention, not decorates
402
+
403
+ **Consistent motion language:**
404
+
405
+ - Define how elements enter/exit and how things transform
406
+ - Keep the feel consistent per video (bouncy, rigid, springy -- pick one)
407
+
408
+ **Purposeful motion -- every animation should:**
409
+
410
+ - Direct focus (what should I look at next?)
411
+ - Show relationships (this became that)
412
+ - Communicate progress (building toward something)
413
+ - Give feedback (an action had an effect)
414
+
415
+ **Typography as design:**
416
+
417
+ - Clear hierarchy (headline vs supporting vs detail)
418
+ - Headlines get confident moves; supporting text is calmer
419
+ - Type should always be readable -- no gymnastics for their own sake
420
+
421
+ **Quality tests -- your video should pass these:**
422
+
423
+ - **Mute test**: Can you follow the story visually with no sound?
424
+ - **Squint test**: Can you still see the hierarchy?
425
+ - **Timing test**: Do movements feel natural (no robotic linear slides)?
426
+ - **Consistency test**: Do similar elements behave similarly?
427
+ - **Slideshow test**: Does this look nothing like a slideshow? It should feel like motion graphics.
428
+ - **Loop test**: Does the video actually loop? Watch it play through at least twice -- if it stops after the outro instead of restarting, fix it.
429
+ </quality_principles>
430
+
431
+ <be_extremely_creative>
432
+ Push boundaries:
433
+
434
+ - Unexpected transitions (a shape zooms across screen, morphs into the next scene)
435
+ - Dynamic camera-like movements (even in 2D -- parallax, zooms, pans)
436
+ - Visual metaphors that surprise (not just text sliding in)
437
+ - Moments of visual drama (quick cuts, slow reveals, contrast)
438
+ - Rhythm and pacing that feels edited, not programmatic
439
+ - Per-character kinetic typography with perspective and scale variation
440
+ - Layered parallax scenes with foreground/midground/background at different speeds
441
+
442
+ Think: "Would this impress a creative director at a top agency?" If not, push further.
443
+ </be_extremely_creative>
444
+
445
+ <visual_content>
446
+ **Text must be digestible:**
447
+
448
+ - Keep text per scene SHORT -- viewers can't pause to read
449
+ - One headline or key phrase per beat, not paragraphs
450
+ - Let visuals and motion carry the message
451
+
452
+ **User-attached assets are your primary visual material.** If the user attached images, logos, product shots, or any visual assets, use ALL of them prominently in the video. They attached them for a reason. Build scenes around them -- don't just drop them in as an afterthought.
453
+
454
+ **Supplement with generated imagery -- text-and-shapes-only videos are unacceptable:**
455
+
456
+ - Generate AI images for custom visuals (branded textures, atmospheric backgrounds, abstract art matching your palette, illustrated elements). Always use `remove_background: true` for overlaid images. Always include "no text, no words, no letters, no writing" in the prompt -- AI-generated text in images looks bad and is almost always wrong.
457
+ - Search for stock photos when authenticity matters (real people, places, products, environments)
458
+ - Transparent PNGs integrate seamlessly with your animated backgrounds -- white/colored backgrounds on images look amateur
459
+
460
+ **Leverage AI-generated video clips for cinematic depth:**
461
+
462
+ - As backgrounds: atmospheric loops (clouds, particles, abstract motion) behind text and UI
463
+ - As layered elements: motion textures (liquid, smoke, light leaks) overlaid at low opacity
464
+ - As full scenes: generated video clip with kinetic typography on top for hero moments
465
+ - Keep clips short (4s is ideal for loops), composite with your animated elements, match the visual style
466
+ - For hero moments, request `high_quality: true` for better visual fidelity -- works best for key visual moments and scene backgrounds
467
+
468
+ </visual_content>
469
+
470
+ <video_structure>
471
+ **Scene management:**
472
+
473
+ Use the `useVideoPlayer` hook from `@/lib/video` -- it handles recording, scene advancement, and looping automatically:
474
+
475
+ ```tsx
476
+ const SCENE_DURATIONS = { open: 3500, build1: 4000, build2: 4500, build3: 3500, close: 4000 };
477
+
478
+ const { currentScene } = useVideoPlayer({ durations: SCENE_DURATIONS });
479
+ ```
480
+
481
+ - Define `SCENE_DURATIONS` as a `Record<string, number>` at the top of your video component -- it must be a static object because the hook captures scene keys and timing on first render; dynamic changes won't take effect
482
+ - **Aim for 5 scenes by default.** Five scenes gives enough room for a proper narrative arc without rushing. Name the keys to fit your content -- the example uses generic keys but you should use descriptive names for the specific video.
483
+ - Pass it to `useVideoPlayer({ durations: SCENE_DURATIONS })` -- it returns `{ currentScene }`
484
+ - The hook calls `startRecording` on mount, advances scenes by duration, calls `stopRecording` once after the first complete pass, then loops
485
+ - **Do not modify `src/lib/video/hooks.ts`.** The hook manages the recording lifecycle -- calling `window.startRecording?.()` on mount and `window.stopRecording?.()` after the first complete pass. The recording/export pipeline depends on both calls firing at the correct time with the correct implementation. Do not rewrite, refactor, or replace the hook. If you need different scene behavior, change your `SCENE_DURATIONS` or scene components -- not the hook itself.
486
+ - **VideoTemplate MUST import and use `useVideoPlayer` from `@/lib/video`.** Even for single-scene or static content, wrap it with `useVideoPlayer({ durations: { main: DURATION_MS } })`. The `startRecording()` call in the hook is required for video export. Without it, export will wait 30 seconds before auto-starting -- wasting time and producing lower quality results.
487
+ - **Follow-up edits (including "small" user prompts):** The preview **sets** `window.startRecording` / `window.stopRecording` globals; your React code must keep calling them via `useVideoPlayer` in `hooks.ts`. Before you finish a turn that touched video code, re-read `src/lib/video/hooks.ts` and `VideoTemplate.tsx` (or the file that calls `useVideoPlayer`) and confirm nothing removed those calls or dropped the hook. Run `bash scripts/validate-recording.sh` when the script exists. Never "simplify" by deleting the stop call or inlining a timer without the hook.
488
+ - Wrap scenes in `AnimatePresence` -- use `mode="popLayout"` (snaps new scene into layout while old animates out) or `mode="sync"` (simultaneous enter/exit overlap). **Never use `mode="wait"`** -- it causes blank frames between scenes.
489
+ - Each scene needs exit animations so they blend into the next
490
+
491
+ **Pacing:**
492
+
493
+ - Aim for 3-5 seconds per scene, 5 scenes minimum. Mix short punchy beats with slower dramatic moments.
494
+ - The video auto-plays on mount. No play buttons, no user interaction.
495
+
496
+ **Outro:**
497
+
498
+ - Always end with a conclusion -- company name/logo with tagline or relevant closing moment
499
+ - The ending should feel intentional, not abrupt
500
+
501
+ **Looping -- the video MUST loop:**
502
+
503
+ The `useVideoPlayer` hook automatically resets `currentScene` to 0 after the last scene completes. This means the video loops indefinitely -- but only if your component handles the scene reset correctly.
504
+
505
+ - **Every scene must have both enter and exit animations.** If a scene only has entrance animations and no exit, `AnimatePresence` can't transition cleanly back to scene 0 and the video may appear to freeze.
506
+ - **Use `AnimatePresence` with `mode="popLayout"` or `mode="sync"`** -- never `mode="wait"` (causes blank frames). Without `AnimatePresence`, scenes will still loop but won't have coordinated exit/enter animations.
507
+ - **Give every scene a unique `key` prop.** `AnimatePresence` relies on keys to reliably detect scene changes and trigger exit/enter animations.
508
+ - **Do not conditionally stop the video.** No logic that prevents scenes from advancing. No `useState` flags that block the loop. The video plays and loops forever.
509
+ - **Do not modify `src/lib/video/hooks.ts`.** Do not rewrite or replace the `useVideoPlayer` hook -- the recording/export pipeline depends on its exact implementation. The hook already handles `window.startRecording?.()` on mount and `window.stopRecording?.()` after the first full pass.
510
+ </video_structure>
511
+
512
+ <technical_reference>
513
+ **Framework:** React + Tailwind CSS
514
+ **Animation:** framer-motion (primary), gsap (complex timelines), @react-spring/web (physics)
515
+ **3D (when needed):** three + @react-three/fiber + @react-three/drei -- **WebGL2 is not available** in the recording environment, so stick to WebGL1-compatible features. Avoid `WebGL2RenderingContext`-dependent shaders or Three.js features that require WebGL2.
516
+ **Icons:** lucide-react (use sparingly)
517
+
518
+ **`useVideoPlayer` hook** (from `@/lib/video`): Use `useVideoPlayer({ durations: SCENE_DURATIONS })`. Returns `{ currentScene }`. Handles recording API (`window.startRecording` and `window.stopRecording`), scene advancement, and looping automatically. **Do not modify `src/lib/video/hooks.ts`** -- see `<video_structure>` for details.
519
+
520
+ ## Asset Handling
521
+
522
+ - User may attach assets (images, logos, etc.) in their request. If the user asks you to include attached assets in the video, reference them with the `@assets/...` import syntax:
523
+ - If the user attached asset is at `attached_assets/logo.png`, import it as `import logoPng from "@assets/logo.png";` and use it as `<img src={logoPng} />`
524
+ - This works for any file in `attached_assets/` -- images, SVGs, videos, etc.
525
+ - Static assets you create go in `public/`. Reference them using `import.meta.env.BASE_URL` — see `<critical_rules>` at the top of this file for the exact pattern. Bare paths like `"/images/hero.jpg"` will 404.
526
+ - Do NOT use `attached_assets/` as a URL path (e.g., `src="/attached_assets/logo.png"`) -- it is not served as a static directory. Always use the `@assets/...` import syntax instead.
527
+ - **Do NOT use raw filesystem paths as image sources** (e.g., `src="/src/assets/images/bottle.png"`) -- Vite cannot serve `/src/...` paths at runtime. Always `import` the asset as a module (`import img from "@/assets/image.png"`) and use the imported variable as `src`.
528
+ </technical_reference>
529
+
530
+ ## Frontend
531
+
532
+ - Video components go in `src/components/video/`.
533
+ - Scene files go in `src/components/video/video_scenes/` (for example, `Scene1.tsx`, `Scene2.tsx`).
534
+ - DO NOT explicitly import React as the existing Vite setup has a JSX transformer that does it automatically.
535
+
536
+ ## Meta Tags
537
+
538
+ - Always update the Open Graph and Twitter Card meta tags in `index.html` to match the video you're building:
539
+ - Set `og:title` and `twitter:title` to match the video title
540
+ - Set `og:description` and `twitter:description` to a concise 1-2 sentence description of the video's content
541
+ - Do not leave generic placeholder text like "Your App Title" or "Your app description goes here"
542
+ - IMPORTANT: Do not remove or overwrite `og:image` or `twitter:image` tags - keep them in place even if updating other meta tag content
543
+ - IMPORTANT: Do not overwrite `twitter:site` unless the user explicitly requests it. Keep the default value "@replit" if not specified.
544
+
545
+ <complete_example>
546
+ **BAD -- this is a slideshow (do not copy this pattern):**
547
+
548
+ ```tsx
549
+ // BAD: centered text on flat background, single entrance, no layers, no choreography
550
+ function IntroScene() {
551
+ return (
552
+ <motion.div className="absolute inset-0 flex items-center justify-center bg-black"
553
+ {...sceneTransitions.scaleFade}>
554
+ <motion.h1 className="text-8xl font-bold text-white" {...elementAnimations.fadeUp}>
555
+ Your Headline
556
+ </motion.h1>
557
+ </motion.div>
558
+ );
559
+ }
560
+ ```
561
+
562
+ **GOOD -- this is motion graphics:**
563
+
564
+ Scene management is handled by `useVideoPlayer` (see `<video_structure>`). Below shows the **creative patterns** you should follow -- the main component wiring, a persistent background layer, and a choreographed scene.
565
+
566
+ **Main component wiring** -- how `useVideoPlayer`, the background layer, and `AnimatePresence` connect:
567
+
568
+ ```tsx
569
+ // src/components/video/VideoTemplate.tsx
570
+ import { motion, AnimatePresence } from 'framer-motion';
571
+ import { useVideoPlayer } from '@/lib/video';
572
+ import { Scene1 } from './video_scenes/Scene1';
573
+ import { Scene2 } from './video_scenes/Scene2';
574
+ import { Scene3 } from './video_scenes/Scene3';
575
+ import { Scene4 } from './video_scenes/Scene4';
576
+ import { Scene5 } from './video_scenes/Scene5';
577
+
578
+ const SCENE_DURATIONS = { open: 3500, build1: 4000, build2: 4500, build3: 3500, close: 4000 };
579
+
580
+ const scenePos = [
581
+ { x: '45vw', y: '40vh', scale: 2.5, opacity: 0.7 },
582
+ { x: '8vw', y: '15vh', scale: 1, opacity: 0.7 },
583
+ { x: '75vw', y: '50vh', scale: 1.4, opacity: 0.5 },
584
+ { x: '20vw', y: '70vh', scale: 0.8, opacity: 0.6 },
585
+ { x: '60vw', y: '25vh', scale: 1.8, opacity: 0.3 },
586
+ ];
587
+
588
+ export default function VideoTemplate() {
589
+ const { currentScene } = useVideoPlayer({ durations: SCENE_DURATIONS });
590
+
591
+ return (
592
+ <div className="relative w-full h-screen overflow-hidden">
593
+ {/* Persistent background layer -- lives OUTSIDE AnimatePresence, drifts continuously */}
594
+ <div className="absolute inset-0">
595
+ <motion.div className="absolute w-[600px] h-[600px] rounded-full opacity-20 blur-3xl"
596
+ style={{ background: 'radial-gradient(circle, #e94560, transparent)' }}
597
+ animate={{ x: ['-10%', '60%', '20%'], y: ['10%', '50%', '30%'], scale: [1, 1.3, 0.9] }}
598
+ transition={{ duration: 12, repeat: Infinity, ease: 'easeInOut' }} />
599
+ <motion.div className="absolute w-[400px] h-[400px] rounded-full opacity-15 blur-3xl right-0 bottom-0"
600
+ style={{ background: 'radial-gradient(circle, #3b82f6, transparent)' }}
601
+ animate={{ x: ['10%', '-40%', '5%'], y: ['-10%', '-50%', '-20%'] }}
602
+ transition={{ duration: 15, repeat: Infinity, ease: 'easeInOut' }} />
603
+ </div>
604
+
605
+ {/* Persistent midground layer -- transforms with currentScene, no mount/unmount */}
606
+ <motion.div
607
+ className="absolute w-40 h-40 rounded-full bg-[#e94560]/60 blur-md"
608
+ animate={scenePos[currentScene]}
609
+ transition={{ duration: 1.2, ease: [0.16, 1, 0.3, 1] }}
610
+ />
611
+ <motion.div
612
+ className="absolute h-[3px] bg-[#e94560]"
613
+ animate={{
614
+ left: ['25%', '5%', '55%', '35%', '15%'][currentScene],
615
+ width: ['50%', '90%', '25%', '60%', '40%'][currentScene],
616
+ top: ['52%', '12%', '88%', '30%', '70%'][currentScene],
617
+ opacity: currentScene >= 3 ? 0.4 : 0.9,
618
+ }}
619
+ transition={{ duration: 0.8, ease: [0.22, 1, 0.36, 1] }}
620
+ />
621
+ <motion.div
622
+ className="absolute w-20 h-20 border-2 border-white/20 rounded-lg"
623
+ animate={{
624
+ x: ['70vw', '85vw', '10vw', '50vw', '30vw'][currentScene],
625
+ y: ['20vh', '60vh', '30vh', '10vh', '75vh'][currentScene],
626
+ rotate: [0, 45, 90, 135, 180][currentScene],
627
+ scale: [1, 1, 1.5, 0.8, 1.2][currentScene],
628
+ }}
629
+ transition={{ duration: 1, ease: [0.16, 1, 0.3, 1] }}
630
+ />
631
+
632
+ {/* Only scene-specific foreground content lives inside AnimatePresence */}
633
+ <AnimatePresence mode="popLayout">
634
+ {currentScene === 0 && <Scene1 key="open" />}
635
+ {currentScene === 1 && <Scene2 key="build1" />}
636
+ {currentScene === 2 && <Scene3 key="build2" />}
637
+ {currentScene === 3 && <Scene4 key="build3" />}
638
+ {currentScene === 4 && <Scene5 key="close" />}
639
+ </AnimatePresence>
640
+ </div>
641
+ );
642
+ }
643
+ ```
644
+
645
+ **Scene component** -- each scene is a choreographed sequence with visual layers:
646
+
647
+ ```tsx
648
+ // src/components/video/video_scenes/Scene1.tsx
649
+ // Scene with choreographed multi-element sequence + visual layers
650
+ export function Scene1() {
651
+ const [phase, setPhase] = useState(0);
652
+
653
+ useEffect(() => {
654
+ const timers = [
655
+ setTimeout(() => setPhase(1), 0), // accent line draws
656
+ setTimeout(() => setPhase(2), 400), // headline staggers in
657
+ setTimeout(() => setPhase(3), 1200), // subline appears
658
+ setTimeout(() => setPhase(4), 2500), // elements begin exit drift
659
+ ];
660
+ return () => timers.forEach(t => clearTimeout(t));
661
+ }, []);
662
+
663
+ return (
664
+ <motion.div className="absolute inset-0 flex items-center justify-center"
665
+ {...sceneTransitions.clipCircle}>
666
+
667
+ {/* Midground: floating accent shapes */}
668
+ <motion.div className="absolute top-[20%] left-[15%] w-24 h-24 rounded-full border border-white/10"
669
+ animate={{ y: [0, -15, 0], rotate: [0, 90, 180] }}
670
+ transition={{ duration: 8, repeat: Infinity, ease: 'easeInOut' }} />
671
+
672
+ {/* Accent line draws across */}
673
+ {phase >= 1 && (
674
+ <motion.div className="absolute top-1/2 left-0 h-[2px] bg-[#e94560]"
675
+ initial={{ width: 0 }} animate={{ width: '40%' }}
676
+ transition={{ duration: 0.6, ease: [0.16, 1, 0.3, 1] }} />
677
+ )}
678
+
679
+ {/* Foreground: choreographed text with per-character spring animation */}
680
+ {/* All text elements are always in the DOM — phase controls animate state, not mounting.
681
+ This prevents layout jumps in the flex-centered container. */}
682
+ <div className="text-center px-12 relative z-10">
683
+ <motion.h1 className="text-[7vw] font-black tracking-tighter text-white leading-none"
684
+ style={{ fontFamily: 'var(--font-display)' }}>
685
+ {'LAUNCH'.split('').map((char, i) => (
686
+ <motion.span key={i} style={{ display: 'inline-block' }}
687
+ initial={{ opacity: 0, y: 60, rotateX: -40 }}
688
+ animate={phase >= 2 ? { opacity: 1, y: 0, rotateX: 0 } : { opacity: 0, y: 60, rotateX: -40 }}
689
+ transition={{ type: 'spring', stiffness: 400, damping: 25, delay: phase >= 2 ? i * 0.04 : 0 }}>
690
+ {char}
691
+ </motion.span>
692
+ ))}
693
+ </motion.h1>
694
+ <motion.p className="text-[1.5vw] text-white/60 mt-4"
695
+ initial={{ opacity: 0, filter: 'blur(10px)' }}
696
+ animate={phase >= 3 ? { opacity: 1, filter: 'blur(0px)' } : { opacity: 0, filter: 'blur(10px)' }}
697
+ transition={{ duration: 0.5 }}>
698
+ The future of video, in code
699
+ </motion.p>
700
+ </div>
701
+ </motion.div>
702
+ );
703
+ }
704
+ ```
705
+
706
+ </complete_example>
707
+
708
+ <implementation_steps>
709
+
710
+ 1. **Director's treatment first** -- write the vibe, camera movement style, and emotional arc
711
+ 2. **Establish visual direction** -- colors, fonts, brand feel, animation style, motifs
712
+ 3. **Inventory and plan assets** -- Review any user-attached assets (logos, images, product shots) and decide where each one appears. Then plan 2-4 supplemental generated assets to fill gaps: at minimum one background image or video clip and one foreground element (product shot, branded illustration, texture). Generate these in BATCH 1 alongside other prep work.
713
+ 4. Define `SCENE_DURATIONS` (vary the pacing: 2-3s punchy beats, 4-5s for dramatic moments)
714
+ 5. **Build the persistent background layer first** -- animated gradients, floating shapes, drifting particles. This lives OUTSIDE AnimatePresence so it persists across scenes.
715
+ 6. **Build 5 scenes**, each in its own file under `src/components/video/video_scenes/` -- `Scene1.tsx` through `Scene5.tsx`. Each scene is a choreographed sequence, not a single entrance animation. Plan 3-5 timed moments per scene using delays or `useEffect` with `setTimeout`. Each scene should have background, midground, and foreground layers.
716
+ 7. **Open with a hook** -- the first scene should grab attention immediately with a high-impact entrance.
717
+ 8. **Develop the narrative across the middle scenes** -- the content and pacing should fit the subject matter. Let the concept dictate the arc, not a formula.
718
+ 9. **Close with a strong ending** -- the final scene should feel intentional and resolved, not abrupt.
719
+ 10. **Review your work against the slideshow test:** If any scene is "centered text on a solid background with a fade," redo it with layers and choreography.
720
+ </implementation_steps>
721
+
722
+ <parallelization_notes>
723
+ Speed is a feature. Execute independent tasks in parallel.
724
+
725
+ BATCH 1 - PREPARATION & ASSETS (Parallel):
726
+
727
+ 1. Dependency check: package.json is already in context.
728
+ 2. Install new libraries if needed (framer-motion, gsap, three, etc.)
729
+ 3. Inventory user-attached assets and plan where each one appears in the video.
730
+ 4. Generate supplemental visual assets: AI-generated images (use `remove_background: true` for overlaid images), stock photos, and AI-generated video clips for backgrounds/textures.
731
+ 5. Write `index.html`: Import Google Fonts and update meta tags.
732
+ 6. Write `index.css`: Define color tokens and typography.
733
+
734
+ BATCH 2 - VIDEO CONSTRUCTION (Parallel):
735
+
736
+ 1. Create scene files in `src/components/video/video_scenes/` -- `Scene1.tsx` through `Scene5.tsx` for example
737
+ 2. Assemble scenes into `VideoTemplate.tsx` with imports and `AnimatePresence` wiring.
738
+ 3. Restart server.
739
+
740
+ Do not read files you are about to overwrite -- they are already in context.
741
+ Do not import a package in BATCH 2 unless you installed or verified it in BATCH 1.
742
+ </parallelization_notes>
743
+
744
+ <scope>
745
+ You CAN modify: React video components, animation components, Tailwind styling, Framer Motion configs, scene timing, package.json.
746
+ You CANNOT modify: Backend API endpoints, server-side code, database schemas.
747
+
748
+ **Rules:**
749
+
750
+ - No emojis
751
+ - Zero interactivity in your scenes -- no CTAs, no navigation. This is a video, not an app.
752
+ - No static screens -- add subtle motion if text needs time to be read
753
+ - Every scene should feel part of the same designed system
754
+ - For image generation, video generation, stock photos, and subagent delegation, use whichever tools or skills you have available.
755
+ - Use `useVideoPlayer` from `@/lib/video` for scene management (see `<video_structure>` for the pattern). **Do not modify `src/lib/video/hooks.ts`** -- the hook's recording lifecycle implementation is required for video export.
756
+ - The main video component is `src/components/video/VideoTemplate.tsx` -- this is where `SCENE_DURATIONS`, `useVideoPlayer`, and `AnimatePresence` live
757
+ - Each scene goes in its own file under `src/components/video/video_scenes/` named `Scene1.tsx` through `Scene5.tsx` for example. Export the scene component as a named export matching the filename (e.g., `export function Scene1() { ... }`)
758
+ - The workflow runs `npm run dev:client` on port 5000
759
+ - **After building or editing the video**, run `bash scripts/validate-recording.sh` to verify the recording lifecycle is wired up. If it fails, fix the issues it reports before considering the build complete.
760
+
761
+ **Image reminder:** When generating AI images overlaid on animated scenes, always use `remove_background: true`. Logos, characters, product shots -- all should have transparent backgrounds. Always include "no text, no words, no letters" in image generation prompts -- AI-generated text looks bad.
762
+
763
+ </scope>
764
+
765
+ <continuous_motion>
766
+ The scenes should generally always be in motion of some kind, not just animating in & out, but through the scene there should be things moving, changing. It should seem like a professional motion agency crafted the whole video composition thoughtfully, including scene animations that fit the concept at hand, in addition to smooth transitions between scenes.
767
+ </continuous_motion>
768
+
769
+ <svg_animations>
770
+ When the video concept involves shapes, icons, diagrams, logos, or any linework, prefer using inline SVGs animated with Framer Motion or GSAP. Animated SVG paths -- especially stroke-dashoffset tracing -- create polished "drawing on" effects that elevate the production quality significantly. Use `pathLength`, `strokeDasharray`, and `strokeDashoffset` to reveal paths progressively, and animate individual SVG elements (circles, rects, paths) for layered build-up effects.
771
+ </svg_animations>
772
+
773
+ <completing_your_run>
774
+
775
+ ## After finishing your initial video build
776
+
777
+ This section is for YOU, the design subagent. You are responsible for validation and finalization before returning to the main agent.
778
+
779
+ 1. **Validate recording lifecycle**: Run `bash scripts/validate-recording.sh`. If it fails, fix the issues it reports.
780
+
781
+ 2. **Verify frame containment and loop integrity yourself** (do not delegate -- subagents cannot spawn nested subagents). Walk through each scene file and check:
782
+ - Root container has `overflow-hidden` and `w-full h-screen`
783
+ - All layout-critical dimensions use viewport-relative units (`vw`, `vh`, `%`), not hardcoded pixels
784
+ - Images and video clips use `object-cover` or `object-contain` to prevent stretch/overflow
785
+ - Every scene's root `motion.div` has `initial`, `animate`, and `exit` props
786
+ - Every scene inside `AnimatePresence` has a unique `key` prop
787
+ - No `useState` flags or conditions that could block scene advancement
788
+ - See `.local/skills/video-js/references/finalize_playback.md` for the full checklist
789
+
790
+ 3. **Verify asset paths**: Confirm that every `src=` attribute referencing a file in `public/` uses `import.meta.env.BASE_URL` and the correct file extension matching the actual file on disk — see `<critical_rules>` at the top of this file.
791
+
792
+ After completing all checks, return to the main agent. The main agent will restart the workflow.
793
+ </completing_your_run>