insforge 0.3.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (635) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.dockerignore +60 -57
  3. package/.env.example +84 -49
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -83
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -79
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +66 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -0
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +44 -3
  15. package/CLAUDE_PLUGIN.md +104 -0
  16. package/CODE_OF_CONDUCT.md +128 -0
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -27
  19. package/GITHUB_OAUTH_SETUP.md +49 -49
  20. package/GOOGLE_OAUTH_SETUP.md +148 -148
  21. package/LICENSE +201 -201
  22. package/README.md +182 -134
  23. package/assets/Dark.svg +23 -23
  24. package/assets/mcpInstallv2.png +0 -0
  25. package/assets/sampleResponse.png +0 -0
  26. package/auth/index.html +13 -0
  27. package/auth/package.json +28 -0
  28. package/auth/public/favicon.ico +0 -0
  29. package/auth/src/App.tsx +33 -0
  30. package/auth/src/components/ErrorCard.tsx +37 -0
  31. package/auth/src/components/Layout.tsx +13 -0
  32. package/auth/src/index.css +19 -0
  33. package/auth/src/lib/broadcastService.ts +117 -0
  34. package/auth/src/lib/utils.ts +11 -0
  35. package/auth/src/main.tsx +22 -0
  36. package/auth/src/pages/ForgotPasswordPage.tsx +11 -0
  37. package/auth/src/pages/ResetPasswordPage.tsx +11 -0
  38. package/auth/src/pages/SignInPage.tsx +60 -0
  39. package/auth/src/pages/SignUpPage.tsx +60 -0
  40. package/auth/src/pages/VerifyEmailPage.tsx +20 -0
  41. package/auth/src/vite-env.d.ts +10 -0
  42. package/auth/tsconfig.json +32 -0
  43. package/auth/tsconfig.node.json +11 -0
  44. package/auth/vite.config.ts +25 -0
  45. package/backend/package.json +78 -75
  46. package/backend/src/api/{middleware → middlewares}/auth.ts +8 -9
  47. package/backend/src/api/middlewares/rate-limiters.ts +127 -0
  48. package/backend/src/api/routes/{ai.ts → ai/index.routes.ts} +22 -26
  49. package/backend/src/api/routes/auth/index.routes.ts +667 -0
  50. package/backend/src/api/routes/auth/oauth.routes.ts +473 -0
  51. package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +128 -65
  52. package/backend/src/api/routes/database/index.routes.ts +90 -0
  53. package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +26 -12
  54. package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +6 -23
  55. package/backend/src/api/routes/docs/index.routes.ts +75 -0
  56. package/backend/src/api/routes/email/index.routes.ts +35 -0
  57. package/backend/src/api/routes/functions/index.routes.ts +194 -0
  58. package/backend/src/api/routes/{logs.ts → logs/index.routes.ts} +25 -30
  59. package/backend/src/api/routes/{metadata.ts → metadata/index.routes.ts} +33 -31
  60. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  61. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  62. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  63. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  64. package/backend/src/api/routes/{secrets.ts → secrets/index.routes.ts} +27 -22
  65. package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +48 -61
  66. package/backend/src/api/routes/usage/index.routes.ts +91 -0
  67. package/backend/src/infra/config/app.config.ts +51 -0
  68. package/backend/src/infra/database/database.manager.ts +182 -0
  69. package/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +141 -141
  70. package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +40 -40
  71. package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +29 -29
  72. package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +55 -55
  73. package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +23 -23
  74. package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +29 -29
  75. package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +24 -24
  76. package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +1 -1
  77. package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +76 -76
  78. package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +23 -23
  79. package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +93 -93
  80. package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +15 -15
  81. package/backend/{migrations → src/infra/database/migrations}/012_add-storage-uploaded-by.sql +7 -7
  82. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -0
  83. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +8 -0
  84. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +60 -0
  85. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -0
  86. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  87. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  88. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  89. package/backend/src/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
  90. package/backend/src/infra/security/token.manager.ts +219 -0
  91. package/backend/src/infra/socket/socket.manager.ts +522 -0
  92. package/backend/src/providers/ai/openrouter.provider.ts +380 -0
  93. package/backend/src/providers/email/base.provider.ts +38 -0
  94. package/backend/src/providers/email/cloud.provider.ts +271 -0
  95. package/backend/src/{core/logs/providers → providers/logs}/base.provider.ts +11 -11
  96. package/backend/src/{core/logs/providers → providers/logs}/cloudwatch.provider.ts +61 -38
  97. package/backend/src/providers/logs/local.provider.ts +185 -0
  98. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  99. package/backend/src/providers/oauth/base.provider.ts +29 -0
  100. package/backend/src/providers/oauth/discord.provider.ts +195 -0
  101. package/backend/src/providers/oauth/facebook.provider.ts +194 -0
  102. package/backend/src/providers/oauth/github.provider.ts +208 -0
  103. package/backend/src/providers/oauth/google.provider.ts +249 -0
  104. package/backend/src/providers/oauth/index.ts +8 -0
  105. package/backend/src/providers/oauth/linkedin.provider.ts +240 -0
  106. package/backend/src/providers/oauth/microsoft.provider.ts +169 -0
  107. package/backend/src/providers/oauth/x.provider.ts +202 -0
  108. package/backend/src/providers/storage/base.provider.ts +29 -0
  109. package/backend/src/providers/storage/local.provider.ts +103 -0
  110. package/backend/src/providers/storage/s3.provider.ts +313 -0
  111. package/backend/src/server.ts +317 -288
  112. package/backend/src/{core/ai/config.ts → services/ai/ai-config.service.ts} +19 -24
  113. package/backend/src/services/ai/ai-model.service.ts +60 -0
  114. package/backend/src/{core/ai/usage.ts → services/ai/ai-usage.service.ts} +28 -35
  115. package/backend/src/{core/ai/chat.ts → services/ai/chat-completion.service.ts} +37 -24
  116. package/backend/src/services/ai/helpers.ts +64 -0
  117. package/backend/src/{core/ai/image.ts → services/ai/image-generation.service.ts} +17 -19
  118. package/backend/src/services/ai/index.ts +13 -0
  119. package/backend/src/services/auth/auth-config.service.ts +250 -0
  120. package/backend/src/services/auth/auth-otp.service.ts +424 -0
  121. package/backend/src/services/auth/auth.service.ts +1150 -0
  122. package/backend/src/services/auth/index.ts +4 -0
  123. package/backend/src/{core/auth/oauth.ts → services/auth/oauth-config.service.ts} +106 -52
  124. package/backend/src/{core/database/advance.ts → services/database/database-advance.service.ts} +97 -131
  125. package/backend/src/services/database/database-table.service.ts +802 -0
  126. package/backend/src/services/database/database.service.ts +127 -0
  127. package/backend/src/services/email/email.service.ts +73 -0
  128. package/backend/src/{core/functions/functions.ts → services/functions/function.service.ts} +95 -88
  129. package/backend/src/{core/logs/audit.ts → services/logs/audit.service.ts} +92 -75
  130. package/backend/src/services/logs/log.service.ts +73 -0
  131. package/backend/src/services/realtime/index.ts +3 -0
  132. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  133. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  134. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  135. package/backend/src/{core/secrets/secrets.ts → services/secrets/secret.service.ts} +48 -66
  136. package/backend/src/services/storage/storage.service.ts +617 -0
  137. package/backend/src/services/usage/usage.service.ts +149 -0
  138. package/backend/src/types/auth.ts +77 -2
  139. package/backend/src/types/email.ts +8 -0
  140. package/backend/src/types/error-constants.ts +4 -0
  141. package/backend/src/types/logs.ts +0 -29
  142. package/backend/src/types/realtime.ts +18 -0
  143. package/backend/src/{core/socket/types.ts → types/socket.ts} +11 -36
  144. package/backend/src/utils/cookies.ts +35 -0
  145. package/backend/src/utils/environment.ts +9 -3
  146. package/backend/src/utils/logger.ts +20 -2
  147. package/backend/src/utils/s3-config-loader.ts +64 -0
  148. package/backend/src/utils/seed.ts +301 -205
  149. package/backend/src/utils/sql-parser.ts +91 -1
  150. package/backend/src/utils/utils.ts +114 -0
  151. package/backend/src/utils/validations.ts +40 -4
  152. package/backend/tests/README.md +133 -133
  153. package/backend/tests/cleanup-all-test-data.sh +230 -230
  154. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  155. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  156. package/backend/tests/local/test-ai-config.sh +129 -0
  157. package/backend/tests/local/test-ai-usage.sh +80 -0
  158. package/backend/tests/local/test-auth-router.sh +143 -143
  159. package/backend/tests/local/test-database-router.sh +222 -222
  160. package/backend/tests/local/test-e2e.sh +240 -240
  161. package/backend/tests/local/test-fk-errors.sh +96 -96
  162. package/backend/tests/local/test-functions.sh +123 -0
  163. package/backend/tests/local/test-id-field.sh +200 -200
  164. package/backend/tests/local/test-logs.sh +132 -0
  165. package/backend/tests/local/test-public-bucket.sh +264 -264
  166. package/backend/tests/local/test-secrets.sh +249 -247
  167. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  168. package/backend/tests/local/test-traditional-rest.sh +208 -208
  169. package/backend/tests/manual/README.md +50 -50
  170. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  171. package/backend/tests/manual/seed-large-table.sql +100 -100
  172. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  173. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  174. package/backend/tests/manual/test-database-advance.sh +296 -296
  175. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  176. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  177. package/backend/tests/manual/test-rawsql-modes.sh +244 -0
  178. package/backend/tests/manual/test-universal-storage.sh +263 -263
  179. package/backend/tests/manual/test-users.sql +17 -17
  180. package/backend/tests/run-all-tests.sh +139 -139
  181. package/backend/tests/setup.ts +0 -0
  182. package/backend/tests/test-config.sh +338 -302
  183. package/backend/tests/unit/analyze-query.test.ts +697 -0
  184. package/backend/tests/unit/cloud-token.test.ts +48 -0
  185. package/backend/tests/unit/constant.test.ts +8 -0
  186. package/backend/tests/unit/email.test.ts +372 -0
  187. package/backend/tests/unit/environment.test.ts +59 -0
  188. package/backend/tests/unit/helpers.test.ts +63 -0
  189. package/backend/tests/unit/logger.test.ts +22 -0
  190. package/backend/tests/unit/rate-limit.test.ts +154 -0
  191. package/backend/tests/unit/response.test.ts +58 -0
  192. package/backend/tests/unit/sql-parser.test.ts +74 -0
  193. package/backend/tests/unit/uuid.test.ts +21 -0
  194. package/backend/tests/unit/validations.test.ts +80 -0
  195. package/backend/tsconfig.json +22 -22
  196. package/backend/vitest.config.ts +11 -0
  197. package/claude-plugin/.claude-plugin/plugin.json +24 -0
  198. package/claude-plugin/README.md +133 -0
  199. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -0
  200. package/docker-compose.prod.yml +204 -144
  201. package/docker-compose.yml +232 -167
  202. package/docker-init/db/db-init.sql +97 -125
  203. package/docker-init/db/jwt.sql +5 -5
  204. package/docker-init/db/postgresql.conf +16 -16
  205. package/docker-init/logs/vector.yml +236 -0
  206. package/docs/README.md +44 -0
  207. package/docs/agent-docs/real-time.md +269 -0
  208. package/docs/changelog.mdx +119 -0
  209. package/docs/core-concepts/ai/architecture.mdx +373 -0
  210. package/docs/core-concepts/ai/sdk.mdx +213 -0
  211. package/docs/core-concepts/authentication/architecture.mdx +278 -0
  212. package/docs/core-concepts/authentication/sdk.mdx +414 -0
  213. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -0
  214. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -0
  215. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -0
  216. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -0
  217. package/docs/core-concepts/database/architecture.mdx +256 -0
  218. package/docs/core-concepts/database/sdk.mdx +382 -0
  219. package/docs/core-concepts/email/architecture.mdx +101 -0
  220. package/docs/core-concepts/email/sdk.mdx +53 -0
  221. package/docs/core-concepts/functions/architecture.mdx +105 -0
  222. package/docs/core-concepts/functions/sdk.mdx +184 -0
  223. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  224. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  225. package/docs/core-concepts/storage/architecture.mdx +243 -0
  226. package/docs/core-concepts/storage/sdk.mdx +253 -0
  227. package/docs/deployment/README.md +94 -0
  228. package/docs/deployment/deploy-to-aws-ec2.md +565 -0
  229. package/docs/deployment/deploy-to-azure-virtual-machines.md +313 -0
  230. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -0
  231. package/docs/deployment/deploy-to-render.md +441 -0
  232. package/docs/deprecated/insforge-auth-api.md +214 -214
  233. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  234. package/docs/deprecated/insforge-db-api.md +358 -358
  235. package/docs/deprecated/insforge-db-sdk.md +139 -139
  236. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  237. package/docs/deprecated/insforge-debug.md +64 -64
  238. package/docs/deprecated/insforge-instructions.md +123 -123
  239. package/docs/deprecated/insforge-project.md +117 -117
  240. package/docs/deprecated/insforge-storage-api.md +278 -278
  241. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  242. package/docs/docs.json +232 -0
  243. package/docs/examples/framework-guides/nextjs.mdx +131 -0
  244. package/docs/examples/framework-guides/nuxt.mdx +165 -0
  245. package/docs/examples/framework-guides/react.mdx +165 -0
  246. package/docs/examples/framework-guides/svelte.mdx +153 -0
  247. package/docs/examples/framework-guides/vue.mdx +159 -0
  248. package/docs/examples/overview.mdx +67 -0
  249. package/docs/favicon.svg +19 -0
  250. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  251. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  252. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  253. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  254. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  255. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  256. package/docs/images/changelog/nov-2025/auth-components.webp +0 -0
  257. package/docs/images/changelog/nov-2025/database-metadata.webp +0 -0
  258. package/docs/images/changelog/nov-2025/quickstart-prompts.webp +0 -0
  259. package/docs/images/changelog/nov-2025/sql-editor.webp +0 -0
  260. package/docs/images/changelog/nov-2025/usage-page.webp +0 -0
  261. package/docs/images/changelog/october-2025/csv-upload.webp +0 -0
  262. package/docs/images/changelog/october-2025/logs-feature.webp +0 -0
  263. package/docs/images/changelog/october-2025/oauth-providers.webp +0 -0
  264. package/docs/images/checks-passed.png +0 -0
  265. package/docs/images/dashboard-connect-expanded.png +0 -0
  266. package/docs/images/dashboard-connect.png +0 -0
  267. package/docs/images/hero-dark.png +0 -0
  268. package/docs/images/hero-light.png +0 -0
  269. package/docs/images/icons/ai.svg +4 -0
  270. package/docs/images/icons/auth.svg +1 -0
  271. package/docs/images/icons/database.svg +1 -0
  272. package/docs/images/icons/function.svg +1 -0
  273. package/docs/images/icons/storage.svg +1 -0
  274. package/docs/images/logos/nextjs.svg +4 -0
  275. package/docs/images/logos/nuxt.svg +4 -0
  276. package/docs/images/logos/react.svg +5 -0
  277. package/docs/images/logos/svelte.svg +4 -0
  278. package/docs/images/logos/vue.svg +5 -0
  279. package/docs/images/mcp-install.png +0 -0
  280. package/docs/images/onboarding-mcp.png +0 -0
  281. package/docs/insforge-instructions-sdk.md +89 -407
  282. package/docs/introduction.mdx +45 -0
  283. package/docs/logo/dark.svg +22 -0
  284. package/docs/logo/light.svg +20 -0
  285. package/docs/partnership.mdx +652 -0
  286. package/docs/quickstart.mdx +83 -0
  287. package/docs/showcase/2048-arena.png +0 -0
  288. package/docs/showcase/framegen-cloud.png +0 -0
  289. package/docs/showcase/line-connect-race.png +0 -0
  290. package/docs/showcase/moment-vibe.png +0 -0
  291. package/docs/showcase/national-flags.png +0 -0
  292. package/docs/showcase/pokemon-vibe.png +0 -0
  293. package/docs/showcase/pure-browse-buy.png +0 -0
  294. package/docs/showcase.mdx +52 -0
  295. package/docs/snippets/sdk-installation.mdx +22 -0
  296. package/docs/snippets/service-icons.mdx +27 -0
  297. package/eslint.config.js +10 -3
  298. package/examples/oauth/frontend-oauth-example.html +250 -250
  299. package/examples/response-examples.md +443 -443
  300. package/frontend/components.json +17 -17
  301. package/frontend/package.json +69 -63
  302. package/frontend/src/App.tsx +13 -82
  303. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  304. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  305. package/frontend/src/assets/icons/checked.svg +3 -3
  306. package/frontend/src/assets/icons/connected.svg +3 -0
  307. package/frontend/src/assets/icons/error.svg +3 -3
  308. package/frontend/src/assets/icons/loader.svg +9 -0
  309. package/frontend/src/assets/icons/pencil.svg +4 -4
  310. package/frontend/src/assets/icons/refresh.svg +4 -4
  311. package/frontend/src/assets/icons/step_active.svg +3 -3
  312. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  313. package/frontend/src/assets/icons/warning.svg +3 -3
  314. package/frontend/src/assets/logos/apple.svg +4 -0
  315. package/frontend/src/assets/logos/claude_code.svg +3 -3
  316. package/frontend/src/assets/logos/cline.svg +6 -6
  317. package/frontend/src/assets/logos/cursor.svg +20 -20
  318. package/frontend/src/assets/logos/discord.svg +8 -8
  319. package/frontend/src/assets/logos/facebook.svg +3 -0
  320. package/frontend/src/assets/logos/gemini.svg +19 -19
  321. package/frontend/src/assets/logos/github.svg +5 -5
  322. package/frontend/src/assets/logos/google.svg +13 -13
  323. package/frontend/src/assets/logos/grok.svg +10 -10
  324. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  325. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  326. package/frontend/src/assets/logos/instagram.svg +2 -0
  327. package/frontend/src/assets/logos/linkedin.svg +3 -0
  328. package/frontend/src/assets/logos/microsoft.svg +1 -0
  329. package/frontend/src/assets/logos/openai.svg +10 -10
  330. package/frontend/src/assets/logos/roo_code.svg +9 -9
  331. package/frontend/src/assets/logos/spotify.svg +17 -0
  332. package/frontend/src/assets/logos/tiktok.svg +6 -0
  333. package/frontend/src/assets/logos/trae.svg +3 -3
  334. package/frontend/src/assets/logos/windsurf.svg +10 -10
  335. package/frontend/src/assets/logos/x.svg +3 -0
  336. package/frontend/src/components/Checkbox.tsx +27 -29
  337. package/frontend/src/components/CodeBlock.tsx +55 -2
  338. package/frontend/src/components/CodeEditor.tsx +92 -0
  339. package/frontend/src/components/ConfirmDialog.tsx +1 -1
  340. package/frontend/src/components/ConnectCTA.tsx +38 -0
  341. package/frontend/src/components/CopyButton.tsx +52 -15
  342. package/frontend/src/components/ErrorState.tsx +1 -2
  343. package/frontend/src/components/FeatureSidebar.tsx +6 -6
  344. package/frontend/src/components/FeatureSidebarItem.tsx +2 -2
  345. package/frontend/src/components/JsonHighlight.tsx +21 -9
  346. package/frontend/src/components/ProjectInfoModal.tsx +128 -0
  347. package/frontend/src/components/PromptDialog.tsx +1 -4
  348. package/frontend/src/components/SearchInput.tsx +1 -2
  349. package/frontend/src/components/Stepper.tsx +53 -0
  350. package/frontend/src/components/ThemeToggle.tsx +3 -3
  351. package/frontend/src/components/datagrid/DataGrid.tsx +25 -32
  352. package/frontend/src/components/datagrid/cell-editors/DateCellEditor.tsx +1 -2
  353. package/frontend/src/components/datagrid/cell-editors/JsonCellEditor.tsx +2 -4
  354. package/frontend/src/components/datagrid/index.ts +23 -0
  355. package/frontend/src/components/index.ts +23 -30
  356. package/frontend/src/components/layout/AppHeader.tsx +131 -91
  357. package/frontend/src/components/layout/AppSidebar.tsx +80 -170
  358. package/frontend/src/components/layout/Layout.tsx +12 -23
  359. package/frontend/src/components/layout/PrimaryMenu.tsx +187 -0
  360. package/frontend/src/components/layout/SecondaryMenu.tsx +70 -0
  361. package/frontend/src/components/layout/index.ts +5 -0
  362. package/frontend/src/components/radix/Tooltip.tsx +24 -13
  363. package/frontend/src/components/radix/index.ts +22 -0
  364. package/frontend/src/features/ai/components/AIConfigCard.tsx +129 -83
  365. package/frontend/src/features/ai/components/AIEmptyState.tsx +12 -7
  366. package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +101 -0
  367. package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -0
  368. package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -0
  369. package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -0
  370. package/frontend/src/features/ai/components/index.ts +6 -0
  371. package/frontend/src/features/ai/helpers.ts +57 -71
  372. package/frontend/src/features/ai/hooks/useAIConfigs.ts +39 -113
  373. package/frontend/src/features/ai/hooks/useAIUsage.ts +0 -2
  374. package/frontend/src/features/ai/pages/AIPage.tsx +166 -0
  375. package/frontend/src/features/ai/services/ai.service.ts +5 -5
  376. package/frontend/src/features/auth/components/AuthPreview.tsx +96 -0
  377. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +54 -30
  378. package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
  379. package/frontend/src/features/auth/components/UsersDataGrid.tsx +50 -14
  380. package/frontend/src/features/auth/components/index.ts +5 -0
  381. package/frontend/src/features/auth/helpers.tsx +208 -0
  382. package/frontend/src/features/auth/hooks/useAnonToken.ts +30 -0
  383. package/frontend/src/features/auth/hooks/useAuthConfig.ts +48 -0
  384. package/frontend/src/features/auth/hooks/useOAuthConfig.ts +14 -10
  385. package/frontend/src/features/auth/hooks/useUsers.ts +43 -5
  386. package/frontend/src/features/auth/index.ts +3 -2
  387. package/frontend/src/features/auth/pages/AuthMethodsPage.tsx +275 -0
  388. package/frontend/src/features/auth/pages/ConfigurationPage.tsx +395 -0
  389. package/frontend/src/features/auth/pages/UsersPage.tsx +257 -0
  390. package/frontend/src/features/auth/services/anonToken.service.ts +11 -0
  391. package/frontend/src/features/auth/services/config.service.ts +19 -0
  392. package/frontend/src/features/auth/services/{oauth.service.ts → oauth-config.service.ts} +4 -4
  393. package/frontend/src/features/auth/services/{auth.service.ts → user.service.ts} +7 -53
  394. package/frontend/src/features/dashboard/components/ConnectionSuccessBanner.tsx +35 -0
  395. package/frontend/src/features/dashboard/components/PromptCard.tsx +21 -0
  396. package/frontend/src/features/dashboard/components/PromptDialog.tsx +103 -0
  397. package/frontend/src/features/dashboard/components/StatsCard.tsx +50 -0
  398. package/frontend/src/features/dashboard/components/index.ts +4 -0
  399. package/frontend/src/features/dashboard/pages/DashboardPage.tsx +212 -0
  400. package/frontend/src/features/dashboard/prompts/ai-chatbot.ts +13 -0
  401. package/frontend/src/features/dashboard/prompts/crm-system.ts +13 -0
  402. package/frontend/src/features/dashboard/prompts/ecommerce-platform.ts +12 -0
  403. package/frontend/src/features/dashboard/prompts/index.ts +31 -0
  404. package/frontend/src/features/dashboard/prompts/instagram-clone.ts +11 -0
  405. package/frontend/src/features/dashboard/prompts/notion-clone.ts +14 -0
  406. package/frontend/src/features/dashboard/prompts/reddit-clone.ts +12 -0
  407. package/frontend/src/features/database/components/DatabaseDataGrid.tsx +48 -17
  408. package/frontend/src/features/database/components/ForeignKeyCell.tsx +15 -34
  409. package/frontend/src/features/database/components/ForeignKeyPopover.tsx +19 -20
  410. package/frontend/src/features/database/components/LinkRecordModal.tsx +120 -125
  411. package/frontend/src/features/database/components/RecordFormDialog.tsx +22 -33
  412. package/frontend/src/features/database/components/RecordFormField.tsx +45 -47
  413. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  414. package/frontend/src/features/database/components/TableEmptyState.tsx +6 -5
  415. package/frontend/src/features/database/components/TableForm.tsx +28 -19
  416. package/frontend/src/features/database/components/TableFormColumn.tsx +2 -3
  417. package/frontend/src/features/database/components/TableSidebar.tsx +1 -1
  418. package/frontend/src/features/database/components/TablesEmptyState.tsx +48 -0
  419. package/frontend/src/features/database/components/TemplateCard.tsx +37 -0
  420. package/frontend/src/features/database/components/TemplatePreview.tsx +92 -0
  421. package/frontend/src/features/database/components/index.ts +19 -0
  422. package/frontend/src/features/database/constants.ts +28 -2
  423. package/frontend/src/features/database/contexts/SQLEditorContext.tsx +188 -0
  424. package/frontend/src/features/database/helpers.ts +2 -2
  425. package/frontend/src/features/database/hooks/useCSVImport.ts +29 -0
  426. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  427. package/frontend/src/features/database/hooks/useRawSQL.ts +55 -0
  428. package/frontend/src/features/database/hooks/useRecords.ts +139 -0
  429. package/frontend/src/features/database/hooks/useTables.ts +135 -0
  430. package/frontend/src/features/database/index.ts +7 -1
  431. package/frontend/src/features/database/pages/FunctionsPage.tsx +203 -0
  432. package/frontend/src/features/database/pages/IndexesPage.tsx +228 -0
  433. package/frontend/src/features/database/pages/PoliciesPage.tsx +237 -0
  434. package/frontend/src/features/database/pages/SQLEditorPage.tsx +382 -0
  435. package/frontend/src/features/database/{page/DatabasePage.tsx → pages/TablesPage.tsx} +168 -209
  436. package/frontend/src/features/database/pages/TemplatesPage.tsx +39 -0
  437. package/frontend/src/features/database/pages/TriggersPage.tsx +230 -0
  438. package/frontend/src/features/database/services/advance.service.ts +40 -0
  439. package/frontend/src/features/database/services/database.service.ts +33 -194
  440. package/frontend/src/features/database/services/record.service.ts +219 -0
  441. package/frontend/src/features/database/services/table.service.ts +58 -0
  442. package/frontend/src/features/database/templates/ai-chatbot.ts +402 -0
  443. package/frontend/src/features/database/templates/crm-system.ts +528 -0
  444. package/frontend/src/features/database/templates/ecommerce-platform.ts +553 -0
  445. package/frontend/src/features/database/templates/index.ts +34 -0
  446. package/frontend/src/features/database/templates/instagram-clone.ts +222 -0
  447. package/frontend/src/features/database/templates/notion-clone.ts +483 -0
  448. package/frontend/src/features/database/templates/reddit-clone.ts +526 -0
  449. package/frontend/src/features/functions/components/FunctionRow.tsx +2 -1
  450. package/frontend/src/features/functions/components/FunctionsSidebar.tsx +1 -1
  451. package/frontend/src/features/functions/components/SecretRow.tsx +1 -1
  452. package/frontend/src/features/functions/components/index.ts +5 -0
  453. package/frontend/src/features/functions/hooks/useFunctions.ts +4 -4
  454. package/frontend/src/features/{secrets → functions}/hooks/useSecrets.ts +5 -5
  455. package/frontend/src/features/functions/pages/FunctionsPage.tsx +148 -0
  456. package/frontend/src/features/functions/{components/SecretsContent.tsx → pages/SecretsPage.tsx} +19 -21
  457. package/frontend/src/features/functions/services/{functions.service.ts → function.service.ts} +2 -2
  458. package/frontend/src/features/{secrets/services/secrets.service.ts → functions/services/secret.service.ts} +2 -2
  459. package/frontend/src/features/login/hooks/usePartnerOrigin.ts +27 -0
  460. package/frontend/src/features/login/pages/CloudLoginPage.tsx +118 -0
  461. package/frontend/src/features/login/{page → pages}/LoginPage.tsx +16 -23
  462. package/frontend/src/features/login/services/partnership.service.ts +65 -0
  463. package/frontend/src/features/logs/components/LogsDataGrid.tsx +89 -0
  464. package/frontend/src/features/logs/components/SeverityBadge.tsx +18 -0
  465. package/frontend/src/features/logs/components/index.ts +2 -0
  466. package/frontend/src/features/logs/helpers.ts +24 -0
  467. package/frontend/src/features/logs/hooks/useAuditLogs.ts +4 -4
  468. package/frontend/src/features/logs/hooks/useLogSources.ts +137 -0
  469. package/frontend/src/features/logs/hooks/useLogs.ts +163 -0
  470. package/frontend/src/features/logs/hooks/useMcpUsage.ts +128 -0
  471. package/frontend/src/features/logs/index.ts +8 -2
  472. package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +91 -38
  473. package/frontend/src/features/logs/pages/LogsPage.tsx +152 -0
  474. package/frontend/src/features/logs/pages/MCPLogsPage.tsx +84 -0
  475. package/frontend/src/features/logs/services/audit.service.ts +63 -0
  476. package/frontend/src/features/logs/services/log.service.ts +15 -110
  477. package/frontend/src/features/logs/services/usage.service.ts +31 -0
  478. package/frontend/src/features/onboard/components/McpConnectionStatus.tsx +68 -0
  479. package/frontend/src/features/onboard/components/OnboardingModal.tsx +267 -0
  480. package/frontend/src/features/onboard/components/VideoDemoModal.tsx +38 -0
  481. package/frontend/src/features/onboard/components/index.ts +4 -0
  482. package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +2 -2
  483. package/frontend/src/features/onboard/components/mcp/{mcp-helper.tsx → helpers.tsx} +8 -8
  484. package/frontend/src/features/onboard/components/mcp/index.ts +2 -3
  485. package/frontend/src/features/onboard/index.ts +13 -3
  486. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  487. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  488. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  489. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  490. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  491. package/frontend/src/features/realtime/index.ts +11 -0
  492. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  493. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  494. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  495. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  496. package/frontend/src/features/storage/components/BucketEmptyState.tsx +9 -6
  497. package/frontend/src/features/storage/components/BucketFormDialog.tsx +25 -41
  498. package/frontend/src/features/storage/components/FilePreviewDialog.tsx +20 -8
  499. package/frontend/src/features/storage/components/StorageDataGrid.tsx +4 -3
  500. package/frontend/src/features/storage/components/StorageManager.tsx +23 -34
  501. package/frontend/src/features/storage/components/index.ts +12 -0
  502. package/frontend/src/features/storage/hooks/useStorage.ts +208 -0
  503. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +41 -143
  504. package/frontend/src/features/storage/services/storage.service.ts +22 -1
  505. package/frontend/src/features/visualizer/components/AuthNode.tsx +72 -56
  506. package/frontend/src/features/visualizer/components/BucketNode.tsx +4 -4
  507. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +108 -80
  508. package/frontend/src/features/visualizer/components/TableNode.tsx +34 -41
  509. package/frontend/src/features/visualizer/components/VisualizerSkeleton.tsx +12 -4
  510. package/frontend/src/features/visualizer/pages/VisualizerPage.tsx +97 -0
  511. package/frontend/src/index.css +1 -0
  512. package/frontend/src/lib/analytics/posthog.tsx +27 -0
  513. package/frontend/src/lib/contexts/AuthContext.tsx +38 -31
  514. package/frontend/src/lib/contexts/SocketContext.tsx +123 -80
  515. package/frontend/src/{features/metadata → lib}/hooks/useMetadata.ts +1 -1
  516. package/frontend/src/lib/hooks/useToast.tsx +6 -2
  517. package/frontend/src/lib/routing/AppRoutes.tsx +99 -0
  518. package/frontend/src/lib/routing/RequireAuth.tsx +27 -0
  519. package/frontend/src/lib/utils/cloudMessaging.ts +20 -0
  520. package/frontend/src/lib/utils/menuItems.ts +207 -0
  521. package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
  522. package/frontend/src/lib/utils/utils.ts +32 -1
  523. package/frontend/src/vite-env.d.ts +1 -0
  524. package/frontend/tsconfig.json +25 -25
  525. package/frontend/tsconfig.node.json +9 -9
  526. package/frontend/vite.config.ts +5 -3
  527. package/functions/deno.json +24 -24
  528. package/functions/server.ts +315 -290
  529. package/functions/worker-template.js +15 -4
  530. package/i18n/README.ar.md +130 -0
  531. package/i18n/README.de.md +130 -0
  532. package/i18n/README.es.md +154 -0
  533. package/i18n/README.fr.md +134 -0
  534. package/i18n/README.hi.md +129 -0
  535. package/i18n/README.ja.md +174 -0
  536. package/i18n/README.ko.md +137 -0
  537. package/i18n/README.pt-BR.md +131 -0
  538. package/i18n/README.ru.md +129 -0
  539. package/i18n/README.zh-CN.md +133 -0
  540. package/openapi/ai.yaml +715 -688
  541. package/openapi/auth.yaml +1244 -563
  542. package/openapi/email.yaml +158 -0
  543. package/openapi/functions.yaml +475 -475
  544. package/openapi/health.yaml +29 -29
  545. package/openapi/logs.yaml +223 -223
  546. package/openapi/metadata.yaml +177 -177
  547. package/openapi/realtime.yaml +699 -0
  548. package/openapi/records.yaml +381 -381
  549. package/openapi/secrets.yaml +370 -370
  550. package/openapi/storage.yaml +875 -875
  551. package/openapi/tables.yaml +463 -463
  552. package/package.json +97 -88
  553. package/shared-schemas/package.json +31 -31
  554. package/shared-schemas/src/ai-api.schema.ts +34 -58
  555. package/shared-schemas/src/ai.schema.ts +63 -54
  556. package/shared-schemas/src/auth-api.schema.ts +352 -193
  557. package/shared-schemas/src/auth.schema.ts +43 -7
  558. package/shared-schemas/src/cloud-events.schema.ts +57 -0
  559. package/shared-schemas/src/database-api.schema.ts +35 -4
  560. package/shared-schemas/src/database.schema.ts +40 -1
  561. package/shared-schemas/src/docs.schema.ts +26 -0
  562. package/shared-schemas/src/email-api.schema.ts +30 -0
  563. package/shared-schemas/src/index.ts +5 -0
  564. package/shared-schemas/src/logs-api.schema.ts +7 -1
  565. package/shared-schemas/src/logs.schema.ts +26 -0
  566. package/shared-schemas/src/metadata.schema.ts +18 -4
  567. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  568. package/shared-schemas/src/realtime.schema.ts +143 -0
  569. package/shared-schemas/tsconfig.json +21 -21
  570. package/tsconfig.json +7 -7
  571. package/zeabur/README.md +13 -0
  572. package/zeabur/template.yml +1032 -0
  573. package/.github/workflows/deploy-aws.yml +0 -130
  574. package/backend/src/api/routes/agent.ts +0 -29
  575. package/backend/src/api/routes/auth.oauth.ts +0 -482
  576. package/backend/src/api/routes/auth.ts +0 -386
  577. package/backend/src/api/routes/docs.ts +0 -66
  578. package/backend/src/api/routes/functions.ts +0 -183
  579. package/backend/src/api/routes/openapi.ts +0 -82
  580. package/backend/src/api/routes/usage.ts +0 -96
  581. package/backend/src/core/ai/client.ts +0 -242
  582. package/backend/src/core/ai/model.ts +0 -117
  583. package/backend/src/core/auth/auth.ts +0 -780
  584. package/backend/src/core/database/manager.ts +0 -178
  585. package/backend/src/core/database/table.ts +0 -772
  586. package/backend/src/core/documentation/agent.ts +0 -689
  587. package/backend/src/core/documentation/openapi.ts +0 -856
  588. package/backend/src/core/logs/analytics.ts +0 -76
  589. package/backend/src/core/logs/providers/localdb.provider.ts +0 -246
  590. package/backend/src/core/socket/socket.ts +0 -388
  591. package/backend/src/core/storage/storage.ts +0 -923
  592. package/backend/src/utils/cloud-token.ts +0 -39
  593. package/backend/src/utils/helpers.ts +0 -49
  594. package/backend/src/utils/uuid.ts +0 -9
  595. package/backend/tests/manual/test-better-auth.sh +0 -303
  596. package/docker-init/db/logs.sql +0 -9
  597. package/frontend/README.md +0 -112
  598. package/frontend/src/components/datagrid/index.tsx +0 -20
  599. package/frontend/src/components/layout/CloudLayout.tsx +0 -95
  600. package/frontend/src/features/ai/components/AIConfigDialog.tsx +0 -76
  601. package/frontend/src/features/ai/components/AIConfigForm.tsx +0 -222
  602. package/frontend/src/features/ai/components/fields/ModalityField.tsx +0 -87
  603. package/frontend/src/features/ai/components/fields/ModelSelectionField.tsx +0 -134
  604. package/frontend/src/features/ai/components/fields/SystemPromptField.tsx +0 -33
  605. package/frontend/src/features/ai/page/AIPage.tsx +0 -178
  606. package/frontend/src/features/auth/components/AddOAuthDialog.tsx +0 -106
  607. package/frontend/src/features/auth/components/AuthMethodTab.tsx +0 -238
  608. package/frontend/src/features/auth/components/UsersTab.tsx +0 -114
  609. package/frontend/src/features/auth/page/AuthenticationPage.tsx +0 -169
  610. package/frontend/src/features/dashboard/page/DashboardPage.tsx +0 -194
  611. package/frontend/src/features/database/hooks/UseLinkModal.tsx +0 -78
  612. package/frontend/src/features/functions/components/FunctionViewer.tsx +0 -46
  613. package/frontend/src/features/functions/components/FunctionsContent.tsx +0 -88
  614. package/frontend/src/features/functions/page/FunctionsPage.tsx +0 -28
  615. package/frontend/src/features/login/components/AuthErrorBoundary.tsx +0 -87
  616. package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
  617. package/frontend/src/features/login/page/CloudLoginPage.tsx +0 -93
  618. package/frontend/src/features/logs/components/AnalyticsLogsTable.tsx +0 -313
  619. package/frontend/src/features/logs/components/LogsTable.tsx +0 -199
  620. package/frontend/src/features/logs/page/AnalyticsLogsPage.tsx +0 -530
  621. package/frontend/src/features/metadata/index.ts +0 -0
  622. package/frontend/src/features/metadata/page/MetadataPage.tsx +0 -136
  623. package/frontend/src/features/onboard/components/CompletionCard.tsx +0 -41
  624. package/frontend/src/features/onboard/components/OnboardButton.tsx +0 -84
  625. package/frontend/src/features/onboard/components/StepContent.tsx +0 -91
  626. package/frontend/src/features/onboard/components/TestConnectionStep.tsx +0 -53
  627. package/frontend/src/features/onboard/components/mcp/McpInstallation.tsx +0 -144
  628. package/frontend/src/features/onboard/page/OnBoardPage.tsx +0 -104
  629. package/frontend/src/features/onboard/types.ts +0 -8
  630. package/frontend/src/features/visualizer/page/VisualizerPage.tsx +0 -127
  631. package/frontend/src/lib/contexts/OnboardStepContext.tsx +0 -68
  632. package/frontend/src/lib/hooks/useOnboardingCompletion.ts +0 -29
  633. /package/backend/src/api/{middleware → middlewares}/error.ts +0 -0
  634. /package/backend/src/api/{middleware → middlewares}/upload.ts +0 -0
  635. /package/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
@@ -1,65 +1,65 @@
1
- # Insforge Debug Guide
2
-
3
- ## When Your API Code Fails
4
-
5
- **Start here** → `get-instructions` and `get-backend-metadata` (understand system state)
6
- **Read docs** → `get-db-api`, `get-auth-api`, `get-storage-api` (read ALL of them)
7
- **Check table** → `get-table-schema` with your table name
8
- **Test endpoint** → Use curl with exact API format from docs
9
-
10
- ## Critical Rule: Read Documentation First
11
-
12
- Before debugging, you MUST read all documentation to understand how the API works.
13
-
14
- ## Common API Issues
15
-
16
- **Table created but API fails** → Check field names match schema exactly
17
- **Array required** → PostgREST requires POST requests as arrays `[{...}]`
18
- **Foreign key error** → Parent record must exist before child
19
- **Permission denied** → Write operations need `Authorization: Bearer <accessToken>`
20
- **JWSError** → JWT token expired or invalid - user needs to login again
21
- **PATCH increment fails** → PostgREST doesn't support SQL expressions like `count + 1`
22
-
23
- ## Debug Workflow
24
-
25
- 1. **Always** call `get-backend-metadata` first
26
- 2. Read the relevant API documentation completely
27
- 3. Check your table schema matches your API calls
28
- 4. Test with curl using exact format from docs
29
- 5. Verify response matches documentation
30
-
31
- ### Example Debug Tests
32
-
33
- ```bash
34
- # Test GET endpoint
35
- # Windows PowerShell: use curl.exe
36
- curl -X GET http://localhost:7130/api/database/records/your_table \
37
- -H "Authorization: Bearer YOUR_TOKEN" | jq .
38
-
39
- # Test POST with array format
40
- # Mac/Linux
41
- curl -X POST http://localhost:7130/api/database/records/your_table \
42
- -H 'Content-Type: application/json' \
43
- -H 'Authorization: Bearer YOUR_TOKEN' \
44
- -H 'Prefer: return=representation' \
45
- -d '[{"field": "value"}]' | jq .
46
-
47
- # Windows PowerShell (use curl.exe) - different quotes for nested JSON
48
- curl.exe -X POST http://localhost:7130/api/database/records/your_table \
49
- -H "Content-Type: application/json" \
50
- -H "Authorization: Bearer YOUR_TOKEN" \
51
- -H "Prefer: return=representation" \
52
- -d '[{\"field\": \"value\"}]' | jq .
53
- ```
54
-
55
- ## Key Rules
56
-
57
- - Backend runs on port 7130
58
- - **READ operations**: No authentication required
59
- - **WRITE operations**: Need `Authorization: Bearer <accessToken>` header
60
- - POST requests must be arrays `[{...}]`
61
- - System tables (prefixed with _) need special APIs
62
- - No escaped characters in JSON
63
- - Login/register returns JWT tokens directly in `accessToken` field
64
-
1
+ # Insforge Debug Guide
2
+
3
+ ## When Your API Code Fails
4
+
5
+ **Start here** → `get-instructions` and `get-backend-metadata` (understand system state)
6
+ **Read docs** → `get-db-api`, `get-auth-api`, `get-storage-api` (read ALL of them)
7
+ **Check table** → `get-table-schema` with your table name
8
+ **Test endpoint** → Use curl with exact API format from docs
9
+
10
+ ## Critical Rule: Read Documentation First
11
+
12
+ Before debugging, you MUST read all documentation to understand how the API works.
13
+
14
+ ## Common API Issues
15
+
16
+ **Table created but API fails** → Check field names match schema exactly
17
+ **Array required** → PostgREST requires POST requests as arrays `[{...}]`
18
+ **Foreign key error** → Parent record must exist before child
19
+ **Permission denied** → Write operations need `Authorization: Bearer <accessToken>`
20
+ **JWSError** → JWT token expired or invalid - user needs to login again
21
+ **PATCH increment fails** → PostgREST doesn't support SQL expressions like `count + 1`
22
+
23
+ ## Debug Workflow
24
+
25
+ 1. **Always** call `get-backend-metadata` first
26
+ 2. Read the relevant API documentation completely
27
+ 3. Check your table schema matches your API calls
28
+ 4. Test with curl using exact format from docs
29
+ 5. Verify response matches documentation
30
+
31
+ ### Example Debug Tests
32
+
33
+ ```bash
34
+ # Test GET endpoint
35
+ # Windows PowerShell: use curl.exe
36
+ curl -X GET http://localhost:7130/api/database/records/your_table \
37
+ -H "Authorization: Bearer YOUR_TOKEN" | jq .
38
+
39
+ # Test POST with array format
40
+ # Mac/Linux
41
+ curl -X POST http://localhost:7130/api/database/records/your_table \
42
+ -H 'Content-Type: application/json' \
43
+ -H 'Authorization: Bearer YOUR_TOKEN' \
44
+ -H 'Prefer: return=representation' \
45
+ -d '[{"field": "value"}]' | jq .
46
+
47
+ # Windows PowerShell (use curl.exe) - different quotes for nested JSON
48
+ curl.exe -X POST http://localhost:7130/api/database/records/your_table \
49
+ -H "Content-Type: application/json" \
50
+ -H "Authorization: Bearer YOUR_TOKEN" \
51
+ -H "Prefer: return=representation" \
52
+ -d '[{\"field\": \"value\"}]' | jq .
53
+ ```
54
+
55
+ ## Key Rules
56
+
57
+ - Backend runs on port 7130
58
+ - **READ operations**: No authentication required
59
+ - **WRITE operations**: Need `Authorization: Bearer <accessToken>` header
60
+ - POST requests must be arrays `[{...}]`
61
+ - System tables (prefixed with _) need special APIs
62
+ - No escaped characters in JSON
63
+ - Login/register returns JWT tokens directly in `accessToken` field
64
+
65
65
  **Remember**: MCP creates the structure, but you must follow API documentation exactly to use it.
@@ -1,124 +1,124 @@
1
- # Insforge OSS Instructions
2
-
3
- ## What Insforge OSS Does
4
-
5
- Backend-as-a-service with database, authentication, and file storage.
6
-
7
- **Key Concept**: InsForge replaces your traditional backend - implement business logic by calling database operations directly. Instead of building API endpoints, use our database API as your application's backend.
8
-
9
- ## 🚨 Project Setup
10
-
11
- **Create your app in a NEW directory, not inside `insforge/`**
12
-
13
- The `insforge/` directory is the BaaS platform. Your app should live elsewhere:
14
- ```
15
- ~/projects/
16
- ├── insforge/ # ← BaaS platform (don't work here)
17
- └── my-app/ # ← Your new app (work here)
18
- ```
19
-
20
- ## When to Use Tools
21
-
22
- **MUST DO FIRST** → Download project rules: `download-project-rules`
23
- **Start here** → `get-backend-metadata` (shows current database state)
24
- **Need docs** → `get-db-api`, `get-auth-api`, or `get-storage-api`
25
- **Create table** → `create-table` with explicit schema
26
- **Work with data** → Use database API endpoints directly
27
-
28
- ## Critical Rule:
29
- **MUST DO FIRST** → Call`download-project-rules` to download project ruless
30
-
31
- ## Critical Rule: Check Metadata First
32
-
33
- Before ANY database operation, call `get-backend-metadata` to get the current database state.
34
-
35
- ## Standard Workflow
36
-
37
- 1. **Always** call `get-backend-metadata` first
38
- 2. Check `get-instructions` if unfamiliar with the system
39
- 3. Create tables with `create-table` if needed
40
- 4. Use database API to insert/query/update/delete records
41
- 5. Call `get-backend-metadata` again to verify changes
42
-
43
- ## Key Rules
44
-
45
- - Frequently check `get-instructions` and `get-backend-metadata`
46
- - Always define explicit table schemas (no assumptions)
47
- - Every table gets auto ID, created_at, updated_at fields
48
- - **Database operations require**: JWT token (Authorization: Bearer header)
49
- - **API keys are for MCP testing** (use tokens for production)
50
- - File uploads work automatically with multipart/form-data
51
-
52
- ## Authentication Requirements
53
-
54
- ### Database Operations Need Authentication Token:
55
- 1. **JWT Token**: `Authorization: Bearer your-jwt-token` - Authenticates the user
56
-
57
- **Important Note about API Keys:**
58
- - The `x-api-key` header is ONLY used for MCP (Model Context Protocol) testing
59
- - Production applications should NEVER use API keys
60
- - Always use JWT tokens from user/admin authentication for real applications
61
-
62
- Without the Bearer token, you'll get "permission denied" errors when trying to insert, update, or delete records.
63
-
64
- ### Getting Authentication:
65
- ```bash
66
- # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
67
- # 1. First login to get JWT token
68
- curl -X POST http://localhost:7130/api/auth/admin/sessions \
69
- -H "Content-Type: application/json" \
70
- -d "{\"email\":\"admin@example.com\",\"password\":\"your-password\"}"
71
-
72
- # Response includes token: {"accessToken": "eyJ...", "user": {...}}
73
-
74
- # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
75
- # 2. Use the auth token for database operations
76
- curl -X POST http://localhost:7130/api/database/records/products \
77
- -H "Authorization: Bearer eyJ..." \
78
- -H "Content-Type: application/json" \
79
- -d "[{\"name\": \"Product\", \"price\": 99.99}]"
80
- ```
81
-
82
- ## Example: Comment Upvoting Feature
83
-
84
- - Check current tables: `get-backend-metadata`
85
- - Create comment_votes table: `create-table` with user_id, comment_id, vote_type fields
86
- - Frontend upvote action: `POST /api/database/records/comment_votes` with vote data
87
- - Frontend display scores: `GET /api/database/records/comment_votes?comment_id=eq.123` to count votes
88
- - No separate backend needed - frontend calls InsForge database API directly
89
-
90
-
91
- ## Critical Rule: Test API Endpoints with curl
92
-
93
- After creating or modifying any API endpoint, always test it with curl to verify it works correctly.
94
-
95
- **Note:** Avoid special characters (!,$,`,\) in curl command data - they can cause bash interpretation issues. Use simple text for testing:
96
-
97
- ```bash
98
- # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
99
- # Example: Test creating a record (requires JWT token)
100
- curl -X POST http://localhost:7130/api/database/records/posts \
101
- -H "x-api-key: your-api-key" \
102
- -H "Authorization: Bearer your-jwt-token" \
103
- -H "Content-Type: application/json" \
104
- -d '[{\"title\": \"Test Post\", \"content\": \"Test content\"}]'
105
-
106
- # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
107
- # Example: Test querying records (requires both API key and JWT token)
108
- curl http://localhost:7130/api/database/records/posts?id=eq.123 \
109
- -H "x-api-key: your-api-key" \
110
- -H "Authorization: Bearer your-jwt-token"
111
-
112
- # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
113
- # Example: Test authentication
114
- curl -X POST http://localhost:7130/api/auth/users \
115
- -H "Content-Type: application/json" \
116
- -d '{\"email\": \"test@example.com\", \"password\": \"testpass123\"}'
117
- ```
118
-
119
- Always include:
120
- - **Both headers for database operations**: x-api-key AND Authorization: Bearer token
121
- - Correct HTTP method (GET, POST, PATCH, DELETE)
122
- - Valid JSON payload for POST/PATCH requests (remember: POST requires array format `[{...}]`)
123
- - Query parameters for filtering GET requests
1
+ # Insforge OSS Instructions
2
+
3
+ ## What Insforge OSS Does
4
+
5
+ Backend-as-a-service with database, authentication, and file storage.
6
+
7
+ **Key Concept**: InsForge replaces your traditional backend - implement business logic by calling database operations directly. Instead of building API endpoints, use our database API as your application's backend.
8
+
9
+ ## 🚨 Project Setup
10
+
11
+ **Create your app in a NEW directory, not inside `insforge/`**
12
+
13
+ The `insforge/` directory is the BaaS platform. Your app should live elsewhere:
14
+ ```
15
+ ~/projects/
16
+ ├── insforge/ # ← BaaS platform (don't work here)
17
+ └── my-app/ # ← Your new app (work here)
18
+ ```
19
+
20
+ ## When to Use Tools
21
+
22
+ **MUST DO FIRST** → Download project rules: `download-project-rules`
23
+ **Start here** → `get-backend-metadata` (shows current database state)
24
+ **Need docs** → `get-db-api`, `get-auth-api`, or `get-storage-api`
25
+ **Create table** → `create-table` with explicit schema
26
+ **Work with data** → Use database API endpoints directly
27
+
28
+ ## Critical Rule:
29
+ **MUST DO FIRST** → Call`download-project-rules` to download project ruless
30
+
31
+ ## Critical Rule: Check Metadata First
32
+
33
+ Before ANY database operation, call `get-backend-metadata` to get the current database state.
34
+
35
+ ## Standard Workflow
36
+
37
+ 1. **Always** call `get-backend-metadata` first
38
+ 2. Check `get-instructions` if unfamiliar with the system
39
+ 3. Create tables with `create-table` if needed
40
+ 4. Use database API to insert/query/update/delete records
41
+ 5. Call `get-backend-metadata` again to verify changes
42
+
43
+ ## Key Rules
44
+
45
+ - Frequently check `get-instructions` and `get-backend-metadata`
46
+ - Always define explicit table schemas (no assumptions)
47
+ - Every table gets auto ID, created_at, updated_at fields
48
+ - **Database operations require**: JWT token (Authorization: Bearer header)
49
+ - **API keys are for MCP testing** (use tokens for production)
50
+ - File uploads work automatically with multipart/form-data
51
+
52
+ ## Authentication Requirements
53
+
54
+ ### Database Operations Need Authentication Token:
55
+ 1. **JWT Token**: `Authorization: Bearer your-jwt-token` - Authenticates the user
56
+
57
+ **Important Note about API Keys:**
58
+ - The `x-api-key` header is ONLY used for MCP (Model Context Protocol) testing
59
+ - Production applications should NEVER use API keys
60
+ - Always use JWT tokens from user/admin authentication for real applications
61
+
62
+ Without the Bearer token, you'll get "permission denied" errors when trying to insert, update, or delete records.
63
+
64
+ ### Getting Authentication:
65
+ ```bash
66
+ # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
67
+ # 1. First login to get JWT token
68
+ curl -X POST http://localhost:7130/api/auth/admin/sessions \
69
+ -H "Content-Type: application/json" \
70
+ -d "{\"email\":\"admin@example.com\",\"password\":\"your-password\"}"
71
+
72
+ # Response includes token: {"accessToken": "eyJ...", "user": {...}}
73
+
74
+ # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
75
+ # 2. Use the auth token for database operations
76
+ curl -X POST http://localhost:7130/api/database/records/products \
77
+ -H "Authorization: Bearer eyJ..." \
78
+ -H "Content-Type: application/json" \
79
+ -d "[{\"name\": \"Product\", \"price\": 99.99}]"
80
+ ```
81
+
82
+ ## Example: Comment Upvoting Feature
83
+
84
+ - Check current tables: `get-backend-metadata`
85
+ - Create comment_votes table: `create-table` with user_id, comment_id, vote_type fields
86
+ - Frontend upvote action: `POST /api/database/records/comment_votes` with vote data
87
+ - Frontend display scores: `GET /api/database/records/comment_votes?comment_id=eq.123` to count votes
88
+ - No separate backend needed - frontend calls InsForge database API directly
89
+
90
+
91
+ ## Critical Rule: Test API Endpoints with curl
92
+
93
+ After creating or modifying any API endpoint, always test it with curl to verify it works correctly.
94
+
95
+ **Note:** Avoid special characters (!,$,`,\) in curl command data - they can cause bash interpretation issues. Use simple text for testing:
96
+
97
+ ```bash
98
+ # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
99
+ # Example: Test creating a record (requires JWT token)
100
+ curl -X POST http://localhost:7130/api/database/records/posts \
101
+ -H "x-api-key: your-api-key" \
102
+ -H "Authorization: Bearer your-jwt-token" \
103
+ -H "Content-Type: application/json" \
104
+ -d '[{\"title\": \"Test Post\", \"content\": \"Test content\"}]'
105
+
106
+ # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
107
+ # Example: Test querying records (requires both API key and JWT token)
108
+ curl http://localhost:7130/api/database/records/posts?id=eq.123 \
109
+ -H "x-api-key: your-api-key" \
110
+ -H "Authorization: Bearer your-jwt-token"
111
+
112
+ # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
113
+ # Example: Test authentication
114
+ curl -X POST http://localhost:7130/api/auth/users \
115
+ -H "Content-Type: application/json" \
116
+ -d '{\"email\": \"test@example.com\", \"password\": \"testpass123\"}'
117
+ ```
118
+
119
+ Always include:
120
+ - **Both headers for database operations**: x-api-key AND Authorization: Bearer token
121
+ - Correct HTTP method (GET, POST, PATCH, DELETE)
122
+ - Valid JSON payload for POST/PATCH requests (remember: POST requires array format `[{...}]`)
123
+ - Query parameters for filtering GET requests
124
124
  - Prefer: return=representation header if you want to see the created/updated records
@@ -1,118 +1,118 @@
1
- ---
2
- description: Insforge AI Development Rules - Essential guidelines for BaaS platform development
3
- globs:
4
- alwaysApply: true
5
- ---
6
-
7
- # Insforge Development Rules
8
-
9
- ## Core Identity
10
- You are an exceptional software developer using Insforge Backend to assist building the product. Make it visually stunning, content-rich, professional-grade UIs.
11
-
12
- ## 🔴 MANDATORY: cURL Test at EVERY Step
13
-
14
- **For AI Agents: Test with cURL repeatedly throughout development:**
15
-
16
- 1. **Before coding** → Test endpoint exists, check response format
17
- 2. **During coding** → Test when confused about any API behavior
18
- 3. **After coding** → Test complete user journey end-to-end
19
- 4. **When debugging** → Test to see actual vs expected responses
20
-
21
- ```bash
22
- # Mac/Linux
23
- curl -X POST http://localhost:7130/api/[endpoint] \
24
- -H 'Content-Type: application/json' \
25
- -d '[{"key": "value"}]' | jq .
26
-
27
- # Windows PowerShell (use curl.exe) - different quotes for nested JSON
28
- curl.exe -X POST http://localhost:7130/api/[endpoint] \
29
- -H "Content-Type: application/json" \
30
- -d '[{\"key\": \"value\"}]' | jq .
31
- ```
32
-
33
- **You WILL get it wrong without testing. Test early, test often.**
34
-
35
- ## Critical Architecture Points
36
-
37
- When in doubt, read instructions documents again.
38
-
39
- ## 🚨 CRUD Operations - PostgREST NOT RESTful
40
- ### PostgREST Database API Behavior
41
-
42
- **Critical PostgREST Rules:**
43
-
44
- 1. **POST requires array**: `[{...}]` even for single record
45
- 2. **Empty responses without `Prefer: return=representation`**:
46
- - POST → `[]` (empty array)
47
- - PATCH → 204 No Content
48
- - DELETE → 204 No Content
49
- - **DELETE is idempotent** - no error if record doesn't exist
50
- 3. **With `Prefer: return=representation`**:
51
- - Returns affected records as array
52
- - DELETE and PATCH returns `[]` if record didn't exist
53
- 4. **Pagination**:
54
- - Request: `Range: 0-9` + `Prefer: count=exact`
55
- - Response: `Content-Range: 0-9/100` header (shows total)
56
- - Without `Prefer: count=exact`: `Content-Range: 0-9/*` (no total)
57
- 5. **Query syntax**: `?field=operator.value`
58
- - `?id=eq.123` (equals)
59
- - `?age=gt.30` (greater than)
60
- - `?name=like.*john*` (pattern match)
61
-
62
- ## Auth Operations:
63
-
64
- ### 🚨 IMPORTANT: Correct Auth Endpoints
65
- - **Register**: `POST /api/auth/users` - Create new user account
66
- - **Login**: `POST /api/auth/sessions` - Authenticate existing user
67
- - **Admin Login**: `POST /api/auth/admin/sessions` - Admin authentication
68
- - **Current User**: `GET /api/auth/sessions/current` - Get authenticated user info
69
- - `/api/auth/sessions/current` returns `{"user": {...}}` - nested structure
70
- - Store JWT tokens and include as `Authorization: Bearer {accessToken}` header
71
- - **Note**: Login/register returns `{accessToken, user}` with JWT token
72
-
73
- ### Regular API Response Format
74
-
75
- **⚠️ IMPORTANT: Frontend Error Handling**
76
- - **PARSE** backend responses and display user-friendly messages
77
- - **DO NOT** show raw API responses directly to users
78
- - **TRANSFORM** error details into readable, actionable messages
79
-
80
- - Success: Data directly (object/array)
81
- - Error: `{error, message, statusCode}`
82
- - Empty POST/PATCH/DELETE: Add `Prefer: return=representation`
83
-
84
- ### 🚨 Storage API Rules
85
- - **Upload Methods**:
86
- - **PUT** `/api/storage/buckets/{bucket}/objects/{filename}` - Upload with specific key
87
- - **POST** `/api/storage/buckets/{bucket}/objects` - Upload with auto-generated key
88
- - **Authentication**: Upload operations require `Authorization: Bearer {accessToken}`
89
- - **Generate Unique Filenames**: Use POST for auto-generated keys to prevent overwrites
90
- - **Multipart Form**: Use FormData for file uploads
91
- - **URL Format**: Storage returns **ABSOLUTE URLs** (e.g., `http://localhost:7130/api/storage/buckets/{bucket}/objects/{filename}`)
92
- - **IMPORTANT**: URLs are complete and ready to use - no need to prepend host or path
93
- - Use the URL directly in `<img src>` or fetch requests
94
-
95
- ## 🔥 Test EVERY Endpoint
96
-
97
- **Backend runs on port 7130**
98
-
99
- Always test with cURL before UI integration:
100
- - Include `Authorization: Bearer {accessToken}` for auth
101
- - Add `Prefer: return=representation` to see created data
102
- - Windows PowerShell: use curl.exe
103
-
104
- ```bash
105
- # Mac/Linux
106
- curl -X POST http://localhost:7130/api/database/records/posts \
107
- -H 'Authorization: Bearer TOKEN' \
108
- -H 'Content-Type: application/json' \
109
- -H 'Prefer: return=representation' \
110
- -d '[{"user_id": "from-localStorage", "caption": "Test"}]'
111
-
112
- # Windows PowerShell (use curl.exe) - different quotes for nested JSON
113
- curl.exe -X POST http://localhost:7130/api/database/records/posts \
114
- -H "Authorization: Bearer TOKEN" \
115
- -H "Content-Type: application/json" \
116
- -H "Prefer: return=representation" \
117
- -d '[{\"user_id\": \"from-localStorage\", \"caption\": \"Test\"}]'
1
+ ---
2
+ description: Insforge AI Development Rules - Essential guidelines for BaaS platform development
3
+ globs:
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Insforge Development Rules
8
+
9
+ ## Core Identity
10
+ You are an exceptional software developer using Insforge Backend to assist building the product. Make it visually stunning, content-rich, professional-grade UIs.
11
+
12
+ ## 🔴 MANDATORY: cURL Test at EVERY Step
13
+
14
+ **For AI Agents: Test with cURL repeatedly throughout development:**
15
+
16
+ 1. **Before coding** → Test endpoint exists, check response format
17
+ 2. **During coding** → Test when confused about any API behavior
18
+ 3. **After coding** → Test complete user journey end-to-end
19
+ 4. **When debugging** → Test to see actual vs expected responses
20
+
21
+ ```bash
22
+ # Mac/Linux
23
+ curl -X POST http://localhost:7130/api/[endpoint] \
24
+ -H 'Content-Type: application/json' \
25
+ -d '[{"key": "value"}]' | jq .
26
+
27
+ # Windows PowerShell (use curl.exe) - different quotes for nested JSON
28
+ curl.exe -X POST http://localhost:7130/api/[endpoint] \
29
+ -H "Content-Type: application/json" \
30
+ -d '[{\"key\": \"value\"}]' | jq .
31
+ ```
32
+
33
+ **You WILL get it wrong without testing. Test early, test often.**
34
+
35
+ ## Critical Architecture Points
36
+
37
+ When in doubt, read instructions documents again.
38
+
39
+ ## 🚨 CRUD Operations - PostgREST NOT RESTful
40
+ ### PostgREST Database API Behavior
41
+
42
+ **Critical PostgREST Rules:**
43
+
44
+ 1. **POST requires array**: `[{...}]` even for single record
45
+ 2. **Empty responses without `Prefer: return=representation`**:
46
+ - POST → `[]` (empty array)
47
+ - PATCH → 204 No Content
48
+ - DELETE → 204 No Content
49
+ - **DELETE is idempotent** - no error if record doesn't exist
50
+ 3. **With `Prefer: return=representation`**:
51
+ - Returns affected records as array
52
+ - DELETE and PATCH returns `[]` if record didn't exist
53
+ 4. **Pagination**:
54
+ - Request: `Range: 0-9` + `Prefer: count=exact`
55
+ - Response: `Content-Range: 0-9/100` header (shows total)
56
+ - Without `Prefer: count=exact`: `Content-Range: 0-9/*` (no total)
57
+ 5. **Query syntax**: `?field=operator.value`
58
+ - `?id=eq.123` (equals)
59
+ - `?age=gt.30` (greater than)
60
+ - `?name=like.*john*` (pattern match)
61
+
62
+ ## Auth Operations:
63
+
64
+ ### 🚨 IMPORTANT: Correct Auth Endpoints
65
+ - **Register**: `POST /api/auth/users` - Create new user account
66
+ - **Login**: `POST /api/auth/sessions` - Authenticate existing user
67
+ - **Admin Login**: `POST /api/auth/admin/sessions` - Admin authentication
68
+ - **Current User**: `GET /api/auth/sessions/current` - Get authenticated user info
69
+ - `/api/auth/sessions/current` returns `{"user": {...}}` - nested structure
70
+ - Store JWT tokens and include as `Authorization: Bearer {accessToken}` header
71
+ - **Note**: Login/register returns `{accessToken, user}` with JWT token
72
+
73
+ ### Regular API Response Format
74
+
75
+ **⚠️ IMPORTANT: Frontend Error Handling**
76
+ - **PARSE** backend responses and display user-friendly messages
77
+ - **DO NOT** show raw API responses directly to users
78
+ - **TRANSFORM** error details into readable, actionable messages
79
+
80
+ - Success: Data directly (object/array)
81
+ - Error: `{error, message, statusCode}`
82
+ - Empty POST/PATCH/DELETE: Add `Prefer: return=representation`
83
+
84
+ ### 🚨 Storage API Rules
85
+ - **Upload Methods**:
86
+ - **PUT** `/api/storage/buckets/{bucket}/objects/{filename}` - Upload with specific key
87
+ - **POST** `/api/storage/buckets/{bucket}/objects` - Upload with auto-generated key
88
+ - **Authentication**: Upload operations require `Authorization: Bearer {accessToken}`
89
+ - **Generate Unique Filenames**: Use POST for auto-generated keys to prevent overwrites
90
+ - **Multipart Form**: Use FormData for file uploads
91
+ - **URL Format**: Storage returns **ABSOLUTE URLs** (e.g., `http://localhost:7130/api/storage/buckets/{bucket}/objects/{filename}`)
92
+ - **IMPORTANT**: URLs are complete and ready to use - no need to prepend host or path
93
+ - Use the URL directly in `<img src>` or fetch requests
94
+
95
+ ## 🔥 Test EVERY Endpoint
96
+
97
+ **Backend runs on port 7130**
98
+
99
+ Always test with cURL before UI integration:
100
+ - Include `Authorization: Bearer {accessToken}` for auth
101
+ - Add `Prefer: return=representation` to see created data
102
+ - Windows PowerShell: use curl.exe
103
+
104
+ ```bash
105
+ # Mac/Linux
106
+ curl -X POST http://localhost:7130/api/database/records/posts \
107
+ -H 'Authorization: Bearer TOKEN' \
108
+ -H 'Content-Type: application/json' \
109
+ -H 'Prefer: return=representation' \
110
+ -d '[{"user_id": "from-localStorage", "caption": "Test"}]'
111
+
112
+ # Windows PowerShell (use curl.exe) - different quotes for nested JSON
113
+ curl.exe -X POST http://localhost:7130/api/database/records/posts \
114
+ -H "Authorization: Bearer TOKEN" \
115
+ -H "Content-Type: application/json" \
116
+ -H "Prefer: return=representation" \
117
+ -d '[{\"user_id\": \"from-localStorage\", \"caption\": \"Test\"}]'
118
118
  ```