insforge 0.3.2 → 1.2.10

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 (507) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.cursor/rules/cursor-rules.mdc +94 -0
  3. package/.dockerignore +3 -0
  4. package/.env.example +33 -4
  5. package/.github/ISSUE_TEMPLATE/bug_report.yml +13 -60
  6. package/.github/ISSUE_TEMPLATE/config.yml +2 -2
  7. package/.github/ISSUE_TEMPLATE/feature_request.yml +10 -63
  8. package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
  9. package/.github/workflows/build-image.yml +2 -1
  10. package/.github/workflows/e2e.yml +63 -0
  11. package/CHANGELOG.md +41 -0
  12. package/CLAUDE_PLUGIN.md +104 -0
  13. package/CODE_OF_CONDUCT.md +128 -0
  14. package/CONTRIBUTING.md +1 -1
  15. package/Dockerfile +4 -1
  16. package/README.md +66 -18
  17. package/assets/mcpInstallv2.png +0 -0
  18. package/assets/sampleResponse.png +0 -0
  19. package/auth/index.html +13 -0
  20. package/auth/package.json +28 -0
  21. package/auth/public/favicon.ico +0 -0
  22. package/auth/src/App.tsx +33 -0
  23. package/auth/src/components/ErrorCard.tsx +37 -0
  24. package/auth/src/components/Layout.tsx +13 -0
  25. package/auth/src/index.css +19 -0
  26. package/auth/src/lib/broadcastService.ts +115 -0
  27. package/auth/src/lib/utils.ts +11 -0
  28. package/auth/src/main.tsx +22 -0
  29. package/auth/src/pages/ForgotPasswordPage.tsx +11 -0
  30. package/auth/src/pages/ResetPasswordPage.tsx +11 -0
  31. package/auth/src/pages/SignInPage.tsx +57 -0
  32. package/auth/src/pages/SignUpPage.tsx +57 -0
  33. package/auth/src/pages/VerifyEmailPage.tsx +20 -0
  34. package/auth/src/vite-env.d.ts +10 -0
  35. package/auth/tsconfig.json +32 -0
  36. package/auth/tsconfig.node.json +11 -0
  37. package/auth/vite.config.ts +25 -0
  38. package/backend/package.json +9 -9
  39. package/backend/src/api/{middleware → middlewares}/auth.ts +8 -9
  40. package/backend/src/api/middlewares/rate-limiters.ts +127 -0
  41. package/backend/src/api/routes/{ai.ts → ai/index.routes.ts} +20 -24
  42. package/backend/src/api/routes/auth/index.routes.ts +570 -0
  43. package/backend/src/api/routes/auth/oauth.routes.ts +448 -0
  44. package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +107 -65
  45. package/backend/src/api/routes/database/index.routes.ts +13 -0
  46. package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +22 -8
  47. package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +20 -23
  48. package/backend/src/api/routes/docs/index.routes.ts +76 -0
  49. package/backend/src/api/routes/functions/index.routes.ts +188 -0
  50. package/backend/src/api/routes/{logs.ts → logs/index.routes.ts} +25 -30
  51. package/backend/src/api/routes/{metadata.ts → metadata/index.routes.ts} +21 -31
  52. package/backend/src/api/routes/{secrets.ts → secrets/index.routes.ts} +27 -22
  53. package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +34 -53
  54. package/backend/src/api/routes/usage/index.routes.ts +89 -0
  55. package/backend/src/infra/config/app.config.ts +51 -0
  56. package/backend/src/{core/database/manager.ts → infra/database/database.manager.ts} +76 -85
  57. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -0
  58. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +8 -0
  59. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +60 -0
  60. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -0
  61. package/backend/src/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
  62. package/backend/src/infra/security/token.manager.ts +125 -0
  63. package/backend/src/{core/socket/socket.ts → infra/socket/socket.manager.ts} +15 -15
  64. package/backend/src/providers/ai/openrouter.provider.ts +377 -0
  65. package/backend/src/providers/email/base.provider.ts +41 -0
  66. package/backend/src/providers/email/cloud.provider.ts +187 -0
  67. package/backend/src/{core/logs/providers → providers/logs}/base.provider.ts +11 -11
  68. package/backend/src/{core/logs/providers → providers/logs}/cloudwatch.provider.ts +61 -38
  69. package/backend/src/providers/logs/local.provider.ts +185 -0
  70. package/backend/src/providers/oauth/base.provider.ts +29 -0
  71. package/backend/src/providers/oauth/discord.provider.ts +195 -0
  72. package/backend/src/providers/oauth/facebook.provider.ts +194 -0
  73. package/backend/src/providers/oauth/github.provider.ts +208 -0
  74. package/backend/src/providers/oauth/google.provider.ts +249 -0
  75. package/backend/src/providers/oauth/index.ts +7 -0
  76. package/backend/src/providers/oauth/linkedin.provider.ts +240 -0
  77. package/backend/src/providers/oauth/microsoft.provider.ts +169 -0
  78. package/backend/src/providers/oauth/x.provider.ts +202 -0
  79. package/backend/src/providers/storage/base.provider.ts +29 -0
  80. package/backend/src/providers/storage/local.provider.ts +103 -0
  81. package/backend/src/providers/storage/s3.provider.ts +313 -0
  82. package/backend/src/server.ts +70 -74
  83. package/backend/src/{core/ai/config.ts → services/ai/ai-config.service.ts} +19 -24
  84. package/backend/src/services/ai/ai-model.service.ts +60 -0
  85. package/backend/src/{core/ai/usage.ts → services/ai/ai-usage.service.ts} +28 -35
  86. package/backend/src/{core/ai/chat.ts → services/ai/chat-completion.service.ts} +37 -24
  87. package/backend/src/services/ai/helpers.ts +64 -0
  88. package/backend/src/{core/ai/image.ts → services/ai/image-generation.service.ts} +17 -19
  89. package/backend/src/services/ai/index.ts +13 -0
  90. package/backend/src/services/auth/auth-config.service.ts +250 -0
  91. package/backend/src/services/auth/auth-otp.service.ts +424 -0
  92. package/backend/src/services/auth/auth.service.ts +1136 -0
  93. package/backend/src/services/auth/index.ts +4 -0
  94. package/backend/src/{core/auth/oauth.ts → services/auth/oauth-config.service.ts} +106 -52
  95. package/backend/src/{core/database/advance.ts → services/database/database-advance.service.ts} +97 -131
  96. package/backend/src/services/database/database-table.service.ts +811 -0
  97. package/backend/src/services/email/email.service.ts +75 -0
  98. package/backend/src/{core/functions/functions.ts → services/functions/function.service.ts} +95 -88
  99. package/backend/src/{core/logs/audit.ts → services/logs/audit.service.ts} +92 -75
  100. package/backend/src/services/logs/log.service.ts +73 -0
  101. package/backend/src/{core/secrets/secrets.ts → services/secrets/secret.service.ts} +48 -66
  102. package/backend/src/services/storage/storage.service.ts +617 -0
  103. package/backend/src/services/usage/usage.service.ts +149 -0
  104. package/backend/src/types/auth.ts +66 -2
  105. package/backend/src/types/email.ts +8 -0
  106. package/backend/src/types/error-constants.ts +4 -0
  107. package/backend/src/types/logs.ts +0 -29
  108. package/backend/src/{core/socket/types.ts → types/socket.ts} +5 -6
  109. package/backend/src/utils/environment.ts +9 -3
  110. package/backend/src/utils/logger.ts +20 -2
  111. package/backend/src/utils/seed.ts +150 -57
  112. package/backend/src/utils/sql-parser.ts +1 -1
  113. package/backend/src/utils/utils.ts +114 -0
  114. package/backend/src/utils/validations.ts +40 -4
  115. package/backend/tests/local/test-ai-config.sh +129 -0
  116. package/backend/tests/local/test-ai-usage.sh +80 -0
  117. package/backend/tests/local/test-auth-router.sh +1 -1
  118. package/backend/tests/local/test-e2e.sh +1 -1
  119. package/backend/tests/local/test-functions.sh +123 -0
  120. package/backend/tests/local/test-logs.sh +132 -0
  121. package/backend/tests/local/test-public-bucket.sh +3 -3
  122. package/backend/tests/local/test-secrets.sh +14 -12
  123. package/backend/tests/local/test-traditional-rest.sh +2 -2
  124. package/backend/tests/manual/test-rawsql-modes.sh +244 -0
  125. package/backend/tests/test-config.sh +37 -1
  126. package/backend/tests/unit/cloud-token.test.ts +48 -0
  127. package/backend/tests/unit/constant.test.ts +8 -0
  128. package/backend/tests/unit/email.test.ts +372 -0
  129. package/backend/tests/unit/environment.test.ts +59 -0
  130. package/backend/tests/unit/helpers.test.ts +63 -0
  131. package/backend/tests/unit/logger.test.ts +22 -0
  132. package/backend/tests/unit/rate-limit.test.ts +154 -0
  133. package/backend/tests/unit/response.test.ts +58 -0
  134. package/backend/tests/unit/sql-parser.test.ts +74 -0
  135. package/backend/tests/unit/uuid.test.ts +21 -0
  136. package/backend/tests/unit/validations.test.ts +80 -0
  137. package/backend/tsconfig.json +1 -1
  138. package/backend/vitest.config.ts +11 -0
  139. package/claude-plugin/.claude-plugin/plugin.json +24 -0
  140. package/claude-plugin/README.md +133 -0
  141. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -0
  142. package/docker-compose.prod.yml +60 -4
  143. package/docker-compose.yml +65 -4
  144. package/docker-init/db/db-init.sql +6 -34
  145. package/docker-init/logs/vector.yml +236 -0
  146. package/docs/README.md +44 -0
  147. package/docs/changelog.mdx +67 -0
  148. package/docs/core-concepts/ai/architecture.mdx +373 -0
  149. package/docs/core-concepts/ai/sdk.mdx +213 -0
  150. package/docs/core-concepts/authentication/architecture.mdx +278 -0
  151. package/docs/core-concepts/authentication/sdk.mdx +414 -0
  152. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -0
  153. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -0
  154. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -0
  155. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -0
  156. package/docs/core-concepts/database/architecture.mdx +256 -0
  157. package/docs/core-concepts/database/sdk.mdx +382 -0
  158. package/docs/core-concepts/functions/architecture.mdx +105 -0
  159. package/docs/core-concepts/functions/sdk.mdx +184 -0
  160. package/docs/core-concepts/storage/architecture.mdx +243 -0
  161. package/docs/core-concepts/storage/sdk.mdx +253 -0
  162. package/docs/deployment/README.md +94 -0
  163. package/docs/deployment/deploy-to-aws-ec2.md +565 -0
  164. package/docs/deployment/deploy-to-azure-virtual-machines.md +313 -0
  165. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -0
  166. package/docs/deployment/deploy-to-render.md +441 -0
  167. package/docs/docs.json +210 -0
  168. package/docs/examples/framework-guides/nextjs.mdx +131 -0
  169. package/docs/examples/framework-guides/nuxt.mdx +165 -0
  170. package/docs/examples/framework-guides/react.mdx +165 -0
  171. package/docs/examples/framework-guides/svelte.mdx +153 -0
  172. package/docs/examples/framework-guides/vue.mdx +159 -0
  173. package/docs/examples/overview.mdx +67 -0
  174. package/docs/favicon.svg +19 -0
  175. package/docs/images/changelog/nov-2025/auth-components.webp +0 -0
  176. package/docs/images/changelog/nov-2025/database-metadata.webp +0 -0
  177. package/docs/images/changelog/nov-2025/quickstart-prompts.webp +0 -0
  178. package/docs/images/changelog/nov-2025/sql-editor.webp +0 -0
  179. package/docs/images/changelog/nov-2025/usage-page.webp +0 -0
  180. package/docs/images/changelog/october-2025/csv-upload.webp +0 -0
  181. package/docs/images/changelog/october-2025/logs-feature.webp +0 -0
  182. package/docs/images/changelog/october-2025/oauth-providers.webp +0 -0
  183. package/docs/images/checks-passed.png +0 -0
  184. package/docs/images/dashboard-connect-expanded.png +0 -0
  185. package/docs/images/dashboard-connect.png +0 -0
  186. package/docs/images/hero-dark.png +0 -0
  187. package/docs/images/hero-light.png +0 -0
  188. package/docs/images/icons/ai.svg +4 -0
  189. package/docs/images/icons/auth.svg +1 -0
  190. package/docs/images/icons/database.svg +1 -0
  191. package/docs/images/icons/function.svg +1 -0
  192. package/docs/images/icons/storage.svg +1 -0
  193. package/docs/images/logos/nextjs.svg +4 -0
  194. package/docs/images/logos/nuxt.svg +4 -0
  195. package/docs/images/logos/react.svg +5 -0
  196. package/docs/images/logos/svelte.svg +4 -0
  197. package/docs/images/logos/vue.svg +5 -0
  198. package/docs/images/mcp-install.png +0 -0
  199. package/docs/images/onboarding-mcp.png +0 -0
  200. package/docs/insforge-instructions-sdk.md +55 -374
  201. package/docs/introduction.mdx +45 -0
  202. package/docs/logo/dark.svg +22 -0
  203. package/docs/logo/light.svg +20 -0
  204. package/docs/partnership.mdx +647 -0
  205. package/docs/quickstart.mdx +83 -0
  206. package/docs/showcase/2048-arena.png +0 -0
  207. package/docs/showcase/framegen-cloud.png +0 -0
  208. package/docs/showcase/line-connect-race.png +0 -0
  209. package/docs/showcase/moment-vibe.png +0 -0
  210. package/docs/showcase/national-flags.png +0 -0
  211. package/docs/showcase/pokemon-vibe.png +0 -0
  212. package/docs/showcase/pure-browse-buy.png +0 -0
  213. package/docs/showcase.mdx +52 -0
  214. package/docs/snippets/sdk-installation.mdx +22 -0
  215. package/docs/snippets/service-icons.mdx +27 -0
  216. package/eslint.config.js +10 -3
  217. package/frontend/package.json +10 -4
  218. package/frontend/src/App.tsx +13 -82
  219. package/frontend/src/assets/icons/connected.svg +3 -0
  220. package/frontend/src/assets/icons/loader.svg +9 -0
  221. package/frontend/src/assets/logos/apple.svg +4 -0
  222. package/frontend/src/assets/logos/discord.svg +1 -1
  223. package/frontend/src/assets/logos/facebook.svg +3 -0
  224. package/frontend/src/assets/logos/instagram.svg +2 -0
  225. package/frontend/src/assets/logos/linkedin.svg +3 -0
  226. package/frontend/src/assets/logos/microsoft.svg +1 -0
  227. package/frontend/src/assets/logos/spotify.svg +17 -0
  228. package/frontend/src/assets/logos/tiktok.svg +6 -0
  229. package/frontend/src/assets/logos/x.svg +3 -0
  230. package/frontend/src/components/Checkbox.tsx +27 -29
  231. package/frontend/src/components/CodeBlock.tsx +55 -2
  232. package/frontend/src/components/CodeEditor.tsx +92 -0
  233. package/frontend/src/components/ConfirmDialog.tsx +1 -1
  234. package/frontend/src/components/ConnectCTA.tsx +38 -0
  235. package/frontend/src/components/CopyButton.tsx +52 -15
  236. package/frontend/src/components/ErrorState.tsx +1 -2
  237. package/frontend/src/components/FeatureSidebar.tsx +6 -6
  238. package/frontend/src/components/FeatureSidebarItem.tsx +2 -2
  239. package/frontend/src/components/JsonHighlight.tsx +21 -9
  240. package/frontend/src/components/ProjectInfoModal.tsx +128 -0
  241. package/frontend/src/components/PromptDialog.tsx +1 -4
  242. package/frontend/src/components/SearchInput.tsx +1 -2
  243. package/frontend/src/components/Stepper.tsx +53 -0
  244. package/frontend/src/components/ThemeToggle.tsx +3 -3
  245. package/frontend/src/components/datagrid/DataGrid.tsx +25 -32
  246. package/frontend/src/components/datagrid/cell-editors/DateCellEditor.tsx +1 -2
  247. package/frontend/src/components/datagrid/cell-editors/JsonCellEditor.tsx +2 -4
  248. package/frontend/src/components/datagrid/index.ts +23 -0
  249. package/frontend/src/components/index.ts +23 -30
  250. package/frontend/src/components/layout/AppHeader.tsx +133 -92
  251. package/frontend/src/components/layout/AppSidebar.tsx +80 -170
  252. package/frontend/src/components/layout/Layout.tsx +12 -23
  253. package/frontend/src/components/layout/PrimaryMenu.tsx +187 -0
  254. package/frontend/src/components/layout/SecondaryMenu.tsx +70 -0
  255. package/frontend/src/components/layout/index.ts +5 -0
  256. package/frontend/src/components/radix/Tooltip.tsx +24 -13
  257. package/frontend/src/components/radix/index.ts +22 -0
  258. package/frontend/src/features/ai/components/AIConfigCard.tsx +129 -83
  259. package/frontend/src/features/ai/components/AIEmptyState.tsx +12 -7
  260. package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +101 -0
  261. package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -0
  262. package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -0
  263. package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -0
  264. package/frontend/src/features/ai/components/index.ts +6 -0
  265. package/frontend/src/features/ai/helpers.ts +57 -71
  266. package/frontend/src/features/ai/hooks/useAIConfigs.ts +39 -113
  267. package/frontend/src/features/ai/hooks/useAIUsage.ts +0 -2
  268. package/frontend/src/features/ai/page/AIPage.tsx +67 -79
  269. package/frontend/src/features/ai/services/ai.service.ts +5 -5
  270. package/frontend/src/features/auth/components/AuthPreview.tsx +96 -0
  271. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +53 -30
  272. package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
  273. package/frontend/src/features/auth/components/UsersDataGrid.tsx +44 -14
  274. package/frontend/src/features/auth/components/index.ts +5 -0
  275. package/frontend/src/features/auth/helpers.tsx +200 -0
  276. package/frontend/src/features/auth/hooks/useAnonToken.ts +30 -0
  277. package/frontend/src/features/auth/hooks/useAuthConfig.ts +48 -0
  278. package/frontend/src/features/auth/hooks/useOAuthConfig.ts +14 -10
  279. package/frontend/src/features/auth/hooks/useUsers.ts +43 -5
  280. package/frontend/src/features/auth/index.ts +3 -2
  281. package/frontend/src/features/auth/page/AuthMethodsPage.tsx +275 -0
  282. package/frontend/src/features/auth/page/ConfigurationPage.tsx +395 -0
  283. package/frontend/src/features/auth/page/UsersPage.tsx +285 -0
  284. package/frontend/src/features/auth/services/anonToken.service.ts +11 -0
  285. package/frontend/src/features/auth/services/config.service.ts +19 -0
  286. package/frontend/src/features/auth/services/{oauth.service.ts → oauth-config.service.ts} +4 -4
  287. package/frontend/src/features/auth/services/{auth.service.ts → user.service.ts} +7 -53
  288. package/frontend/src/features/dashboard/components/ConnectionSuccessBanner.tsx +35 -0
  289. package/frontend/src/features/dashboard/components/PromptCard.tsx +21 -0
  290. package/frontend/src/features/dashboard/components/PromptDialog.tsx +103 -0
  291. package/frontend/src/features/dashboard/components/StatsCard.tsx +50 -0
  292. package/frontend/src/features/dashboard/components/index.ts +4 -0
  293. package/frontend/src/features/dashboard/page/DashboardPage.tsx +187 -169
  294. package/frontend/src/features/dashboard/prompts/ai-chatbot.ts +13 -0
  295. package/frontend/src/features/dashboard/prompts/crm-system.ts +13 -0
  296. package/frontend/src/features/dashboard/prompts/ecommerce-platform.ts +12 -0
  297. package/frontend/src/features/dashboard/prompts/index.ts +31 -0
  298. package/frontend/src/features/dashboard/prompts/instagram-clone.ts +11 -0
  299. package/frontend/src/features/dashboard/prompts/notion-clone.ts +14 -0
  300. package/frontend/src/features/dashboard/prompts/reddit-clone.ts +12 -0
  301. package/frontend/src/features/database/components/DatabaseDataGrid.tsx +48 -17
  302. package/frontend/src/features/database/components/ForeignKeyCell.tsx +15 -34
  303. package/frontend/src/features/database/components/ForeignKeyPopover.tsx +19 -20
  304. package/frontend/src/features/database/components/LinkRecordModal.tsx +120 -125
  305. package/frontend/src/features/database/components/RecordFormDialog.tsx +22 -33
  306. package/frontend/src/features/database/components/RecordFormField.tsx +45 -47
  307. package/frontend/src/features/database/components/TableEmptyState.tsx +6 -5
  308. package/frontend/src/features/database/components/TableForm.tsx +28 -15
  309. package/frontend/src/features/database/components/TableFormColumn.tsx +2 -3
  310. package/frontend/src/features/database/components/TableSidebar.tsx +1 -1
  311. package/frontend/src/features/database/components/TablesEmptyState.tsx +48 -0
  312. package/frontend/src/features/database/components/TemplateCard.tsx +37 -0
  313. package/frontend/src/features/database/components/TemplatePreview.tsx +92 -0
  314. package/frontend/src/features/database/components/index.ts +19 -0
  315. package/frontend/src/features/database/constants.ts +28 -2
  316. package/frontend/src/features/database/contexts/SQLEditorContext.tsx +188 -0
  317. package/frontend/src/features/database/helpers.ts +2 -2
  318. package/frontend/src/features/database/hooks/useCSVImport.ts +29 -0
  319. package/frontend/src/features/database/hooks/useFullMetadata.ts +18 -0
  320. package/frontend/src/features/database/hooks/useRawSQL.ts +55 -0
  321. package/frontend/src/features/database/hooks/useRecords.ts +139 -0
  322. package/frontend/src/features/database/hooks/useTables.ts +131 -0
  323. package/frontend/src/features/database/index.ts +6 -1
  324. package/frontend/src/features/database/page/FunctionsPage.tsx +211 -0
  325. package/frontend/src/features/database/page/IndexesPage.tsx +240 -0
  326. package/frontend/src/features/database/page/PoliciesPage.tsx +248 -0
  327. package/frontend/src/features/database/page/SQLEditorPage.tsx +382 -0
  328. package/frontend/src/features/database/page/{DatabasePage.tsx → TablesPage.tsx} +186 -185
  329. package/frontend/src/features/database/page/TemplatesPage.tsx +39 -0
  330. package/frontend/src/features/database/page/TriggersPage.tsx +242 -0
  331. package/frontend/src/features/database/services/advance.service.ts +66 -0
  332. package/frontend/src/features/database/services/{database.service.ts → record.service.ts} +67 -64
  333. package/frontend/src/features/database/services/table.service.ts +64 -0
  334. package/frontend/src/features/database/templates/ai-chatbot.ts +402 -0
  335. package/frontend/src/features/database/templates/crm-system.ts +528 -0
  336. package/frontend/src/features/database/templates/ecommerce-platform.ts +553 -0
  337. package/frontend/src/features/database/templates/index.ts +34 -0
  338. package/frontend/src/features/database/templates/instagram-clone.ts +222 -0
  339. package/frontend/src/features/database/templates/notion-clone.ts +483 -0
  340. package/frontend/src/features/database/templates/reddit-clone.ts +526 -0
  341. package/frontend/src/features/functions/components/FunctionRow.tsx +2 -1
  342. package/frontend/src/features/functions/components/FunctionsSidebar.tsx +1 -1
  343. package/frontend/src/features/functions/components/SecretRow.tsx +1 -1
  344. package/frontend/src/features/functions/components/index.ts +5 -0
  345. package/frontend/src/features/functions/hooks/useFunctions.ts +4 -4
  346. package/frontend/src/features/{secrets → functions}/hooks/useSecrets.ts +5 -5
  347. package/frontend/src/features/functions/page/FunctionsPage.tsx +160 -17
  348. package/frontend/src/features/functions/{components/SecretsContent.tsx → page/SecretsPage.tsx} +8 -12
  349. package/frontend/src/features/functions/services/{functions.service.ts → function.service.ts} +2 -2
  350. package/frontend/src/features/{secrets/services/secrets.service.ts → functions/services/secret.service.ts} +2 -2
  351. package/frontend/src/features/login/hooks/usePartnerOrigin.ts +27 -0
  352. package/frontend/src/features/login/page/CloudLoginPage.tsx +79 -54
  353. package/frontend/src/features/login/page/LoginPage.tsx +16 -23
  354. package/frontend/src/features/login/services/partnership.service.ts +65 -0
  355. package/frontend/src/features/logs/components/LogsDataGrid.tsx +89 -0
  356. package/frontend/src/features/logs/components/SeverityBadge.tsx +18 -0
  357. package/frontend/src/features/logs/components/index.ts +2 -0
  358. package/frontend/src/features/logs/helpers.ts +24 -0
  359. package/frontend/src/features/logs/hooks/useAuditLogs.ts +4 -4
  360. package/frontend/src/features/logs/hooks/useLogSources.ts +137 -0
  361. package/frontend/src/features/logs/hooks/useLogs.ts +163 -0
  362. package/frontend/src/features/logs/hooks/useMcpUsage.ts +181 -0
  363. package/frontend/src/features/logs/index.ts +8 -2
  364. package/frontend/src/features/logs/page/AuditsPage.tsx +91 -38
  365. package/frontend/src/features/logs/page/LogsPage.tsx +152 -0
  366. package/frontend/src/features/logs/page/MCPLogsPage.tsx +84 -0
  367. package/frontend/src/features/logs/services/audit.service.ts +63 -0
  368. package/frontend/src/features/logs/services/log.service.ts +15 -110
  369. package/frontend/src/features/logs/services/usage.service.ts +31 -0
  370. package/frontend/src/features/onboard/components/McpConnectionStatus.tsx +68 -0
  371. package/frontend/src/features/onboard/components/OnboardingModal.tsx +267 -0
  372. package/frontend/src/features/onboard/components/VideoDemoModal.tsx +38 -0
  373. package/frontend/src/features/onboard/components/index.ts +4 -0
  374. package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +2 -2
  375. package/frontend/src/features/onboard/components/mcp/{mcp-helper.tsx → helpers.tsx} +8 -8
  376. package/frontend/src/features/onboard/components/mcp/index.ts +2 -3
  377. package/frontend/src/features/onboard/index.ts +13 -3
  378. package/frontend/src/features/storage/components/BucketEmptyState.tsx +9 -6
  379. package/frontend/src/features/storage/components/BucketFormDialog.tsx +25 -41
  380. package/frontend/src/features/storage/components/FilePreviewDialog.tsx +20 -8
  381. package/frontend/src/features/storage/components/StorageDataGrid.tsx +4 -3
  382. package/frontend/src/features/storage/components/StorageManager.tsx +23 -34
  383. package/frontend/src/features/storage/components/index.ts +12 -0
  384. package/frontend/src/features/storage/hooks/useStorage.ts +208 -0
  385. package/frontend/src/features/storage/page/StoragePage.tsx +41 -115
  386. package/frontend/src/features/storage/services/storage.service.ts +22 -1
  387. package/frontend/src/features/visualizer/components/AuthNode.tsx +72 -56
  388. package/frontend/src/features/visualizer/components/BucketNode.tsx +4 -4
  389. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +108 -80
  390. package/frontend/src/features/visualizer/components/TableNode.tsx +34 -41
  391. package/frontend/src/features/visualizer/components/VisualizerSkeleton.tsx +12 -4
  392. package/frontend/src/features/visualizer/page/VisualizerPage.tsx +33 -29
  393. package/frontend/src/index.css +1 -0
  394. package/frontend/src/lib/analytics/posthog.tsx +27 -0
  395. package/frontend/src/lib/contexts/AuthContext.tsx +38 -31
  396. package/frontend/src/lib/contexts/SocketContext.tsx +5 -6
  397. package/frontend/src/{features/metadata → lib}/hooks/useMetadata.ts +1 -1
  398. package/frontend/src/lib/hooks/useToast.tsx +6 -2
  399. package/frontend/src/lib/routing/AppRoutes.tsx +84 -0
  400. package/frontend/src/lib/routing/RequireAuth.tsx +27 -0
  401. package/frontend/src/lib/utils/cloudMessaging.ts +20 -0
  402. package/frontend/src/lib/utils/menuItems.ts +183 -0
  403. package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
  404. package/frontend/src/lib/utils/utils.ts +19 -1
  405. package/frontend/src/vite-env.d.ts +1 -0
  406. package/frontend/vite.config.ts +5 -3
  407. package/functions/server.ts +28 -3
  408. package/functions/worker-template.js +15 -4
  409. package/i18n/README.ar.md +130 -0
  410. package/i18n/README.de.md +130 -0
  411. package/i18n/README.es.md +154 -0
  412. package/i18n/README.fr.md +134 -0
  413. package/i18n/README.hi.md +129 -0
  414. package/i18n/README.ja.md +174 -0
  415. package/i18n/README.ko.md +137 -0
  416. package/i18n/README.pt-BR.md +131 -0
  417. package/i18n/README.ru.md +129 -0
  418. package/i18n/README.zh-CN.md +133 -0
  419. package/openapi/ai.yaml +31 -4
  420. package/openapi/auth.yaml +827 -146
  421. package/package.json +16 -7
  422. package/shared-schemas/package.json +1 -1
  423. package/shared-schemas/src/ai-api.schema.ts +34 -58
  424. package/shared-schemas/src/ai.schema.ts +5 -0
  425. package/shared-schemas/src/auth-api.schema.ts +154 -8
  426. package/shared-schemas/src/auth.schema.ts +42 -6
  427. package/shared-schemas/src/cloud-events.schema.ts +57 -0
  428. package/shared-schemas/src/database-api.schema.ts +3 -3
  429. package/shared-schemas/src/database.schema.ts +1 -1
  430. package/shared-schemas/src/index.ts +1 -0
  431. package/shared-schemas/src/logs-api.schema.ts +7 -1
  432. package/shared-schemas/src/logs.schema.ts +26 -0
  433. package/shared-schemas/src/metadata.schema.ts +9 -4
  434. package/test-gemini.sh +35 -0
  435. package/test-usage-admin.sh +57 -0
  436. package/test-usage.sh +50 -0
  437. package/zeabur/README.md +13 -0
  438. package/zeabur/template.yml +1032 -0
  439. package/.github/workflows/deploy-aws.yml +0 -130
  440. package/backend/src/api/routes/agent.ts +0 -29
  441. package/backend/src/api/routes/auth.oauth.ts +0 -482
  442. package/backend/src/api/routes/auth.ts +0 -386
  443. package/backend/src/api/routes/docs.ts +0 -66
  444. package/backend/src/api/routes/functions.ts +0 -183
  445. package/backend/src/api/routes/openapi.ts +0 -82
  446. package/backend/src/api/routes/usage.ts +0 -96
  447. package/backend/src/core/ai/client.ts +0 -242
  448. package/backend/src/core/ai/model.ts +0 -117
  449. package/backend/src/core/auth/auth.ts +0 -781
  450. package/backend/src/core/database/table.ts +0 -772
  451. package/backend/src/core/documentation/agent.ts +0 -689
  452. package/backend/src/core/documentation/openapi.ts +0 -856
  453. package/backend/src/core/logs/analytics.ts +0 -76
  454. package/backend/src/core/logs/providers/localdb.provider.ts +0 -246
  455. package/backend/src/core/storage/storage.ts +0 -923
  456. package/backend/src/utils/cloud-token.ts +0 -39
  457. package/backend/src/utils/helpers.ts +0 -49
  458. package/backend/src/utils/uuid.ts +0 -9
  459. package/backend/tests/manual/test-better-auth.sh +0 -303
  460. package/docker-init/db/logs.sql +0 -9
  461. package/frontend/README.md +0 -112
  462. package/frontend/src/components/datagrid/index.tsx +0 -20
  463. package/frontend/src/components/layout/CloudLayout.tsx +0 -95
  464. package/frontend/src/features/ai/components/AIConfigDialog.tsx +0 -76
  465. package/frontend/src/features/ai/components/AIConfigForm.tsx +0 -222
  466. package/frontend/src/features/ai/components/fields/ModalityField.tsx +0 -87
  467. package/frontend/src/features/ai/components/fields/ModelSelectionField.tsx +0 -134
  468. package/frontend/src/features/ai/components/fields/SystemPromptField.tsx +0 -33
  469. package/frontend/src/features/auth/components/AddOAuthDialog.tsx +0 -106
  470. package/frontend/src/features/auth/components/AuthMethodTab.tsx +0 -238
  471. package/frontend/src/features/auth/components/UsersTab.tsx +0 -114
  472. package/frontend/src/features/auth/page/AuthenticationPage.tsx +0 -169
  473. package/frontend/src/features/database/hooks/UseLinkModal.tsx +0 -78
  474. package/frontend/src/features/functions/components/FunctionViewer.tsx +0 -46
  475. package/frontend/src/features/functions/components/FunctionsContent.tsx +0 -88
  476. package/frontend/src/features/login/components/AuthErrorBoundary.tsx +0 -87
  477. package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
  478. package/frontend/src/features/logs/components/AnalyticsLogsTable.tsx +0 -313
  479. package/frontend/src/features/logs/components/LogsTable.tsx +0 -199
  480. package/frontend/src/features/logs/page/AnalyticsLogsPage.tsx +0 -530
  481. package/frontend/src/features/metadata/index.ts +0 -0
  482. package/frontend/src/features/metadata/page/MetadataPage.tsx +0 -136
  483. package/frontend/src/features/onboard/components/CompletionCard.tsx +0 -41
  484. package/frontend/src/features/onboard/components/OnboardButton.tsx +0 -84
  485. package/frontend/src/features/onboard/components/StepContent.tsx +0 -91
  486. package/frontend/src/features/onboard/components/TestConnectionStep.tsx +0 -53
  487. package/frontend/src/features/onboard/components/mcp/McpInstallation.tsx +0 -144
  488. package/frontend/src/features/onboard/page/OnBoardPage.tsx +0 -104
  489. package/frontend/src/features/onboard/types.ts +0 -8
  490. package/frontend/src/lib/contexts/OnboardStepContext.tsx +0 -68
  491. package/frontend/src/lib/hooks/useOnboardingCompletion.ts +0 -29
  492. /package/backend/src/api/{middleware → middlewares}/error.ts +0 -0
  493. /package/backend/src/api/{middleware → middlewares}/upload.ts +0 -0
  494. /package/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +0 -0
  495. /package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +0 -0
  496. /package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +0 -0
  497. /package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +0 -0
  498. /package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +0 -0
  499. /package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +0 -0
  500. /package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +0 -0
  501. /package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +0 -0
  502. /package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +0 -0
  503. /package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +0 -0
  504. /package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +0 -0
  505. /package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +0 -0
  506. /package/backend/{migrations → src/infra/database/migrations}/012_add-storage-uploaded-by.sql +0 -0
  507. /package/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
@@ -0,0 +1,528 @@
1
+ import { DatabaseTemplate } from './index';
2
+
3
+ export const crmSystemTemplate: DatabaseTemplate = {
4
+ id: 'crm-system',
5
+ title: 'CRM',
6
+ description: 'A simple CRM for managing contacts, companies, deals, tasks, and follow ups',
7
+ tableCount: 4,
8
+ visualizerSchema: [
9
+ {
10
+ tableName: 'companies',
11
+ columns: [
12
+ { columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
13
+ {
14
+ columnName: 'name',
15
+ type: 'varchar',
16
+ isPrimaryKey: false,
17
+ isNullable: false,
18
+ isUnique: false,
19
+ },
20
+ {
21
+ columnName: 'industry',
22
+ type: 'varchar',
23
+ isPrimaryKey: false,
24
+ isNullable: true,
25
+ isUnique: false,
26
+ },
27
+ {
28
+ columnName: 'website',
29
+ type: 'varchar',
30
+ isPrimaryKey: false,
31
+ isNullable: true,
32
+ isUnique: false,
33
+ },
34
+ {
35
+ columnName: 'phone',
36
+ type: 'varchar',
37
+ isPrimaryKey: false,
38
+ isNullable: true,
39
+ isUnique: false,
40
+ },
41
+ {
42
+ columnName: 'email',
43
+ type: 'varchar',
44
+ isPrimaryKey: false,
45
+ isNullable: true,
46
+ isUnique: false,
47
+ },
48
+ {
49
+ columnName: 'address',
50
+ type: 'text',
51
+ isPrimaryKey: false,
52
+ isNullable: true,
53
+ isUnique: false,
54
+ },
55
+ {
56
+ columnName: 'created_at',
57
+ type: 'timestamp',
58
+ isPrimaryKey: false,
59
+ isNullable: true,
60
+ isUnique: false,
61
+ },
62
+ {
63
+ columnName: 'updated_at',
64
+ type: 'timestamp',
65
+ isPrimaryKey: false,
66
+ isNullable: true,
67
+ isUnique: false,
68
+ },
69
+ ],
70
+ },
71
+ {
72
+ tableName: 'contacts',
73
+ columns: [
74
+ { columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
75
+ {
76
+ columnName: 'company_id',
77
+ type: 'uuid',
78
+ isPrimaryKey: false,
79
+ isNullable: true,
80
+ isUnique: false,
81
+ foreignKey: {
82
+ referenceTable: 'companies',
83
+ referenceColumn: 'id',
84
+ onDelete: 'SET NULL',
85
+ onUpdate: 'CASCADE',
86
+ },
87
+ },
88
+ {
89
+ columnName: 'first_name',
90
+ type: 'varchar',
91
+ isPrimaryKey: false,
92
+ isNullable: false,
93
+ isUnique: false,
94
+ },
95
+ {
96
+ columnName: 'last_name',
97
+ type: 'varchar',
98
+ isPrimaryKey: false,
99
+ isNullable: false,
100
+ isUnique: false,
101
+ },
102
+ {
103
+ columnName: 'email',
104
+ type: 'varchar',
105
+ isPrimaryKey: false,
106
+ isNullable: false,
107
+ isUnique: true,
108
+ },
109
+ {
110
+ columnName: 'phone',
111
+ type: 'varchar',
112
+ isPrimaryKey: false,
113
+ isNullable: true,
114
+ isUnique: false,
115
+ },
116
+ {
117
+ columnName: 'position',
118
+ type: 'varchar',
119
+ isPrimaryKey: false,
120
+ isNullable: true,
121
+ isUnique: false,
122
+ },
123
+ {
124
+ columnName: 'created_at',
125
+ type: 'timestamp',
126
+ isPrimaryKey: false,
127
+ isNullable: true,
128
+ isUnique: false,
129
+ },
130
+ {
131
+ columnName: 'updated_at',
132
+ type: 'timestamp',
133
+ isPrimaryKey: false,
134
+ isNullable: true,
135
+ isUnique: false,
136
+ },
137
+ ],
138
+ },
139
+ {
140
+ tableName: 'deals',
141
+ columns: [
142
+ { columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
143
+ {
144
+ columnName: 'company_id',
145
+ type: 'uuid',
146
+ isPrimaryKey: false,
147
+ isNullable: true,
148
+ isUnique: false,
149
+ foreignKey: {
150
+ referenceTable: 'companies',
151
+ referenceColumn: 'id',
152
+ onDelete: 'CASCADE',
153
+ onUpdate: 'CASCADE',
154
+ },
155
+ },
156
+ {
157
+ columnName: 'contact_id',
158
+ type: 'uuid',
159
+ isPrimaryKey: false,
160
+ isNullable: true,
161
+ isUnique: false,
162
+ foreignKey: {
163
+ referenceTable: 'contacts',
164
+ referenceColumn: 'id',
165
+ onDelete: 'SET NULL',
166
+ onUpdate: 'CASCADE',
167
+ },
168
+ },
169
+ {
170
+ columnName: 'title',
171
+ type: 'varchar',
172
+ isPrimaryKey: false,
173
+ isNullable: false,
174
+ isUnique: false,
175
+ },
176
+ {
177
+ columnName: 'amount',
178
+ type: 'decimal',
179
+ isPrimaryKey: false,
180
+ isNullable: true,
181
+ isUnique: false,
182
+ },
183
+ {
184
+ columnName: 'status',
185
+ type: 'varchar',
186
+ isPrimaryKey: false,
187
+ isNullable: true,
188
+ isUnique: false,
189
+ },
190
+ {
191
+ columnName: 'close_date',
192
+ type: 'date',
193
+ isPrimaryKey: false,
194
+ isNullable: true,
195
+ isUnique: false,
196
+ },
197
+ {
198
+ columnName: 'created_at',
199
+ type: 'timestamp',
200
+ isPrimaryKey: false,
201
+ isNullable: true,
202
+ isUnique: false,
203
+ },
204
+ {
205
+ columnName: 'updated_at',
206
+ type: 'timestamp',
207
+ isPrimaryKey: false,
208
+ isNullable: true,
209
+ isUnique: false,
210
+ },
211
+ ],
212
+ },
213
+ {
214
+ tableName: 'activities',
215
+ columns: [
216
+ { columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
217
+ {
218
+ columnName: 'contact_id',
219
+ type: 'uuid',
220
+ isPrimaryKey: false,
221
+ isNullable: true,
222
+ isUnique: false,
223
+ foreignKey: {
224
+ referenceTable: 'contacts',
225
+ referenceColumn: 'id',
226
+ onDelete: 'CASCADE',
227
+ onUpdate: 'CASCADE',
228
+ },
229
+ },
230
+ {
231
+ columnName: 'deal_id',
232
+ type: 'uuid',
233
+ isPrimaryKey: false,
234
+ isNullable: true,
235
+ isUnique: false,
236
+ foreignKey: {
237
+ referenceTable: 'deals',
238
+ referenceColumn: 'id',
239
+ onDelete: 'CASCADE',
240
+ onUpdate: 'CASCADE',
241
+ },
242
+ },
243
+ {
244
+ columnName: 'type',
245
+ type: 'varchar',
246
+ isPrimaryKey: false,
247
+ isNullable: false,
248
+ isUnique: false,
249
+ },
250
+ {
251
+ columnName: 'subject',
252
+ type: 'varchar',
253
+ isPrimaryKey: false,
254
+ isNullable: false,
255
+ isUnique: false,
256
+ },
257
+ {
258
+ columnName: 'description',
259
+ type: 'text',
260
+ isPrimaryKey: false,
261
+ isNullable: true,
262
+ isUnique: false,
263
+ },
264
+ {
265
+ columnName: 'scheduled_at',
266
+ type: 'timestamp',
267
+ isPrimaryKey: false,
268
+ isNullable: true,
269
+ isUnique: false,
270
+ },
271
+ {
272
+ columnName: 'completed_at',
273
+ type: 'timestamp',
274
+ isPrimaryKey: false,
275
+ isNullable: true,
276
+ isUnique: false,
277
+ },
278
+ {
279
+ columnName: 'created_at',
280
+ type: 'timestamp',
281
+ isPrimaryKey: false,
282
+ isNullable: true,
283
+ isUnique: false,
284
+ },
285
+ ],
286
+ },
287
+ ],
288
+ sql: `-- CRM System Database Schema
289
+ -- A comprehensive CRM system with companies, contacts, deals, and activities
290
+
291
+ -- Companies table
292
+ CREATE TABLE companies (
293
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
294
+ name VARCHAR(255) NOT NULL,
295
+ industry VARCHAR(100),
296
+ website VARCHAR(255),
297
+ phone VARCHAR(50),
298
+ email VARCHAR(255),
299
+ address TEXT,
300
+ created_at TIMESTAMP DEFAULT NOW(),
301
+ updated_at TIMESTAMP DEFAULT NOW()
302
+ );
303
+
304
+ -- Contacts table
305
+ CREATE TABLE contacts (
306
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
307
+ company_id UUID REFERENCES companies(id) ON UPDATE CASCADE ON DELETE SET NULL,
308
+ first_name VARCHAR(100) NOT NULL,
309
+ last_name VARCHAR(100) NOT NULL,
310
+ email VARCHAR(255) UNIQUE NOT NULL,
311
+ phone VARCHAR(50),
312
+ position VARCHAR(100),
313
+ created_at TIMESTAMP DEFAULT NOW(),
314
+ updated_at TIMESTAMP DEFAULT NOW()
315
+ );
316
+
317
+ -- Deals table
318
+ CREATE TABLE deals (
319
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
320
+ company_id UUID REFERENCES companies(id) ON UPDATE CASCADE ON DELETE CASCADE,
321
+ contact_id UUID REFERENCES contacts(id) ON UPDATE CASCADE ON DELETE SET NULL,
322
+ title VARCHAR(255) NOT NULL,
323
+ amount DECIMAL(15, 2),
324
+ status VARCHAR(50) DEFAULT 'open' CHECK (status IN ('open', 'won', 'lost')),
325
+ close_date DATE,
326
+ created_at TIMESTAMP DEFAULT NOW(),
327
+ updated_at TIMESTAMP DEFAULT NOW()
328
+ );
329
+
330
+ -- Activities table
331
+ CREATE TABLE activities (
332
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
333
+ contact_id UUID REFERENCES contacts(id) ON UPDATE CASCADE ON DELETE CASCADE,
334
+ deal_id UUID REFERENCES deals(id) ON UPDATE CASCADE ON DELETE CASCADE,
335
+ type VARCHAR(50) NOT NULL CHECK (type IN ('call', 'email', 'meeting', 'note')),
336
+ subject VARCHAR(255) NOT NULL,
337
+ description TEXT,
338
+ scheduled_at TIMESTAMP,
339
+ completed_at TIMESTAMP,
340
+ created_at TIMESTAMP DEFAULT NOW()
341
+ );
342
+
343
+ -- Create indexes for better performance
344
+ CREATE INDEX idx_contacts_company ON contacts(company_id);
345
+ CREATE INDEX idx_contacts_email ON contacts(email);
346
+ CREATE INDEX idx_deals_company ON deals(company_id);
347
+ CREATE INDEX idx_deals_contact ON deals(contact_id);
348
+ CREATE INDEX idx_deals_status ON deals(status);
349
+ CREATE INDEX idx_deals_close_date ON deals(close_date);
350
+ CREATE INDEX idx_activities_contact ON activities(contact_id);
351
+ CREATE INDEX idx_activities_deal ON activities(deal_id);
352
+ CREATE INDEX idx_activities_type ON activities(type);
353
+ CREATE INDEX idx_activities_scheduled ON activities(scheduled_at);
354
+
355
+ -- =======================
356
+ -- ROW LEVEL SECURITY (RLS)
357
+ -- =======================
358
+
359
+ -- Enable RLS on all tables
360
+ ALTER TABLE companies ENABLE ROW LEVEL SECURITY;
361
+ ALTER TABLE contacts ENABLE ROW LEVEL SECURITY;
362
+ ALTER TABLE deals ENABLE ROW LEVEL SECURITY;
363
+ ALTER TABLE activities ENABLE ROW LEVEL SECURITY;
364
+
365
+ -- Policies for companies (allow all operations for authenticated users)
366
+ CREATE POLICY "Allow authenticated users to view companies"
367
+ ON companies FOR SELECT
368
+ TO authenticated
369
+ USING (true);
370
+
371
+ CREATE POLICY "Allow authenticated users to create companies"
372
+ ON companies FOR INSERT
373
+ TO authenticated
374
+ WITH CHECK (true);
375
+
376
+ CREATE POLICY "Allow authenticated users to update companies"
377
+ ON companies FOR UPDATE
378
+ TO authenticated
379
+ USING (true)
380
+ WITH CHECK (true);
381
+
382
+ CREATE POLICY "Allow authenticated users to delete companies"
383
+ ON companies FOR DELETE
384
+ TO authenticated
385
+ USING (true);
386
+
387
+ -- Policies for contacts
388
+ CREATE POLICY "Allow authenticated users to view contacts"
389
+ ON contacts FOR SELECT
390
+ TO authenticated
391
+ USING (true);
392
+
393
+ CREATE POLICY "Allow authenticated users to create contacts"
394
+ ON contacts FOR INSERT
395
+ TO authenticated
396
+ WITH CHECK (true);
397
+
398
+ CREATE POLICY "Allow authenticated users to update contacts"
399
+ ON contacts FOR UPDATE
400
+ TO authenticated
401
+ USING (true)
402
+ WITH CHECK (true);
403
+
404
+ CREATE POLICY "Allow authenticated users to delete contacts"
405
+ ON contacts FOR DELETE
406
+ TO authenticated
407
+ USING (true);
408
+
409
+ -- Policies for deals
410
+ CREATE POLICY "Allow authenticated users to view deals"
411
+ ON deals FOR SELECT
412
+ TO authenticated
413
+ USING (true);
414
+
415
+ CREATE POLICY "Allow authenticated users to create deals"
416
+ ON deals FOR INSERT
417
+ TO authenticated
418
+ WITH CHECK (true);
419
+
420
+ CREATE POLICY "Allow authenticated users to update deals"
421
+ ON deals FOR UPDATE
422
+ TO authenticated
423
+ USING (true)
424
+ WITH CHECK (true);
425
+
426
+ CREATE POLICY "Allow authenticated users to delete deals"
427
+ ON deals FOR DELETE
428
+ TO authenticated
429
+ USING (true);
430
+
431
+ -- Policies for activities
432
+ CREATE POLICY "Allow authenticated users to view activities"
433
+ ON activities FOR SELECT
434
+ TO authenticated
435
+ USING (true);
436
+
437
+ CREATE POLICY "Allow authenticated users to create activities"
438
+ ON activities FOR INSERT
439
+ TO authenticated
440
+ WITH CHECK (true);
441
+
442
+ CREATE POLICY "Allow authenticated users to update activities"
443
+ ON activities FOR UPDATE
444
+ TO authenticated
445
+ USING (true)
446
+ WITH CHECK (true);
447
+
448
+ CREATE POLICY "Allow authenticated users to delete activities"
449
+ ON activities FOR DELETE
450
+ TO authenticated
451
+ USING (true);
452
+
453
+ -- =======================
454
+ -- SEED DATA
455
+ -- =======================
456
+
457
+ -- Insert sample companies
458
+ INSERT INTO companies (name, industry, website, phone, email, address) VALUES
459
+ ('Acme Corporation', 'Technology', 'https://acme-corp.example', '+1-555-0100', 'info@acme-corp.example', '123 Tech Street, San Francisco, CA 94105'),
460
+ ('TechStart Inc', 'Software', 'https://techstart.example', '+1-555-0101', 'contact@techstart.example', '456 Innovation Ave, Austin, TX 78701'),
461
+ ('Global Solutions Ltd', 'Consulting', 'https://globalsolutions.example', '+1-555-0102', 'hello@globalsolutions.example', '789 Business Blvd, New York, NY 10001'),
462
+ ('Innovation Labs', 'Research', 'https://innovationlabs.example', '+1-555-0103', 'info@innovationlabs.example', '321 Science Park, Boston, MA 02101'),
463
+ ('Enterprise Systems Co', 'Enterprise Software', 'https://enterprisesys.example', '+1-555-0104', 'sales@enterprisesys.example', '654 Commerce Dr, Seattle, WA 98101');
464
+
465
+ -- Insert sample contacts
466
+ INSERT INTO contacts (company_id, first_name, last_name, email, phone, position) VALUES
467
+ ((SELECT id FROM companies WHERE name = 'Acme Corporation'), 'John', 'Smith', 'john.smith@acme-corp.example', '+1-555-0200', 'CEO'),
468
+ ((SELECT id FROM companies WHERE name = 'Acme Corporation'), 'Sarah', 'Johnson', 'sarah.johnson@acme-corp.example', '+1-555-0201', 'CTO'),
469
+ ((SELECT id FROM companies WHERE name = 'TechStart Inc'), 'Michael', 'Williams', 'michael.williams@techstart.example', '+1-555-0202', 'Founder'),
470
+ ((SELECT id FROM companies WHERE name = 'TechStart Inc'), 'Emily', 'Brown', 'emily.brown@techstart.example', '+1-555-0203', 'VP of Sales'),
471
+ ((SELECT id FROM companies WHERE name = 'Global Solutions Ltd'), 'David', 'Davis', 'david.davis@globalsolutions.example', '+1-555-0204', 'Managing Partner'),
472
+ ((SELECT id FROM companies WHERE name = 'Innovation Labs'), 'Jennifer', 'Miller', 'jennifer.miller@innovationlabs.example', '+1-555-0205', 'Director of Research'),
473
+ ((SELECT id FROM companies WHERE name = 'Innovation Labs'), 'Robert', 'Wilson', 'robert.wilson@innovationlabs.example', '+1-555-0206', 'Senior Scientist'),
474
+ ((SELECT id FROM companies WHERE name = 'Enterprise Systems Co'), 'Lisa', 'Anderson', 'lisa.anderson@enterprisesys.example', '+1-555-0207', 'VP of Sales'),
475
+ ((SELECT id FROM companies WHERE name = 'Enterprise Systems Co'), 'James', 'Taylor', 'james.taylor@enterprisesys.example', '+1-555-0208', 'Account Manager');
476
+
477
+ -- Insert sample deals
478
+ INSERT INTO deals (company_id, contact_id, title, amount, status, close_date) VALUES
479
+ ((SELECT id FROM companies WHERE name = 'Acme Corporation'), (SELECT id FROM contacts WHERE email = 'john.smith@acme-corp.example'), 'Enterprise License Agreement', 150000.00, 'won', '2025-10-15'),
480
+ ((SELECT id FROM companies WHERE name = 'TechStart Inc'), (SELECT id FROM contacts WHERE email = 'emily.brown@techstart.example'), 'Cloud Infrastructure Setup', 75000.00, 'open', '2025-12-01'),
481
+ ((SELECT id FROM companies WHERE name = 'Global Solutions Ltd'), (SELECT id FROM contacts WHERE email = 'david.davis@globalsolutions.example'), 'Consulting Services Package', 120000.00, 'open', '2025-11-20'),
482
+ ((SELECT id FROM companies WHERE name = 'Innovation Labs'), (SELECT id FROM contacts WHERE email = 'jennifer.miller@innovationlabs.example'), 'Research Partnership', 200000.00, 'won', '2025-09-30'),
483
+ ((SELECT id FROM companies WHERE name = 'Enterprise Systems Co'), (SELECT id FROM contacts WHERE email = 'lisa.anderson@enterprisesys.example'), 'Software Integration Project', 95000.00, 'open', '2025-12-15'),
484
+ ((SELECT id FROM companies WHERE name = 'Acme Corporation'), (SELECT id FROM contacts WHERE email = 'sarah.johnson@acme-corp.example'), 'Technical Support Contract', 45000.00, 'lost', '2025-10-01'),
485
+ ((SELECT id FROM companies WHERE name = 'TechStart Inc'), (SELECT id FROM contacts WHERE email = 'michael.williams@techstart.example'), 'Custom Development', 180000.00, 'won', '2025-10-20');
486
+
487
+ -- Insert sample activities
488
+ INSERT INTO activities (contact_id, deal_id, type, subject, description, scheduled_at, completed_at) VALUES
489
+ ((SELECT id FROM contacts WHERE email = 'john.smith@acme-corp.example'),
490
+ (SELECT id FROM deals WHERE title = 'Enterprise License Agreement'),
491
+ 'meeting', 'Initial Discovery Call', 'Discussed requirements and project scope', '2025-09-15 10:00:00', '2025-09-15 11:00:00'),
492
+
493
+ ((SELECT id FROM contacts WHERE email = 'emily.brown@techstart.example'),
494
+ (SELECT id FROM deals WHERE title = 'Cloud Infrastructure Setup'),
495
+ 'email', 'Proposal Follow-up', 'Sent detailed proposal and pricing', '2025-10-20 14:30:00', '2025-10-20 14:30:00'),
496
+
497
+ ((SELECT id FROM contacts WHERE email = 'david.davis@globalsolutions.example'),
498
+ (SELECT id FROM deals WHERE title = 'Consulting Services Package'),
499
+ 'call', 'Budget Discussion', 'Reviewed budget constraints and timeline', '2025-10-25 15:00:00', '2025-10-25 15:45:00'),
500
+
501
+ ((SELECT id FROM contacts WHERE email = 'jennifer.miller@innovationlabs.example'),
502
+ (SELECT id FROM deals WHERE title = 'Research Partnership'),
503
+ 'meeting', 'Contract Signing', 'Finalized partnership agreement', '2025-09-28 13:00:00', '2025-09-28 14:30:00'),
504
+
505
+ ((SELECT id FROM contacts WHERE email = 'lisa.anderson@enterprisesys.example'),
506
+ (SELECT id FROM deals WHERE title = 'Software Integration Project'),
507
+ 'meeting', 'Technical Requirements Meeting', 'Gathering technical specifications', '2025-11-12 10:00:00', NULL),
508
+
509
+ ((SELECT id FROM contacts WHERE email = 'sarah.johnson@acme-corp.example'),
510
+ NULL,
511
+ 'call', 'Quarterly Check-in', 'Regular relationship building call', '2025-11-05 11:00:00', NULL),
512
+
513
+ ((SELECT id FROM contacts WHERE email = 'michael.williams@techstart.example'),
514
+ (SELECT id FROM deals WHERE title = 'Custom Development'),
515
+ 'email', 'Project Kickoff Details', 'Sent project timeline and milestones', '2025-10-22 09:00:00', '2025-10-22 09:00:00'),
516
+
517
+ ((SELECT id FROM contacts WHERE email = 'robert.wilson@innovationlabs.example'),
518
+ NULL,
519
+ 'note', 'Conference Networking', 'Met at Tech Conference 2025, interested in AI solutions', '2025-10-18 16:00:00', '2025-10-18 16:00:00'),
520
+
521
+ ((SELECT id FROM contacts WHERE email = 'james.taylor@enterprisesys.example'),
522
+ (SELECT id FROM deals WHERE title = 'Software Integration Project'),
523
+ 'meeting', 'Demo Presentation', 'Product demonstration scheduled', '2025-11-18 14:00:00', NULL),
524
+
525
+ ((SELECT id FROM contacts WHERE email = 'emily.brown@techstart.example'),
526
+ (SELECT id FROM deals WHERE title = 'Cloud Infrastructure Setup'),
527
+ 'call', 'Security Requirements Review', 'Discuss compliance and security needs', '2025-11-08 10:30:00', NULL);`,
528
+ };