@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,954 @@
1
+ ---
2
+ name: excel-generator
3
+ description: Create Excel spreadsheets with formulas, charts, pivot summaries, and financial models.
4
+ ---
5
+
6
+ # Excel & Spreadsheet Generator
7
+
8
+ Create .xlsx files, Google Sheets, and PDF exports with formulas, formatting, charts, data validation, pivot summaries, and financial models.
9
+
10
+ Library Selection
11
+
12
+ Need Use Install
13
+
14
+ Create new .xlsx from scratch, fast, large files xlsxwriter pip install xlsxwriter
15
+
16
+ Read/modify existing .xlsx, or round-trip edits openpyxl pip install openpyxl
17
+
18
+ Read legacy .xls (Excel 97-2003) xlrd pip install xlrd
19
+
20
+ Dump a DataFrame quickly df.to_excel() uses openpyxl/xlsxwriter as engine
21
+
22
+ Generate Google Sheets gspread + google-auth pip install gspread google-auth
23
+
24
+ Export to PDF LibreOffice CLI system dependency (see PDF section)
25
+
26
+ Key gotchas:
27
+
28
+ Neither openpyxl nor xlsxwriter can read .xls — only .xlsx. Use xlrd for .xls.
29
+
30
+ xlsxwriter is write-only — it cannot open an existing file. Use openpyxl to edit.
31
+
32
+ openpyxl uses ~50x the file size in RAM. For 100K+ rows, use xlsxwriter or openpyxl.Workbook(write_only=True).
33
+
34
+ Formulas are stored as strings — Python does not evaluate them. Excel computes on open. openpyxl reading a formula cell gives you =SUM(A1:A10), not the result (unless you use data_only=True, which reads the last cached value).
35
+
36
+ Core Recipe — openpyxl
37
+
38
+ from openpyxl import Workbook
39
+
40
+ from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
41
+
42
+ from openpyxl.utils import get*column*letter
43
+
44
+ from openpyxl.worksheet.table import Table, TableStyleInfo
45
+
46
+ from openpyxl.formatting.rule import ColorScaleRule, DataBarRule
47
+
48
+ from openpyxl.worksheet.datavalidation import DataValidation
49
+
50
+ wb = Workbook()
51
+
52
+ ws = wb.active
53
+
54
+ ws.title = "Sales"
55
+
56
+ headers = ["Product", "Units", "Price", "Revenue"]
57
+
58
+ ws.append(headers)
59
+
60
+ rows = [("Widget", 120, 9.99), ("Gadget", 80, 14.50), ("Gizmo", 200, 4.25)]
61
+
62
+ for r in rows:
63
+
64
+ ws.append(r)
65
+
66
+ for row in range(2, len(rows) + 2):
67
+
68
+ ws[f"D{row}"] = f"=B{row}*C{row}"
69
+
70
+ ws[f"D{len(rows)+2}"] = f"=SUM(D2:D{len(rows)+1})"
71
+
72
+ header*fill = PatternFill(start*color="2F5496", fill_type="solid")
73
+
74
+ for cell in ws[1]:
75
+
76
+ cell.font = Font(bold=True, color="FFFFFF")
77
+
78
+ cell.fill = header_fill
79
+
80
+ cell.alignment = Alignment(horizontal="center")
81
+
82
+ cell.border = Border(bottom=Side(border_style="medium"))
83
+
84
+ for row in ws.iter*rows(min*row=2, min*col=3, max*col=4):
85
+
86
+ for cell in row:
87
+
88
+ cell.number_format = '"$"#,##0.00'
89
+
90
+ for col in ws.columns:
91
+
92
+ max_len = max(len(str(c.value or "")) for c in col)
93
+
94
+ ws.column*dimensions[get*column*letter(col[0].column)].width = max*len + 3
95
+
96
+ ws.freeze_panes = "A2"
97
+
98
+ tab = Table(displayName="SalesTable", ref=f"A1:D{len(rows)+1}")
99
+
100
+ tab.tableStyleInfo = TableStyleInfo(name="TableStyleMedium9", showRowStripes=True)
101
+
102
+ ws.add_table(tab)
103
+
104
+ ws.conditional_formatting.add(f"D2:D{len(rows)+1}",
105
+
106
+ DataBarRule(start*type="min", end*type="max", color="638EC6"))
107
+
108
+ dv = DataValidation(type="list", formula1='"Active,Paused,Archived"', allow_blank=True)
109
+
110
+ ws.add*data*validation(dv)
111
+
112
+ dv.add("E2:E100")
113
+
114
+ wb.save("output.xlsx")
115
+
116
+ Charts (openpyxl)
117
+
118
+ from openpyxl.chart import BarChart, LineChart, PieChart, Reference
119
+
120
+ chart = BarChart()
121
+
122
+ chart.title = "Revenue by Product"
123
+
124
+ chart.y_axis.title = "Revenue ($)"
125
+
126
+ data = Reference(ws, min*col=4, min*row=1, max_row=4)
127
+
128
+ cats = Reference(ws, min*col=1, min*row=2, max_row=4)
129
+
130
+ chart.add*data(data, titles*from_data=True)
131
+
132
+ chart.set_categories(cats)
133
+
134
+ ws.add_chart(chart, "F2")
135
+
136
+ Chart gotchas:
137
+
138
+ Reference uses 1-indexed rows/cols (not 0-indexed).
139
+
140
+ titles*from*data=True consumes the first row of the data range as the series label — include the header row in data but NOT in cats.
141
+
142
+ Supported: BarChart, LineChart, PieChart, ScatterChart, AreaChart, DoughnutChart, RadarChart. 3D variants exist but render inconsistently.
143
+
144
+ Charts reference cells — if you later insert rows above, the chart range does NOT auto-adjust.
145
+
146
+ xlsxwriter (faster, write-only, richer formatting)
147
+
148
+ import xlsxwriter
149
+
150
+ wb = xlsxwriter.Workbook("report.xlsx")
151
+
152
+ ws = wb.add_worksheet("Data")
153
+
154
+ header*fmt = wb.add*format({"bold": True, "bg*color": "#2F5496", "font*color": "white", "border": 1})
155
+
156
+ money*fmt = wb.add*format({"num_format": "$#,##0.00"})
157
+
158
+ ws.write*row(0, 0, ["Product", "Units", "Price", "Revenue"], header*fmt)
159
+
160
+ data = [("Widget", 120, 9.99), ("Gadget", 80, 14.50)]
161
+
162
+ for i, (p, u, pr) in enumerate(data, start=1):
163
+
164
+ ws.write(i, 0, p)
165
+
166
+ ws.write(i, 1, u)
167
+
168
+ ws.write(i, 2, pr, money_fmt)
169
+
170
+ ws.write*formula(i, 3, f"=B{i+1}*C{i+1}", money*fmt)
171
+
172
+ ws.autofit()
173
+
174
+ ws.freeze_panes(1, 0)
175
+
176
+ wb.close()
177
+
178
+ pandas Shortcut (multi-sheet with formatting)
179
+
180
+ import pandas as pd
181
+
182
+ with pd.ExcelWriter("out.xlsx", engine="xlsxwriter") as writer:
183
+
184
+ df.to*excel(writer, sheet*name="Data", index=False)
185
+
186
+ summary.to*excel(writer, sheet*name="Summary", index=False)
187
+
188
+ wb, ws = writer.book, writer.sheets["Data"]
189
+
190
+ ws.set_column("A:A", 20)
191
+
192
+ ws.autofilter(0, 0, len(df), len(df.columns) - 1)
193
+
194
+ Google Sheets Generation
195
+
196
+ Use the gspread library with a service account or OAuth credentials. Requires the Google Sheets API and Google Drive API enabled.
197
+
198
+ Setup: Check if a Google Sheets integration is available via Replit integrations first. If not, the user needs to provide a service account JSON key.
199
+
200
+ import gspread
201
+
202
+ from google.oauth2.service_account import Credentials
203
+
204
+ scopes = [
205
+
206
+ "<https://www.googleapis.com/auth/spreadsheets>",
207
+
208
+ "<https://www.googleapis.com/auth/drive>",
209
+
210
+ ]
211
+
212
+ creds = Credentials.from*service*account*file("service*account.json", scopes=scopes)
213
+
214
+ gc = gspread.authorize(creds)
215
+
216
+ sh = gc.create("Sales Report Q1")
217
+
218
+ ws = sh.sheet1
219
+
220
+ ws.update_title("Revenue")
221
+
222
+ ws.update("A1:D1", [["Product", "Units", "Price", "Revenue"]])
223
+
224
+ data = [["Widget", 120, 9.99], ["Gadget", 80, 14.50], ["Gizmo", 200, 4.25]]
225
+
226
+ ws.update(f"A2:C{len(data)+1}", data)
227
+
228
+ for i in range(2, len(data) + 2):
229
+
230
+ ws.update_acell(f"D{i}", f"=B{i}*C{i}")
231
+
232
+ ws.format("A1:D1", {
233
+
234
+ "backgroundColor": {"red": 0.18, "green": 0.33, "blue": 0.59},
235
+
236
+ "textFormat": {"bold": True, "foregroundColor": {"red": 1, "green": 1, "blue": 1}},
237
+
238
+ "horizontalAlignment": "CENTER"
239
+
240
+ })
241
+
242
+ ws.format(f"C2:D{len(data)+1}", {"numberFormat": {"type": "CURRENCY", "pattern": "$#,##0.00"}})
243
+
244
+ ws.freeze(rows=1)
245
+
246
+ sh.share("<user@example.com>", perm_type="user", role="writer")
247
+
248
+ print(f"Spreadsheet URL: {sh.url}")
249
+
250
+ Batch updates (faster for large writes):
251
+
252
+ ws.batch_update([
253
+
254
+ {"range": "A1:D1", "values": [headers]},
255
+
256
+ {"range": f"A2:C{len(data)+1}", "values": data},
257
+
258
+ ])
259
+
260
+ Google Sheets gotchas:
261
+
262
+ API rate limits: 60 requests/min per user, 300 requests/min per project. Batch writes to stay under.
263
+
264
+ update() overwrites — it does not append. Use append_rows() to add to the end.
265
+
266
+ Formulas work the same as Excel (US-English function names).
267
+
268
+ Charts must be created via the Sheets API v4 batchUpdate with addChart request — gspread does not have a chart helper.
269
+
270
+ Conditional formatting requires gspread.utils or raw API calls.
271
+
272
+ Alternative — upload .xlsx to Google Drive:
273
+
274
+ from googleapiclient.discovery import build
275
+
276
+ from googleapiclient.http import MediaFileUpload
277
+
278
+ drive = build("drive", "v3", credentials=creds)
279
+
280
+ file_metadata = {"name": "Report", "mimeType": "application/vnd.google-apps.spreadsheet"}
281
+
282
+ media = MediaFileUpload("report.xlsx",
283
+
284
+ mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
285
+
286
+ file = drive.files().create(body=file*metadata, media*body=media,
287
+
288
+ fields="id,webViewLink").execute()
289
+
290
+ print(f"Google Sheets URL: {file['webViewLink']}")
291
+
292
+ PDF Export & Print Layout
293
+
294
+ Method 1: LibreOffice CLI (best fidelity)
295
+
296
+ libreoffice --headless --calc --convert-to pdf --outdir ./output report.xlsx
297
+
298
+ import subprocess
299
+
300
+ def xlsx*to*pdf(input*path, output*dir="./output"):
301
+
302
+ result = subprocess.run(
303
+
304
+ ["libreoffice", "--headless", "--calc", "--convert-to", "pdf",
305
+
306
+ "--outdir", output*dir, input*path],
307
+
308
+ capture_output=True, text=True, timeout=60
309
+
310
+ )
311
+
312
+ if result.returncode != 0:
313
+
314
+ raise RuntimeError(f"Conversion failed: {result.stderr}")
315
+
316
+ return f"{output*dir}/{input*path.rsplit['/', 1](-1).replace('.xlsx', '.pdf')}"
317
+
318
+ Method 2: Print Layout in openpyxl
319
+
320
+ from openpyxl.worksheet.page import PageMargins, PrintPageSetup
321
+
322
+ ws.page_setup.orientation = "landscape"
323
+
324
+ ws.page*setup.paperSize = ws.PAPERSIZE*LETTER
325
+
326
+ ws.page_setup.fitToWidth = 1
327
+
328
+ ws.page_setup.fitToHeight = 0
329
+
330
+ ws.sheet_properties.pageSetUpPr.fitToPage = True
331
+
332
+ ws.page_margins = PageMargins(left=0.5, right=0.5, top=0.75, bottom=0.75,
333
+
334
+ header=0.3, footer=0.3)
335
+
336
+ ws.oddHeader.center.text = "Sales Report — Q1 2026"
337
+
338
+ ws.oddHeader.center.font = "Arial,Bold"
339
+
340
+ ws.oddHeader.center.size = 12
341
+
342
+ ws.oddFooter.center.text = "Page &P of &N"
343
+
344
+ ws.oddFooter.right.text = "&D"
345
+
346
+ ws.print*title*rows = "1:1"
347
+
348
+ ws.print*area = f"A1:F{last*row}"
349
+
350
+ ws.row_breaks.append(openpyxl.worksheet.pagebreak.Break(id=25))
351
+
352
+ Method 3: Print Layout in xlsxwriter
353
+
354
+ ws.set_landscape()
355
+
356
+ ws.set_paper(1)
357
+
358
+ ws.fit*to*pages(1, 0)
359
+
360
+ ws.set_margins(left=0.5, right=0.5, top=0.75, bottom=0.75)
361
+
362
+ ws.set_header("&C&\\Arial,Bold\\&14 Sales Report")
363
+
364
+ ws.set_footer("&CPage &P of &N")
365
+
366
+ ws.repeat_rows(0)
367
+
368
+ ws.print*area(0, 0, last*row, 5)
369
+
370
+ ws.set*page*break(25, 0)
371
+
372
+ Print layout tips:
373
+
374
+ Always set fitToWidth=1 for wide tables — prevents columns from being cut off across pages.
375
+
376
+ Use repeat_rows to repeat headers on every page — critical for multi-page tables.
377
+
378
+ Set margins to 0.5" for data-heavy sheets, 0.75"+ for presentation sheets.
379
+
380
+ Test with landscape for tables wider than 6 columns.
381
+
382
+ For Excel-native PDF: the user can also do File > Export > PDF in Excel after opening.
383
+
384
+ Financial Model Recipes
385
+
386
+ See `financial-models.md` for complete recipes covering:
387
+
388
+ 3-Statement Model — Income Statement, Balance Sheet, Cash Flow linked together
389
+
390
+ DCF (Discounted Cash Flow) — FCF projections, discount factors, terminal value, equity bridge
391
+
392
+ LBO (Leveraged Buyout) — Sources & Uses, debt schedule, cash sweep, MOIC/IRR
393
+
394
+ Comparable Company Analysis — Comp table with multiples, summary stats, implied valuation
395
+
396
+ Merger Model (M&A) — Accretion/dilution analysis, pro forma EPS
397
+
398
+ Common patterns across all financial models:
399
+
400
+ Yellow-highlighted cells (#FFF2CC) = user inputs; everything else is formulas
401
+
402
+ Use freeze_panes on row 1 (headers) and column A (labels)
403
+
404
+ Currency format: '"$"#,##0.0' for millions, '"$"#,##0.00' for precise
405
+
406
+ Multiple format: '0.0x' for EV/EBITDA, leverage ratios
407
+
408
+ Totals use double-bottom border ("bottom": 6 in xlsxwriter)
409
+
410
+ Use named ranges or cell references to the Assumptions sheet for all inputs — never hardcode values in formula sheets
411
+
412
+ Always add a section_fmt for visual grouping (bold, light blue background, top+bottom border)
413
+
414
+ Pivot-Table-Style Summaries
415
+
416
+ Python cannot create native Excel PivotTables programmatically (they require cached data). Instead, build the equivalent summary using formulas or pandas aggregation.
417
+
418
+ Pattern 1: pandas groupby to formatted Excel output
419
+
420
+ import pandas as pd
421
+
422
+ df = pd.DataFrame({
423
+
424
+ "Region": ["East", "East", "West", "West", "East", "West"],
425
+
426
+ "Product": ["Widget", "Gadget", "Widget", "Gadget", "Widget", "Gadget"],
427
+
428
+ "Revenue": [120, 80, 150, 90, 200, 110],
429
+
430
+ "Units": [10, 5, 12, 6, 15, 8],
431
+
432
+ })
433
+
434
+ pivot = df.pivot_table(
435
+
436
+ values=["Revenue", "Units"],
437
+
438
+ index="Region",
439
+
440
+ columns="Product",
441
+
442
+ aggfunc="sum",
443
+
444
+ margins=True,
445
+
446
+ margins_name="Total"
447
+
448
+ )
449
+
450
+ pivot.columns = [f"{val} - {prod}" for val, prod in pivot.columns]
451
+
452
+ pivot = pivot.reset_index()
453
+
454
+ with pd.ExcelWriter("pivot_report.xlsx", engine="xlsxwriter") as writer:
455
+
456
+ df.to*excel(writer, sheet*name="Data", index=False)
457
+
458
+ pivot.to*excel(writer, sheet*name="Summary", index=False)
459
+
460
+ ws = writer.sheets["Summary"]
461
+
462
+ ws.autofit()
463
+
464
+ hdr*fmt = writer.book.add*format(
465
+
466
+ {"bold": True, "bg*color": "#2F5496", "font*color": "white"})
467
+
468
+ for col_num, value in enumerate(pivot.columns):
469
+
470
+ ws.write(0, col*num, value, hdr*fmt)
471
+
472
+ Pattern 2: SUMIFS-based pivot using formulas (dynamic in Excel)
473
+
474
+ import xlsxwriter
475
+
476
+ wb = xlsxwriter.Workbook("formula_pivot.xlsx")
477
+
478
+ ws*data = wb.add*worksheet("Data")
479
+
480
+ ws*pivot = wb.add*worksheet("Pivot")
481
+
482
+ headers = ["Region", "Product", "Revenue"]
483
+
484
+ data_rows = [("East", "Widget", 120), ("East", "Gadget", 80),
485
+
486
+ ("West", "Widget", 150), ("West", "Gadget", 90),
487
+
488
+ ("East", "Widget", 200), ("West", "Gadget", 110)]
489
+
490
+ ws*data.write*row(0, 0, headers)
491
+
492
+ for i, row in enumerate(data_rows, 1):
493
+
494
+ ws*data.write*row(i, 0, row)
495
+
496
+ last*data = len(data*rows)
497
+
498
+ regions = ["East", "West"]
499
+
500
+ products = ["Widget", "Gadget"]
501
+
502
+ ws_pivot.write(0, 0, "Region \\ Product")
503
+
504
+ for j, prod in enumerate(products):
505
+
506
+ ws_pivot.write(0, j + 1, prod)
507
+
508
+ ws_pivot.write(0, len(products) + 1, "Total")
509
+
510
+ for i, region in enumerate(regions):
511
+
512
+ ws_pivot.write(i + 1, 0, region)
513
+
514
+ for j, prod in enumerate(products):
515
+
516
+ ws*pivot.write*formula(i + 1, j + 1,
517
+
518
+ f'=SUMIFS(Data!C2:C{last*data+1}, Data!A2:A{last*data+1}, '
519
+
520
+ f'A{i+2}, Data!B2:B{last_data+1}, {chr(66+j)}1)')
521
+
522
+ ws*pivot.write*formula(i + 1, len(products) + 1,
523
+
524
+ f"=SUM(B{i+2}:{chr(65+len(products))}{i+2})")
525
+
526
+ ws_pivot.write(len(regions) + 1, 0, "Total")
527
+
528
+ for j in range(len(products) + 1):
529
+
530
+ col_letter = chr(66 + j)
531
+
532
+ ws*pivot.write*formula(len(regions) + 1, j + 1,
533
+
534
+ f"=SUM({col*letter}2:{col*letter}{len(regions)+1})")
535
+
536
+ wb.close()
537
+
538
+ Pattern 3: Multi-dimension pivot with percentage columns
539
+
540
+ ## After building a pivot, add percentage-of-total columns
541
+
542
+ ## =Cell / ColumnTotal formatted as "0.0%"
543
+
544
+ ## =Cell / RowTotal formatted as "0.0%"
545
+
546
+ ## Use IFERROR to handle division by zero
547
+
548
+ Multi-Workbook Linking
549
+
550
+ Excel supports cross-workbook references using [filename.xlsx]SheetName!Cell syntax. Python can write these formulas as strings.
551
+
552
+ Writing cross-workbook references
553
+
554
+ import xlsxwriter
555
+
556
+ wb = xlsxwriter.Workbook("master_report.xlsx")
557
+
558
+ ws = wb.add_worksheet("Consolidated")
559
+
560
+ ws.write(0, 0, "Region")
561
+
562
+ ws.write(0, 1, "Revenue")
563
+
564
+ ws.write(0, 2, "EBITDA")
565
+
566
+ regions = [
567
+
568
+ ("East", "east_data.xlsx"),
569
+
570
+ ("West", "west_data.xlsx"),
571
+
572
+ ("Central", "central_data.xlsx"),
573
+
574
+ ]
575
+
576
+ for i, (region, filename) in enumerate(regions, 1):
577
+
578
+ ws.write(i, 0, region)
579
+
580
+ ws.write_formula(i, 1, f"='[{filename}]Summary'!B2")
581
+
582
+ ws.write_formula(i, 2, f"='[{filename}]Summary'!B5")
583
+
584
+ ws.write(len(regions) + 1, 0, "Total")
585
+
586
+ ws.write_formula(len(regions) + 1, 1, f"=SUM(B2:B{len(regions)+1})")
587
+
588
+ ws.write_formula(len(regions) + 1, 2, f"=SUM(C2:C{len(regions)+1})")
589
+
590
+ wb.close()
591
+
592
+ Multi-workbook gotchas:
593
+
594
+ External references only resolve when both files are open in Excel or when Excel has cached values.
595
+
596
+ Python writes the formula string only — no values are cached. On first open, Excel will show \#REF! until the linked file is also open or the link is updated.
597
+
598
+ File paths in references can be relative ([file.xlsx]) or absolute ('C:\Reports\\file.xlsx]'). Prefer relative for portability.
599
+
600
+ When generating a suite of workbooks, generate all data workbooks first, then the master.
601
+
602
+ Google Sheets uses IMPORTRANGE("spreadsheet_url", "Sheet1!A1:B10") instead of bracket syntax.
603
+
604
+ Generating a workbook suite
605
+
606
+ import xlsxwriter
607
+
608
+ regions = {"East": [100, 200, 150], "West": [180, 220, 190],
609
+
610
+ "Central": [90, 110, 130]}
611
+
612
+ for region, revenues in regions.items():
613
+
614
+ wb = xlsxwriter.Workbook(f"{region.lower()}_data.xlsx")
615
+
616
+ ws = wb.add_worksheet("Summary")
617
+
618
+ ws.write(0, 0, "Quarter")
619
+
620
+ ws.write(0, 1, "Revenue")
621
+
622
+ for i, rev in enumerate(revenues, 1):
623
+
624
+ ws.write(i, 0, f"Q{i}")
625
+
626
+ ws.write(i, 1, rev)
627
+
628
+ ws.write(len(revenues) + 1, 0, "Total")
629
+
630
+ ws.write_formula(len(revenues) + 1, 1, f"=SUM(B2:B{len(revenues)+1})")
631
+
632
+ wb.close()
633
+
634
+ Excel Data Tables (Sensitivity Analysis)
635
+
636
+ Excel Data Tables (What-If Analysis > Data Table) let you vary one or two inputs and see how an output changes. Python cannot create native data tables, but you can build the equivalent grid of formulas.
637
+
638
+ One-Way Data Table
639
+
640
+ import xlsxwriter
641
+
642
+ wb = xlsxwriter.Workbook("sensitivity_1way.xlsx")
643
+
644
+ ws = wb.add_worksheet("Sensitivity")
645
+
646
+ ws.write(0, 0, "Revenue")
647
+
648
+ ws.write(0, 1, 1000)
649
+
650
+ ws.write(1, 0, "Margin")
651
+
652
+ ws.write(1, 1, 0.20)
653
+
654
+ ws.write(2, 0, "EBITDA")
655
+
656
+ ws.write_formula(2, 1, "=B1*B2")
657
+
658
+ margins = [0.10, 0.15, 0.20, 0.25, 0.30]
659
+
660
+ ws.write(4, 0, "Margin Sensitivity")
661
+
662
+ ws.write(5, 0, "Margin")
663
+
664
+ ws.write(5, 1, "EBITDA")
665
+
666
+ pct*fmt = wb.add*format({"num_format": "0.0%"})
667
+
668
+ money*fmt = wb.add*format({"num_format": '"$"#,##0.0'})
669
+
670
+ for i, margin in enumerate(margins):
671
+
672
+ ws.write(6 + i, 0, margin, pct_fmt)
673
+
674
+ ws.write*formula(6 + i, 1, f"=B1*A{7+i}", money*fmt)
675
+
676
+ wb.close()
677
+
678
+ Two-Way Data Table (Sensitivity Grid)
679
+
680
+ import xlsxwriter
681
+
682
+ wb = xlsxwriter.Workbook("sensitivity_2way.xlsx")
683
+
684
+ ws = wb.add_worksheet("IRR Sensitivity")
685
+
686
+ hdr = wb.add*format({"bold": True, "bg*color": "#1B3A5C",
687
+
688
+ "font_color": "white", "align": "center"})
689
+
690
+ corner = wb.add*format({"bold": True, "bg*color": "#1B3A5C",
691
+
692
+ "font*color": "white", "align": "center", "text*wrap": True})
693
+
694
+ pct = wb.add*format({"num*format": "0.0%", "align": "center"})
695
+
696
+ x*fmt = wb.add*format({"num_format": "0.0x", "align": "center"})
697
+
698
+ cell*pct = wb.add*format({"num_format": "0.0%", "align": "center",
699
+
700
+ "bg_color": "#F2F2F2"})
701
+
702
+ ws.write(0, 0, "Entry EBITDA")
703
+
704
+ ws.write(0, 1, 100)
705
+
706
+ ws.write(1, 0, "Equity Invested")
707
+
708
+ ws.write(1, 1, 400)
709
+
710
+ ws.write(2, 0, "Hold Period")
711
+
712
+ ws.write(2, 1, 5)
713
+
714
+ exit_multiples = [6.0, 7.0, 8.0, 9.0, 10.0]
715
+
716
+ ebitda*growth*rates = [0.00, 0.03, 0.05, 0.08, 0.10, 0.12]
717
+
718
+ start_row = 5
719
+
720
+ ws.write(start_row, 0, "EBITDA Growth \\ Exit Multiple", corner)
721
+
722
+ for j, mult in enumerate(exit_multiples):
723
+
724
+ ws.write(start*row, j + 1, mult, x*fmt)
725
+
726
+ for i, growth in enumerate(ebitda*growth*rates):
727
+
728
+ r = start_row + 1 + i
729
+
730
+ ws.write(r, 0, growth, pct)
731
+
732
+ for j, mult in enumerate(exit_multiples):
733
+
734
+ ws.write_formula(r, j + 1,
735
+
736
+ f"=IFERROR((B1*(1+A{r+1})^B3*{mult}/B2)^(1/B3)-1, 0)",
737
+
738
+ cell_pct)
739
+
740
+ ws.conditional*format(start*row+1, 1,
741
+
742
+ start*row+len(ebitda*growth*rates), len(exit*multiples), {
743
+
744
+ "type": "3*color*scale",
745
+
746
+ "min_color": "#F8696B",
747
+
748
+ "mid_color": "#FFEB84",
749
+
750
+ "max_color": "#63BE7B",
751
+
752
+ })
753
+
754
+ ws.autofit()
755
+
756
+ wb.close()
757
+
758
+ Data table tips:
759
+
760
+ Always use IFERROR wrappers — edge cases (negative equity, zero denominators) will produce \#DIV/0! or \#NUM!.
761
+
762
+ Apply 3-color-scale conditional formatting to make the grid scannable at a glance.
763
+
764
+ Label the corner cell clearly (e.g., "Growth \\ Multiple") so users know which axis is which.
765
+
766
+ For financial models, common sensitivity pairs: Entry Multiple vs Exit Multiple, Revenue Growth vs EBITDA Margin, WACC vs Terminal Growth.
767
+
768
+ Large Dataset Handling
769
+
770
+ For datasets exceeding 100K rows, standard openpyxl will consume excessive memory. Use these strategies:
771
+
772
+ xlsxwriter (streaming by default)
773
+
774
+ import xlsxwriter
775
+
776
+ wb = xlsxwriter.Workbook("large*dataset.xlsx", {"constant*memory": True})
777
+
778
+ ws = wb.add_worksheet()
779
+
780
+ ws.write_row(0, 0, ["ID", "Name", "Value", "Category", "Date"])
781
+
782
+ for i in range(1, 1*000*001):
783
+
784
+ ws.write*row(i, 0, [i, f"Item*{i}", i * 1.5, f"Cat_{i % 10}", "2026-01-01"])
785
+
786
+ wb.close()
787
+
788
+ constant_memory: True — reduces RAM usage further by flushing rows to disk. Trade-off: you cannot go back and edit earlier rows.
789
+
790
+ openpyxl write-only mode
791
+
792
+ from openpyxl import Workbook
793
+
794
+ wb = Workbook(write_only=True)
795
+
796
+ ws = wb.create_sheet("Data")
797
+
798
+ ws.append(["ID", "Name", "Value"])
799
+
800
+ for i in range(1, 500_001):
801
+
802
+ ws.append([i, f"Item_{i}", i * 1.5])
803
+
804
+ wb.save("large_openpyxl.xlsx")
805
+
806
+ write_only gotchas:
807
+
808
+ Cannot read or modify cells after writing — append-only.
809
+
810
+ Cannot add tables, merged cells, or conditional formatting.
811
+
812
+ Cannot set column widths (use xlsxwriter if you need formatting + large data).
813
+
814
+ Chunked reading of large files
815
+
816
+ from openpyxl import load_workbook
817
+
818
+ wb = load*workbook("huge*file.xlsx", read*only=True, data*only=True)
819
+
820
+ ws = wb.active
821
+
822
+ batch = []
823
+
824
+ for i, row in enumerate(ws.iter*rows(min*row=2, values_only=True)):
825
+
826
+ batch.append(row)
827
+
828
+ if len(batch) >= 10_000:
829
+
830
+ process_batch(batch)
831
+
832
+ batch = []
833
+
834
+ if batch:
835
+
836
+ process_batch(batch)
837
+
838
+ wb.close()
839
+
840
+ pandas chunked processing
841
+
842
+ import pandas as pd
843
+
844
+ chunks = pd.read*excel("huge*file.xlsx", sheet_name="Data", engine="openpyxl",
845
+
846
+ dtype={"ID": int, "Value": float},
847
+
848
+ usecols=["ID", "Name", "Value"])
849
+
850
+ for chunk in pd.read*csv("data.csv", chunksize=50*000):
851
+
852
+ process(chunk)
853
+
854
+ Performance comparison
855
+
856
+ Method Max Rows (practical) RAM for 1M rows Formatting
857
+
858
+ xlsxwriter constant_memory 1M+ ~200MB Full
859
+
860
+ xlsxwriter normal 1M+ ~500MB Full
861
+
862
+ openpyxl write_only 500K ~1GB None
863
+
864
+ openpyxl normal 100K ~5GB Full
865
+
866
+ pandas to_excel (xlsxwriter) 1M+ ~800MB Via engine
867
+
868
+ Decision tree:
869
+
870
+ Need formatting + large data -> xlsxwriter with constant_memory: True
871
+
872
+ Need to read + modify large file -> openpyxl read_only + process + xlsxwriter output
873
+
874
+ Just need data dump -> pandas to_excel with xlsxwriter engine
875
+
876
+ Over 1M rows -> split across multiple sheets (Excel limit is 1,048,576 rows per sheet)
877
+
878
+ Common Formula Patterns
879
+
880
+ Need Formula
881
+
882
+ Running total =SUM($B$2:B2) (drag down)
883
+
884
+ Lookup (modern) =XLOOKUP(A2, Data!A:A, Data!C:C, "Not found")
885
+
886
+ Lookup (compat) =VLOOKUP(A2, Data!A:C, 3, FALSE)
887
+
888
+ Conditional sum =SUMIFS(C:C, A:A, "Widget", B:B, ">100")
889
+
890
+ Count matching =COUNTIFS(A:A, "Active")
891
+
892
+ Percent of total =B2/SUM($B$2:$B$100)
893
+
894
+ Safe division =IFERROR(A2/B2, 0)
895
+
896
+ Gotcha: When writing formulas from Python, use US-English function names and comma separators regardless of the user's locale. Excel translates on open.
897
+
898
+ Number Format Codes
899
+
900
+ Format Code
901
+
902
+ Currency "$"#,##0.00
903
+
904
+ Thousands \#,##0
905
+
906
+ Percent 0.0%
907
+
908
+ Date yyyy-mm-dd
909
+
910
+ Negative in red \#,##0;[Red]-#,##0
911
+
912
+ Multiple (e.g. 2.5x) 0.0x
913
+
914
+ Millions shorthand \#,##0.0,,"M"
915
+
916
+ Accounting (neg in parens) "$"#,##0.00_);[Red]("$"#,##0.00)
917
+
918
+ Data Gathering — Use Web Search When Relevant
919
+
920
+ Before building the spreadsheet, determine whether the data requires external research. If the user asks for a report, analysis, or dataset about a public company, industry, market, or any publicly available information, use webSearch and webFetch to gather real data first.
921
+
922
+ Examples that require web search:
923
+
924
+ "Build me a financial model for Tesla" -> search for Tesla's latest 10-K/10-Q, revenue, margins, guidance
925
+
926
+ "Create a comp table for SaaS companies" -> search for revenue, ARR, multiples, headcount
927
+
928
+ "Make a spreadsheet comparing EV manufacturers" -> search for production numbers, market cap, deliveries
929
+
930
+ "Summarize Apple's last 5 quarters" -> search for quarterly earnings data
931
+
932
+ Do not fabricate numbers. If you cannot find a specific data point, leave the cell blank or mark it as "N/A -- not found" rather than guessing. Always cite the source (e.g., "Source: Tesla 10-K FY2025") in a notes row or sheet.
933
+
934
+ Output
935
+
936
+ Always present key findings and recommendations as a plaintext summary in chat, even when also generating files. The user should be able to understand the results without opening any files.
937
+
938
+ Limitations
939
+
940
+ Cannot write VBA macros (.xlsm requires keep_vba=True in openpyxl to preserve existing macros, not create them)
941
+
942
+ Formulas are not computed by Python -- open in Excel/LibreOffice to see results
943
+
944
+ openpyxl auto-width is an approximation (no font metrics); xlsxwriter's autofit() is better
945
+
946
+ Google Sheets import may drop some conditional formatting and chart styles
947
+
948
+ Cannot create native Excel PivotTables -- use formula-based or pandas-based summaries instead
949
+
950
+ Cannot create native Excel Data Tables (What-If) -- use formula grids as equivalent
951
+
952
+ Cross-workbook references show \#REF! until linked files are opened in Excel
953
+
954
+ Excel row limit is 1,048,576 per sheet -- split larger datasets across sheets