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