@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,977 @@
1
+ ---
2
+ name: legal-contract
3
+ description: Draft, review, or explain legal documents — NDAs, contracts, privacy policies, and more.
4
+ ---
5
+
6
+ # Legal Contract Assistant
7
+
8
+ Full-stack legal platform with three core capabilities: (1) draft and review any type of legal document — NDAs, service agreements, LOIs, purchase agreements, privacy policies, terms of service, and more; (2) manage documents on a dashboard with owner-scoped access; (3) run interactive due diligence rooms for M&A transactions with file uploads, status tracking, comments, participant access control, and activity logging.
9
+
10
+ ## IMPORTANT DISCLAIMER: This provides general information and templates only. It does NOT constitute legal advice. Always consult a qualified attorney for legal matters
11
+
12
+ ## Platform Capabilities
13
+
14
+ This skill powers a full legal platform with three major capability areas. When the user arrives, guide them to the right capability based on their need:
15
+
16
+ ### 1. Document Drafting & Review
17
+
18
+ Generate any type of legal document from templates and review existing contracts for red flags.
19
+
20
+ #### What users can do
21
+
22
+ - Draft NDAs, service agreements, freelancer contracts, LOIs, term sheets, asset/stock purchase agreements, operating agreements, board resolutions, leases, privacy policies, terms of service — or any other legal document type
23
+ - Review contracts they've received and get a plain-language analysis with flagged risks
24
+
25
+ - Generate multi-document packages for transactions (e.g., LOI + NDA for an acquisition)
26
+ - Export documents as PDF and DOCX for signing and redlining
27
+
28
+ ##### How it works
29
+
30
+ 1. User describes the document they need or pastes a contract for review
31
+ 2. For drafting: start from open-source templates (Bonterms/Common Paper for NDAs/service agreements) or standard clause structures (for M&A documents). See "Open-Source Template Libraries" and "M&A / Transaction Documents" sections below.
32
+
33
+ 3. For reviews: run the red-flag checklist and playbook checks, then output using the "Review Output Format"
34
+ 4. Store the document in the platform via the Documents System (any `documentType` string — the system is type-agnostic)
35
+
36
+ 5. Deliver PDF + DOCX exports using the generation pipeline in "Output: Always Produce PDF & DOCX"
37
+
38
+ ### 2. Document Management (Dashboard)
39
+
40
+ Store, organize, and manage all legal documents with owner-scoped access.
41
+
42
+ #### What users can do (2)
43
+
44
+ - View all their documents on the dashboard with type badges and status indicators
45
+ - Open any document to view its full content
46
+
47
+ - Delete documents they no longer need (with confirmation)
48
+ - Link documents to DD rooms for transaction context
49
+
50
+ ##### How it works (2)
51
+
52
+ - Documents are stored in the `documents`table with a flexible`documentType` field — supports any type, not just LOIs
53
+ - All access is owner-scoped: users only see their own documents
54
+
55
+ - See the "Documents System" section below for schema and API details
56
+
57
+ ### 3. Due Diligence Rooms
58
+
59
+ Interactive workspaces for managing M&A due diligence checklists with file uploads, comments, and team collaboration.
60
+
61
+ #### What users can do (3)
62
+
63
+ - Create DD rooms pre-populated with 8 standard M&A categories and 57 checklist items
64
+ - Add custom categories and items beyond the standard template
65
+
66
+ - Upload files against checklist items (directly to object storage via presigned URLs)
67
+ - Download uploaded files with room-level authorization
68
+
69
+ - Track item status through the workflow: not*started → uploaded → under*review → approved/flagged
70
+ - Comment on items for team discussion
71
+
72
+ - Invite participants by email with role-based access (viewer, contributor, admin)
73
+ - Monitor progress via per-category and overall completion statistics
74
+
75
+ - Review a full activity feed of all room actions
76
+
77
+ ##### How it works (3)
78
+
79
+ - Room creation auto-populates from the `DD_TEMPLATE`in`dd-rooms.ts`
80
+ - All routes are protected by room-level access control middleware
81
+
82
+ - Files go through a presigned URL upload flow (request URL → upload to storage → register in DB)
83
+ - See the "Due Diligence Room Platform" section below for full architecture and API details
84
+
85
+ ## When to Use
86
+
87
+ - User needs any type of legal document drafted — NDA, service agreement, freelancer contract, consulting agreement, partnership agreement, operating agreement, LLC agreement, board resolution, employment agreement, offer letter, non-compete, non-solicitation agreement, equity/stock option agreement, SLA, DPA, or any other contract
88
+ - User needs a Letter of Intent (LOI), term sheet, earnout agreement, or asset/stock purchase agreement
89
+
90
+ - User wants a plain-language review of a contract they received ("review this contract", "what does this clause mean", "help me understand this agreement", "is this contract fair")
91
+ - User needs to understand specific legal terms or clauses
92
+
93
+ - User wants a lease or rental agreement reviewed for red flags
94
+ - User needs multiple related transaction documents (e.g., LOI + NDA for an acquisition)
95
+
96
+ - User needs a Privacy Policy or Terms of Service for a web app or SaaS product
97
+ - User asks to "draft a contract", "write me a contract", or "create an agreement"
98
+
99
+ - User wants to manage and organize their legal documents on a dashboard
100
+ - User needs to set up or work within a due diligence room, data room, or deal room for an M&A transaction
101
+
102
+ - User wants an M&A checklist, acquisition checklist, or due diligence checklist
103
+ - User wants to upload, track, or review due diligence documents with a team
104
+
105
+ ## When NOT to Use
106
+
107
+ - Complex litigation or regulatory compliance
108
+ - Employment law disputes
109
+
110
+ - International trade agreements
111
+ - Anything involving criminal law
112
+
113
+ - Situations requiring jurisdiction-specific legal analysis
114
+
115
+ ## Open-Source Template Libraries (Use These First)
116
+
117
+ **Never draft from scratch.** Start from committee-vetted open-source agreements released under CC BY 4.0:
118
+
119
+ | Source | Documents | Style | Get it |
120
+
121
+ |--------|-----------|-------|--------|
122
+
123
+ | **Bonterms** | Mutual NDA, Cloud Terms (SaaS), SLA, DPA, PSA, AI Standard Clauses | US; "cover page + standard terms" | `github.com/Bonterms` |
124
+
125
+ | **Common Paper** | Mutual NDA, Cloud Service Agreement, DPA, Design Partner Agreement | US; standards committee of 40+ attorneys | `commonpaper.com/standards` |
126
+
127
+ | **oneNDA** | NDA (777 words), oneDPA | UK/EU; strict variable-only edits | `onenda.org` |
128
+
129
+ **Workflow:** `webFetch("https://bonterms.com/forms/mutual-nda/")` → extract the standard terms → build a cover page with the user's deal-specific variables (parties, effective date, term, governing law, jurisdiction). Don't modify the body; that's the whole point of standards.
130
+
131
+ **Note:** These libraries cover NDAs and SaaS/service agreements well, but do not include M&A documents (LOIs, term sheets, purchase agreements). For those document types, draft using the standard clause structures in the "M&A / Transaction Documents" section below.
132
+
133
+ ## M&A / Transaction Documents
134
+
135
+ When a user needs documents for buying/selling a business, these are the common document types and their standard clause structures:
136
+
137
+ ### Letter of Intent (LOI)
138
+
139
+ Standard sections for an LOI:
140
+
141
+ 1. **Transaction Structure** — asset purchase vs. stock/equity purchase
142
+ 2. **Purchase Price** — total price, payment structure (cash at closing, earnout, seller financing, escrow holdback)
143
+
144
+ 3. **Earnout provisions** — if applicable: percentage, performance milestones, measurement period, payment schedule
145
+ 4. **Due Diligence** — period length (typically 30-60 days), scope, access to records, extension rights
146
+
147
+ 5. **Exclusivity / No-Shop** — period length (typically 60-90 days), binding on seller
148
+ 6. **Closing Timeline** — target closing date
149
+
150
+ 7. **Conditions to Closing** — due diligence completion, definitive agreement, reps & warranties accuracy, third-party consents, no MAE, ancillary agreements
151
+ 8. **Representations and Warranties** — reference to customary reps in definitive agreement
152
+
153
+ 9. **Confidentiality** — binding obligation
154
+ 10. **Expenses** — each party bears own costs; binding
155
+
156
+ 11. **Non-Binding Nature** — clearly state which sections ARE binding (typically: exclusivity, confidentiality, expenses, non-binding clause itself) and which are non-binding
157
+ 12. **Governing Law** — leave as fill-in-the-blank for jurisdiction
158
+
159
+ 13. **Expiration** — LOI expires if not signed within X days (typically 10-15)
160
+
161
+ **Key variables to collect from user:** buyer name, seller/target name, purchase price, deal structure (asset vs. stock), due diligence period, exclusivity period, closing timeline, earnout terms (if any).
162
+
163
+ ### Mutual NDA (Transaction-Specific)
164
+
165
+ When drafting an NDA for a specific transaction (vs. a general-purpose NDA), include these additional elements:
166
+
167
+ - **WHEREAS clauses** that reference the specific transaction and any related LOI
168
+ - **Permitted Purpose** scoped specifically to evaluating/negotiating the transaction
169
+
170
+ - **Non-Solicitation** of the other party's employees (typically 12 months)
171
+ - **No Obligation to Proceed** — neither party is obligated to complete the transaction
172
+
173
+ - Cross-reference the LOI or term sheet by name in the recitals
174
+
175
+ Standard NDA sections: definition of confidential information, exclusions, receiving party obligations, no license/warranty, return/destruction, term (typically 2 years), remedies (injunctive relief), governing law, miscellaneous (entire agreement, amendments, assignment, severability, waiver, counterparts, notices).
176
+
177
+ ### Multi-Document Transactions
178
+
179
+ When a transaction requires multiple related documents (e.g., LOI + NDA):
180
+
181
+ 1. **Maintain consistent definitions** — party names, defined terms ("Transaction," "Business," "Purchased Assets"), and entity references must match across all documents
182
+ 2. **Cross-reference between documents** — the NDA should reference the LOI in its recitals; the LOI's confidentiality section should note that a separate NDA governs
183
+
184
+ 3. **Align timelines** — the NDA's term should cover at least the LOI's exclusivity + due diligence + closing periods
185
+ 4. **Use the same governing law** placeholder in all documents
186
+
187
+ 5. **Draft and present together** — generate all documents in a single session so the user has a complete package
188
+
189
+ ## Privacy Policy & Terms of Service (Web Apps / SaaS)
190
+
191
+ Privacy Policies and Terms of Service are among the most common legal documents a web app needs. They are not contracts between two parties — they are public-facing declarations. Treat them as a separate document type from the contract/NDA/LOI workflow.
192
+
193
+ ### Key questions to ask before drafting
194
+
195
+ 1. **Legal entity name** — Always ask for the exact registered legal name separately from the brand name. The brand is what users see ("NiDO"); the legal entity is what appears in formal documents ("NiDO Finanzas S.A.S."). Never assume they are the same.
196
+ 2. **Country of incorporation** — Determines which data protection law applies (GDPR for EU, LGPD for Brazil, Ley 172-13 for Dominican Republic, CCPA for California, etc.).
197
+
198
+ 3. **What data is collected** — Account info (name, email), financial/transactional data, uploaded files, usage/analytics?
199
+ 4. **Third-party data processors** — Ask the user to enumerate every service that touches user data: auth provider, database host, AI/ML services, payment processor, analytics, email provider, CDN. Each must be disclosed in the Privacy Policy.
200
+
201
+ 5. **Are there paid plans?** — If yes, the Terms must cover payment terms, auto-renewal, cancellation, and refund policy.
202
+ 6. **Minimum age** — Typically 18 for financial apps, 13 for general consumer apps.
203
+
204
+ 7. **Contact email for privacy/legal** — Often different from the support email. Ask explicitly.
205
+
206
+ ### Third-party processor disclosure pattern
207
+
208
+ For every integration the app uses, include a line in the Privacy Policy. Format:
209
+
210
+ ```text
211
+
212
+ - **[Provider] ([function]):** [What they receive and why]. [Link to their privacy policy if possible.]
213
+
214
+ ```
215
+
216
+ Example:
217
+
218
+ ```text
219
+
220
+ - **Neon (base de datos):** almacenamiento seguro de sus datos financieros en servidores PostgreSQL.
221
+ - **Google Gemini (IA):** genera categorías y análisis. Solo recibe descripciones de transacciones; nunca datos personales identificables.
222
+
223
+ - **Stripe (pagos):** procesa pagos con tarjeta. NiDO no almacena datos de tarjetas.
224
+ - **Replit Auth (autenticación):** gestiona el inicio de sesión vía Google/GitHub.
225
+
226
+ ```
227
+
228
+ If the app uses analytics, advertising pixels, or session recording (Hotjar, FullStory, etc.), these MUST be disclosed and typically require explicit consent in GDPR jurisdictions.
229
+
230
+ ### Privacy Policy required sections
231
+
232
+ 1. Who we are (legal entity name, contact email for privacy)
233
+ 2. What data we collect (account info, user-generated data, uploaded files, usage logs)
234
+
235
+ 3. How we use it (provide service, personalization, legal compliance)
236
+ 4. Third-party processors (enumerate all — see above)
237
+
238
+ 5. Data storage and security (encryption at rest/in transit, access controls)
239
+ 6. User rights (access, correction, deletion, export)
240
+
241
+ 7. Cookies (session-only vs. tracking; consent requirements if in GDPR territory)
242
+ 8. Minors (minimum age, what happens if a minor's data is discovered)
243
+
244
+ 9. Changes to the policy (notice method and timing — typically 15–30 days)
245
+ 10. Governing law (jurisdiction's data protection statute)
246
+
247
+ ### Terms of Service required sections
248
+
249
+ 1. Acceptance (clicking/using = agreement)
250
+ 2. Service description (what it does and does NOT do)
251
+
252
+ 3. Account registration (age requirement, accurate info, responsibility for activity)
253
+ 4. Acceptable use (prohibited behaviors: fraud, scraping, reverse engineering, illegal activity)
254
+
255
+ 5. **Financial/medical disclaimer** — if the app gives any advice-like output (budget suggestions, AI analysis), include an explicit "not financial/legal/medical advice" clause
256
+ 6. User data ownership (user owns their data; limited license to operator to run the service)
257
+
258
+ 7. Payments (if applicable: billing cycle, auto-renewal, cancellation, refunds, payment processor)
259
+ 8. Service availability (no uptime guarantee unless SLA offered)
260
+
261
+ 9. Limitation of liability (cap at fees paid in last 12 months or a fixed floor like $100)
262
+ 10. IP ownership (brand, code, design belong to the operator)
263
+
264
+ 11. Termination (user can delete account; operator can suspend for violations; data deletion timeline)
265
+ 12. Changes to terms (notice period — typically 15 days for material changes)
266
+
267
+ 13. Governing law and jurisdiction
268
+
269
+ ### Delivery format for web apps — routed pages, not PDFs
270
+
271
+ For web apps, the best delivery format for Privacy Policy and Terms of Service is **routed pages within the app itself**, not PDFs or DOCX files. This is the standard for all modern SaaS products.
272
+
273
+ #### Pattern
274
+
275
+ - Create `client/src/pages/Privacy.tsx`and`client/src/pages/Terms.tsx`
276
+ - Register them as **public routes**— accessible without authentication. Place the route check**before** the auth loading state in `AppContent`:
277
+
278
+ ```tsx
279
+
280
+ function AppContent() {
281
+
282
+ const { isLoading, isAuthenticated } = useAuth();
283
+
284
+ const [location] = useLocation();
285
+
286
+ // Public legal pages — always accessible, no auth required
287
+
288
+ if (location === "/privacidad") return <Privacy />;
289
+
290
+ if (location === "/terminos") return <Terms />;
291
+
292
+ // Auth guard below
293
+
294
+ if (isLoading) return <LoadingScreen />;
295
+
296
+ return isAuthenticated ? <AuthenticatedLayout /> : <Landing />;
297
+
298
+ }
299
+
300
+ ```
301
+
302
+ ##### Page layout pattern
303
+
304
+ - Minimal header: logo + "Back to home" link
305
+ - Amber disclaimer banner at the top: *"Este documento es una plantilla informativa y no constituye asesoramiento legal."*
306
+
307
+ - Clean `max-w-3xl mx-auto`prose layout,`text-sm leading-relaxed`
308
+ - Footer with cross-links: Privacy ↔ Terms ↔ Contact ↔ Home
309
+
310
+ - No sidebar, no app navigation — these are public documents
311
+
312
+ **After creating the pages, always update the footer links** in the landing page or marketing page. Footer links that point to `href="#"`are broken. Replace with`href="/privacidad"`and`href="/terminos"`, and change the "Contact" link to`mailto:` rather than another dead hash.
313
+
314
+ **Consistency check after any company name change:** If the user changes the legal entity name, search ALL files — not just the legal pages. Invoice templates, billing pages, and email footers often also contain the company name and will need updating too.
315
+
316
+ ### Disclaimer banner (always include on the rendered page)
317
+
318
+ Every rendered legal page should display a visible disclaimer. Do not only warn the user in chat — put it on the page itself:
319
+
320
+ ```tsx
321
+
322
+ <div className="bg-amber-50 dark:bg-amber-950/30 border border-amber-200 dark:border-amber-800 rounded-md px-4 py-3 mb-10 text-sm text-amber-800 dark:text-amber-300">
323
+
324
+ Este documento es una plantilla informativa y no constituye asesoramiento legal.
325
+
326
+ Consulte un abogado calificado para asuntos legales específicos.
327
+
328
+ </div>
329
+
330
+ ```
331
+
332
+ ## Red-Flag Language to Grep For
333
+
334
+ When reviewing, search the document text for these exact phrases — each is a known risk pattern:
335
+
336
+ | Phrase | Why it's dangerous | Suggested fix |
337
+
338
+ |--------|-------------------|---------------|
339
+
340
+ | `"any and all claims"` | Unlimited indemnity scope | "claims arising directly from [Party]'s breach of Section X" |
341
+
342
+ | `"indemnify, defend, and hold harmless"` | "Hold harmless" blocks your counterclaims even if they caused the loss | Strike "and hold harmless"; keep "indemnify and defend" |
343
+
344
+ | `"sole discretion"`/`"absolute discretion"` | One party can act arbitrarily (block settlements, reject deliverables) | "consent not to be unreasonably withheld, conditioned, or delayed" |
345
+
346
+ | `"including but not limited to"` in IP assignment | Open-ended IP grab beyond deliverables | Enumerate specific deliverables; add "excluding pre-existing IP" |
347
+
348
+ | No liability cap stated | Courts default to **unlimited** liability | "Aggregate liability capped at fees paid in the 12 months preceding the claim" |
349
+
350
+ | `"time is of the essence"` | Any delay = material breach | Delete, or limit to payment obligations only |
351
+
352
+ | Indemnity **carved out** of liability cap | Your cap doesn't protect you where exposure is highest | "Indemnification obligations are subject to the cap in Section X" |
353
+
354
+ | Auto-renewal with <30-day opt-out window | Easy to miss; locked in another term | 60–90 day notice window; email notice permitted |
355
+
356
+ | `"perpetual"`+`"irrevocable"` license | Can never be revoked even after breach | Term-limited; terminable on material breach |
357
+
358
+ **Indemnity forms (escalating risk):** *Limited*= you cover only your own negligence.*Intermediate*= everything except their sole negligence.*Broad* = you cover losses **even when caused entirely by them**. Flag intermediate and broad as Critical.
359
+
360
+ ## Playbook Checks (What Harvey/Spellbook Actually Run)
361
+
362
+ AI contract tools run a fixed checklist per document type. For a **Service Agreement** run these checks and grade each Pass/Flag/Missing:
363
+
364
+ 1. Is there a liability cap? Is it mutual? Is it tied to fees paid (1x, 2x)?
365
+ 2. Is indemnity mutual or one-way? Subject to the cap or carved out?
366
+
367
+ 3. Does IP assignment exclude contractor's pre-existing tools/libraries?
368
+ 4. Is there a cure period (typically 30 days) before termination for breach?
369
+
370
+ 5. Are "consequential damages" (lost profits, lost data) excluded? Mutually?
371
+ 6. Payment terms: Net 30 or better? Late fee specified?
372
+
373
+ 7. Can the client terminate for convenience? If so, is there a kill fee?
374
+ 8. Governing law + venue: neutral, or the other party's home court?
375
+
376
+ For a **Letter of Intent** run these checks:
377
+
378
+ 1. Are binding vs. non-binding sections clearly identified?
379
+ 2. Is there an exclusivity/no-shop clause? Is it binding?
380
+
381
+ 3. Is the purchase price clearly stated with payment structure?
382
+ 4. Is the due diligence period defined with access rights?
383
+
384
+ 5. Are conditions to closing enumerated?
385
+ 6. Is there a confidentiality obligation (binding)?
386
+
387
+ 7. Does the LOI have an expiration date?
388
+ 8. If there's an earnout, are the metrics and measurement methodology specified (or deferred to the definitive agreement)?
389
+
390
+ ## Review Output Format
391
+
392
+ ```text
393
+
394
+ # Contract Review: [Document Type]
395
+
396
+ **NOT LEGAL ADVICE — for informational purposes only. Consult an attorney before signing.**
397
+
398
+ ## Summary
399
+
400
+ [2–3 sentences: what this is, who it favors, biggest concern]
401
+
402
+ ## Critical — Do Not Sign Without Addressing
403
+
404
+ 1. **[Clause §X.Y]**: [quote the exact language]
405
+
406
+ - **Risk**: [plain English]
407
+ - **Suggested redline**: "[replacement text]"
408
+
409
+ ## Warnings — Negotiate If You Have Leverage
410
+
411
+ ## Notes — Standard But Be Aware
412
+
413
+ ## Missing Protections
414
+
415
+ [clauses that should be here but aren't — e.g., no liability cap, no cure period]
416
+
417
+ ## Overall: [Fair / Favors Counterparty / Consult Attorney Before Signing]
418
+
419
+ ```
420
+
421
+ ## Output: Always Produce PDF & DOCX
422
+
423
+ **Every drafted contract MUST be delivered as both a PDF and a DOCX file.** Clients need PDF for signing and DOCX for redlining — always provide both.
424
+
425
+ ### Architecture: React + Vite → Puppeteer PDF + python-docx DOCX
426
+
427
+ Build the contract as a React web artifact first (source of truth for layout), then export:
428
+
429
+ #### PDF via Puppeteer
430
+
431
+ Install `puppeteer-core`in the`scripts`package:`pnpm --filter @workspace/scripts add puppeteer-core`
432
+
433
+ ```typescript
434
+
435
+ // scripts/src/generate-contract.ts
436
+
437
+ import puppeteer from 'puppeteer-core';
438
+
439
+ // Find Chromium — pick the latest version from the list:
440
+
441
+ // ls /nix/store/*chromium*/bin/chromium | sort -V | tail -1
442
+
443
+ const CHROMIUM_PATH = "/nix/store/FIND_LATEST_PATH/bin/chromium";
444
+
445
+ // Use the artifact's actual URL, not localhost
446
+
447
+ const CONTRACT_URL = `https://${process.env.REPLIT_DEV_DOMAIN}/ARTIFACT-ROUTE`;
448
+
449
+ const browser = await puppeteer.launch({
450
+
451
+ executablePath: CHROMIUM_PATH,
452
+
453
+ headless: true,
454
+
455
+ args: ['--no-sandbox', '--disable-setuid-sandbox'],
456
+
457
+ });
458
+
459
+ const page = await browser.newPage();
460
+
461
+ await page.setViewport({ width: 816, height: 1056 }); // Match page container dimensions
462
+
463
+ await page.goto(CONTRACT_URL, { waitUntil: 'networkidle0' });
464
+
465
+ // IMPORTANT: Set document.title for correct PDF metadata title.
466
+
467
+ // Without this, the PDF viewer title bar shows the HTML <title> from index.html,
468
+
469
+ // which may be wrong when generating multiple documents from the same app.
470
+
471
+ await page.evaluate(() => { document.title = "Your Document Title Here"; });
472
+
473
+ await page.pdf({
474
+
475
+ path: 'contract.pdf',
476
+
477
+ format: 'Letter',
478
+
479
+ printBackground: true,
480
+
481
+ // IMPORTANT: Use zero margins — the page containers already include internal padding.
482
+
483
+ // Non-zero Puppeteer margins + fixed-height containers = blank overflow pages.
484
+
485
+ margin: { top: '0', bottom: '0', left: '0', right: '0' },
486
+
487
+ });
488
+
489
+ await browser.close();
490
+
491
+ ```
492
+
493
+ Add a script entry in `scripts/package.json`:`"generate-contract": "tsx ./src/generate-contract.ts"`
494
+
495
+ Run via: `pnpm --filter @workspace/scripts run generate-contract`
496
+
497
+ ##### DOCX via python-docx
498
+
499
+ Python may not be available via `pip`in the Replit environment. Use`nix-shell`to get`python-docx`:
500
+
501
+ ```bash
502
+
503
+ nix-shell -p python3Packages.python-docx --run "python3 scripts/src/generate-contract.py"
504
+
505
+ ```
506
+
507
+ ```python
508
+
509
+ # scripts/src/generate-contract.py
510
+
511
+ from docx import Document
512
+
513
+ from docx.shared import Pt, Inches, RGBColor
514
+
515
+ from docx.enum.text import WD_ALIGN_PARAGRAPH
516
+
517
+ doc = Document()
518
+
519
+ # Set default font
520
+
521
+ style = doc.styles['Normal']
522
+
523
+ font = style.font
524
+
525
+ font.name = 'Times New Roman'
526
+
527
+ font.size = Pt(12)
528
+
529
+ # Set margins
530
+
531
+ for section in doc.sections:
532
+
533
+ section.top_margin = Inches(1)
534
+
535
+ section.bottom_margin = Inches(1)
536
+
537
+ section.left_margin = Inches(1.25)
538
+
539
+ section.right_margin = Inches(1.25)
540
+
541
+ # Title
542
+
543
+ title = doc.add_paragraph()
544
+
545
+ title.alignment = WD_ALIGN_PARAGRAPH.CENTER
546
+
547
+ run = title.add_run('DOCUMENT TITLE')
548
+
549
+ run.bold = True
550
+
551
+ run.font.size = Pt(18)
552
+
553
+ # Preamble
554
+
555
+ doc.add_paragraph(
556
+
557
+ 'This Agreement is entered into as of [DATE] by and between:'
558
+
559
+ )
560
+
561
+ # Parties table
562
+
563
+ table = doc.add_table(rows=1, cols=2)
564
+
565
+ table.style = 'Table Grid'
566
+
567
+ # ... populate with party details
568
+
569
+ # Sections with numbered clauses
570
+
571
+ heading = doc.add_paragraph()
572
+
573
+ run = heading.add_run('1. Section Title')
574
+
575
+ run.bold = True
576
+
577
+ doc.add_paragraph('Section body text...')
578
+
579
+ # Signature block
580
+
581
+ sig_table = doc.add_table(rows=5, cols=2)
582
+
583
+ # Row 0: labels (BUYER / SELLER)
584
+
585
+ # Rows 1-4: Signature, Printed Name, Title, Date lines
586
+
587
+ doc.save('contract.docx')
588
+
589
+ ```
590
+
591
+ ### Styling for Legal Documents
592
+
593
+ - **Font**: Times New Roman 12pt (standard for legal docs) or similar serif
594
+ - **Margins**: 1" top/bottom, 1.25" left/right
595
+
596
+ - **Line spacing**: 1.5 or double-spaced (jurisdiction dependent)
597
+ - **Section numbering**: Use hierarchical numbering (1, 1.1, 1.1.1)
598
+
599
+ - **Page numbers**: Bottom center, "Page X of Y"
600
+ - **Headers**: Document title and date on each page
601
+
602
+ - **Signature blocks**: Two-column layout with lines for signature, printed name, title, date
603
+
604
+ ### Page-Aware Layout (Preventing Blank PDF Pages)
605
+
606
+ Use fixed-height page containers that map 1:1 to physical letter pages. This ensures content stays within page boundaries on screen and in PDF output.
607
+
608
+ #### Page container constants (letter size at 96 DPI)
609
+
610
+ - `PAGE_W = "816px"` (8.5 inches)
611
+ - `PAGE_H = "1056px"` (11 inches)
612
+
613
+ - Internal padding: `48px`top/bottom,`72px` left/right
614
+
615
+ ##### Page container component pattern
616
+
617
+ ```tsx
618
+
619
+ <div
620
+
621
+ className="page-container mx-auto bg-white shadow-lg print:shadow-none mb-8 print:mb-0 flex flex-col overflow-hidden"
622
+
623
+ style={{
624
+
625
+ width: PAGE_W,
626
+
627
+ height: PAGE_H,
628
+
629
+ pageBreakAfter: pageNum < TOTAL_PAGES ? "always" : undefined,
630
+
631
+ breakAfter: pageNum < TOTAL_PAGES ? "page" : undefined,
632
+
633
+ }}
634
+
635
+ >
636
+
637
+ {/* Page header with "Page X of Y" */}
638
+
639
+ {/* Content area with internal padding */}
640
+
641
+ </div>
642
+
643
+ ```
644
+
645
+ ###### Critical CSS for print/PDF — add to your global stylesheet
646
+
647
+ ```css
648
+
649
+ @page {
650
+
651
+ size: letter;
652
+
653
+ margin: 0;
654
+
655
+ }
656
+
657
+ @media print {
658
+
659
+ html, body {
660
+
661
+ margin: 0 !important;
662
+
663
+ padding: 0 !important;
664
+
665
+ background: white !important;
666
+
667
+ }
668
+
669
+ .page-container {
670
+
671
+ box-shadow: none !important;
672
+
673
+ margin: 0 !important;
674
+
675
+ }
676
+
677
+ }
678
+
679
+ ```
680
+
681
+ **Why blank pages happen:** If Puppeteer adds its own margins (e.g., `margin: { top: "0.5in" }`) on top of 1056px containers, each container exceeds the physical page height. The overflow creates a blank page before the next`breakAfter: "page"`fires. The fix: always use`margin: { top: "0", bottom: "0", left: "0", right: "0" }`in Puppeteer and`@page { margin: 0 }` in CSS, since the page containers already include their own internal padding.
682
+
683
+ **Do NOT override `height: auto` in print media** — removing the fixed height lets containers expand beyond one page, defeating the 1:1 page mapping. Keep the fixed height; the CSS page breaks handle pagination.
684
+
685
+ ###### Outer wrapper must neutralize screen-only styles for print
686
+
687
+ ```tsx
688
+
689
+ <div className="min-h-screen bg-gray-100 py-8 px-4 print:bg-white print:py-0 print:px-0 print:min-h-0">
690
+
691
+ ```
692
+
693
+ **Viewport must match page width** in Puppeteer: `page.setViewport({ width: 816, height: 1056 })` so content renders at the correct scale.
694
+
695
+ **Content balancing:** Use `breakInside: "avoid"` on sections and distribute content across pages so no page overflows. Check the rendered layout in the browser at 816px width before generating PDFs.
696
+
697
+ ### Contract Review Output
698
+
699
+ For **reviews** (not drafting), output the review analysis directly as text using the Review Output Format above. Do not generate PDF/DOCX for reviews — the review is commentary, not a document.
700
+
701
+ ### Multi-Document Routing
702
+
703
+ When generating multiple documents for the same transaction (e.g., LOI + NDA), use a single React artifact with separate routes for each document:
704
+
705
+ ```tsx
706
+
707
+ // App.tsx
708
+
709
+ <Route path="/" component={LOIDocument} />
710
+
711
+ <Route path="/nda" component={NDADocument} />
712
+
713
+ ```
714
+
715
+ Then generate separate PDF/DOCX files for each document by pointing Puppeteer at each route and running a separate python-docx script per document. Present all files together so the user receives the complete package.
716
+
717
+ **IMPORTANT:** Since all routes share the same `index.html`, the HTML`<title>`tag applies to every document. Each PDF generation script must call`page.evaluate(() => { document.title = "Correct Document Title"; })`before`page.pdf()` to set the correct PDF metadata title. Otherwise the PDF viewer's title bar will show the wrong document name.
718
+
719
+ ## Drafting Rules
720
+
721
+ 1. **Always include the disclaimer** at the top of every output — this is not legal advice
722
+ 2. Start from Bonterms/Common Paper for NDAs and service agreements; use the clause structures in "M&A / Transaction Documents" for LOIs and purchase agreements
723
+
724
+ 3. Quote exact problem text with section numbers, then give replacement language
725
+ 4. Flag jurisdiction dependencies — non-compete enforceability, anti-indemnity statutes, and consumer protection vary wildly by state/country
726
+
727
+ 5. When stakes are high (>$50K, equity, exclusivity, personal guarantees) → recommend attorney review explicitly
728
+ 6. For multi-document transactions, ensure consistent terminology and cross-references across all documents
729
+
730
+ ## Documents System
731
+
732
+ The platform includes a generic document management system for any type of legal document. Documents are owner-scoped and can optionally be linked to a DD room.
733
+
734
+ ### Schema (`documents` table)
735
+
736
+ | Column | Type | Description |
737
+
738
+ |--------|------|-------------|
739
+
740
+ | `id` | text (UUID) | Primary key |
741
+
742
+ | `ownerId` | text | Clerk user ID of the document owner |
743
+
744
+ | `title` | varchar(500) | Document title |
745
+
746
+ | `documentType` | varchar(100) | Flexible type field (e.g., "LOI", "NDA", "APA", "Employment Agreement", "Lease") |
747
+
748
+ | `content` | text | Full document content (Markdown/plain text) |
749
+
750
+ | `status` | varchar(50) | Document status, default "draft" |
751
+
752
+ | `ddRoomId` | text | Optional link to a DD room |
753
+
754
+ | `createdAt` | timestamp | Auto-set on creation |
755
+
756
+ | `updatedAt` | timestamp | Auto-set on creation and update |
757
+
758
+ ### Key Design Principles
759
+
760
+ - **Type-agnostic:** The `documentType` field is a free-text string, not an enum. Any document type can be stored — LOIs, NDAs, asset purchase agreements, operating agreements, board resolutions, etc.
761
+ - **Owner-scoped:** All document endpoints filter by the authenticated user's `ownerId`. Users can only see, edit, and delete their own documents.
762
+
763
+ - **Room linkable:** Documents can optionally reference a `ddRoomId` to associate them with a due diligence room (e.g., the LOI for an acquisition).
764
+
765
+ ### API Endpoints
766
+
767
+ | Method | Path | Description |
768
+
769
+ |--------|------|-------------|
770
+
771
+ | GET | `/documents` | List all documents owned by the current user |
772
+
773
+ | GET | `/documents/:documentId` | Get a single document (owner-only) |
774
+
775
+ | DELETE | `/documents/:documentId` | Delete a document (owner-only) |
776
+
777
+ ### Frontend
778
+
779
+ - **Dashboard:** Document cards appear below the DD rooms section. Each card shows title, type badge, status, and creation date. Hovering reveals a delete button with inline confirm/cancel.
780
+ - **Document view:** `/documents/:documentId` renders the full document content.
781
+
782
+ ## Due Diligence Room Platform
783
+
784
+ The legal platform includes an interactive Due Diligence (DD) room for M&A transactions. This is a full-stack feature with its own database schema, API endpoints, and React UI.
785
+
786
+ ### Architecture
787
+
788
+ - **Frontend:** `artifacts/legal-platform/src/pages/dd-room.tsx` — React + shadcn/ui
789
+ - **API:** `artifacts/api-server/src/routes/dd-*.ts` — Express REST endpoints
790
+
791
+ - **DB:** PostgreSQL via Drizzle ORM — tables in `lib/db/src/schema/dd-*.ts`
792
+ - **Auth:** Clerk; middleware at `artifacts/api-server/src/middlewares/requireAuth.ts`
793
+
794
+ - **Room Auth:** `artifacts/api-server/src/middlewares/requireRoomAccess.ts` — room-level authorization
795
+ - **File Storage:** Replit Object Storage via `@google-cloud/storage`
796
+
797
+ - **OpenAPI:** `lib/api-spec/openapi.yaml`with codegen to`@workspace/api-client-react`and`@workspace/api-zod`
798
+
799
+ ### Database Tables
800
+
801
+ | Table | Purpose |
802
+
803
+ |-------|---------|
804
+
805
+ | `dd_rooms` | Room metadata: name, buyer/seller, purchase price, deal structure, ownerId |
806
+
807
+ | `dd_categories` | Checklist categories (8 auto-created from template, plus custom) |
808
+
809
+ | `dd_items` | Individual checklist items with status tracking |
810
+
811
+ | `dd_files` | Uploaded documents linked to items (object storage paths) |
812
+
813
+ | `dd_comments` | Item-level discussion threads |
814
+
815
+ | `dd_activity` | Audit log of all actions |
816
+
817
+ | `dd_participants` | Room access control (email + role: viewer/contributor/admin) |
818
+
819
+ ### Standard Checklist Template
820
+
821
+ When a room is created, 8 categories with 57 items are auto-populated from `DD_TEMPLATE`in`dd-rooms.ts`:
822
+
823
+ 1. **Corporate & Organizational** (7 items) — Formation docs, bylaws, minutes, cap table, good standing, org chart, jurisdictions
824
+ 2. **Financial** (8 items) — Audited/interim statements, tax returns, debt schedule, AR/AP aging, revenue breakdown, projections, bank accounts
825
+
826
+ 3. **Contracts & Agreements** (7 items) — Customer/vendor/partnership/distribution/franchise/government contracts, change-of-control provisions
827
+ 4. **Intellectual Property** (8 items) — Patents, trademarks, copyrights, domains, software licenses, IP assignments, open-source audit, trade secrets
828
+
829
+ 5. **Employees & Benefits** (9 items) — Census, employment agreements, contractors, handbook, non-competes, benefits, stock options, workers' comp, OSHA
830
+ 6. **Litigation & Legal** (6 items) — Pending litigation, settlements, consent decrees, investigations, insurance claims, regulator correspondence
831
+
832
+ 7. **Insurance** (4 items) — All policies, claims history, broker info, certificates
833
+ 8. **Technology & Data** (8 items) — Architecture docs, data flows, SOC 2, breach history, BCP/DR, SLA reports, vendor assessments, privacy policy
834
+
835
+ Custom categories and items can be added per-room via the API.
836
+
837
+ ### Item Status Workflow
838
+
839
+ Items track progress through these statuses:
840
+
841
+ ```text
842
+
843
+ not_started → uploaded → under_review → approved
844
+
845
+ → flagged (with note)
846
+
847
+ ```
848
+
849
+ #### Automatic transitions
850
+
851
+ - Uploading a file to a `not_started`item changes its status to`uploaded`
852
+ - Deleting all files from an `uploaded`item reverts its status to`not_started`
853
+
854
+ - All other transitions (under_review, approved, flagged) are manual via the UI
855
+
856
+ ### Access Control
857
+
858
+ Room-level authorization is enforced via `requireRoomAccess`middleware (`artifacts/api-server/src/middlewares/requireRoomAccess.ts`) and its variants. Each variant looks up the resource chain to find the parent room, then checks if the user is the room owner or an active participant.
859
+
860
+ | Middleware | Lookup Chain | Used On |
861
+
862
+ |-----------|-------------|---------|
863
+
864
+ | `requireRoomAccess(roomIdParam)` | Direct roomId | Room detail, update, stats, activity, participants, categories |
865
+
866
+ | `requireCategoryRoomAccess(categoryIdParam)` | category → room | Delete category, create items |
867
+
868
+ | `requireItemRoomAccess(itemIdParam)` | item → category → room | Update/delete items, list/create files, list/create comments |
869
+
870
+ | `requireFileRoomAccess(fileIdParam)` | file → item → category → room | Delete files |
871
+
872
+ | `requireCommentRoomAccess(commentIdParam)` | comment → item → category → room | Delete comments |
873
+
874
+ #### Privilege levels
875
+
876
+ - **Room owner:** Full access to everything including participant management
877
+ - **Admin participant:** Can manage participants (add/remove) and all room content
878
+
879
+ - **Contributor/Viewer participant:** Can access room content but cannot manage participants
880
+ - **Non-participant:** Receives 403 on all room-scoped endpoints
881
+
882
+ The `GET /dd-rooms` listing only returns rooms where the user is owner or participant (no cross-tenant leakage).
883
+
884
+ Private file downloads (`GET /storage/objects/*`) also enforce room access by looking up the file's parent room through the`dd_files → dd_items → dd_categories` chain.
885
+
886
+ ### Activity Feed Events
887
+
888
+ All significant actions are logged to `dd_activity` with the following event types:
889
+
890
+ | Action | Trigger |
891
+
892
+ |--------|---------|
893
+
894
+ | `file_uploaded` | File registered on an item |
895
+
896
+ | `file_deleted` | File removed from an item |
897
+
898
+ | `comment_deleted` | Comment removed from an item |
899
+
900
+ | `participant_removed` | Participant removed from room |
901
+
902
+ | `status_changed` | Item status updated |
903
+
904
+ Each activity entry records: `roomId`,`userId`,`userName`,`itemId`(optional),`action`,`details`,`createdAt`.
905
+
906
+ ### File Upload Flow
907
+
908
+ 1. Frontend requests presigned upload URL via `POST /api/storage/uploads/request-url` (sends file name, size, contentType as JSON)
909
+ 2. Frontend uploads file directly to object storage using the presigned URL (PUT to GCS)
910
+
911
+ 3. Frontend registers the file via `POST /api/dd-items/:itemId/files` with the returned storage URL
912
+ 4. Backend normalizes the GCS URL to an object entity path (`/objects/<entityId>`) and validates:
913
+
914
+ - URL must normalize to `/objects/` prefix format
915
+ - URL must not already be registered (prevents duplicate registration / IDOR)
916
+
917
+ 1. File downloads served via `GET /api/storage/objects/*path` with room-level authorization
918
+
919
+ ### API Endpoints (2)
920
+
921
+ | Method | Path | Auth | Description |
922
+
923
+ |--------|------|------|-------------|
924
+
925
+ | GET | `/dd-rooms` | requireAuth | List rooms (filtered by owner/participant) |
926
+
927
+ | POST | `/dd-rooms` | requireAuth | Create a new DD room (auto-populates 8 categories) |
928
+
929
+ | GET | `/dd-rooms/:roomId` | requireAuth + roomAccess | Get room with categories and items |
930
+
931
+ | PUT | `/dd-rooms/:roomId` | requireAuth + roomAccess | Update room metadata |
932
+
933
+ | POST | `/dd-rooms/:roomId/categories` | requireAuth + roomAccess | Add a custom category |
934
+
935
+ | DELETE | `/dd-categories/:categoryId` | requireAuth + categoryRoomAccess | Delete a category and its items |
936
+
937
+ | POST | `/dd-categories/:categoryId/items` | requireAuth + categoryRoomAccess | Add an item to a category |
938
+
939
+ | PUT | `/dd-items/:itemId` | requireAuth + itemRoomAccess | Update item (name, status, notes) |
940
+
941
+ | DELETE | `/dd-items/:itemId` | requireAuth + itemRoomAccess | Delete an item |
942
+
943
+ | GET | `/dd-items/:itemId/files` | requireAuth + itemRoomAccess | List files for an item |
944
+
945
+ | POST | `/dd-items/:itemId/files` | requireAuth + itemRoomAccess | Register an uploaded file |
946
+
947
+ | DELETE | `/dd-files/:fileId` | requireAuth + fileRoomAccess | Delete a file |
948
+
949
+ | GET | `/dd-items/:itemId/comments` | requireAuth + itemRoomAccess | List comments for an item |
950
+
951
+ | POST | `/dd-items/:itemId/comments` | requireAuth + itemRoomAccess | Add a comment |
952
+
953
+ | DELETE | `/dd-comments/:commentId` | requireAuth + commentRoomAccess | Delete a comment |
954
+
955
+ | GET | `/dd-rooms/:roomId/stats` | requireAuth + roomAccess | Get completion statistics |
956
+
957
+ | GET | `/dd-rooms/:roomId/activity` | requireAuth + roomAccess | Get activity feed |
958
+
959
+ | GET | `/dd-rooms/:roomId/participants` | requireAuth + roomAccess | List participants |
960
+
961
+ | POST | `/dd-rooms/:roomId/participants` | requireAuth + roomAccess (owner/admin) | Add a participant |
962
+
963
+ | DELETE | `/dd-participants/:participantId` | requireAuth + roomAccess (owner/admin) | Remove a participant |
964
+
965
+ | POST | `/storage/uploads/request-url` | requireAuth | Get presigned upload URL |
966
+
967
+ | GET | `/storage/objects/*` | requireAuth + fileRoomAccess | Download a file |
968
+
969
+ ## Limitations
970
+
971
+ - NOT a substitute for legal advice from a licensed attorney
972
+ - Cannot account for jurisdiction-specific laws
973
+
974
+ - Cannot verify legal enforceability of any clause
975
+ - Cannot handle litigation, regulatory filings, or court documents
976
+
977
+ - Templates are starting points, not final legal documents