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
@@ -1,193 +1,211 @@
1
- import { useNavigate, useLocation } from 'react-router-dom';
2
- import { useMetadata } from '@/features/metadata/hooks/useMetadata';
3
- import { Skeleton } from '@/components/radix/Skeleton';
4
- import { Card, CardContent } from '@/components/radix/Card';
5
- import { Users, Database, HardDrive, ArrowLeftRight, Link2 } from 'lucide-react';
1
+ import { useState } from 'react';
2
+ import { useLocation, useNavigate } from 'react-router-dom';
3
+ import { useMetadata } from '@/lib/hooks/useMetadata';
6
4
  import { useUsers } from '@/features/auth';
5
+ import { Users, Database, HardDrive, Lock, ChevronRight } from 'lucide-react';
6
+ import { ConnectionSuccessBanner, StatsCard, PromptCard, PromptDialog } from '../components';
7
+ import { useMcpUsage } from '@/features/logs/hooks/useMcpUsage';
8
+ import { LogsDataGrid, type LogsColumnDef } from '@/features/logs/components/LogsDataGrid';
9
+ import { cn, formatTime } from '@/lib/utils/utils';
10
+ import { Button } from '@/components';
11
+ import { quickStartPrompts, type PromptTemplate } from '../prompts';
7
12
 
8
13
  export default function DashboardPage() {
9
- const navigate = useNavigate();
10
14
  const location = useLocation();
15
+ const navigate = useNavigate();
16
+ const [selectedPrompt, setSelectedPrompt] = useState<PromptTemplate | null>(null);
17
+ const [promptDialogOpen, setPromptDialogOpen] = useState(false);
11
18
  const { metadata, auth, tables, storage, isLoading } = useMetadata();
12
19
  const { totalUsers } = useUsers();
20
+ const { records } = useMcpUsage();
13
21
 
14
- const handleNavigateTo = (to: string, state?: { initialTab?: string }) => {
15
- const basePath = location.pathname.includes('/cloud')
16
- ? location.pathname.replace('/dashboard', '')
17
- : location.pathname;
18
- void navigate(`${basePath}/${to}`, { state });
19
- };
22
+ const authCount = auth?.oauths.length ?? 0;
23
+ const tableCount = tables?.length ?? 0;
24
+ const showBanner = location.state?.showSuccessBanner === true;
25
+
26
+ const mcpColumns: LogsColumnDef[] = [
27
+ {
28
+ key: 'tool_name',
29
+ name: 'MCP Call',
30
+ width: '12fr',
31
+ renderCell: ({ row }) => (
32
+ <p className="text-sm text-gray-900 dark:text-white font-normal leading-6">
33
+ {String(row.tool_name ?? '')}
34
+ </p>
35
+ ),
36
+ },
37
+ {
38
+ key: 'created_at',
39
+ name: 'Time',
40
+ width: 'minmax(200px, 1fr)',
41
+ renderCell: ({ row }) => (
42
+ <p className="text-sm text-gray-900 dark:text-white font-normal leading-6">
43
+ {formatTime(String(row.created_at ?? ''))}
44
+ </p>
45
+ ),
46
+ },
47
+ ];
20
48
 
21
- const handleConnectInsForge = () => {
22
- if (window.parent !== window) {
23
- // Send message to parent window to open onboarding overlay
24
- window.parent.postMessage(
25
- {
26
- type: 'SHOW_CONNECT_OVERLAY',
27
- },
28
- '*'
29
- );
30
- } else {
31
- void handleNavigateTo('onboard');
32
- }
49
+ const handleViewMoreClick = () => {
50
+ void navigate('/dashboard/logs/MCP');
33
51
  };
34
52
 
35
53
  return (
36
- <main className="h-full bg-white dark:bg-neutral-800">
37
- <div className="flex justify-center py-6 px-0">
38
- <div className="flex flex-col gap-6 w-full max-w-[1080px] px-6">
39
- {/* Dashboard Header */}
40
- <div className="flex items-center justify-between w-full">
41
- <h1 className="text-xl font-semibold text-gray-900 dark:text-white tracking-[-0.1px]">
42
- Dashboard
43
- </h1>
54
+ <main className="h-full bg-white dark:bg-neutral-800 overflow-y-auto px-6">
55
+ <div className="flex flex-col gap-16 w-full max-w-[1080px] mx-auto pt-6 pb-8">
56
+ <div className="flex flex-col gap-6">
57
+ {/* Connection Success Banner - Only shows once on first connection */}
58
+ {showBanner && <ConnectionSuccessBanner />}
59
+ <h1 className="text-xl font-semibold text-gray-900 dark:text-white tracking-[-0.1px]">
60
+ Dashboard
61
+ </h1>
62
+
63
+ {/* Stats Section */}
64
+ <section className="flex flex-col gap-6 w-full">
65
+ <div className="flex gap-6 w-full h-[176px]">
66
+ <StatsCard
67
+ icon={Users}
68
+ title="AUTH"
69
+ value={(totalUsers || 0).toLocaleString()}
70
+ unit={totalUsers === 1 ? 'user' : 'users'}
71
+ description={`${authCount} OAuth ${authCount === 1 ? 'provider' : 'providers'} enabled`}
72
+ isLoading={isLoading}
73
+ />
74
+
75
+ <StatsCard
76
+ icon={Database}
77
+ title="Database"
78
+ value={(metadata?.database?.totalSizeInGB || 0).toFixed(2)}
79
+ unit="GB"
80
+ description={`${tableCount} ${tableCount === 1 ? 'Table' : 'Tables'}`}
81
+ isLoading={isLoading}
82
+ />
83
+
84
+ <StatsCard
85
+ icon={HardDrive}
86
+ title="Storage"
87
+ value={(storage?.totalSizeInGB || 0).toFixed(2)}
88
+ unit="GB"
89
+ description={`${storage?.buckets?.length || 0} ${storage?.buckets?.length === 1 ? 'Bucket' : 'Buckets'}`}
90
+ isLoading={isLoading}
91
+ />
92
+ </div>
93
+ </section>
94
+ </div>
95
+
96
+ {/* Quick Start Prompt Section */}
97
+ <section className="flex flex-col gap-6 w-full">
98
+ <div className="flex flex-col gap-1 w-full">
99
+ <h2 className="text-xl font-semibold text-gray-900 dark:text-white tracking-[-0.1px]">
100
+ Quick Start Prompt
101
+ </h2>
102
+ <p className="text-sm text-gray-500 dark:text-neutral-400 leading-6">
103
+ Paste the prompts below into your agent to quickly start building real apps.
104
+ </p>
44
105
  </div>
45
106
 
46
- {/* Connect InsForge Card */}
47
- <Card className="w-full bg-white dark:bg-[#333333] rounded-lg border border-gray-200 dark:border-neutral-700 shadow-[0px_1px_3px_0px_rgba(0,0,0,0.1)]">
48
- <CardContent className="px-8 py-6">
49
- <div className="flex items-center justify-between">
50
- <div className="flex flex-col gap-2">
51
- <div className="flex items-center gap-2">
52
- <Link2 className="w-5 h-5 text-black dark:text-white" />
53
- <h3 className="text-lg font-semibold text-gray-900 dark:text-white">
54
- Connect InsForge
55
- </h3>
56
- </div>
57
- <p className="text-sm text-gray-600 dark:text-neutral-400">
58
- With InsForge connected, your agent takes care of the backend for you
59
- </p>
60
- </div>
61
- <button
62
- type="button"
63
- className="flex items-center gap-2 px-4 py-2 bg-emerald-300 hover:bg-emerald-400 text-black rounded font-medium text-sm transition-colors cursor-pointer"
64
- onClick={handleConnectInsForge}
65
- >
66
- <ArrowLeftRight className="w-5 h-5" />
67
- Connect
68
- </button>
69
- </div>
70
- </CardContent>
71
- </Card>
107
+ <div className="grid grid-cols-3 gap-6 w-full">
108
+ {quickStartPrompts.map((prompt, index) => (
109
+ <PromptCard
110
+ key={index}
111
+ title={prompt.title}
112
+ onClick={() => {
113
+ setSelectedPrompt(prompt);
114
+ setPromptDialogOpen(true);
115
+ }}
116
+ />
117
+ ))}
118
+ </div>
119
+
120
+ <PromptDialog
121
+ open={promptDialogOpen}
122
+ onOpenChange={setPromptDialogOpen}
123
+ promptTemplate={selectedPrompt}
124
+ />
125
+ </section>
126
+
127
+ {/* Templates & Components Section */}
128
+ <section className="flex flex-col gap-6 w-full">
129
+ <div className="flex flex-col gap-1 w-full">
130
+ <h2 className="text-xl font-semibold text-gray-900 dark:text-white tracking-[-0.1px]">
131
+ Explore Our Platform
132
+ </h2>
133
+ <p className="text-sm text-gray-500 dark:text-neutral-400 leading-6">
134
+ InsForge gives you every backend feature you need. Use the whole platform or just the
135
+ features you want.
136
+ </p>
137
+ </div>
72
138
 
73
- {/* Stats Cards */}
74
139
  <div className="flex gap-6 w-full">
75
- {/* AUTH Card */}
76
- <Card className="flex-1 bg-white dark:bg-[#333333] rounded-lg border border-gray-200 dark:border-neutral-700 shadow-[0px_1px_3px_0px_rgba(0,0,0,0.1)] h-[280px]">
77
- <CardContent className="p-8 h-full flex flex-col justify-between">
78
- <div className="flex flex-col gap-2">
79
- <div className="flex items-center gap-2 h-7">
80
- <Users className="w-5 h-5 text-gray-700 dark:text-white" />
81
- <span className="text-base font-normal text-gray-900 dark:text-white">
82
- AUTH
83
- </span>
84
- </div>
85
- </div>
86
- <div className="flex flex-col gap-4">
87
- <div className="flex items-baseline gap-2">
88
- {isLoading ? (
89
- <Skeleton className="h-8 w-16 bg-gray-200 dark:bg-neutral-700" />
90
- ) : (
91
- <>
92
- <span className="text-2xl font-normal text-gray-900 dark:text-white tracking-[-0.144px]">
93
- {(totalUsers || 0).toLocaleString()}
94
- </span>
95
- <span className="text-sm font-normal text-gray-500 dark:text-neutral-400">
96
- {totalUsers === 1 ? 'user' : 'users'}
97
- </span>
98
- </>
99
- )}
100
- </div>
101
- {isLoading ? (
102
- <Skeleton className="h-5 w-36 bg-gray-200 dark:bg-neutral-700" />
103
- ) : (
104
- <p className="text-base text-gray-500 dark:text-neutral-400">
105
- {(() => {
106
- const authCount = auth?.oauths.length || 0;
107
- return `${authCount} OAuth ${authCount === 1 ? 'provider' : 'providers'} enabled`;
108
- })()}
109
- </p>
110
- )}
140
+ {/* Sign-in Component Card */}
141
+ <button
142
+ onClick={() => void navigate('/dashboard/authentication/auth-methods')}
143
+ className="flex-1 bg-white dark:bg-[#363636] border border-gray-200 dark:border-[#414141] rounded-lg p-4 flex items-center gap-3 hover:bg-gray-50 hover:border-gray-300 dark:hover:bg-neutral-700 dark:hover:border-[#525252] hover:shadow-sm transition-all group"
144
+ >
145
+ <div className="flex-1 flex items-center gap-4">
146
+ <div className="bg-gray-100 dark:bg-neutral-800 rounded p-3.5 flex items-center justify-center shrink-0">
147
+ <Lock className="w-6 h-6 text-gray-600 dark:text-neutral-400" />
111
148
  </div>
112
- </CardContent>
113
- </Card>
114
-
115
- {/* Database Card */}
116
- <Card className="flex-1 bg-white dark:bg-[#333333] rounded-lg border border-gray-200 dark:border-neutral-700 shadow-[0px_1px_3px_0px_rgba(0,0,0,0.1)] h-[280px]">
117
- <CardContent className="p-8 h-full flex flex-col justify-between">
118
- <div className="flex flex-col gap-2">
119
- <div className="flex items-center gap-2 h-7">
120
- <Database className="w-5 h-5 text-gray-700 dark:text-white" />
121
- <span className="text-base font-normal text-gray-900 dark:text-white">
122
- Database
123
- </span>
124
- </div>
149
+ <div className="flex flex-col gap-1 items-start text-left">
150
+ <p className="text-base text-gray-900 dark:text-white font-normal leading-6">
151
+ Authentication
152
+ </p>
153
+ <p className="text-sm text-gray-500 dark:text-neutral-400 leading-6">
154
+ User Authentication and management
155
+ </p>
125
156
  </div>
126
- <div className="flex flex-col gap-4">
127
- <div className="flex items-baseline gap-2">
128
- {isLoading ? (
129
- <Skeleton className="h-8 w-14 bg-gray-200 dark:bg-neutral-700" />
130
- ) : (
131
- <>
132
- <span className="text-2xl font-normal text-gray-900 dark:text-white tracking-[-0.144px]">
133
- {(metadata?.database?.totalSize || 0).toFixed(2)}
134
- </span>
135
- <span className="text-sm font-normal text-gray-500 dark:text-neutral-400">
136
- GB
137
- </span>
138
- </>
139
- )}
140
- </div>
141
- {isLoading ? (
142
- <Skeleton className="h-5 w-16 bg-gray-200 dark:bg-neutral-700" />
143
- ) : (
144
- <p className="text-base text-gray-500 dark:text-neutral-400">
145
- {tables.length || 0} {tables.length === 1 ? 'Table' : 'Tables'}
146
- </p>
147
- )}
157
+ </div>
158
+ <ChevronRight className="w-5 h-5 text-gray-400 dark:text-neutral-400 shrink-0 group-hover:translate-x-0.5 transition-transform" />
159
+ </button>
160
+
161
+ {/* Database Templates Card */}
162
+ <button
163
+ onClick={() => void navigate('/dashboard/tables')}
164
+ className="flex-1 bg-white dark:bg-[#363636] border border-gray-200 dark:border-[#414141] rounded-lg p-4 flex items-center gap-3 hover:bg-gray-50 hover:border-gray-300 dark:hover:bg-neutral-700 dark:hover:border-[#525252] hover:shadow-sm transition-all group"
165
+ >
166
+ <div className="flex-1 flex items-center gap-4">
167
+ <div className="bg-gray-100 dark:bg-neutral-800 rounded p-3.5 flex items-center justify-center shrink-0">
168
+ <Database className="w-6 h-6 text-gray-600 dark:text-neutral-400" />
148
169
  </div>
149
- </CardContent>
150
- </Card>
151
-
152
- {/* Storage Card */}
153
- <Card className="flex-1 bg-white dark:bg-[#333333] rounded-lg border border-gray-200 dark:border-neutral-700 shadow-[0px_1px_3px_0px_rgba(0,0,0,0.1)] h-[280px]">
154
- <CardContent className="p-8 h-full flex flex-col justify-between">
155
- <div className="flex flex-col gap-2">
156
- <div className="flex items-center gap-2 h-7">
157
- <HardDrive className="w-5 h-5 text-gray-700 dark:text-white" />
158
- <span className="text-base font-normal text-gray-900 dark:text-white">
159
- Storage
160
- </span>
161
- </div>
170
+ <div className="flex flex-col gap-1 items-start text-left">
171
+ <p className="text-base text-gray-900 dark:text-white font-normal leading-6">
172
+ Database
173
+ </p>
174
+ <p className="text-sm text-gray-500 dark:text-neutral-400 leading-6">
175
+ Manage your tables and data
176
+ </p>
162
177
  </div>
163
- <div className="flex flex-col gap-4">
164
- <div className="flex items-baseline gap-2">
165
- {isLoading ? (
166
- <Skeleton className="h-8 w-14 bg-gray-200 dark:bg-neutral-700" />
167
- ) : (
168
- <>
169
- <span className="text-2xl font-normal text-gray-900 dark:text-white tracking-[-0.144px]">
170
- {(storage?.totalSize || 0).toFixed(2)}
171
- </span>
172
- <span className="text-sm font-normal text-gray-500 dark:text-neutral-400">
173
- GB
174
- </span>
175
- </>
176
- )}
177
- </div>
178
- {isLoading ? (
179
- <Skeleton className="h-5 w-20 bg-gray-200 dark:bg-neutral-700" />
180
- ) : (
181
- <p className="text-base text-gray-500 dark:text-neutral-400">
182
- {storage?.buckets?.length || 0}{' '}
183
- {storage?.buckets?.length === 1 ? 'Bucket' : 'Buckets'}
184
- </p>
185
- )}
178
+ </div>
179
+ <ChevronRight className="w-5 h-5 text-gray-400 dark:text-neutral-400 shrink-0 group-hover:translate-x-0.5 transition-transform" />
180
+ </button>
181
+ </div>
182
+ </section>
183
+
184
+ {/* MCP Call Records Section */}
185
+ <section className="flex flex-col gap-6 w-full">
186
+ <div className="flex items-center justify-between w-full">
187
+ <p className="text-xl font-semibold text-gray-900 dark:text-white">MCP Call Records</p>
188
+ <Button
189
+ onClick={handleViewMoreClick}
190
+ className="h-8 px-4 font-medium dark:bg-emerald-300 dark:text-black"
191
+ >
192
+ View More
193
+ </Button>
194
+ </div>
195
+
196
+ <div className={cn('w-full overflow-hidden', !records.length && 'h-60')}>
197
+ <LogsDataGrid
198
+ columnDefs={mcpColumns}
199
+ data={records.slice(0, 5)}
200
+ emptyState={
201
+ <div className="h-20 text-sm text-zinc-500 dark:text-zinc-400">
202
+ No MCP call records found
186
203
  </div>
187
- </CardContent>
188
- </Card>
204
+ }
205
+ noPadding
206
+ />
189
207
  </div>
190
- </div>
208
+ </section>
191
209
  </div>
192
210
  </main>
193
211
  );
@@ -0,0 +1,13 @@
1
+ export const aiChatbotPrompt = {
2
+ title: 'AI Chatbot',
3
+ description: 'Paste below prompts to your agent as a quick start for building real apps',
4
+ prompt: `Build an AI chatbot app using InsForge as the backend platform with these features:
5
+ • Sign in and sign out before chatting
6
+ • Chat window with message history per conversation
7
+ • Create and delete conversations
8
+ • Upload images in chat and store them in InsForge storage
9
+ • Show uploaded images inline
10
+ • Clear all messages in a conversation
11
+ • Each user only sees their own chats and files`,
12
+ features: ['Authentication', 'Database', 'Storage', 'AI Integration'],
13
+ };
@@ -0,0 +1,13 @@
1
+ export const crmSystemPrompt = {
2
+ title: 'CRM',
3
+ description: 'Paste below prompts to your agent as a quick start for building real apps',
4
+ prompt: `Build a lightweight CRM app using InsForge as the backend platform with these features:
5
+ • Contacts with search and simple tags
6
+ • Companies and linked contacts
7
+ • Deals pipeline with stages and easy stage updates
8
+ • Deal detail with notes, tasks, and next follow up date
9
+ • Reminders for upcoming tasks and follow ups
10
+ • Activity timeline that logs deal stage changes and notes
11
+ • File attachments stored in InsForge storage and shown on the deal page`,
12
+ features: ['Authentication', 'Database', 'Storage'],
13
+ };
@@ -0,0 +1,12 @@
1
+ export const ecommercePlatformPrompt = {
2
+ title: 'E-commerce',
3
+ description: 'Paste below prompts to your agent as a quick start for building real apps',
4
+ prompt: `Build an app similar to a modern online store using InsForge as the backend platform that has these features:
5
+ • Displays a list of products with images, names, prices, and descriptions
6
+ • Allows users to add products to a shopping cart
7
+ • Has a "Cart" page for reviewing and removing items before checkout
8
+ • Has a simple checkout form for entering shipping details
9
+ • Allows business owners to add, edit, and delete products
10
+ • Stores product images in InsForge storage`,
11
+ features: ['Authentication', 'Database', 'Storage'],
12
+ };
@@ -0,0 +1,31 @@
1
+ import { crmSystemPrompt } from './crm-system';
2
+ import { aiChatbotPrompt } from './ai-chatbot';
3
+ import { ecommercePlatformPrompt } from './ecommerce-platform';
4
+ import { redditClonePrompt } from './reddit-clone';
5
+ import { instagramClonePrompt } from './instagram-clone';
6
+ import { notionClonePrompt } from './notion-clone';
7
+
8
+ export interface PromptTemplate {
9
+ title: string;
10
+ description: string;
11
+ prompt: string;
12
+ features: string[];
13
+ }
14
+
15
+ export const quickStartPrompts: PromptTemplate[] = [
16
+ crmSystemPrompt,
17
+ aiChatbotPrompt,
18
+ ecommercePlatformPrompt,
19
+ redditClonePrompt,
20
+ instagramClonePrompt,
21
+ notionClonePrompt,
22
+ ];
23
+
24
+ export {
25
+ crmSystemPrompt,
26
+ aiChatbotPrompt,
27
+ ecommercePlatformPrompt,
28
+ redditClonePrompt,
29
+ instagramClonePrompt,
30
+ notionClonePrompt,
31
+ };
@@ -0,0 +1,11 @@
1
+ export const instagramClonePrompt = {
2
+ title: 'Instagram Clone',
3
+ description: 'Paste below prompts to your agent as a quick start for building real apps',
4
+ prompt: `Build an app similar to Instagram with a global shared image stream using InsForge as the backend platform that has these features:
5
+ • Has a drag and drop box for uploading images to InsForge storage with an optional caption
6
+ • Has a "Feed" tab for viewing the global image stream
7
+ • Has a "My Photos" tab for viewing and deleting your own images
8
+ • Allows liking images in the "Feed" tab
9
+ • Shows like count for each image`,
10
+ features: ['Authentication', 'Database', 'Storage'],
11
+ };
@@ -0,0 +1,14 @@
1
+ export const notionClonePrompt = {
2
+ title: 'Notion Clone',
3
+ description: 'Paste below prompts to your agent as a quick start for building real apps',
4
+ prompt: `Make a notes app like Notion using InsForge as the backend platform with these features:
5
+ • User authentication for sign in and sign out
6
+ • Pages list in a sidebar with create and delete
7
+ • Each page has a title and rich text or simple markdown content
8
+ • Support private pages for each user and public pages visible to all users
9
+ • Search over page titles
10
+ • Clean and minimal interface with white space and a neutral color palette
11
+ • Focus on readable text with minimal distractions
12
+ • Optional file attachments stored in InsForge storage and shown inside the page`,
13
+ features: ['Authentication', 'Database', 'Storage'],
14
+ };
@@ -0,0 +1,12 @@
1
+ export const redditClonePrompt = {
2
+ title: 'Reddit Clone',
3
+ description: 'Paste below prompts to your agent as a quick start for building real apps',
4
+ prompt: `Build an app similar to Reddit with community-based discussion threads using InsForge as the backend platform that has these features:
5
+ • Has a "Communities" list where users can browse or create communities
6
+ • Each community has its own posts feed
7
+ • Users can create posts with a title and body (text or image upload to InsForge storage)
8
+ • Users can comment on posts and reply to other comments
9
+ • Allows upvoting and downvoting for both posts and comments
10
+ • Shows vote counts and comment counts for each post`,
11
+ features: ['Authentication', 'Database', 'Storage'],
12
+ };