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
@@ -33,14 +33,13 @@ export interface DataGridProps<TRow extends DataGridRowType = DataGridRow> {
33
33
  pageSize?: number;
34
34
  totalRecords?: number;
35
35
  onPageChange?: (page: number) => void;
36
- emptyStateTitle?: string;
37
- emptyStateActionText?: string;
38
- onEmptyStateAction?: () => void;
36
+ emptyState?: React.ReactNode;
39
37
  rowKeyGetter?: (row: TRow) => string;
40
38
  className?: string;
41
39
  showSelection?: boolean;
42
40
  showPagination?: boolean;
43
41
  showTypeBadge?: boolean;
42
+ noPadding?: boolean;
44
43
  }
45
44
 
46
45
  // Main DataGrid component
@@ -60,16 +59,18 @@ export default function DataGrid<TRow extends DataGridRowType = DataGridRow>({
60
59
  pageSize,
61
60
  totalRecords,
62
61
  onPageChange,
63
- emptyStateTitle = 'No data available',
64
- emptyStateActionText,
65
- onEmptyStateAction,
62
+ emptyState,
66
63
  rowKeyGetter,
67
64
  className,
68
65
  showSelection = false,
69
66
  showPagination = true,
70
67
  showTypeBadge = true,
68
+ noPadding = false,
71
69
  }: DataGridProps<TRow>) {
72
70
  const { resolvedTheme } = useTheme();
71
+
72
+ const defaultRowKeyGetter = useCallback((row: TRow) => row.id || Math.random().toString(), []);
73
+ const keyGetter = rowKeyGetter || defaultRowKeyGetter;
73
74
  // Convert columns to react-data-grid format
74
75
  const gridColumns = useMemo(() => {
75
76
  const cols: Column<TRow>[] = [];
@@ -86,13 +87,13 @@ export default function DataGrid<TRow extends DataGridRowType = DataGridRow>({
86
87
  resizable: false,
87
88
  renderCell: ({ row, tabIndex }) => (
88
89
  <Checkbox
89
- checked={selectedRows.has(String(row.id))}
90
+ checked={selectedRows.has(keyGetter(row))}
90
91
  onChange={(checked) => {
91
92
  const newSelectedRows = new Set(selectedRows);
92
93
  if (checked) {
93
- newSelectedRows.add(String(row.id));
94
+ newSelectedRows.add(String(keyGetter(row)));
94
95
  } else {
95
- newSelectedRows.delete(String(row.id));
96
+ newSelectedRows.delete(String(keyGetter(row)));
96
97
  }
97
98
  onSelectedRowsChange(newSelectedRows);
98
99
  }}
@@ -180,16 +181,13 @@ export default function DataGrid<TRow extends DataGridRowType = DataGridRow>({
180
181
  sortColumns,
181
182
  showSelection,
182
183
  showTypeBadge,
184
+ keyGetter,
183
185
  ]);
184
186
 
185
- // Default row key getter
186
- const defaultRowKeyGetter = useCallback((row: TRow) => row.id || Math.random().toString(), []);
187
- const keyGetter = rowKeyGetter || defaultRowKeyGetter;
188
-
189
187
  // Loading state - only show full loading screen if not sorting
190
188
  if (loading && !isSorting) {
191
189
  return (
192
- <div className="h-full flex items-center justify-center bg-white dark:bg-neutral-800">
190
+ <div className="h-full flex items-center justify-center bg-bg-gray dark:bg-neutral-800">
193
191
  <div className="text-gray-500 dark:text-zinc-400">Loading...</div>
194
192
  </div>
195
193
  );
@@ -198,11 +196,16 @@ export default function DataGrid<TRow extends DataGridRowType = DataGridRow>({
198
196
  return (
199
197
  <div
200
198
  className={cn(
201
- 'h-full flex flex-col bg-bg-gray dark:bg-neutral-800 overflow-hidden',
199
+ 'h-full flex flex-col overflow-hidden bg-bg-gray dark:bg-neutral-800',
202
200
  className
203
201
  )}
204
202
  >
205
- <div className="flex-1 overflow-hidden relative mx-3 border border-border-gray dark:border-0">
203
+ <div
204
+ className={cn(
205
+ 'flex-1 overflow-hidden relative border border-border-gray dark:border-neutral-700 rounded-sm',
206
+ !noPadding && 'mx-3'
207
+ )}
208
+ >
206
209
  <ReactDataGrid
207
210
  columns={gridColumns}
208
211
  rows={isRefreshing ? [] : data}
@@ -218,23 +221,13 @@ export default function DataGrid<TRow extends DataGridRowType = DataGridRow>({
218
221
  rowHeight={36}
219
222
  enableVirtualization={true}
220
223
  renderers={{
221
- noRowsFallback: (
224
+ noRowsFallback: emptyState ? (
225
+ <div className="absolute inset-x-0 top-0 mt-13 py-8 flex items-center justify-center bg-white dark:bg-neutral-800">
226
+ {emptyState}
227
+ </div>
228
+ ) : (
222
229
  <div className="absolute inset-x-0 top-0 mt-13 py-8 flex items-center justify-center bg-white dark:bg-neutral-800">
223
- <div className="flex flex-col gap-1 items-center">
224
- <div className="flex flex-row gap-2.5 items-center">
225
- <div className="text-sm text-zinc-500 dark:text-zinc-400">
226
- {emptyStateTitle}
227
- </div>
228
- {emptyStateActionText && onEmptyStateAction && (
229
- <button
230
- onClick={onEmptyStateAction}
231
- className="inline-flex items-center text-sm font-medium text-chart-blue-dark focus:outline-none focus:ring-0 dark:text-zinc-400"
232
- >
233
- {emptyStateActionText}
234
- </button>
235
- )}
236
- </div>
237
- </div>
230
+ <div className="text-sm text-zinc-500 dark:text-zinc-400">No data to display</div>
238
231
  </div>
239
232
  ),
240
233
  }}
@@ -1,9 +1,8 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import { Calendar, ChevronLeft, ChevronRight, Clock } from 'lucide-react';
3
- import { Button } from '@/components/radix/Button';
4
3
  import { cn } from '@/lib/utils/utils';
5
4
  import { format, parse } from 'date-fns';
6
- import { Popover, PopoverContent, PopoverTrigger } from '@/components/radix/Popover';
5
+ import { Button, Popover, PopoverContent, PopoverTrigger } from '@/components';
7
6
  import type { DateCellEditorProps } from './types';
8
7
  import { ColumnType } from '@insforge/shared-schemas';
9
8
 
@@ -1,8 +1,6 @@
1
1
  import { useEffect, useState } from 'react';
2
2
  import { FileJson, AlertCircle, CheckCircle } from 'lucide-react';
3
- import { Button } from '@/components/radix/Button';
4
- import { Popover, PopoverContent, PopoverTrigger } from '@/components/radix/Popover';
5
- import { ConfirmDialog } from '@/components/ConfirmDialog';
3
+ import { ConfirmDialog, Button, Popover, PopoverContent, PopoverTrigger } from '@/components';
6
4
  import { cn } from '@/lib/utils/utils';
7
5
  import type { JsonCellEditorProps } from './types';
8
6
 
@@ -182,7 +180,7 @@ export function JsonCellEditor({
182
180
  }
183
181
 
184
182
  const keys = Object.keys(parsed);
185
- if (keys.length === 0) {
183
+ if (!keys.length) {
186
184
  return '{}';
187
185
  }
188
186
  if (keys.length === 1) {
@@ -0,0 +1,23 @@
1
+ // cell editor components
2
+ export * from './cell-editors';
3
+
4
+ // datagrid types
5
+ export type * from './datagridTypes';
6
+ export type { DataGridProps } from './DataGrid';
7
+ export type {
8
+ Column,
9
+ SortColumn,
10
+ RenderCellProps,
11
+ RenderEditCellProps,
12
+ RenderHeaderCellProps,
13
+ // NOTE: react-data-grid@7.0.0-beta.47 still uses CellClickArgs.
14
+ // Future versions rename this to CellMouseArgs, so this can be updated when we bump the dependency.
15
+ CellClickArgs,
16
+ CellMouseEvent,
17
+ } from 'react-data-grid';
18
+
19
+ // datagrid components
20
+ export { default as DataGrid } from './DataGrid';
21
+ export { createDefaultCellRenderer } from './DefaultCellRenderer';
22
+ export { default as IdCell } from './IdCell';
23
+ export { default as SortableHeaderRenderer } from './SortableHeader';
@@ -1,39 +1,32 @@
1
+ // datagrid & cell editor components
2
+ export * from './datagrid';
3
+
4
+ // layout/menu components
5
+ export * from './layout';
6
+
1
7
  // Core radix/ui components
2
- export * from './radix/Button';
3
- export * from './radix/Card';
4
- export * from './radix/Input';
5
- export * from './radix/Form';
6
- export * from './radix/Tabs';
7
- export * from './radix/Badge';
8
- export * from './radix/Skeleton';
9
- export * from './radix/ScrollArea';
10
- export * from './radix/Separator';
11
- export * from './radix/Alert';
12
- export * from './radix/DropdownMenu';
13
- export * from './radix/Dialog';
14
- export * from './radix/Label';
15
- export * from './radix/Popover';
16
- export * from './radix/Select';
17
- export * from './radix/Sheet';
18
- export * from './radix/Switch';
19
- export * from './radix/Tooltip';
20
- export * from './radix/AlertDialog';
21
- export * from './radix/Avatar';
22
- export * from './ConfirmDialog';
23
- export * from './ButtonWithLoading';
8
+ export * from './radix';
24
9
 
25
10
  // Custom UI components
11
+ export { ButtonWithLoading } from './ButtonWithLoading';
12
+ export { Checkbox } from './Checkbox';
13
+ export { CodeBlock } from './CodeBlock';
14
+ export { CodeEditor } from './CodeEditor';
15
+ export { ConfirmDialog } from './ConfirmDialog';
16
+ export { ConnectCTA } from './ConnectCTA';
17
+ export { ProjectInfoModal } from './ProjectInfoModal';
18
+ export { CopyButton } from './CopyButton';
19
+ export { DeleteActionButton } from './DeleteActionButton';
26
20
  export { EmptyState } from './EmptyState';
27
- export { LoadingState } from './LoadingState';
28
21
  export { ErrorState } from './ErrorState';
22
+ export { FeatureSidebar } from './FeatureSidebar';
23
+ export { FeatureSidebarItem } from './FeatureSidebarItem';
29
24
  export { JsonHighlight } from './JsonHighlight';
25
+ export { LoadingState } from './LoadingState';
26
+ export { PaginationControls, type PaginationControlsProps } from './PaginationControls';
27
+ export { PromptDialog } from './PromptDialog';
30
28
  export { SearchInput } from './SearchInput';
31
- export { PaginationControls } from './PaginationControls';
32
29
  export { SelectionClearButton } from './SelectionClearButton';
33
- export { DeleteActionButton } from './DeleteActionButton';
34
- export { Checkbox } from './Checkbox';
30
+ export { CircularStepper, LinearStepper, VerticalStepper } from './Stepper';
31
+ export { ThemeToggle } from './ThemeToggle';
35
32
  export { TypeBadge } from './TypeBadge';
36
-
37
- // Data Grid Components
38
- export { DataGrid, SortableHeaderRenderer } from './datagrid';
39
- export type { DataGridProps } from './datagrid';
@@ -1,41 +1,74 @@
1
1
  import { useState, useEffect } from 'react';
2
2
  import { LogOut, ChevronDown } from 'lucide-react';
3
3
  import {
4
+ Avatar,
5
+ AvatarFallback,
4
6
  DropdownMenu,
5
7
  DropdownMenuContent,
6
8
  DropdownMenuItem,
7
9
  DropdownMenuTrigger,
8
- } from '@/components/radix/DropdownMenu';
9
- import { Avatar, AvatarFallback } from '@/components/radix/Avatar';
10
- import { Separator } from '@/components/radix/Separator';
10
+ Separator,
11
+ ThemeToggle,
12
+ } from '@/components';
13
+ import {
14
+ McpConnectionStatus,
15
+ OnboardingModal,
16
+ getOnboardingSkipped,
17
+ setOnboardingSkipped,
18
+ } from '@/features/onboard';
19
+ import { useMcpUsage } from '@/features/logs/hooks/useMcpUsage';
11
20
  import { cn } from '@/lib/utils/utils';
12
- import { ThemeToggle } from '@/components/ThemeToggle';
13
21
  import { useTheme } from '@/lib/contexts/ThemeContext';
22
+ import { useAuth } from '@/lib/contexts/AuthContext';
14
23
 
15
24
  // Import SVG icons
16
25
  import DiscordIcon from '@/assets/logos/discord.svg?react';
17
26
  import GitHubIcon from '@/assets/logos/github.svg?react';
18
27
  import InsForgeLogoLight from '@/assets/logos/insforge_light.svg';
19
28
  import InsForgeLogoDark from '@/assets/logos/insforge_dark.svg';
20
- import { User } from '@/lib/contexts/AuthContext';
21
-
22
- interface AppHeaderProps {
23
- currentUser: User | null;
24
- onLogout: () => void;
25
- }
26
29
 
27
- export default function AppHeader({ currentUser, onLogout }: AppHeaderProps) {
30
+ export default function AppHeader() {
28
31
  const { resolvedTheme } = useTheme();
29
- const [currentEmojiIndex, setCurrentEmojiIndex] = useState(0);
30
- const emojis = ['🙏', '🥺', '🫵'];
32
+ const { user, logout } = useAuth();
33
+ const { hasCompletedOnboarding, isLoading: isMcpLoading } = useMcpUsage();
34
+ const [githubStars, setGithubStars] = useState<number | null>(null);
35
+ const [isOnboardingModalOpen, setIsOnboardingModalOpen] = useState(false);
36
+
37
+ // Fetch GitHub stars
38
+ useEffect(() => {
39
+ fetch('https://api.github.com/repos/InsForge/InsForge')
40
+ .then((res) => res.json())
41
+ .then((data) => {
42
+ if (data.stargazers_count !== undefined) {
43
+ setGithubStars(data.stargazers_count);
44
+ }
45
+ })
46
+ .catch((err) => {
47
+ console.error('Failed to fetch GitHub stars:', err);
48
+ });
49
+ }, []);
50
+
51
+ // Auto-open onboarding modal if user hasn't connected and hasn't skipped
52
+ useEffect(() => {
53
+ if (!isMcpLoading && !hasCompletedOnboarding && !getOnboardingSkipped()) {
54
+ setIsOnboardingModalOpen(true);
55
+ }
56
+ }, [isMcpLoading, hasCompletedOnboarding]);
31
57
 
58
+ // When MCP connection is established, close onboarding modal and clear skip flag
32
59
  useEffect(() => {
33
- const interval = setInterval(() => {
34
- setCurrentEmojiIndex((prevIndex) => (prevIndex + 1) % emojis.length);
35
- }, 2000);
60
+ if (hasCompletedOnboarding) {
61
+ setIsOnboardingModalOpen(false);
62
+ setOnboardingSkipped(false);
63
+ }
64
+ }, [hasCompletedOnboarding]);
36
65
 
37
- return () => clearInterval(interval);
38
- }, [emojis.length]);
66
+ const formatStars = (count: number): string => {
67
+ if (count >= 1000) {
68
+ return `${(count / 1000).toFixed(1)}k`;
69
+ }
70
+ return count.toString();
71
+ };
39
72
 
40
73
  const getUserInitials = (email: string) => {
41
74
  if (!email) {
@@ -65,82 +98,89 @@ export default function AppHeader({ currentUser, onLogout }: AppHeaderProps) {
65
98
  };
66
99
 
67
100
  return (
68
- <div className="h-16 w-full bg-white dark:bg-neutral-800 border-b border-border-gray dark:border-neutral-700 z-50 flex items-center justify-between px-6">
69
- {/* Logo */}
70
- <div className="px-2 py-3">
71
- <img
72
- src={resolvedTheme === 'light' ? InsForgeLogoLight : InsForgeLogoDark}
73
- alt="Insforge Logo"
74
- className="h-8 w-auto"
75
- />
76
- </div>
101
+ <>
102
+ <div className="h-12 w-full bg-white dark:bg-neutral-800 border-b border-border-gray dark:border-neutral-700 z-50 flex items-center justify-between px-6">
103
+ {/* Logo */}
77
104
 
78
- {/* Social Links */}
79
- <div className="flex items-center gap-3">
80
- {/* GitHub Badge */}
81
- <a
82
- href="https://github.com/InsForge/InsForge"
83
- target="_blank"
84
- rel="noopener noreferrer"
85
- className="inline-flex items-center gap-3 h-10 px-4 text-zinc-50 text-sm font-medium bg-black hover:bg-[#28282F] rounded-full transition-all duration-200"
86
- >
87
- <GitHubIcon className="h-5 w-5 dark:text-white" />
88
- <p className="text-sm text-white">
89
- We need you
90
- <span className="text-md ml-1">{emojis[currentEmojiIndex]}</span>
91
- </p>
105
+ <a href="https://insforge.dev" target="_blank" rel="noopener noreferrer">
106
+ <img
107
+ src={resolvedTheme === 'light' ? InsForgeLogoLight : InsForgeLogoDark}
108
+ alt="Insforge Logo"
109
+ className="h-7 w-auto"
110
+ />
92
111
  </a>
93
112
 
94
- {/* Discord Badge */}
95
- <a
96
- href="https://discord.gg/mqPxArVZ26"
97
- target="_blank"
98
- rel="noopener noreferrer"
99
- className="inline-flex items-center gap-3 h-10 px-4 text-zinc-50 text-sm font-medium bg-[#5765F2] hover:bg-[#3E4CD7] rounded-full transition-all duration-200"
100
- >
101
- <DiscordIcon className="h-5 w-5" />
102
- <p className="text-sm text-white mr-1.5">Ask us anything</p>
103
- </a>
104
- <Separator className="h-6 mx-1" orientation="vertical" />
105
- {/* Theme Toggle */}
106
- <ThemeToggle />
107
- <Separator className="h-6 mx-1" orientation="vertical" />
108
- {/* User Profile */}
109
- <DropdownMenu modal={false}>
110
- <DropdownMenuTrigger asChild>
111
- <button className="w-50 flex items-center gap-3 hover:bg-zinc-100 dark:hover:bg-zinc-800 rounded-[8px] pr-3 transition-all duration-200 group">
112
- <Avatar className="h-10 w-10 ring-2 ring-white dark:ring-gray-700 shadow-sm">
113
- <AvatarFallback
114
- className={cn(
115
- 'text-white font-medium text-sm',
116
- getAvatarColor(currentUser?.email ?? '')
117
- )}
118
- >
119
- {getUserInitials(currentUser?.email ?? '')}
120
- </AvatarFallback>
121
- </Avatar>
122
- <div className="text-left hidden md:block">
123
- <p className="text-sm font-medium text-zinc-950 dark:text-zinc-100 leading-tight">
124
- Admin
125
- </p>
126
- <p className="text-xs text-zinc-500 dark:text-zinc-400">
127
- {currentUser?.email || 'Administrator'}
128
- </p>
129
- </div>
130
- <ChevronDown className="h-5 w-5 text-black dark:text-white hidden md:block ml-auto" />
131
- </button>
132
- </DropdownMenuTrigger>
133
- <DropdownMenuContent align="end" className="w-48" sideOffset={8} collisionPadding={16}>
134
- <DropdownMenuItem
135
- onClick={onLogout}
136
- className="cursor-pointer text-red-600 dark:text-red-400"
137
- >
138
- <LogOut className="mr-2 h-4 w-4" />
139
- <span>Sign Out</span>
140
- </DropdownMenuItem>
141
- </DropdownMenuContent>
142
- </DropdownMenu>
113
+ {/* Right side controls */}
114
+ <div className="flex items-center gap-1">
115
+ {/* Social Links - Small Icon Buttons */}
116
+ <a
117
+ href="https://discord.gg/DvBtaEc9Jz"
118
+ target="_blank"
119
+ rel="noopener noreferrer"
120
+ className="p-2 text-gray-600 dark:text-zinc-400 hover:text-neutral-900 dark:hover:text-white transition-colors duration-200"
121
+ aria-label="Discord"
122
+ >
123
+ <DiscordIcon className="h-5 w-5" />
124
+ </a>
125
+ <a
126
+ href="https://github.com/InsForge/InsForge"
127
+ target="_blank"
128
+ rel="noopener noreferrer"
129
+ className="flex items-center gap-1.5 p-2 text-gray-600 dark:text-zinc-400 hover:text-neutral-900 dark:hover:text-white transition-colors duration-200"
130
+ aria-label="GitHub"
131
+ >
132
+ <GitHubIcon className="h-5 w-5" />
133
+ {githubStars !== null && (
134
+ <span className="text-sm font-medium">{formatStars(githubStars)}</span>
135
+ )}
136
+ </a>
137
+ <Separator className="h-5 mx-2" orientation="vertical" />
138
+ {/* Theme Toggle */}
139
+ <ThemeToggle />
140
+ <Separator className="h-5 mx-2" orientation="vertical" />
141
+ {/* MCP Connection Status */}
142
+ <McpConnectionStatus onConnectClick={() => setIsOnboardingModalOpen(true)} />
143
+
144
+ {/* User Profile*/}
145
+ <Separator className="h-5 mx-2" orientation="vertical" />
146
+ <DropdownMenu modal={false}>
147
+ <DropdownMenuTrigger asChild>
148
+ <button className="w-50 flex items-center gap-3 hover:bg-zinc-100 dark:hover:bg-zinc-800 rounded-[8px] pr-3 transition-all duration-200 group">
149
+ <Avatar className="h-8 w-8 ring-2 ring-white dark:ring-gray-700 shadow-sm">
150
+ <AvatarFallback
151
+ className={cn(
152
+ 'text-white font-medium text-sm',
153
+ getAvatarColor(user?.email ?? '')
154
+ )}
155
+ >
156
+ {getUserInitials(user?.email ?? '')}
157
+ </AvatarFallback>
158
+ </Avatar>
159
+ <div className="text-left hidden md:block">
160
+ <p className="text-sm font-medium text-zinc-950 dark:text-zinc-100 leading-tight">
161
+ Admin
162
+ </p>
163
+ <p className="text-xs text-zinc-500 dark:text-zinc-400">
164
+ {user?.email || 'Administrator'}
165
+ </p>
166
+ </div>
167
+ <ChevronDown className="h-5 w-5 text-black dark:text-white hidden md:block ml-auto" />
168
+ </button>
169
+ </DropdownMenuTrigger>
170
+ <DropdownMenuContent align="end" className="w-48" sideOffset={8} collisionPadding={16}>
171
+ <DropdownMenuItem
172
+ onClick={logout}
173
+ className="cursor-pointer text-red-600 dark:text-red-400"
174
+ >
175
+ <LogOut className="mr-2 h-4 w-4" />
176
+ <span>Sign Out</span>
177
+ </DropdownMenuItem>
178
+ </DropdownMenuContent>
179
+ </DropdownMenu>
180
+ </div>
143
181
  </div>
144
- </div>
182
+ {/* Onboarding Modal */}
183
+ <OnboardingModal open={isOnboardingModalOpen} onOpenChange={setIsOnboardingModalOpen} />
184
+ </>
145
185
  );
146
186
  }