insforge 0.3.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (635) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.dockerignore +60 -57
  3. package/.env.example +84 -49
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -83
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -79
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +66 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -0
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +44 -3
  15. package/CLAUDE_PLUGIN.md +104 -0
  16. package/CODE_OF_CONDUCT.md +128 -0
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -27
  19. package/GITHUB_OAUTH_SETUP.md +49 -49
  20. package/GOOGLE_OAUTH_SETUP.md +148 -148
  21. package/LICENSE +201 -201
  22. package/README.md +182 -134
  23. package/assets/Dark.svg +23 -23
  24. package/assets/mcpInstallv2.png +0 -0
  25. package/assets/sampleResponse.png +0 -0
  26. package/auth/index.html +13 -0
  27. package/auth/package.json +28 -0
  28. package/auth/public/favicon.ico +0 -0
  29. package/auth/src/App.tsx +33 -0
  30. package/auth/src/components/ErrorCard.tsx +37 -0
  31. package/auth/src/components/Layout.tsx +13 -0
  32. package/auth/src/index.css +19 -0
  33. package/auth/src/lib/broadcastService.ts +117 -0
  34. package/auth/src/lib/utils.ts +11 -0
  35. package/auth/src/main.tsx +22 -0
  36. package/auth/src/pages/ForgotPasswordPage.tsx +11 -0
  37. package/auth/src/pages/ResetPasswordPage.tsx +11 -0
  38. package/auth/src/pages/SignInPage.tsx +60 -0
  39. package/auth/src/pages/SignUpPage.tsx +60 -0
  40. package/auth/src/pages/VerifyEmailPage.tsx +20 -0
  41. package/auth/src/vite-env.d.ts +10 -0
  42. package/auth/tsconfig.json +32 -0
  43. package/auth/tsconfig.node.json +11 -0
  44. package/auth/vite.config.ts +25 -0
  45. package/backend/package.json +78 -75
  46. package/backend/src/api/{middleware → middlewares}/auth.ts +8 -9
  47. package/backend/src/api/middlewares/rate-limiters.ts +127 -0
  48. package/backend/src/api/routes/{ai.ts → ai/index.routes.ts} +22 -26
  49. package/backend/src/api/routes/auth/index.routes.ts +667 -0
  50. package/backend/src/api/routes/auth/oauth.routes.ts +473 -0
  51. package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +128 -65
  52. package/backend/src/api/routes/database/index.routes.ts +90 -0
  53. package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +26 -12
  54. package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +6 -23
  55. package/backend/src/api/routes/docs/index.routes.ts +75 -0
  56. package/backend/src/api/routes/email/index.routes.ts +35 -0
  57. package/backend/src/api/routes/functions/index.routes.ts +194 -0
  58. package/backend/src/api/routes/{logs.ts → logs/index.routes.ts} +25 -30
  59. package/backend/src/api/routes/{metadata.ts → metadata/index.routes.ts} +33 -31
  60. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  61. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  62. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  63. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  64. package/backend/src/api/routes/{secrets.ts → secrets/index.routes.ts} +27 -22
  65. package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +48 -61
  66. package/backend/src/api/routes/usage/index.routes.ts +91 -0
  67. package/backend/src/infra/config/app.config.ts +51 -0
  68. package/backend/src/infra/database/database.manager.ts +182 -0
  69. package/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +141 -141
  70. package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +40 -40
  71. package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +29 -29
  72. package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +55 -55
  73. package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +23 -23
  74. package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +29 -29
  75. package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +24 -24
  76. package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +1 -1
  77. package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +76 -76
  78. package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +23 -23
  79. package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +93 -93
  80. package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +15 -15
  81. package/backend/{migrations → src/infra/database/migrations}/012_add-storage-uploaded-by.sql +7 -7
  82. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -0
  83. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +8 -0
  84. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +60 -0
  85. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -0
  86. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  87. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  88. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  89. package/backend/src/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
  90. package/backend/src/infra/security/token.manager.ts +219 -0
  91. package/backend/src/infra/socket/socket.manager.ts +522 -0
  92. package/backend/src/providers/ai/openrouter.provider.ts +380 -0
  93. package/backend/src/providers/email/base.provider.ts +38 -0
  94. package/backend/src/providers/email/cloud.provider.ts +271 -0
  95. package/backend/src/{core/logs/providers → providers/logs}/base.provider.ts +11 -11
  96. package/backend/src/{core/logs/providers → providers/logs}/cloudwatch.provider.ts +61 -38
  97. package/backend/src/providers/logs/local.provider.ts +185 -0
  98. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  99. package/backend/src/providers/oauth/base.provider.ts +29 -0
  100. package/backend/src/providers/oauth/discord.provider.ts +195 -0
  101. package/backend/src/providers/oauth/facebook.provider.ts +194 -0
  102. package/backend/src/providers/oauth/github.provider.ts +208 -0
  103. package/backend/src/providers/oauth/google.provider.ts +249 -0
  104. package/backend/src/providers/oauth/index.ts +8 -0
  105. package/backend/src/providers/oauth/linkedin.provider.ts +240 -0
  106. package/backend/src/providers/oauth/microsoft.provider.ts +169 -0
  107. package/backend/src/providers/oauth/x.provider.ts +202 -0
  108. package/backend/src/providers/storage/base.provider.ts +29 -0
  109. package/backend/src/providers/storage/local.provider.ts +103 -0
  110. package/backend/src/providers/storage/s3.provider.ts +313 -0
  111. package/backend/src/server.ts +317 -288
  112. package/backend/src/{core/ai/config.ts → services/ai/ai-config.service.ts} +19 -24
  113. package/backend/src/services/ai/ai-model.service.ts +60 -0
  114. package/backend/src/{core/ai/usage.ts → services/ai/ai-usage.service.ts} +28 -35
  115. package/backend/src/{core/ai/chat.ts → services/ai/chat-completion.service.ts} +37 -24
  116. package/backend/src/services/ai/helpers.ts +64 -0
  117. package/backend/src/{core/ai/image.ts → services/ai/image-generation.service.ts} +17 -19
  118. package/backend/src/services/ai/index.ts +13 -0
  119. package/backend/src/services/auth/auth-config.service.ts +250 -0
  120. package/backend/src/services/auth/auth-otp.service.ts +424 -0
  121. package/backend/src/services/auth/auth.service.ts +1150 -0
  122. package/backend/src/services/auth/index.ts +4 -0
  123. package/backend/src/{core/auth/oauth.ts → services/auth/oauth-config.service.ts} +106 -52
  124. package/backend/src/{core/database/advance.ts → services/database/database-advance.service.ts} +97 -131
  125. package/backend/src/services/database/database-table.service.ts +802 -0
  126. package/backend/src/services/database/database.service.ts +127 -0
  127. package/backend/src/services/email/email.service.ts +73 -0
  128. package/backend/src/{core/functions/functions.ts → services/functions/function.service.ts} +95 -88
  129. package/backend/src/{core/logs/audit.ts → services/logs/audit.service.ts} +92 -75
  130. package/backend/src/services/logs/log.service.ts +73 -0
  131. package/backend/src/services/realtime/index.ts +3 -0
  132. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  133. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  134. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  135. package/backend/src/{core/secrets/secrets.ts → services/secrets/secret.service.ts} +48 -66
  136. package/backend/src/services/storage/storage.service.ts +617 -0
  137. package/backend/src/services/usage/usage.service.ts +149 -0
  138. package/backend/src/types/auth.ts +77 -2
  139. package/backend/src/types/email.ts +8 -0
  140. package/backend/src/types/error-constants.ts +4 -0
  141. package/backend/src/types/logs.ts +0 -29
  142. package/backend/src/types/realtime.ts +18 -0
  143. package/backend/src/{core/socket/types.ts → types/socket.ts} +11 -36
  144. package/backend/src/utils/cookies.ts +35 -0
  145. package/backend/src/utils/environment.ts +9 -3
  146. package/backend/src/utils/logger.ts +20 -2
  147. package/backend/src/utils/s3-config-loader.ts +64 -0
  148. package/backend/src/utils/seed.ts +301 -205
  149. package/backend/src/utils/sql-parser.ts +91 -1
  150. package/backend/src/utils/utils.ts +114 -0
  151. package/backend/src/utils/validations.ts +40 -4
  152. package/backend/tests/README.md +133 -133
  153. package/backend/tests/cleanup-all-test-data.sh +230 -230
  154. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  155. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  156. package/backend/tests/local/test-ai-config.sh +129 -0
  157. package/backend/tests/local/test-ai-usage.sh +80 -0
  158. package/backend/tests/local/test-auth-router.sh +143 -143
  159. package/backend/tests/local/test-database-router.sh +222 -222
  160. package/backend/tests/local/test-e2e.sh +240 -240
  161. package/backend/tests/local/test-fk-errors.sh +96 -96
  162. package/backend/tests/local/test-functions.sh +123 -0
  163. package/backend/tests/local/test-id-field.sh +200 -200
  164. package/backend/tests/local/test-logs.sh +132 -0
  165. package/backend/tests/local/test-public-bucket.sh +264 -264
  166. package/backend/tests/local/test-secrets.sh +249 -247
  167. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  168. package/backend/tests/local/test-traditional-rest.sh +208 -208
  169. package/backend/tests/manual/README.md +50 -50
  170. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  171. package/backend/tests/manual/seed-large-table.sql +100 -100
  172. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  173. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  174. package/backend/tests/manual/test-database-advance.sh +296 -296
  175. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  176. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  177. package/backend/tests/manual/test-rawsql-modes.sh +244 -0
  178. package/backend/tests/manual/test-universal-storage.sh +263 -263
  179. package/backend/tests/manual/test-users.sql +17 -17
  180. package/backend/tests/run-all-tests.sh +139 -139
  181. package/backend/tests/setup.ts +0 -0
  182. package/backend/tests/test-config.sh +338 -302
  183. package/backend/tests/unit/analyze-query.test.ts +697 -0
  184. package/backend/tests/unit/cloud-token.test.ts +48 -0
  185. package/backend/tests/unit/constant.test.ts +8 -0
  186. package/backend/tests/unit/email.test.ts +372 -0
  187. package/backend/tests/unit/environment.test.ts +59 -0
  188. package/backend/tests/unit/helpers.test.ts +63 -0
  189. package/backend/tests/unit/logger.test.ts +22 -0
  190. package/backend/tests/unit/rate-limit.test.ts +154 -0
  191. package/backend/tests/unit/response.test.ts +58 -0
  192. package/backend/tests/unit/sql-parser.test.ts +74 -0
  193. package/backend/tests/unit/uuid.test.ts +21 -0
  194. package/backend/tests/unit/validations.test.ts +80 -0
  195. package/backend/tsconfig.json +22 -22
  196. package/backend/vitest.config.ts +11 -0
  197. package/claude-plugin/.claude-plugin/plugin.json +24 -0
  198. package/claude-plugin/README.md +133 -0
  199. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -0
  200. package/docker-compose.prod.yml +204 -144
  201. package/docker-compose.yml +232 -167
  202. package/docker-init/db/db-init.sql +97 -125
  203. package/docker-init/db/jwt.sql +5 -5
  204. package/docker-init/db/postgresql.conf +16 -16
  205. package/docker-init/logs/vector.yml +236 -0
  206. package/docs/README.md +44 -0
  207. package/docs/agent-docs/real-time.md +269 -0
  208. package/docs/changelog.mdx +119 -0
  209. package/docs/core-concepts/ai/architecture.mdx +373 -0
  210. package/docs/core-concepts/ai/sdk.mdx +213 -0
  211. package/docs/core-concepts/authentication/architecture.mdx +278 -0
  212. package/docs/core-concepts/authentication/sdk.mdx +414 -0
  213. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -0
  214. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -0
  215. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -0
  216. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -0
  217. package/docs/core-concepts/database/architecture.mdx +256 -0
  218. package/docs/core-concepts/database/sdk.mdx +382 -0
  219. package/docs/core-concepts/email/architecture.mdx +101 -0
  220. package/docs/core-concepts/email/sdk.mdx +53 -0
  221. package/docs/core-concepts/functions/architecture.mdx +105 -0
  222. package/docs/core-concepts/functions/sdk.mdx +184 -0
  223. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  224. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  225. package/docs/core-concepts/storage/architecture.mdx +243 -0
  226. package/docs/core-concepts/storage/sdk.mdx +253 -0
  227. package/docs/deployment/README.md +94 -0
  228. package/docs/deployment/deploy-to-aws-ec2.md +565 -0
  229. package/docs/deployment/deploy-to-azure-virtual-machines.md +313 -0
  230. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -0
  231. package/docs/deployment/deploy-to-render.md +441 -0
  232. package/docs/deprecated/insforge-auth-api.md +214 -214
  233. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  234. package/docs/deprecated/insforge-db-api.md +358 -358
  235. package/docs/deprecated/insforge-db-sdk.md +139 -139
  236. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  237. package/docs/deprecated/insforge-debug.md +64 -64
  238. package/docs/deprecated/insforge-instructions.md +123 -123
  239. package/docs/deprecated/insforge-project.md +117 -117
  240. package/docs/deprecated/insforge-storage-api.md +278 -278
  241. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  242. package/docs/docs.json +232 -0
  243. package/docs/examples/framework-guides/nextjs.mdx +131 -0
  244. package/docs/examples/framework-guides/nuxt.mdx +165 -0
  245. package/docs/examples/framework-guides/react.mdx +165 -0
  246. package/docs/examples/framework-guides/svelte.mdx +153 -0
  247. package/docs/examples/framework-guides/vue.mdx +159 -0
  248. package/docs/examples/overview.mdx +67 -0
  249. package/docs/favicon.svg +19 -0
  250. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  251. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  252. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  253. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  254. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  255. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  256. package/docs/images/changelog/nov-2025/auth-components.webp +0 -0
  257. package/docs/images/changelog/nov-2025/database-metadata.webp +0 -0
  258. package/docs/images/changelog/nov-2025/quickstart-prompts.webp +0 -0
  259. package/docs/images/changelog/nov-2025/sql-editor.webp +0 -0
  260. package/docs/images/changelog/nov-2025/usage-page.webp +0 -0
  261. package/docs/images/changelog/october-2025/csv-upload.webp +0 -0
  262. package/docs/images/changelog/october-2025/logs-feature.webp +0 -0
  263. package/docs/images/changelog/october-2025/oauth-providers.webp +0 -0
  264. package/docs/images/checks-passed.png +0 -0
  265. package/docs/images/dashboard-connect-expanded.png +0 -0
  266. package/docs/images/dashboard-connect.png +0 -0
  267. package/docs/images/hero-dark.png +0 -0
  268. package/docs/images/hero-light.png +0 -0
  269. package/docs/images/icons/ai.svg +4 -0
  270. package/docs/images/icons/auth.svg +1 -0
  271. package/docs/images/icons/database.svg +1 -0
  272. package/docs/images/icons/function.svg +1 -0
  273. package/docs/images/icons/storage.svg +1 -0
  274. package/docs/images/logos/nextjs.svg +4 -0
  275. package/docs/images/logos/nuxt.svg +4 -0
  276. package/docs/images/logos/react.svg +5 -0
  277. package/docs/images/logos/svelte.svg +4 -0
  278. package/docs/images/logos/vue.svg +5 -0
  279. package/docs/images/mcp-install.png +0 -0
  280. package/docs/images/onboarding-mcp.png +0 -0
  281. package/docs/insforge-instructions-sdk.md +89 -407
  282. package/docs/introduction.mdx +45 -0
  283. package/docs/logo/dark.svg +22 -0
  284. package/docs/logo/light.svg +20 -0
  285. package/docs/partnership.mdx +652 -0
  286. package/docs/quickstart.mdx +83 -0
  287. package/docs/showcase/2048-arena.png +0 -0
  288. package/docs/showcase/framegen-cloud.png +0 -0
  289. package/docs/showcase/line-connect-race.png +0 -0
  290. package/docs/showcase/moment-vibe.png +0 -0
  291. package/docs/showcase/national-flags.png +0 -0
  292. package/docs/showcase/pokemon-vibe.png +0 -0
  293. package/docs/showcase/pure-browse-buy.png +0 -0
  294. package/docs/showcase.mdx +52 -0
  295. package/docs/snippets/sdk-installation.mdx +22 -0
  296. package/docs/snippets/service-icons.mdx +27 -0
  297. package/eslint.config.js +10 -3
  298. package/examples/oauth/frontend-oauth-example.html +250 -250
  299. package/examples/response-examples.md +443 -443
  300. package/frontend/components.json +17 -17
  301. package/frontend/package.json +69 -63
  302. package/frontend/src/App.tsx +13 -82
  303. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  304. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  305. package/frontend/src/assets/icons/checked.svg +3 -3
  306. package/frontend/src/assets/icons/connected.svg +3 -0
  307. package/frontend/src/assets/icons/error.svg +3 -3
  308. package/frontend/src/assets/icons/loader.svg +9 -0
  309. package/frontend/src/assets/icons/pencil.svg +4 -4
  310. package/frontend/src/assets/icons/refresh.svg +4 -4
  311. package/frontend/src/assets/icons/step_active.svg +3 -3
  312. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  313. package/frontend/src/assets/icons/warning.svg +3 -3
  314. package/frontend/src/assets/logos/apple.svg +4 -0
  315. package/frontend/src/assets/logos/claude_code.svg +3 -3
  316. package/frontend/src/assets/logos/cline.svg +6 -6
  317. package/frontend/src/assets/logos/cursor.svg +20 -20
  318. package/frontend/src/assets/logos/discord.svg +8 -8
  319. package/frontend/src/assets/logos/facebook.svg +3 -0
  320. package/frontend/src/assets/logos/gemini.svg +19 -19
  321. package/frontend/src/assets/logos/github.svg +5 -5
  322. package/frontend/src/assets/logos/google.svg +13 -13
  323. package/frontend/src/assets/logos/grok.svg +10 -10
  324. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  325. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  326. package/frontend/src/assets/logos/instagram.svg +2 -0
  327. package/frontend/src/assets/logos/linkedin.svg +3 -0
  328. package/frontend/src/assets/logos/microsoft.svg +1 -0
  329. package/frontend/src/assets/logos/openai.svg +10 -10
  330. package/frontend/src/assets/logos/roo_code.svg +9 -9
  331. package/frontend/src/assets/logos/spotify.svg +17 -0
  332. package/frontend/src/assets/logos/tiktok.svg +6 -0
  333. package/frontend/src/assets/logos/trae.svg +3 -3
  334. package/frontend/src/assets/logos/windsurf.svg +10 -10
  335. package/frontend/src/assets/logos/x.svg +3 -0
  336. package/frontend/src/components/Checkbox.tsx +27 -29
  337. package/frontend/src/components/CodeBlock.tsx +55 -2
  338. package/frontend/src/components/CodeEditor.tsx +92 -0
  339. package/frontend/src/components/ConfirmDialog.tsx +1 -1
  340. package/frontend/src/components/ConnectCTA.tsx +38 -0
  341. package/frontend/src/components/CopyButton.tsx +52 -15
  342. package/frontend/src/components/ErrorState.tsx +1 -2
  343. package/frontend/src/components/FeatureSidebar.tsx +6 -6
  344. package/frontend/src/components/FeatureSidebarItem.tsx +2 -2
  345. package/frontend/src/components/JsonHighlight.tsx +21 -9
  346. package/frontend/src/components/ProjectInfoModal.tsx +128 -0
  347. package/frontend/src/components/PromptDialog.tsx +1 -4
  348. package/frontend/src/components/SearchInput.tsx +1 -2
  349. package/frontend/src/components/Stepper.tsx +53 -0
  350. package/frontend/src/components/ThemeToggle.tsx +3 -3
  351. package/frontend/src/components/datagrid/DataGrid.tsx +25 -32
  352. package/frontend/src/components/datagrid/cell-editors/DateCellEditor.tsx +1 -2
  353. package/frontend/src/components/datagrid/cell-editors/JsonCellEditor.tsx +2 -4
  354. package/frontend/src/components/datagrid/index.ts +23 -0
  355. package/frontend/src/components/index.ts +23 -30
  356. package/frontend/src/components/layout/AppHeader.tsx +131 -91
  357. package/frontend/src/components/layout/AppSidebar.tsx +80 -170
  358. package/frontend/src/components/layout/Layout.tsx +12 -23
  359. package/frontend/src/components/layout/PrimaryMenu.tsx +187 -0
  360. package/frontend/src/components/layout/SecondaryMenu.tsx +70 -0
  361. package/frontend/src/components/layout/index.ts +5 -0
  362. package/frontend/src/components/radix/Tooltip.tsx +24 -13
  363. package/frontend/src/components/radix/index.ts +22 -0
  364. package/frontend/src/features/ai/components/AIConfigCard.tsx +129 -83
  365. package/frontend/src/features/ai/components/AIEmptyState.tsx +12 -7
  366. package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +101 -0
  367. package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -0
  368. package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -0
  369. package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -0
  370. package/frontend/src/features/ai/components/index.ts +6 -0
  371. package/frontend/src/features/ai/helpers.ts +57 -71
  372. package/frontend/src/features/ai/hooks/useAIConfigs.ts +39 -113
  373. package/frontend/src/features/ai/hooks/useAIUsage.ts +0 -2
  374. package/frontend/src/features/ai/pages/AIPage.tsx +166 -0
  375. package/frontend/src/features/ai/services/ai.service.ts +5 -5
  376. package/frontend/src/features/auth/components/AuthPreview.tsx +96 -0
  377. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +54 -30
  378. package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
  379. package/frontend/src/features/auth/components/UsersDataGrid.tsx +50 -14
  380. package/frontend/src/features/auth/components/index.ts +5 -0
  381. package/frontend/src/features/auth/helpers.tsx +208 -0
  382. package/frontend/src/features/auth/hooks/useAnonToken.ts +30 -0
  383. package/frontend/src/features/auth/hooks/useAuthConfig.ts +48 -0
  384. package/frontend/src/features/auth/hooks/useOAuthConfig.ts +14 -10
  385. package/frontend/src/features/auth/hooks/useUsers.ts +43 -5
  386. package/frontend/src/features/auth/index.ts +3 -2
  387. package/frontend/src/features/auth/pages/AuthMethodsPage.tsx +275 -0
  388. package/frontend/src/features/auth/pages/ConfigurationPage.tsx +395 -0
  389. package/frontend/src/features/auth/pages/UsersPage.tsx +257 -0
  390. package/frontend/src/features/auth/services/anonToken.service.ts +11 -0
  391. package/frontend/src/features/auth/services/config.service.ts +19 -0
  392. package/frontend/src/features/auth/services/{oauth.service.ts → oauth-config.service.ts} +4 -4
  393. package/frontend/src/features/auth/services/{auth.service.ts → user.service.ts} +7 -53
  394. package/frontend/src/features/dashboard/components/ConnectionSuccessBanner.tsx +35 -0
  395. package/frontend/src/features/dashboard/components/PromptCard.tsx +21 -0
  396. package/frontend/src/features/dashboard/components/PromptDialog.tsx +103 -0
  397. package/frontend/src/features/dashboard/components/StatsCard.tsx +50 -0
  398. package/frontend/src/features/dashboard/components/index.ts +4 -0
  399. package/frontend/src/features/dashboard/pages/DashboardPage.tsx +212 -0
  400. package/frontend/src/features/dashboard/prompts/ai-chatbot.ts +13 -0
  401. package/frontend/src/features/dashboard/prompts/crm-system.ts +13 -0
  402. package/frontend/src/features/dashboard/prompts/ecommerce-platform.ts +12 -0
  403. package/frontend/src/features/dashboard/prompts/index.ts +31 -0
  404. package/frontend/src/features/dashboard/prompts/instagram-clone.ts +11 -0
  405. package/frontend/src/features/dashboard/prompts/notion-clone.ts +14 -0
  406. package/frontend/src/features/dashboard/prompts/reddit-clone.ts +12 -0
  407. package/frontend/src/features/database/components/DatabaseDataGrid.tsx +48 -17
  408. package/frontend/src/features/database/components/ForeignKeyCell.tsx +15 -34
  409. package/frontend/src/features/database/components/ForeignKeyPopover.tsx +19 -20
  410. package/frontend/src/features/database/components/LinkRecordModal.tsx +120 -125
  411. package/frontend/src/features/database/components/RecordFormDialog.tsx +22 -33
  412. package/frontend/src/features/database/components/RecordFormField.tsx +45 -47
  413. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  414. package/frontend/src/features/database/components/TableEmptyState.tsx +6 -5
  415. package/frontend/src/features/database/components/TableForm.tsx +28 -19
  416. package/frontend/src/features/database/components/TableFormColumn.tsx +2 -3
  417. package/frontend/src/features/database/components/TableSidebar.tsx +1 -1
  418. package/frontend/src/features/database/components/TablesEmptyState.tsx +48 -0
  419. package/frontend/src/features/database/components/TemplateCard.tsx +37 -0
  420. package/frontend/src/features/database/components/TemplatePreview.tsx +92 -0
  421. package/frontend/src/features/database/components/index.ts +19 -0
  422. package/frontend/src/features/database/constants.ts +28 -2
  423. package/frontend/src/features/database/contexts/SQLEditorContext.tsx +188 -0
  424. package/frontend/src/features/database/helpers.ts +2 -2
  425. package/frontend/src/features/database/hooks/useCSVImport.ts +29 -0
  426. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  427. package/frontend/src/features/database/hooks/useRawSQL.ts +55 -0
  428. package/frontend/src/features/database/hooks/useRecords.ts +139 -0
  429. package/frontend/src/features/database/hooks/useTables.ts +135 -0
  430. package/frontend/src/features/database/index.ts +7 -1
  431. package/frontend/src/features/database/pages/FunctionsPage.tsx +203 -0
  432. package/frontend/src/features/database/pages/IndexesPage.tsx +228 -0
  433. package/frontend/src/features/database/pages/PoliciesPage.tsx +237 -0
  434. package/frontend/src/features/database/pages/SQLEditorPage.tsx +382 -0
  435. package/frontend/src/features/database/{page/DatabasePage.tsx → pages/TablesPage.tsx} +168 -209
  436. package/frontend/src/features/database/pages/TemplatesPage.tsx +39 -0
  437. package/frontend/src/features/database/pages/TriggersPage.tsx +230 -0
  438. package/frontend/src/features/database/services/advance.service.ts +40 -0
  439. package/frontend/src/features/database/services/database.service.ts +33 -194
  440. package/frontend/src/features/database/services/record.service.ts +219 -0
  441. package/frontend/src/features/database/services/table.service.ts +58 -0
  442. package/frontend/src/features/database/templates/ai-chatbot.ts +402 -0
  443. package/frontend/src/features/database/templates/crm-system.ts +528 -0
  444. package/frontend/src/features/database/templates/ecommerce-platform.ts +553 -0
  445. package/frontend/src/features/database/templates/index.ts +34 -0
  446. package/frontend/src/features/database/templates/instagram-clone.ts +222 -0
  447. package/frontend/src/features/database/templates/notion-clone.ts +483 -0
  448. package/frontend/src/features/database/templates/reddit-clone.ts +526 -0
  449. package/frontend/src/features/functions/components/FunctionRow.tsx +2 -1
  450. package/frontend/src/features/functions/components/FunctionsSidebar.tsx +1 -1
  451. package/frontend/src/features/functions/components/SecretRow.tsx +1 -1
  452. package/frontend/src/features/functions/components/index.ts +5 -0
  453. package/frontend/src/features/functions/hooks/useFunctions.ts +4 -4
  454. package/frontend/src/features/{secrets → functions}/hooks/useSecrets.ts +5 -5
  455. package/frontend/src/features/functions/pages/FunctionsPage.tsx +148 -0
  456. package/frontend/src/features/functions/{components/SecretsContent.tsx → pages/SecretsPage.tsx} +19 -21
  457. package/frontend/src/features/functions/services/{functions.service.ts → function.service.ts} +2 -2
  458. package/frontend/src/features/{secrets/services/secrets.service.ts → functions/services/secret.service.ts} +2 -2
  459. package/frontend/src/features/login/hooks/usePartnerOrigin.ts +27 -0
  460. package/frontend/src/features/login/pages/CloudLoginPage.tsx +118 -0
  461. package/frontend/src/features/login/{page → pages}/LoginPage.tsx +16 -23
  462. package/frontend/src/features/login/services/partnership.service.ts +65 -0
  463. package/frontend/src/features/logs/components/LogsDataGrid.tsx +89 -0
  464. package/frontend/src/features/logs/components/SeverityBadge.tsx +18 -0
  465. package/frontend/src/features/logs/components/index.ts +2 -0
  466. package/frontend/src/features/logs/helpers.ts +24 -0
  467. package/frontend/src/features/logs/hooks/useAuditLogs.ts +4 -4
  468. package/frontend/src/features/logs/hooks/useLogSources.ts +137 -0
  469. package/frontend/src/features/logs/hooks/useLogs.ts +163 -0
  470. package/frontend/src/features/logs/hooks/useMcpUsage.ts +128 -0
  471. package/frontend/src/features/logs/index.ts +8 -2
  472. package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +91 -38
  473. package/frontend/src/features/logs/pages/LogsPage.tsx +152 -0
  474. package/frontend/src/features/logs/pages/MCPLogsPage.tsx +84 -0
  475. package/frontend/src/features/logs/services/audit.service.ts +63 -0
  476. package/frontend/src/features/logs/services/log.service.ts +15 -110
  477. package/frontend/src/features/logs/services/usage.service.ts +31 -0
  478. package/frontend/src/features/onboard/components/McpConnectionStatus.tsx +68 -0
  479. package/frontend/src/features/onboard/components/OnboardingModal.tsx +267 -0
  480. package/frontend/src/features/onboard/components/VideoDemoModal.tsx +38 -0
  481. package/frontend/src/features/onboard/components/index.ts +4 -0
  482. package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +2 -2
  483. package/frontend/src/features/onboard/components/mcp/{mcp-helper.tsx → helpers.tsx} +8 -8
  484. package/frontend/src/features/onboard/components/mcp/index.ts +2 -3
  485. package/frontend/src/features/onboard/index.ts +13 -3
  486. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  487. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  488. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  489. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  490. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  491. package/frontend/src/features/realtime/index.ts +11 -0
  492. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  493. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  494. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  495. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  496. package/frontend/src/features/storage/components/BucketEmptyState.tsx +9 -6
  497. package/frontend/src/features/storage/components/BucketFormDialog.tsx +25 -41
  498. package/frontend/src/features/storage/components/FilePreviewDialog.tsx +20 -8
  499. package/frontend/src/features/storage/components/StorageDataGrid.tsx +4 -3
  500. package/frontend/src/features/storage/components/StorageManager.tsx +23 -34
  501. package/frontend/src/features/storage/components/index.ts +12 -0
  502. package/frontend/src/features/storage/hooks/useStorage.ts +208 -0
  503. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +41 -143
  504. package/frontend/src/features/storage/services/storage.service.ts +22 -1
  505. package/frontend/src/features/visualizer/components/AuthNode.tsx +72 -56
  506. package/frontend/src/features/visualizer/components/BucketNode.tsx +4 -4
  507. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +108 -80
  508. package/frontend/src/features/visualizer/components/TableNode.tsx +34 -41
  509. package/frontend/src/features/visualizer/components/VisualizerSkeleton.tsx +12 -4
  510. package/frontend/src/features/visualizer/pages/VisualizerPage.tsx +97 -0
  511. package/frontend/src/index.css +1 -0
  512. package/frontend/src/lib/analytics/posthog.tsx +27 -0
  513. package/frontend/src/lib/contexts/AuthContext.tsx +38 -31
  514. package/frontend/src/lib/contexts/SocketContext.tsx +123 -80
  515. package/frontend/src/{features/metadata → lib}/hooks/useMetadata.ts +1 -1
  516. package/frontend/src/lib/hooks/useToast.tsx +6 -2
  517. package/frontend/src/lib/routing/AppRoutes.tsx +99 -0
  518. package/frontend/src/lib/routing/RequireAuth.tsx +27 -0
  519. package/frontend/src/lib/utils/cloudMessaging.ts +20 -0
  520. package/frontend/src/lib/utils/menuItems.ts +207 -0
  521. package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
  522. package/frontend/src/lib/utils/utils.ts +32 -1
  523. package/frontend/src/vite-env.d.ts +1 -0
  524. package/frontend/tsconfig.json +25 -25
  525. package/frontend/tsconfig.node.json +9 -9
  526. package/frontend/vite.config.ts +5 -3
  527. package/functions/deno.json +24 -24
  528. package/functions/server.ts +315 -290
  529. package/functions/worker-template.js +15 -4
  530. package/i18n/README.ar.md +130 -0
  531. package/i18n/README.de.md +130 -0
  532. package/i18n/README.es.md +154 -0
  533. package/i18n/README.fr.md +134 -0
  534. package/i18n/README.hi.md +129 -0
  535. package/i18n/README.ja.md +174 -0
  536. package/i18n/README.ko.md +137 -0
  537. package/i18n/README.pt-BR.md +131 -0
  538. package/i18n/README.ru.md +129 -0
  539. package/i18n/README.zh-CN.md +133 -0
  540. package/openapi/ai.yaml +715 -688
  541. package/openapi/auth.yaml +1244 -563
  542. package/openapi/email.yaml +158 -0
  543. package/openapi/functions.yaml +475 -475
  544. package/openapi/health.yaml +29 -29
  545. package/openapi/logs.yaml +223 -223
  546. package/openapi/metadata.yaml +177 -177
  547. package/openapi/realtime.yaml +699 -0
  548. package/openapi/records.yaml +381 -381
  549. package/openapi/secrets.yaml +370 -370
  550. package/openapi/storage.yaml +875 -875
  551. package/openapi/tables.yaml +463 -463
  552. package/package.json +97 -88
  553. package/shared-schemas/package.json +31 -31
  554. package/shared-schemas/src/ai-api.schema.ts +34 -58
  555. package/shared-schemas/src/ai.schema.ts +63 -54
  556. package/shared-schemas/src/auth-api.schema.ts +352 -193
  557. package/shared-schemas/src/auth.schema.ts +43 -7
  558. package/shared-schemas/src/cloud-events.schema.ts +57 -0
  559. package/shared-schemas/src/database-api.schema.ts +35 -4
  560. package/shared-schemas/src/database.schema.ts +40 -1
  561. package/shared-schemas/src/docs.schema.ts +26 -0
  562. package/shared-schemas/src/email-api.schema.ts +30 -0
  563. package/shared-schemas/src/index.ts +5 -0
  564. package/shared-schemas/src/logs-api.schema.ts +7 -1
  565. package/shared-schemas/src/logs.schema.ts +26 -0
  566. package/shared-schemas/src/metadata.schema.ts +18 -4
  567. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  568. package/shared-schemas/src/realtime.schema.ts +143 -0
  569. package/shared-schemas/tsconfig.json +21 -21
  570. package/tsconfig.json +7 -7
  571. package/zeabur/README.md +13 -0
  572. package/zeabur/template.yml +1032 -0
  573. package/.github/workflows/deploy-aws.yml +0 -130
  574. package/backend/src/api/routes/agent.ts +0 -29
  575. package/backend/src/api/routes/auth.oauth.ts +0 -482
  576. package/backend/src/api/routes/auth.ts +0 -386
  577. package/backend/src/api/routes/docs.ts +0 -66
  578. package/backend/src/api/routes/functions.ts +0 -183
  579. package/backend/src/api/routes/openapi.ts +0 -82
  580. package/backend/src/api/routes/usage.ts +0 -96
  581. package/backend/src/core/ai/client.ts +0 -242
  582. package/backend/src/core/ai/model.ts +0 -117
  583. package/backend/src/core/auth/auth.ts +0 -780
  584. package/backend/src/core/database/manager.ts +0 -178
  585. package/backend/src/core/database/table.ts +0 -772
  586. package/backend/src/core/documentation/agent.ts +0 -689
  587. package/backend/src/core/documentation/openapi.ts +0 -856
  588. package/backend/src/core/logs/analytics.ts +0 -76
  589. package/backend/src/core/logs/providers/localdb.provider.ts +0 -246
  590. package/backend/src/core/socket/socket.ts +0 -388
  591. package/backend/src/core/storage/storage.ts +0 -923
  592. package/backend/src/utils/cloud-token.ts +0 -39
  593. package/backend/src/utils/helpers.ts +0 -49
  594. package/backend/src/utils/uuid.ts +0 -9
  595. package/backend/tests/manual/test-better-auth.sh +0 -303
  596. package/docker-init/db/logs.sql +0 -9
  597. package/frontend/README.md +0 -112
  598. package/frontend/src/components/datagrid/index.tsx +0 -20
  599. package/frontend/src/components/layout/CloudLayout.tsx +0 -95
  600. package/frontend/src/features/ai/components/AIConfigDialog.tsx +0 -76
  601. package/frontend/src/features/ai/components/AIConfigForm.tsx +0 -222
  602. package/frontend/src/features/ai/components/fields/ModalityField.tsx +0 -87
  603. package/frontend/src/features/ai/components/fields/ModelSelectionField.tsx +0 -134
  604. package/frontend/src/features/ai/components/fields/SystemPromptField.tsx +0 -33
  605. package/frontend/src/features/ai/page/AIPage.tsx +0 -178
  606. package/frontend/src/features/auth/components/AddOAuthDialog.tsx +0 -106
  607. package/frontend/src/features/auth/components/AuthMethodTab.tsx +0 -238
  608. package/frontend/src/features/auth/components/UsersTab.tsx +0 -114
  609. package/frontend/src/features/auth/page/AuthenticationPage.tsx +0 -169
  610. package/frontend/src/features/dashboard/page/DashboardPage.tsx +0 -194
  611. package/frontend/src/features/database/hooks/UseLinkModal.tsx +0 -78
  612. package/frontend/src/features/functions/components/FunctionViewer.tsx +0 -46
  613. package/frontend/src/features/functions/components/FunctionsContent.tsx +0 -88
  614. package/frontend/src/features/functions/page/FunctionsPage.tsx +0 -28
  615. package/frontend/src/features/login/components/AuthErrorBoundary.tsx +0 -87
  616. package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
  617. package/frontend/src/features/login/page/CloudLoginPage.tsx +0 -93
  618. package/frontend/src/features/logs/components/AnalyticsLogsTable.tsx +0 -313
  619. package/frontend/src/features/logs/components/LogsTable.tsx +0 -199
  620. package/frontend/src/features/logs/page/AnalyticsLogsPage.tsx +0 -530
  621. package/frontend/src/features/metadata/index.ts +0 -0
  622. package/frontend/src/features/metadata/page/MetadataPage.tsx +0 -136
  623. package/frontend/src/features/onboard/components/CompletionCard.tsx +0 -41
  624. package/frontend/src/features/onboard/components/OnboardButton.tsx +0 -84
  625. package/frontend/src/features/onboard/components/StepContent.tsx +0 -91
  626. package/frontend/src/features/onboard/components/TestConnectionStep.tsx +0 -53
  627. package/frontend/src/features/onboard/components/mcp/McpInstallation.tsx +0 -144
  628. package/frontend/src/features/onboard/page/OnBoardPage.tsx +0 -104
  629. package/frontend/src/features/onboard/types.ts +0 -8
  630. package/frontend/src/features/visualizer/page/VisualizerPage.tsx +0 -127
  631. package/frontend/src/lib/contexts/OnboardStepContext.tsx +0 -68
  632. package/frontend/src/lib/hooks/useOnboardingCompletion.ts +0 -29
  633. /package/backend/src/api/{middleware → middlewares}/error.ts +0 -0
  634. /package/backend/src/api/{middleware → middlewares}/upload.ts +0 -0
  635. /package/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
@@ -1,41 +0,0 @@
1
- import { Button } from '@/components/radix/Button';
2
- import CheckedIcon from '@/assets/icons/checked.svg';
3
- import { useNavigate } from 'react-router-dom';
4
- import { useOnboardingCompletion } from '@/lib/hooks/useOnboardingCompletion';
5
- import { useEffect } from 'react';
6
-
7
- export function CompletionCard() {
8
- const navigate = useNavigate();
9
- const { markAsCompleted } = useOnboardingCompletion();
10
-
11
- // Mark as completed when this component is mounted
12
- useEffect(() => {
13
- markAsCompleted();
14
- }, [markAsCompleted]);
15
-
16
- const handleNavigate = async () => {
17
- await navigate('/dashboard');
18
- };
19
-
20
- return (
21
- <div className="border border-transparent dark:border-neutral-700 rounded-xl bg-white dark:bg-neutral-800 py-8 px-6">
22
- <div className="flex flex-col items-center justify-center gap-8">
23
- <div className="flex flex-col items-center justify-center gap-4 text-center">
24
- <img src={CheckedIcon} alt="Checked" className="w-10 h-10" />
25
- <p className="text-lg font-semibold text-black dark:text-white">You are all set!</p>
26
- <p className="text-zinc-500 dark:text-zinc-400 text-sm">
27
- Your AI agent is now full-stack — powered by <b>InsForge</b>.
28
- <br /> Let&apos;s build something <b>real</b>.
29
- </p>
30
- </div>
31
- <Button
32
- variant="default"
33
- className="px-4 py-2 h-10 text-sm font-medium dark:bg-emerald-300 dark:text-black dark:hover:bg-emerald-200"
34
- onClick={() => void handleNavigate()}
35
- >
36
- Go to Dashboard
37
- </Button>
38
- </div>
39
- </div>
40
- );
41
- }
@@ -1,84 +0,0 @@
1
- import { Link, useLocation } from 'react-router-dom';
2
- import { cn } from '@/lib/utils/utils';
3
- import { Button } from '@/components/radix/Button';
4
- import {
5
- Tooltip,
6
- TooltipContent,
7
- TooltipProvider,
8
- TooltipTrigger,
9
- } from '@/components/radix/Tooltip';
10
- import { CircularStepper } from '@/components/Stepper';
11
- import { useOnboardStep, STEP_DESCRIPTIONS } from '@/lib/contexts/OnboardStepContext';
12
-
13
- interface OnboardButtonProps {
14
- isCollapsed: boolean;
15
- }
16
-
17
- export function OnboardButton({ isCollapsed }: OnboardButtonProps) {
18
- const location = useLocation();
19
- const { currentStep, totalSteps } = useOnboardStep();
20
-
21
- const isActive = location.pathname === '/dashboard/onboard';
22
-
23
- // Limit displayed step to totalSteps for the sidebar
24
- const displayStep = Math.min(currentStep, totalSteps);
25
- const currentDescription = STEP_DESCRIPTIONS[displayStep - 1];
26
-
27
- return (
28
- <TooltipProvider delayDuration={300}>
29
- <Tooltip>
30
- <TooltipTrigger asChild>
31
- <Link to="/dashboard/onboard" className="block">
32
- <Button
33
- variant="ghost"
34
- className={cn(
35
- 'w-full h-16 relative transition-all duration-200 ease-in-out border-2 rounded-lg justify-start',
36
- isCollapsed ? 'pl-[11px] pr-2.5' : 'px-3.5',
37
- isActive
38
- ? 'border-zinc-900 dark:bg-emerald-300 dark:hover:bg-emerald-200 bg-zinc-900 hover:bg-zinc-900 '
39
- : 'border-zinc-200 dark:border-neutral-700 hover:bg-zinc-50 dark:hover:bg-neutral-600 hover:border-zinc-300 dark:text-white'
40
- )}
41
- >
42
- <CircularStepper
43
- currentStep={displayStep}
44
- totalSteps={totalSteps}
45
- size={40}
46
- isActive={isActive}
47
- />
48
- {!isCollapsed && (
49
- <div className="absolute left-16.5 flex flex-col items-start">
50
- <span
51
- className={cn(
52
- 'font-semibold text-sm transition-colors duration-200',
53
- isActive ? 'text-zinc-50 dark:text-black' : 'text-zinc-950 dark:text-white'
54
- )}
55
- >
56
- Get Started
57
- </span>
58
- <span
59
- className={cn(
60
- 'text-xs transition-colors duration-200',
61
- isActive
62
- ? 'text-text-gray dark:text-zinc-800'
63
- : 'text-zinc-500 dark:text-white'
64
- )}
65
- >
66
- {currentDescription}
67
- </span>
68
- </div>
69
- )}
70
- </Button>
71
- </Link>
72
- </TooltipTrigger>
73
- {isCollapsed && (
74
- <TooltipContent side="right">
75
- <div className="text-center">
76
- <p className="font-semibold">Get Started</p>
77
- <p className="text-xs text-text-gray dark:text-neutural-600">{currentDescription}</p>
78
- </div>
79
- </TooltipContent>
80
- )}
81
- </Tooltip>
82
- </TooltipProvider>
83
- );
84
- }
@@ -1,91 +0,0 @@
1
- import { OnboardStep } from '../types';
2
- import { CodeBlock } from '@/components/CodeBlock';
3
- import { McpInstallation } from '@/features/onboard/components/mcp';
4
- import { TestConnectionStep } from './TestConnectionStep';
5
-
6
- interface StepContentProps {
7
- step: OnboardStep;
8
- }
9
-
10
- export function StepContent({ step }: StepContentProps) {
11
- switch (step) {
12
- case OnboardStep.INSTALL_NODEJS:
13
- return (
14
- <div className="border border-transparent dark:border-neutral-800 rounded-xl bg-white dark:bg-neutral-800 py-8 px-6 space-y-4">
15
- <div>
16
- <p className="text-zinc-950 dark:text-white text-sm mb-4">
17
- Install{' '}
18
- <a
19
- href="https://nodejs.org"
20
- target="_blank"
21
- rel="noopener noreferrer"
22
- className="text-link-blue underline inline-flex items-center gap-1"
23
- >
24
- Node.js
25
- </a>
26
- . Visit the official Node.js website at{' '}
27
- <a
28
- href="https://nodejs.org/"
29
- target="_blank"
30
- rel="noopener noreferrer"
31
- className="text-link-blue underline"
32
- >
33
- https://nodejs.org/
34
- </a>
35
- </p>
36
- <p className="text-zinc-950 dark:text-white text-sm">
37
- Verify installation by opening a terminal and running:
38
- </p>
39
- </div>
40
-
41
- <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
42
- <CodeBlock
43
- code="node --version"
44
- className="dark:bg-neutral-700 dark:text-white"
45
- buttonClassName="dark:bg-neutral-800 dark:hover:bg-neutral-800"
46
- />
47
- <CodeBlock
48
- code="npm --version"
49
- className="dark:bg-neutral-700 dark:text-white"
50
- buttonClassName="dark:bg-neutral-800 dark:hover:bg-neutral-800"
51
- />
52
- </div>
53
- </div>
54
- );
55
-
56
- case OnboardStep.INSTALL_MCP:
57
- return <McpInstallation TabListClassName="dark:bg-neutral-800" />;
58
-
59
- case OnboardStep.TEST_CONNECTION:
60
- return <TestConnectionStep />;
61
-
62
- case OnboardStep.FINAL_SETUP:
63
- return (
64
- <div className="space-y-6 border border-transparent dark:border-neutral-700 rounded-xl bg-white dark:bg-neutral-800 py-8 px-6">
65
- <div>
66
- <p className="text-zinc-950 dark:text-white text-sm mb-4">
67
- Whenever you start a new chat session, init your AI agents with the InsForge init
68
- prompt:
69
- </p>
70
- </div>
71
-
72
- <CodeBlock
73
- code="Learn how to use InsForge"
74
- className="bg-slate-50 dark:bg-neutral-700 dark:text-white"
75
- buttonClassName="dark:bg-neutral-800 dark:hover:bg-neutral-800"
76
- />
77
-
78
- <div>
79
- <p className="text-zinc-950 dark:text-white text-sm">Then you can start building!</p>
80
- </div>
81
- </div>
82
- );
83
-
84
- default:
85
- return (
86
- <div className="text-center text-zinc-500">
87
- <p>Step content not found</p>
88
- </div>
89
- );
90
- }
91
- }
@@ -1,53 +0,0 @@
1
- import { CodeBlock } from '@/components/CodeBlock';
2
- import { ServerEvents, useSocket } from '@/lib/contexts/SocketContext';
3
- import { ClockIcon } from 'lucide-react';
4
- import CheckedIcon from '@/assets/icons/checked.svg';
5
- import { useEffect, useState } from 'react';
6
-
7
- export function TestConnectionStep() {
8
- const [showSuccess, setShowSuccess] = useState(false);
9
-
10
- // Use the Socket hook - it will auto-connect
11
- const { socket } = useSocket();
12
-
13
- // Show success message when mcp connects
14
- useEffect(() => {
15
- const handleMcpConnected = () => setShowSuccess(true);
16
-
17
- socket?.on(ServerEvents.MCP_CONNECTED, handleMcpConnected);
18
-
19
- return () => {
20
- socket?.off(ServerEvents.MCP_CONNECTED, handleMcpConnected);
21
- };
22
- }, [socket]);
23
-
24
- return (
25
- <div className="space-y-6 border border-transparent dark:border-neutral-700 rounded-xl bg-white dark:bg-neutral-800 py-8 px-6">
26
- <div>
27
- <p className="text-zinc-950 dark:text-white text-sm mb-4">
28
- Open your agent&apos;s chat interface, copy and send this:
29
- </p>
30
- </div>
31
-
32
- <CodeBlock
33
- code="I'm using InsForge as my backend platform, what is my current backend structure?"
34
- className="bg-slate-50 dark:bg-neutral-700 dark:text-white"
35
- buttonClassName="dark:bg-neutral-800 dark:hover:bg-neutral-800"
36
- />
37
-
38
- {!showSuccess && (
39
- <div className="flex items-center gap-2 text-zinc-500 dark:text-neutral-400">
40
- <ClockIcon className="w-5 h-5" />
41
- <p className="text-sm">Waiting for connection</p>
42
- </div>
43
- )}
44
-
45
- {showSuccess && (
46
- <div className="flex items-center gap-2 text-green-600 dark:text-green-400">
47
- <img src={CheckedIcon} alt="Checked" className="w-5 h-5" />
48
- <p className="text-sm">API Call Detected, Connection Succeeded</p>
49
- </div>
50
- )}
51
- </div>
52
- );
53
- }
@@ -1,144 +0,0 @@
1
- import { useState, useMemo } from 'react';
2
- import { cn, getBackendUrl } from '@/lib/utils/utils';
3
- import { CodeBlock } from '@/components/CodeBlock';
4
- import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/radix/Tabs';
5
- import { Alert, AlertDescription } from '@/components/radix/Alert';
6
- import { JsonHighlight } from '@/components/JsonHighlight';
7
- import { CursorDeeplinkGenerator } from './CursorDeeplinkGenerator';
8
- import {
9
- MCP_AGENTS,
10
- createMCPConfig,
11
- GenerateInstallCommand,
12
- type MCPAgent,
13
- type PlatformType,
14
- } from './mcp-helper';
15
- import { useApiKey } from '@/features/metadata/hooks/useMetadata';
16
-
17
- interface McpInstallerProps {
18
- className?: string;
19
- defaultAgent?: string;
20
- TabListClassName?: string;
21
- }
22
-
23
- export function McpInstallation({
24
- className,
25
- defaultAgent = 'cursor',
26
- TabListClassName,
27
- }: McpInstallerProps) {
28
- const [selectedAgent, setSelectedAgent] = useState<MCPAgent>(() => {
29
- return MCP_AGENTS.find((agent) => agent.id === defaultAgent) || MCP_AGENTS[0];
30
- });
31
- const [activeTab, setActiveTab] = useState<PlatformType>('macos-linux');
32
-
33
- const { apiKey } = useApiKey();
34
-
35
- const handleTabChange = (value: string) => {
36
- setActiveTab(value as PlatformType);
37
- };
38
-
39
- const mcpConfig = useMemo(() => {
40
- return createMCPConfig(apiKey || '', activeTab, getBackendUrl());
41
- }, [apiKey, activeTab]);
42
-
43
- return (
44
- <div className={cn('w-full flex flex-col gap-2 overflow-hidden', className)}>
45
- {/* Agent Tabs */}
46
- <Tabs
47
- value={selectedAgent.id}
48
- onValueChange={(value) => {
49
- const agent = MCP_AGENTS.find((a) => a.id === value);
50
- if (agent) {
51
- setSelectedAgent(agent);
52
- }
53
- }}
54
- >
55
- <TabsList
56
- className={cn(
57
- 'grid w-full grid-cols-7 bg-neutral-200 dark:bg-neutral-900 p-1 rounded-lg h-fit mb-2',
58
- TabListClassName
59
- )}
60
- >
61
- {MCP_AGENTS.map((agent) => (
62
- <TabsTrigger
63
- key={agent.id}
64
- value={agent.id}
65
- className="rounded-sm px-4 py-2 text-sm font-normal transition-all duration-200 flex flex-row items-center justify-start gap-1
66
- data-[state=active]:bg-white dark:data-[state=active]:bg-neutral-700 dark:data-[state=active]:text-white data-[state=active]:text-gray-900 data-[state=active]:shadow-sm
67
- data-[state=inactive]:text-gray-600 dark:data-[state=inactive]:text-neutral-400 data-[state=inactive]:hover:text-gray-900"
68
- >
69
- {agent.logo}
70
- {agent.displayName}
71
- </TabsTrigger>
72
- ))}
73
- </TabsList>
74
-
75
- {/* Content for each agent */}
76
- {MCP_AGENTS.map((agent) => (
77
- <TabsContent key={agent.id} value={agent.id} className="mt-0">
78
- {agent.id !== 'mcp' ? (
79
- <div className="bg-white dark:bg-neutral-700 px-6 py-8 flex flex-col items-start justify-start gap-4 rounded-xl border border-border-gray dark:border-neutral-700">
80
- {agent.id === 'cursor' && (
81
- <CursorDeeplinkGenerator apiKey={apiKey} os={activeTab} />
82
- )}
83
- {/* Alternative Installation */}
84
- <p className="text-zinc-950 dark:text-neutral-300 text-sm">
85
- {agent.id === 'cursor' ? 'or copy' : 'Copy'} the command below and paste it to
86
- terminal
87
- </p>
88
- {/* Command Block */}
89
- <CodeBlock
90
- code={GenerateInstallCommand(agent, apiKey || '')}
91
- className="bg-slate-50 dark:bg-neutral-800 w-full font-normal text-blue-800 dark:text-blue-400"
92
- />
93
- </div>
94
- ) : (
95
- <div className="px-6 py-8 bg-white dark:bg-neutral-800 overflow-hidden rounded-xl border border-border-gray dark:border-neutral-700">
96
- <p className="text-zinc-950 dark:text-white text-sm mb-3">
97
- Copy the configuration below and add it to your AI assistant.
98
- </p>
99
-
100
- {/* OS Tabs */}
101
- <div className="flex items-center justify-between">
102
- <Tabs value={activeTab} onValueChange={handleTabChange} className="w-full">
103
- <TabsList className="grid w-60 grid-cols-2 bg-gray-100 dark:bg-neutral-900 p-1.5 rounded-lg h-fit">
104
- <TabsTrigger
105
- value="macos-linux"
106
- className="h-7 rounded-sm px-3 py-1 text-sm font-medium transition-all duration-200
107
- data-[state=active]:bg-white dark:data-[state=active]:bg-neutral-700 dark:data-[state=active]:text-white data-[state=active]:text-gray-900 data-[state=active]:shadow-sm
108
- data-[state=inactive]:text-gray-600 dark:data-[state=inactive]:text-neutral-400 data-[state=inactive]:hover:text-gray-900"
109
- >
110
- MacOS/Linux
111
- </TabsTrigger>
112
- <TabsTrigger
113
- value="windows"
114
- className="h-7 rounded-sm px-3 py-1 text-sm font-medium transition-all duration-200
115
- data-[state=active]:bg-white dark:data-[state=active]:bg-neutral-700 dark:data-[state=active]:text-white data-[state=active]:text-gray-900 data-[state=active]:shadow-sm
116
- data-[state=inactive]:text-gray-600 dark:data-[state=inactive]:text-neutral-400 data-[state=inactive]:hover:text-gray-900"
117
- >
118
- Windows
119
- </TabsTrigger>
120
- </TabsList>
121
- </Tabs>
122
- </div>
123
-
124
- {/* Configuration content */}
125
- <div className="mt-1">
126
- {!apiKey && (
127
- <Alert className="border-yellow-200 bg-yellow-50 mb-4">
128
- <AlertDescription className="text-yellow-800">
129
- No API key found. Please ensure the backend is running and you&apos;re
130
- logged in as an admin.
131
- </AlertDescription>
132
- </Alert>
133
- )}
134
-
135
- <JsonHighlight json={JSON.stringify(mcpConfig, null, 2)} />
136
- </div>
137
- </div>
138
- )}
139
- </TabsContent>
140
- ))}
141
- </Tabs>
142
- </div>
143
- );
144
- }
@@ -1,104 +0,0 @@
1
- import { useState, useEffect } from 'react';
2
- import { useNavigate, useSearchParams } from 'react-router-dom';
3
- import { Button } from '@/components/radix/Button';
4
- import { useOnboardStep, STEP_DESCRIPTIONS } from '@/lib/contexts/OnboardStepContext';
5
- import { type OnboardStep } from '../types';
6
- import { LinearStepper } from '@/components/Stepper';
7
- import { StepContent } from '../components/StepContent';
8
- import { CompletionCard } from '../components/CompletionCard';
9
-
10
- export default function OnBoardPage() {
11
- const navigate = useNavigate();
12
- const [searchParams, setSearchParams] = useSearchParams();
13
- const { currentStep, updateStep, totalSteps } = useOnboardStep();
14
- const [isCompleted, setIsCompleted] = useState(false);
15
-
16
- // Handle reinstall with step parameter
17
- useEffect(() => {
18
- const stepParam = searchParams.get('step');
19
- if (stepParam === '1') {
20
- updateStep(1);
21
- setIsCompleted(false);
22
- setSearchParams({});
23
- }
24
- }, [searchParams, setSearchParams, updateStep]);
25
-
26
- const handleDismiss = async () => {
27
- await navigate('/dashboard');
28
- };
29
-
30
- const handleNext = () => {
31
- if (currentStep < totalSteps) {
32
- updateStep((currentStep + 1) as OnboardStep);
33
- } else if (currentStep === totalSteps) {
34
- setIsCompleted(true);
35
- }
36
- };
37
-
38
- const handleBack = () => {
39
- if (currentStep > 1) {
40
- updateStep((currentStep - 1) as OnboardStep);
41
- }
42
- };
43
-
44
- return (
45
- <div className="min-h-screen bg-bg-gray dark:bg-neutral-900">
46
- <div className="container max-w-[1080px] mx-auto px-6 py-12">
47
- {/* Header with Linear Stepper */}
48
- <div className="mb-12 space-y-3">
49
- <h1 className="text-2xl font-bold text-black dark:text-white">Get Started</h1>
50
- <LinearStepper
51
- currentStep={currentStep}
52
- totalSteps={totalSteps}
53
- stepLabels={STEP_DESCRIPTIONS}
54
- isCompleted={isCompleted}
55
- />
56
- </div>
57
-
58
- {/* Main Content Card */}
59
- {isCompleted ? (
60
- <CompletionCard />
61
- ) : (
62
- <div className="space-y-3">
63
- <p className="text-black dark:text-white text-lg font-semibold">
64
- {STEP_DESCRIPTIONS[currentStep - 1]}
65
- </p>
66
- <StepContent step={currentStep} />
67
-
68
- {/* Action Buttons */}
69
- <div className="flex justify-between items-center">
70
- {/* Dismiss Button - Left */}
71
- <Button
72
- variant="outline"
73
- onClick={() => void handleDismiss()}
74
- className="h-10 w-30 py-2 text-zinc-950 dark:text-white dark:border-neutral-700 dark:bg-neutral-700"
75
- >
76
- Dismiss
77
- </Button>
78
-
79
- {/* Navigation Buttons - Right */}
80
- <div className="flex space-x-4">
81
- {currentStep > 1 && (
82
- <Button
83
- variant="outline"
84
- onClick={() => void handleBack()}
85
- className="h-10 w-30 text-zinc-950 dark:text-white dark:border-neutral-700 dark:bg-neutral-700"
86
- >
87
- Back
88
- </Button>
89
- )}
90
- <Button
91
- variant="default"
92
- onClick={() => void handleNext()}
93
- className="h-10 w-30 dark:bg-emerald-300 dark:text-black dark:hover:bg-emerald-200 disabled:opacity-50 disabled:cursor-not-allowed"
94
- >
95
- {currentStep === totalSteps ? 'Complete' : 'Next'}
96
- </Button>
97
- </div>
98
- </div>
99
- </div>
100
- )}
101
- </div>
102
- </div>
103
- );
104
- }
@@ -1,8 +0,0 @@
1
- export enum OnboardStep {
2
- INSTALL_NODEJS = 1,
3
- INSTALL_MCP = 2,
4
- TEST_CONNECTION = 3,
5
- FINAL_SETUP = 4,
6
- }
7
-
8
- export const TOTAL_STEPS = Object.keys(OnboardStep).filter((key) => !isNaN(Number(key))).length;
@@ -1,127 +0,0 @@
1
- import { useQuery, useQueryClient } from '@tanstack/react-query';
2
- import { RefreshCw } from 'lucide-react';
3
- import { useCallback, useEffect } from 'react';
4
- import { useMetadata } from '@/features/metadata/hooks/useMetadata';
5
- import { authService } from '@/features/auth/services/auth.service';
6
- import { SchemaVisualizer, VisualizerSkeleton } from '../components';
7
- import { Button } from '@/components/radix/Button';
8
- import { Alert, AlertDescription } from '@/components/radix/Alert';
9
- import {
10
- useSocket,
11
- ServerEvents,
12
- DataUpdatePayload,
13
- DataUpdateResourceType,
14
- SocketMessage,
15
- } from '@/lib/contexts/SocketContext';
16
-
17
- const VisualizerPage = () => {
18
- const { socket, isConnected } = useSocket();
19
- const queryClient = useQueryClient();
20
-
21
- const {
22
- metadata,
23
- isLoading: metadataLoading,
24
- error: metadataError,
25
- refetch: refetchMetadata,
26
- } = useMetadata();
27
-
28
- const {
29
- data: userStats,
30
- isLoading: userStatsLoading,
31
- refetch: refetchUserStats,
32
- } = useQuery({
33
- queryKey: ['user-stats-visualizer'],
34
- queryFn: async () => {
35
- const response = await authService.getUsers();
36
- return { userCount: response.pagination.total };
37
- },
38
- staleTime: 5 * 60 * 1000,
39
- gcTime: 10 * 60 * 1000,
40
- });
41
-
42
- const isLoading = metadataLoading || userStatsLoading;
43
- const error = metadataError;
44
-
45
- const handleRefresh = useCallback(() => {
46
- void refetchMetadata();
47
- void refetchUserStats();
48
- }, [refetchMetadata, refetchUserStats]);
49
-
50
- // Listen for schema change events
51
- useEffect(() => {
52
- if (!socket || !isConnected) {
53
- return;
54
- }
55
-
56
- const handleDataUpdate = (message: SocketMessage<DataUpdatePayload>) => {
57
- if (
58
- message.payload?.resource === DataUpdateResourceType.METADATA ||
59
- message.payload?.resource === DataUpdateResourceType.DATABASE_SCHEMA ||
60
- message.payload?.resource === DataUpdateResourceType.TABLE_SCHEMA ||
61
- message.payload?.resource === DataUpdateResourceType.OAUTH_SCHEMA ||
62
- message.payload?.resource === DataUpdateResourceType.STORAGE_SCHEMA
63
- ) {
64
- // Invalidate all metadata-related queries
65
- void queryClient.invalidateQueries({ queryKey: ['metadata'] });
66
- }
67
- };
68
-
69
- socket.on(ServerEvents.DATA_UPDATE, handleDataUpdate);
70
-
71
- return () => {
72
- socket.off(ServerEvents.DATA_UPDATE, handleDataUpdate);
73
- };
74
- }, [socket, isConnected, queryClient]);
75
-
76
- if (isLoading) {
77
- return <VisualizerSkeleton />;
78
- }
79
-
80
- if (!metadata || error) {
81
- return (
82
- <div className="relative min-h-screen bg-neutral-800 overflow-hidden">
83
- {/* Dot Matrix Background */}
84
- <div
85
- className="absolute inset-0 opacity-50"
86
- style={{
87
- backgroundImage: `radial-gradient(circle, #3B3B3B 1px, transparent 1px)`,
88
- backgroundSize: '12px 12px',
89
- }}
90
- />
91
-
92
- <div className="relative z-10 flex items-center justify-center min-h-screen p-8">
93
- <Alert variant="destructive" className="max-w-md">
94
- <AlertDescription>
95
- Failed to load database schema. Please ensure the backend is running and try
96
- refreshing.
97
- </AlertDescription>
98
- <Button onClick={handleRefresh} className="mt-4 w-full" variant="outline">
99
- <RefreshCw className="w-4 h-4 mr-2" />
100
- Retry
101
- </Button>
102
- </Alert>
103
- </div>
104
- </div>
105
- );
106
- }
107
-
108
- return (
109
- <div className="relative min-h-screen bg-neutral-800 overflow-hidden">
110
- {/* Dot Matrix Background */}
111
- <div
112
- className="absolute inset-0 opacity-50"
113
- style={{
114
- backgroundImage: `radial-gradient(circle, #3B3B3B 1px, transparent 1px)`,
115
- backgroundSize: '12px 12px',
116
- }}
117
- />
118
-
119
- {/* Schema Visualizer */}
120
- <div className="relative z-10 w-full h-screen">
121
- <SchemaVisualizer metadata={metadata} userCount={userStats?.userCount} />
122
- </div>
123
- </div>
124
- );
125
- };
126
-
127
- export default VisualizerPage;