insforge 1.2.10 → 1.4.8
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.
- package/.claude-plugin/marketplace.json +20 -20
- package/.dockerignore +60 -60
- package/.env.example +83 -77
- package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
- package/.github/ISSUE_TEMPLATE/config.yml +11 -11
- package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
- package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
- package/.github/copilot-instructions.md +146 -146
- package/.github/workflows/build-image.yml +65 -65
- package/.github/workflows/ci-premerge-check.yml +23 -23
- package/.github/workflows/e2e.yml +63 -63
- package/.github/workflows/lint-and-format.yml +32 -32
- package/.prettierignore +64 -64
- package/CHANGELOG.md +46 -44
- package/CLAUDE_PLUGIN.md +104 -104
- package/CODE_OF_CONDUCT.md +128 -128
- package/CONTRIBUTING.md +125 -125
- package/Dockerfile +30 -30
- package/GITHUB_OAUTH_SETUP.md +49 -49
- package/GOOGLE_OAUTH_SETUP.md +148 -148
- package/LICENSE +201 -201
- package/README.md +182 -182
- package/assets/Dark.svg +23 -23
- package/auth/package.json +30 -28
- package/auth/src/lib/broadcastService.ts +4 -4
- package/auth/src/lib/insforge.ts +8 -0
- package/auth/src/main.tsx +2 -4
- package/auth/src/pages/SignInPage.tsx +5 -2
- package/auth/src/pages/SignUpPage.tsx +5 -2
- package/auth/src/pages/VerifyEmailPage.tsx +18 -0
- package/auth/tsconfig.json +33 -32
- package/auth/tsconfig.node.json +11 -11
- package/backend/package.json +82 -75
- package/backend/src/api/middlewares/rate-limiters.ts +127 -127
- package/backend/src/api/routes/ai/index.routes.ts +475 -468
- package/backend/src/api/routes/auth/index.routes.ts +720 -570
- package/backend/src/api/routes/auth/oauth.routes.ts +478 -448
- package/backend/src/api/routes/database/advance.routes.ts +37 -16
- package/backend/src/api/routes/database/index.routes.ts +80 -1
- package/backend/src/api/routes/database/records.routes.ts +48 -184
- package/backend/src/api/routes/database/rpc.routes.ts +69 -0
- package/backend/src/api/routes/database/tables.routes.ts +0 -14
- package/backend/src/api/routes/deployments/index.routes.ts +192 -0
- package/backend/src/api/routes/docs/index.routes.ts +76 -76
- package/backend/src/api/routes/email/index.routes.ts +35 -0
- package/backend/src/api/routes/functions/index.routes.ts +21 -15
- package/backend/src/api/routes/metadata/index.routes.ts +38 -0
- package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
- package/backend/src/api/routes/realtime/index.routes.ts +12 -0
- package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
- package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
- package/backend/src/api/routes/storage/index.routes.ts +18 -12
- package/backend/src/api/routes/usage/index.routes.ts +6 -4
- package/backend/src/api/routes/webhooks/index.routes.ts +109 -0
- package/backend/src/infra/database/database.manager.ts +14 -11
- package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
- package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
- package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
- package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
- package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
- package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
- package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
- package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
- package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
- package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
- package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
- package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
- package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
- package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
- package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
- package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
- package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
- package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
- package/backend/src/infra/database/migrations/018_schema-rework.sql +441 -0
- package/backend/src/infra/database/migrations/019_create-deployments-table.sql +36 -0
- package/backend/src/infra/database/migrations/020_add-audio-modality.sql +11 -0
- package/backend/src/infra/database/migrations/bootstrap/bootstrap-migrations.js +103 -0
- package/backend/src/infra/realtime/realtime.manager.ts +246 -0
- package/backend/src/infra/realtime/webhook-sender.ts +82 -0
- package/backend/src/infra/security/token.manager.ts +216 -125
- package/backend/src/infra/socket/socket.manager.ts +198 -64
- package/backend/src/providers/ai/openrouter.provider.ts +24 -12
- package/backend/src/providers/database/base.provider.ts +39 -0
- package/backend/src/providers/database/cloud.provider.ts +159 -0
- package/backend/src/providers/deployments/vercel.provider.ts +516 -0
- package/backend/src/providers/email/base.provider.ts +4 -7
- package/backend/src/providers/email/cloud.provider.ts +84 -0
- package/backend/src/providers/oauth/apple.provider.ts +266 -0
- package/backend/src/providers/oauth/index.ts +1 -0
- package/backend/src/server.ts +329 -284
- package/backend/src/services/ai/ai-config.service.ts +6 -6
- package/backend/src/services/ai/ai-model.service.ts +60 -60
- package/backend/src/services/ai/ai-usage.service.ts +7 -7
- package/backend/src/services/ai/chat-completion.service.ts +415 -220
- package/backend/src/services/ai/helpers.ts +64 -64
- package/backend/src/services/ai/image-generation.service.ts +3 -3
- package/backend/src/services/ai/index.ts +13 -13
- package/backend/src/services/auth/auth-config.service.ts +4 -4
- package/backend/src/services/auth/auth-otp.service.ts +6 -6
- package/backend/src/services/auth/auth.service.ts +148 -74
- package/backend/src/services/auth/index.ts +4 -4
- package/backend/src/services/auth/oauth-config.service.ts +12 -12
- package/backend/src/services/database/database-advance.service.ts +19 -55
- package/backend/src/services/database/database-table.service.ts +38 -94
- package/backend/src/services/database/database.service.ts +127 -0
- package/backend/src/services/database/postgrest-proxy.service.ts +165 -0
- package/backend/src/services/deployments/deployment.service.ts +693 -0
- package/backend/src/services/email/email.service.ts +5 -7
- package/backend/src/services/functions/function.service.ts +61 -41
- package/backend/src/services/logs/audit.service.ts +10 -10
- package/backend/src/services/realtime/index.ts +3 -0
- package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
- package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
- package/backend/src/services/realtime/realtime-message.service.ts +260 -0
- package/backend/src/services/secrets/secret.service.ts +101 -27
- package/backend/src/services/storage/storage.service.ts +30 -30
- package/backend/src/services/usage/usage.service.ts +6 -6
- package/backend/src/types/ai.ts +8 -0
- package/backend/src/types/auth.ts +16 -1
- package/backend/src/types/database.ts +2 -0
- package/backend/src/types/deployments.ts +33 -0
- package/backend/src/types/realtime.ts +18 -0
- package/backend/src/types/socket.ts +7 -31
- package/backend/src/types/storage.ts +1 -1
- package/backend/src/types/webhooks.ts +45 -0
- package/backend/src/utils/cookies.ts +34 -0
- package/backend/src/utils/environment.ts +0 -14
- package/backend/src/utils/s3-config-loader.ts +64 -0
- package/backend/src/utils/seed.ts +79 -43
- package/backend/src/utils/sql-parser.ts +216 -0
- package/backend/src/utils/utils.ts +114 -114
- package/backend/src/utils/validations.ts +10 -10
- package/backend/tests/README.md +133 -133
- package/backend/tests/cleanup-all-test-data.sh +230 -230
- package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
- package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
- package/backend/tests/local/test-ai-config.sh +129 -129
- package/backend/tests/local/test-ai-usage.sh +80 -80
- package/backend/tests/local/test-auth-router.sh +143 -143
- package/backend/tests/local/test-database-router.sh +222 -222
- package/backend/tests/local/test-e2e.sh +240 -240
- package/backend/tests/local/test-fk-errors.sh +96 -96
- package/backend/tests/local/test-functions.sh +123 -123
- package/backend/tests/local/test-id-field.sh +200 -200
- package/backend/tests/local/test-logs.sh +132 -132
- package/backend/tests/local/test-public-bucket.sh +264 -264
- package/backend/tests/local/test-rpc.sh +141 -0
- package/backend/tests/local/test-secrets.sh +249 -249
- package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
- package/backend/tests/local/test-traditional-rest.sh +208 -208
- package/backend/tests/manual/README.md +50 -50
- package/backend/tests/manual/create-large-table-simple.sql +10 -10
- package/backend/tests/manual/seed-large-table.sql +100 -100
- package/backend/tests/manual/setup-large-table-extras.sql +33 -33
- package/backend/tests/manual/test-ai-model-plugins.sh +258 -0
- package/backend/tests/manual/test-bulk-upsert.sh +409 -409
- package/backend/tests/manual/test-database-advance.sh +296 -296
- package/backend/tests/manual/test-postgrest-stability.sh +191 -191
- package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
- package/backend/tests/manual/test-rawsql-modes.sh +244 -244
- package/backend/tests/manual/test-universal-storage.sh +263 -263
- package/backend/tests/manual/test-users.sql +17 -17
- package/backend/tests/run-all-tests.sh +139 -139
- package/backend/tests/setup.ts +0 -0
- package/backend/tests/test-config.sh +338 -338
- package/backend/tests/unit/analyze-query.test.ts +697 -0
- package/backend/tests/unit/database-advance.test.ts +326 -0
- package/backend/tests/unit/helpers.test.ts +2 -2
- package/backend/tsconfig.json +22 -22
- package/claude-plugin/.claude-plugin/plugin.json +24 -24
- package/claude-plugin/README.md +133 -133
- package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +273 -270
- package/docker-compose.prod.yml +204 -200
- package/docker-compose.yml +232 -228
- package/docker-init/db/db-init.sql +97 -97
- package/docker-init/db/jwt.sql +5 -5
- package/docker-init/db/postgresql.conf +16 -16
- package/docker-init/logs/vector.yml +236 -236
- package/docs/README.md +44 -44
- package/docs/agent-docs/deployment.md +79 -0
- package/docs/agent-docs/real-time.md +269 -0
- package/docs/changelog.mdx +212 -67
- package/docs/core-concepts/ai/architecture.mdx +350 -372
- package/docs/core-concepts/ai/sdk.mdx +238 -213
- package/docs/core-concepts/authentication/architecture.mdx +276 -278
- package/docs/core-concepts/authentication/sdk.mdx +710 -414
- package/docs/core-concepts/authentication/ui-components/customization.mdx +733 -529
- package/docs/core-concepts/authentication/ui-components/nextjs.mdx +247 -221
- package/docs/core-concepts/authentication/ui-components/react-router.mdx +183 -184
- package/docs/core-concepts/authentication/ui-components/react.mdx +136 -129
- package/docs/core-concepts/database/architecture.mdx +292 -255
- package/docs/core-concepts/database/pgvector.mdx +138 -0
- package/docs/core-concepts/database/sdk.mdx +382 -382
- package/docs/core-concepts/deployments/architecture.mdx +152 -0
- package/docs/core-concepts/email/architecture.mdx +103 -0
- package/docs/core-concepts/email/sdk.mdx +53 -0
- package/docs/core-concepts/functions/architecture.mdx +105 -105
- package/docs/core-concepts/functions/sdk.mdx +183 -184
- package/docs/core-concepts/realtime/architecture.mdx +446 -0
- package/docs/core-concepts/realtime/sdk.mdx +409 -0
- package/docs/core-concepts/storage/architecture.mdx +243 -243
- package/docs/core-concepts/storage/sdk.mdx +253 -253
- package/docs/deployment/README.md +94 -94
- package/docs/deployment/deploy-to-aws-ec2.md +564 -564
- package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
- package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
- package/docs/deployment/deploy-to-render.md +441 -441
- package/docs/deprecated/insforge-auth-api.md +214 -214
- package/docs/deprecated/insforge-auth-sdk.md +99 -99
- package/docs/deprecated/insforge-db-api.md +358 -358
- package/docs/deprecated/insforge-db-sdk.md +139 -139
- package/docs/deprecated/insforge-debug-sdk.md +156 -156
- package/docs/deprecated/insforge-debug.md +64 -64
- package/docs/deprecated/insforge-instructions.md +123 -123
- package/docs/deprecated/insforge-project.md +117 -117
- package/docs/deprecated/insforge-storage-api.md +278 -278
- package/docs/deprecated/insforge-storage-sdk.md +158 -158
- package/docs/docs.json +240 -210
- package/docs/examples/framework-guides/nextjs.mdx +131 -131
- package/docs/examples/framework-guides/nuxt.mdx +165 -165
- package/docs/examples/framework-guides/react.mdx +165 -165
- package/docs/examples/framework-guides/svelte.mdx +153 -153
- package/docs/examples/framework-guides/vue.mdx +159 -159
- package/docs/examples/overview.mdx +67 -67
- package/docs/favicon.png +0 -0
- package/docs/favicon.svg +4 -19
- package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
- package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
- package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
- package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
- package/docs/images/changelog/dec-2025/apple-oauth.mp4 +0 -0
- package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
- package/docs/images/changelog/dec-2025/moreModels.png +0 -0
- package/docs/images/changelog/dec-2025/multi-region.webp +0 -0
- package/docs/images/changelog/dec-2025/postgres-connection.webp +0 -0
- package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
- package/docs/images/changelog/dec-2025/realtime2.png +0 -0
- package/docs/images/icons/ai.svg +4 -4
- package/docs/images/logos/nextjs.svg +4 -4
- package/docs/images/logos/nuxt.svg +4 -4
- package/docs/images/logos/react.svg +5 -5
- package/docs/images/logos/svelte.svg +4 -4
- package/docs/images/logos/vue.svg +5 -5
- package/docs/images/mcp-setup/CC-MCP-1.mp4 +0 -0
- package/docs/images/mcp-setup/CC-MCP-2.mp4 +0 -0
- package/docs/images/mcp-setup/Cursor-MCP-1.mp4 +0 -0
- package/docs/images/mcp-setup/Cursor-MCP-2.mp4 +0 -0
- package/docs/images/mcp-setup/Cursor-MCP-3.mp4 +0 -0
- package/docs/images/mcp-setup/claude-code-connect.png +0 -0
- package/docs/images/mcp-setup/cline-1.png +0 -0
- package/docs/images/mcp-setup/cline-2.png +0 -0
- package/docs/images/mcp-setup/cline-3.png +0 -0
- package/docs/images/mcp-setup/connect-project.png +0 -0
- package/docs/images/mcp-setup/copilot-1.png +0 -0
- package/docs/images/mcp-setup/copilot-2.png +0 -0
- package/docs/images/mcp-setup/copilot-3.png +0 -0
- package/docs/images/mcp-setup/mcp-json-1.png +0 -0
- package/docs/images/mcp-setup/mcp-json-2.png +0 -0
- package/docs/images/mcp-setup/qoder-1.png +0 -0
- package/docs/images/mcp-setup/qoder-2.png +0 -0
- package/docs/images/mcp-setup/roocode-1.png +0 -0
- package/docs/images/mcp-setup/roocode-2.png +0 -0
- package/docs/images/mcp-setup/trae-1.png +0 -0
- package/docs/images/mcp-setup/trae-2.png +0 -0
- package/docs/images/mcp-setup/trae-3.png +0 -0
- package/docs/images/mcp-setup/trae-4.png +0 -0
- package/docs/images/mcp-setup/trae-5.png +0 -0
- package/docs/images/mcp-setup/windsurf-1.png +0 -0
- package/docs/images/mcp-setup/windsurf-2.png +0 -0
- package/docs/insforge-instructions-sdk.md +93 -88
- package/docs/introduction.mdx +46 -45
- package/docs/logo/dark.svg +22 -22
- package/docs/logo/light.svg +20 -20
- package/docs/mcp-setup.mdx +332 -0
- package/docs/oauth-server.mdx +563 -0
- package/docs/partnership.mdx +720 -646
- package/docs/quickstart.mdx +82 -82
- package/docs/showcase.mdx +52 -52
- package/docs/snippets/sdk-installation.mdx +21 -21
- package/docs/snippets/service-icons.mdx +27 -27
- package/docs/vscode-extension.mdx +74 -0
- package/eslint.config.js +1 -0
- package/examples/oauth/frontend-oauth-example.html +250 -250
- package/examples/response-examples.md +443 -443
- package/frontend/components.json +17 -17
- package/frontend/package.json +69 -69
- package/frontend/src/App.tsx +8 -3
- package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
- package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
- package/frontend/src/assets/icons/checked.svg +3 -3
- package/frontend/src/assets/icons/connected.svg +3 -3
- package/frontend/src/assets/icons/error.svg +3 -3
- package/frontend/src/assets/icons/loader.svg +9 -9
- package/frontend/src/assets/icons/pencil.svg +4 -4
- package/frontend/src/assets/icons/refresh.svg +4 -4
- package/frontend/src/assets/icons/step_active.svg +3 -3
- package/frontend/src/assets/icons/step_inactive.svg +11 -11
- package/frontend/src/assets/icons/warning.svg +3 -3
- package/frontend/src/assets/logos/antigravity.svg +1 -0
- package/frontend/src/assets/logos/apple.svg +3 -3
- package/frontend/src/assets/logos/claude_code.svg +3 -3
- package/frontend/src/assets/logos/cline.svg +6 -6
- package/frontend/src/assets/logos/copilot.svg +10 -0
- package/frontend/src/assets/logos/cursor.svg +20 -20
- package/frontend/src/assets/logos/deepseek.svg +139 -0
- package/frontend/src/assets/logos/discord.svg +8 -8
- package/frontend/src/assets/logos/facebook.svg +3 -3
- package/frontend/src/assets/logos/gemini.svg +19 -19
- package/frontend/src/assets/logos/github.svg +5 -5
- package/frontend/src/assets/logos/google.svg +13 -13
- package/frontend/src/assets/logos/grok.svg +10 -10
- package/frontend/src/assets/logos/insforge_dark.svg +15 -15
- package/frontend/src/assets/logos/insforge_light.svg +15 -15
- package/frontend/src/assets/logos/instagram.svg +1 -1
- package/frontend/src/assets/logos/kiro.svg +9 -0
- package/frontend/src/assets/logos/linkedin.svg +3 -3
- package/frontend/src/assets/logos/openai.svg +10 -10
- package/frontend/src/assets/logos/qoder.svg +4 -0
- package/frontend/src/assets/logos/qwen.svg +15 -0
- package/frontend/src/assets/logos/roo_code.svg +9 -9
- package/frontend/src/assets/logos/spotify.svg +16 -16
- package/frontend/src/assets/logos/tiktok.svg +5 -5
- package/frontend/src/assets/logos/trae.svg +3 -3
- package/frontend/src/assets/logos/windsurf.svg +10 -10
- package/frontend/src/assets/logos/x.svg +3 -3
- package/frontend/src/components/CodeBlock.tsx +2 -2
- package/frontend/src/components/ConnectCTA.tsx +3 -2
- package/frontend/src/components/datagrid/DataGrid.tsx +90 -62
- package/frontend/src/components/datagrid/datagridTypes.tsx +2 -1
- package/frontend/src/components/datagrid/index.ts +1 -1
- package/frontend/src/components/index.ts +0 -1
- package/frontend/src/components/layout/AppHeader.tsx +13 -37
- package/frontend/src/components/layout/AppSidebar.tsx +85 -100
- package/frontend/src/components/layout/Layout.tsx +34 -32
- package/frontend/src/components/layout/PrimaryMenu.tsx +12 -4
- package/frontend/src/components/radix/Select.tsx +151 -151
- package/frontend/src/features/ai/components/AIConfigCard.tsx +200 -200
- package/frontend/src/features/ai/components/AIEmptyState.tsx +23 -23
- package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +102 -101
- package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -135
- package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -51
- package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -118
- package/frontend/src/features/ai/components/index.ts +6 -6
- package/frontend/src/features/ai/helpers.ts +147 -141
- package/frontend/src/features/ai/{page → pages}/AIPage.tsx +166 -166
- package/frontend/src/features/auth/components/AuthPreview.tsx +96 -96
- package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +61 -31
- package/frontend/src/features/auth/components/index.ts +5 -5
- package/frontend/src/features/auth/helpers.tsx +8 -0
- package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +275 -275
- package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
- package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +1 -1
- package/frontend/src/features/database/components/DatabaseDataGrid.tsx +0 -2
- package/frontend/src/features/database/components/ForeignKeyCell.tsx +38 -11
- package/frontend/src/features/database/components/ForeignKeyPopover.tsx +18 -8
- package/frontend/src/features/database/components/LinkRecordModal.tsx +61 -13
- package/frontend/src/features/database/components/RecordFormField.tsx +1 -1
- package/frontend/src/features/database/components/SQLModal.tsx +75 -0
- package/frontend/src/features/database/components/TableForm.tsx +0 -4
- package/frontend/src/features/database/components/TableSidebar.tsx +0 -3
- package/frontend/src/features/database/components/TablesEmptyState.tsx +1 -1
- package/frontend/src/features/database/components/TemplatePreview.tsx +1 -2
- package/frontend/src/features/database/constants.ts +16 -28
- package/frontend/src/features/database/hooks/useCSVImport.ts +3 -2
- package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
- package/frontend/src/features/database/hooks/useRawSQL.ts +3 -2
- package/frontend/src/features/database/hooks/useTables.ts +30 -28
- package/frontend/src/features/database/index.ts +1 -0
- package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -42
- package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +34 -51
- package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +42 -58
- package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +2 -2
- package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
- package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +34 -51
- package/frontend/src/features/database/services/advance.service.ts +1 -41
- package/frontend/src/features/database/services/database.service.ts +55 -0
- package/frontend/src/features/database/services/record.service.ts +4 -20
- package/frontend/src/features/database/services/table.service.ts +1 -10
- package/frontend/src/features/database/templates/ai-chatbot.ts +6 -6
- package/frontend/src/features/database/templates/ecommerce-platform.ts +2 -2
- package/frontend/src/features/database/templates/instagram-clone.ts +10 -10
- package/frontend/src/features/database/templates/notion-clone.ts +8 -8
- package/frontend/src/features/database/templates/reddit-clone.ts +10 -10
- package/frontend/src/features/deployments/components/DeploymentRow.tsx +93 -0
- package/frontend/src/features/deployments/components/DeploymentsEmptyState.tsx +15 -0
- package/frontend/src/features/deployments/hooks/useDeployments.ts +157 -0
- package/frontend/src/features/deployments/pages/DeploymentsPage.tsx +318 -0
- package/frontend/src/features/deployments/services/deployments.service.ts +63 -0
- package/frontend/src/features/functions/components/FunctionRow.tsx +72 -72
- package/frontend/src/features/functions/components/FunctionsSidebar.tsx +56 -56
- package/frontend/src/features/functions/components/SecretRow.tsx +3 -3
- package/frontend/src/features/functions/components/index.ts +5 -5
- package/frontend/src/features/functions/hooks/useFunctions.ts +5 -4
- package/frontend/src/features/functions/hooks/useSecrets.ts +6 -9
- package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
- package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +118 -116
- package/frontend/src/features/functions/services/function.service.ts +8 -25
- package/frontend/src/features/functions/services/secret.service.ts +23 -41
- package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +125 -118
- package/frontend/src/features/logs/components/LogDetailPanel.tsx +41 -0
- package/frontend/src/features/logs/components/LogsDataGrid.tsx +32 -1
- package/frontend/src/features/logs/components/index.ts +1 -0
- package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
- package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +36 -6
- package/frontend/src/features/onboard/components/ApiCredentialsSection.tsx +59 -0
- package/frontend/src/features/onboard/components/ConnectionStringSection.tsx +180 -0
- package/frontend/src/features/onboard/components/McpConnectionSection.tsx +159 -0
- package/frontend/src/features/onboard/components/OnboardingController.tsx +68 -0
- package/frontend/src/features/onboard/components/OnboardingModal.tsx +121 -267
- package/frontend/src/features/onboard/components/ShowPasswordButton.tsx +21 -0
- package/frontend/src/features/onboard/components/index.ts +9 -4
- package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +1 -1
- package/frontend/src/features/onboard/components/mcp/QoderDeeplinkGenerator.tsx +36 -0
- package/frontend/src/features/onboard/components/mcp/helpers.tsx +123 -98
- package/frontend/src/features/onboard/components/mcp/index.ts +4 -3
- package/frontend/src/features/onboard/index.ts +17 -13
- package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
- package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
- package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
- package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
- package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
- package/frontend/src/features/realtime/index.ts +11 -0
- package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
- package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
- package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
- package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
- package/frontend/src/features/settings/pages/SettingsPage.tsx +349 -0
- package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
- package/frontend/src/features/visualizer/components/AuthNode.tsx +4 -4
- package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +24 -11
- package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +11 -36
- package/frontend/src/index.css +249 -249
- package/frontend/src/lib/contexts/ModalContext.tsx +35 -0
- package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
- package/frontend/src/lib/hooks/useMetadata.ts +45 -1
- package/frontend/src/lib/hooks/useModal.tsx +2 -0
- package/frontend/src/lib/routing/AppRoutes.tsx +103 -84
- package/frontend/src/lib/services/metadata.service.ts +20 -3
- package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
- package/frontend/src/lib/utils/menuItems.ts +223 -183
- package/frontend/src/lib/utils/utils.ts +196 -183
- package/frontend/tsconfig.json +25 -25
- package/frontend/tsconfig.node.json +9 -9
- package/functions/deno.json +24 -24
- package/functions/server.ts +6 -6
- package/functions/worker-template.js +1 -1
- package/i18n/README.ar.md +130 -130
- package/i18n/README.de.md +130 -130
- package/i18n/README.es.md +154 -154
- package/i18n/README.fr.md +134 -134
- package/i18n/README.hi.md +129 -129
- package/i18n/README.ja.md +174 -174
- package/i18n/README.ko.md +136 -136
- package/i18n/README.pt-BR.md +131 -131
- package/i18n/README.ru.md +129 -129
- package/i18n/README.zh-CN.md +133 -133
- package/openapi/ai.yaml +825 -715
- package/openapi/auth.yaml +1324 -1244
- package/openapi/email.yaml +158 -0
- package/openapi/functions.yaml +475 -475
- package/openapi/health.yaml +29 -29
- package/openapi/logs.yaml +221 -223
- package/openapi/metadata.yaml +175 -177
- package/openapi/realtime.yaml +699 -0
- package/openapi/records.yaml +381 -381
- package/openapi/secrets.yaml +370 -370
- package/openapi/storage.yaml +875 -875
- package/openapi/tables.yaml +462 -463
- package/package.json +97 -97
- package/shared-schemas/package.json +31 -31
- package/shared-schemas/src/ai-api.schema.ts +251 -143
- package/shared-schemas/src/ai.schema.ts +8 -4
- package/shared-schemas/src/auth-api.schema.ts +380 -339
- package/shared-schemas/src/auth.schema.ts +18 -11
- package/shared-schemas/src/cloud-events.schema.ts +26 -0
- package/shared-schemas/src/database-api.schema.ts +32 -1
- package/shared-schemas/src/database.schema.ts +39 -0
- package/shared-schemas/src/deployments-api.schema.ts +55 -0
- package/shared-schemas/src/deployments.schema.ts +30 -0
- package/shared-schemas/src/docs.schema.ts +32 -0
- package/shared-schemas/src/email-api.schema.ts +30 -0
- package/shared-schemas/src/functions-api.schema.ts +13 -4
- package/shared-schemas/src/functions.schema.ts +1 -1
- package/shared-schemas/src/index.ts +22 -14
- package/shared-schemas/src/metadata.schema.ts +39 -4
- package/shared-schemas/src/realtime-api.schema.ts +111 -0
- package/shared-schemas/src/realtime.schema.ts +143 -0
- package/shared-schemas/src/secrets-api.schema.ts +44 -0
- package/shared-schemas/src/secrets.schema.ts +15 -0
- package/shared-schemas/tsconfig.json +21 -21
- package/tsconfig.json +7 -7
- package/zeabur/README.md +26 -13
- package/zeabur/template.yml +1001 -1032
- package/.cursor/rules/cursor-rules.mdc +0 -94
- package/backend/src/types/profile.ts +0 -55
- package/frontend/src/components/ProjectInfoModal.tsx +0 -128
- package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
- package/test-gemini.sh +0 -35
- package/test-usage-admin.sh +0 -57
- package/test-usage.sh +0 -50
- /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
- /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
- /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
- /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
- /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
|
@@ -1,441 +1,441 @@
|
|
|
1
|
-
# Deploy InsForge to Render
|
|
2
|
-
|
|
3
|
-
This guide walks you through deploying InsForge on Render, a modern cloud platform with managed services and automatic scaling.
|
|
4
|
-
|
|
5
|
-
## 📋 Prerequisites
|
|
6
|
-
|
|
7
|
-
- Render account (free tier available at [render.com](https://render.com))
|
|
8
|
-
- GitHub account (for repository connection)
|
|
9
|
-
- Basic knowledge of environment variables
|
|
10
|
-
- Domain name (optional, for custom domain)
|
|
11
|
-
|
|
12
|
-
## 🎯 Why Render?
|
|
13
|
-
|
|
14
|
-
- **Managed PostgreSQL**: Fully managed database with automatic backups
|
|
15
|
-
- **Auto-deploy**: Automatic deployments from Git commits
|
|
16
|
-
- **Free SSL**: Automatic HTTPS certificates
|
|
17
|
-
- **Simple Scaling**: Easy horizontal and vertical scaling
|
|
18
|
-
- **Free Tier**: Suitable for testing and small projects
|
|
19
|
-
|
|
20
|
-
## 🚀 Deployment Steps
|
|
21
|
-
|
|
22
|
-
### 1. Fork InsForge Repository
|
|
23
|
-
|
|
24
|
-
1. Visit [https://github.com/insforge/insforge](https://github.com/insforge/insforge)
|
|
25
|
-
2. Click **Fork** to create your copy
|
|
26
|
-
3. This allows Render to connect to your repository
|
|
27
|
-
|
|
28
|
-
### 2. Set Up Render Account
|
|
29
|
-
|
|
30
|
-
1. Visit [https://render.com](https://render.com) and sign up
|
|
31
|
-
2. Connect GitHub account
|
|
32
|
-
3. Authorize Render to access repositories
|
|
33
|
-
4. Select your forked InsForge repository
|
|
34
|
-
|
|
35
|
-
### 3. Create PostgreSQL Database
|
|
36
|
-
|
|
37
|
-
#### 3.1 Create Database
|
|
38
|
-
|
|
39
|
-
1. From Render Dashboard: **New** → **PostgreSQL**
|
|
40
|
-
2. Configure:
|
|
41
|
-
- **Name**: `insforge-db`
|
|
42
|
-
- **Database**: `insforge`
|
|
43
|
-
- **User**: `insforge_user`
|
|
44
|
-
- **Region**: Select closest to users
|
|
45
|
-
- **Version**: PostgreSQL 15+
|
|
46
|
-
- **Plan**:
|
|
47
|
-
- Free: Testing (90 days)
|
|
48
|
-
- Starter ($7/month): Small production
|
|
49
|
-
- Standard ($20/month): Production
|
|
50
|
-
|
|
51
|
-
3. Click **Create Database**
|
|
52
|
-
4. Save connection details (internal & external URLs)
|
|
53
|
-
|
|
54
|
-
#### 3.2 Initialize Database
|
|
55
|
-
|
|
56
|
-
Connect and run initialization scripts:
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
# Download init scripts
|
|
60
|
-
curl -O https://raw.githubusercontent.com/insforge/insforge/main/docker-init/db/db-init.sql
|
|
61
|
-
curl -O https://raw.githubusercontent.com/insforge/insforge/main/docker-init/db/jwt.sql
|
|
62
|
-
|
|
63
|
-
# Connect to database
|
|
64
|
-
psql <your-external-database-url>
|
|
65
|
-
|
|
66
|
-
# Run initialization
|
|
67
|
-
\i db-init.sql
|
|
68
|
-
\i jwt.sql
|
|
69
|
-
\q
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### 4. Deploy Backend Service
|
|
73
|
-
|
|
74
|
-
#### 4.1 Create Web Service
|
|
75
|
-
|
|
76
|
-
1. **New** → **Web Service**
|
|
77
|
-
2. Connect repository
|
|
78
|
-
3. Configure:
|
|
79
|
-
- **Name**: `insforge-backend`
|
|
80
|
-
- **Region**: Same as database
|
|
81
|
-
- **Branch**: `main`
|
|
82
|
-
- **Runtime**: `Docker`
|
|
83
|
-
- **Dockerfile Path**: `Dockerfile`
|
|
84
|
-
- **Instance Type**: Starter ($7/month) minimum
|
|
85
|
-
|
|
86
|
-
**Start Command:**
|
|
87
|
-
```bash
|
|
88
|
-
sh -c "cd backend && npm run migrate:up && cd .. && npm run start"
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
#### 4.2 Environment Variables
|
|
92
|
-
|
|
93
|
-
Add these critical variables:
|
|
94
|
-
|
|
95
|
-
```env
|
|
96
|
-
# Server
|
|
97
|
-
PORT=7130
|
|
98
|
-
|
|
99
|
-
# Database (use internal URL)
|
|
100
|
-
DATABASE_URL=${{insforge-db.DATABASE_URL}}
|
|
101
|
-
POSTGRES_HOST=<from-database>
|
|
102
|
-
POSTGRES_PORT=5432
|
|
103
|
-
POSTGRES_DB=insforge
|
|
104
|
-
POSTGRES_USER=insforge_user
|
|
105
|
-
POSTGRES_PASSWORD=<from-database>
|
|
106
|
-
|
|
107
|
-
# Security (Generate with openssl rand -base64 32)
|
|
108
|
-
JWT_SECRET=<strong-secret-32+chars>
|
|
109
|
-
ENCRYPTION_KEY=<strong-secret-24-chars>
|
|
110
|
-
|
|
111
|
-
# Admin
|
|
112
|
-
ADMIN_EMAIL=admin@example.com
|
|
113
|
-
ADMIN_PASSWORD=<strong-password>
|
|
114
|
-
|
|
115
|
-
# APIs (update after deployment)
|
|
116
|
-
API_BASE_URL=https://insforge-backend.onrender.com
|
|
117
|
-
VITE_API_BASE_URL=https://insforge-backend.onrender.com
|
|
118
|
-
|
|
119
|
-
# Services
|
|
120
|
-
POSTGREST_BASE_URL=http://insforge-postgrest:3000
|
|
121
|
-
DENO_RUNTIME_URL=http://insforge-deno:7133
|
|
122
|
-
|
|
123
|
-
# Storage
|
|
124
|
-
STORAGE_DIR=/var/data/storage
|
|
125
|
-
LOGS_DIR=/var/data/logs
|
|
126
|
-
|
|
127
|
-
# Optional: OAuth, S3, etc.
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
**Generate Secrets:**
|
|
131
|
-
```bash
|
|
132
|
-
openssl rand -base64 32 # JWT_SECRET
|
|
133
|
-
openssl rand -base64 24 # ENCRYPTION_KEY
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### 5. Deploy PostgREST
|
|
137
|
-
|
|
138
|
-
1. **New** → **Web Service**
|
|
139
|
-
2. **Deploy from existing image**
|
|
140
|
-
3. Configure:
|
|
141
|
-
- **Name**: `insforge-postgrest`
|
|
142
|
-
- **Image**: `postgrest/postgrest:v12.2.12`
|
|
143
|
-
- **Plan**: Starter ($7/month)
|
|
144
|
-
|
|
145
|
-
**Environment Variables:**
|
|
146
|
-
```env
|
|
147
|
-
PGRST_DB_URI=${{insforge-db.DATABASE_URL}}
|
|
148
|
-
PGRST_OPENAPI_SERVER_PROXY_URI=https://insforge-backend.onrender.com
|
|
149
|
-
PGRST_DB_SCHEMA=public
|
|
150
|
-
PGRST_DB_ANON_ROLE=anon
|
|
151
|
-
PGRST_JWT_SECRET=<same-as-backend>
|
|
152
|
-
PGRST_DB_CHANNEL_ENABLED=true
|
|
153
|
-
PGRST_DB_CHANNEL=pgrst
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### 6. Deploy Deno Runtime
|
|
157
|
-
|
|
158
|
-
#### 6.1 Create Deno Dockerfile
|
|
159
|
-
|
|
160
|
-
Create `Dockerfile.deno` in repository root:
|
|
161
|
-
|
|
162
|
-
```dockerfile
|
|
163
|
-
FROM denoland/deno:alpine-2.0.6
|
|
164
|
-
WORKDIR /app
|
|
165
|
-
COPY functions /app/functions
|
|
166
|
-
RUN deno cache functions/server.ts
|
|
167
|
-
EXPOSE 7133
|
|
168
|
-
ENV PORT=7133
|
|
169
|
-
CMD ["deno", "run", "--allow-net", "--allow-env", "--allow-read=./functions/worker-template.js", "functions/server.ts"]
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
#### 6.2 Create Service
|
|
173
|
-
|
|
174
|
-
1. **New** → **Web Service**
|
|
175
|
-
2. Configure:
|
|
176
|
-
- **Name**: `insforge-deno`
|
|
177
|
-
- **Runtime**: `Docker`
|
|
178
|
-
- **Dockerfile Path**: `Dockerfile.deno`
|
|
179
|
-
- **Plan**: Starter ($7/month)
|
|
180
|
-
|
|
181
|
-
**Environment Variables:**
|
|
182
|
-
```env
|
|
183
|
-
PORT=7133
|
|
184
|
-
DENO_ENV=production
|
|
185
|
-
POSTGRES_HOST=<from-database>
|
|
186
|
-
POSTGRES_PORT=5432
|
|
187
|
-
POSTGRES_DB=insforge
|
|
188
|
-
POSTGRES_USER=insforge_user
|
|
189
|
-
POSTGRES_PASSWORD=<from-database>
|
|
190
|
-
POSTGREST_BASE_URL=http://insforge-postgrest:3000
|
|
191
|
-
ENCRYPTION_KEY=<same-as-backend>
|
|
192
|
-
JWT_SECRET=<same-as-backend>
|
|
193
|
-
WORKER_TIMEOUT_MS=30000
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### 7. Deploy Frontend
|
|
197
|
-
|
|
198
|
-
#### Option A: Static Site (Recommended - Free)
|
|
199
|
-
|
|
200
|
-
1. **New** → **Static Site**
|
|
201
|
-
2. Configure:
|
|
202
|
-
- **Name**: `insforge-frontend`
|
|
203
|
-
- **Root Directory**: `frontend`
|
|
204
|
-
- **Build Command**: `npm install && npm run build`
|
|
205
|
-
- **Publish Directory**: `dist`
|
|
206
|
-
|
|
207
|
-
**Environment:**
|
|
208
|
-
```env
|
|
209
|
-
VITE_API_BASE_URL=https://insforge-backend.onrender.com
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
#### Option B: Web Service
|
|
213
|
-
|
|
214
|
-
1. **New** → **Web Service**
|
|
215
|
-
2. Configure:
|
|
216
|
-
- **Root Directory**: `frontend`
|
|
217
|
-
- **Build Command**: `npm install && npm run build`
|
|
218
|
-
- **Start Command**: `npm run preview -- --host 0.0.0.0 --port $PORT`
|
|
219
|
-
|
|
220
|
-
### 8. Update Service URLs
|
|
221
|
-
|
|
222
|
-
After all services deploy, update backend environment:
|
|
223
|
-
|
|
224
|
-
```env
|
|
225
|
-
API_BASE_URL=https://insforge-backend.onrender.com
|
|
226
|
-
POSTGREST_BASE_URL=https://insforge-postgrest.onrender.com
|
|
227
|
-
DENO_RUNTIME_URL=https://insforge-deno.onrender.com
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
Save to trigger redeploy.
|
|
231
|
-
|
|
232
|
-
### 9. Access Your Instance
|
|
233
|
-
|
|
234
|
-
**Service URLs:**
|
|
235
|
-
- Backend: `https://insforge-backend.onrender.com`
|
|
236
|
-
- Frontend: `https://insforge-frontend.onrender.com`
|
|
237
|
-
- PostgREST: `https://insforge-postgrest.onrender.com`
|
|
238
|
-
- Deno: `https://insforge-deno.onrender.com`
|
|
239
|
-
|
|
240
|
-
**Test Backend:**
|
|
241
|
-
```bash
|
|
242
|
-
curl https://insforge-backend.onrender.com/api/health
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
**Access Dashboard:**
|
|
246
|
-
```
|
|
247
|
-
https://insforge-frontend.onrender.com
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### 10. Custom Domain (Optional)
|
|
251
|
-
|
|
252
|
-
1. In each service: **Settings** → **Custom Domains**
|
|
253
|
-
2. Add domains:
|
|
254
|
-
- Backend: `api.yourdomain.com`
|
|
255
|
-
- Frontend: `app.yourdomain.com`
|
|
256
|
-
|
|
257
|
-
3. Add CNAME records in DNS:
|
|
258
|
-
```
|
|
259
|
-
api.yourdomain.com → insforge-backend.onrender.com
|
|
260
|
-
app.yourdomain.com → insforge-frontend.onrender.com
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
4. Update environment variables with custom URLs
|
|
264
|
-
5. SSL certificates provisioned automatically
|
|
265
|
-
|
|
266
|
-
## 🔧 Management
|
|
267
|
-
|
|
268
|
-
### View Logs
|
|
269
|
-
1. Service dashboard → **Logs** tab
|
|
270
|
-
2. Real-time logs with search/filter
|
|
271
|
-
|
|
272
|
-
### Manual Deploy
|
|
273
|
-
Service dashboard → **Manual Deploy** → **Deploy latest commit**
|
|
274
|
-
|
|
275
|
-
### Auto-Deploy
|
|
276
|
-
Push to GitHub → Automatic deployment
|
|
277
|
-
|
|
278
|
-
### Update InsForge
|
|
279
|
-
```bash
|
|
280
|
-
git pull upstream main
|
|
281
|
-
git push origin main # Triggers auto-deploy
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
### Restart Services
|
|
285
|
-
**Manual Deploy** → **Clear build cache & deploy**
|
|
286
|
-
|
|
287
|
-
### Scale Services
|
|
288
|
-
- **Vertical**: Settings → Instance Type
|
|
289
|
-
- **Horizontal**: Adjust instances slider (Standard+ plans)
|
|
290
|
-
|
|
291
|
-
### Backup Database
|
|
292
|
-
```bash
|
|
293
|
-
# Manual backup
|
|
294
|
-
pg_dump <external-url> > backup_$(date +%Y%m%d).sql
|
|
295
|
-
|
|
296
|
-
# Automatic backups on paid plans
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
## 🐛 Troubleshooting
|
|
300
|
-
|
|
301
|
-
### Build Failures
|
|
302
|
-
- Check build logs in failed deploy
|
|
303
|
-
- Clear build cache and retry
|
|
304
|
-
- Verify Dockerfile paths
|
|
305
|
-
|
|
306
|
-
### Service Won't Start
|
|
307
|
-
- Check logs for errors
|
|
308
|
-
- Verify PORT environment variable
|
|
309
|
-
- Test database connection
|
|
310
|
-
- Confirm all environment variables set
|
|
311
|
-
|
|
312
|
-
### Database Connection Errors
|
|
313
|
-
- Use internal URL for same-region services
|
|
314
|
-
- Verify credentials
|
|
315
|
-
- Check database status (Available)
|
|
316
|
-
|
|
317
|
-
### Free Tier Spin Down
|
|
318
|
-
- Services sleep after 15 min inactivity
|
|
319
|
-
- Expect 30s+ cold starts
|
|
320
|
-
- Upgrade to paid for always-on
|
|
321
|
-
|
|
322
|
-
### Environment Variable Issues
|
|
323
|
-
```javascript
|
|
324
|
-
// Add debugging
|
|
325
|
-
console.log('Env check:', {
|
|
326
|
-
DATABASE_URL: !!process.env.DATABASE_URL,
|
|
327
|
-
JWT_SECRET: !!process.env.JWT_SECRET
|
|
328
|
-
});
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
## 📊 Cost Estimation
|
|
332
|
-
|
|
333
|
-
**Starter Setup ($28/month):**
|
|
334
|
-
- PostgreSQL: $7
|
|
335
|
-
- Backend: $7
|
|
336
|
-
- PostgREST: $7
|
|
337
|
-
- Deno: $7
|
|
338
|
-
- Frontend: Free (static)
|
|
339
|
-
|
|
340
|
-
**Free Tier (Testing):**
|
|
341
|
-
- All services: Free
|
|
342
|
-
- Limitations: Spin down, 90-day DB limit
|
|
343
|
-
|
|
344
|
-
**Production ($69/month):**
|
|
345
|
-
- PostgreSQL Standard: $20
|
|
346
|
-
- Backend Standard: $25
|
|
347
|
-
- PostgREST Starter: $7
|
|
348
|
-
- Deno Starter: $7
|
|
349
|
-
- Redis: $10
|
|
350
|
-
- Frontend: Free
|
|
351
|
-
|
|
352
|
-
## 🔒 Security Best Practices
|
|
353
|
-
|
|
354
|
-
1. **Strong Secrets**: Use `openssl rand -base64 32`
|
|
355
|
-
2. **Environment Variables**: Never commit secrets
|
|
356
|
-
3. **Database**: Use managed PostgreSQL, enable backups
|
|
357
|
-
4. **HTTPS**: Automatic SSL everywhere
|
|
358
|
-
5. **Updates**: Keep dependencies current
|
|
359
|
-
6. **Access Control**: Implement proper authentication
|
|
360
|
-
7. **Monitoring**: Set up alerts for failures
|
|
361
|
-
8. **Rate Limiting**: Implement in application
|
|
362
|
-
|
|
363
|
-
## 📋 Blueprint Deployment (Advanced)
|
|
364
|
-
|
|
365
|
-
Create `render.yaml` for infrastructure-as-code:
|
|
366
|
-
|
|
367
|
-
```yaml
|
|
368
|
-
services:
|
|
369
|
-
- type: pserv
|
|
370
|
-
name: insforge-db
|
|
371
|
-
plan: starter
|
|
372
|
-
databaseName: insforge
|
|
373
|
-
|
|
374
|
-
- type: web
|
|
375
|
-
name: insforge-backend
|
|
376
|
-
env: docker
|
|
377
|
-
dockerfilePath: ./Dockerfile
|
|
378
|
-
plan: starter
|
|
379
|
-
healthCheckPath: /api/health
|
|
380
|
-
envVars:
|
|
381
|
-
- key: DATABASE_URL
|
|
382
|
-
fromDatabase:
|
|
383
|
-
name: insforge-db
|
|
384
|
-
property: connectionString
|
|
385
|
-
|
|
386
|
-
- type: web
|
|
387
|
-
name: insforge-postgrest
|
|
388
|
-
env: docker
|
|
389
|
-
image:
|
|
390
|
-
url: postgrest/postgrest:v12.2.12
|
|
391
|
-
|
|
392
|
-
- type: web
|
|
393
|
-
name: insforge-frontend
|
|
394
|
-
env: static
|
|
395
|
-
buildCommand: cd frontend && npm install && npm run build
|
|
396
|
-
staticPublishPath: ./frontend/dist
|
|
397
|
-
```
|
|
398
|
-
|
|
399
|
-
Deploy: **New** → **Blueprint** → Connect repository
|
|
400
|
-
|
|
401
|
-
## ✅ Post-Deployment Checklist
|
|
402
|
-
|
|
403
|
-
- [ ] All services running
|
|
404
|
-
- [ ] Database connections working
|
|
405
|
-
- [ ] Backend `/api/health` responds
|
|
406
|
-
- [ ] Frontend loads correctly
|
|
407
|
-
- [ ] Admin login works
|
|
408
|
-
- [ ] SSL certificates active
|
|
409
|
-
- [ ] Health checks passing
|
|
410
|
-
- [ ] Logs accessible
|
|
411
|
-
- [ ] Backups configured (paid)
|
|
412
|
-
- [ ] Monitoring set up
|
|
413
|
-
- [ ] Custom domains configured (if applicable)
|
|
414
|
-
|
|
415
|
-
## 🆘 Support
|
|
416
|
-
|
|
417
|
-
**Render Resources:**
|
|
418
|
-
- [Render Docs](https://render.com/docs)
|
|
419
|
-
- [Render Community](https://community.render.com)
|
|
420
|
-
- [Render Status](https://status.render.com)
|
|
421
|
-
|
|
422
|
-
**InsForge Resources:**
|
|
423
|
-
- [Documentation](https://docs.insforge.dev)
|
|
424
|
-
- [GitHub](https://github.com/insforge/insforge)
|
|
425
|
-
- [Discord](https://discord.com/invite/MPxwj5xVvW)
|
|
426
|
-
- Email: info@insforge.dev
|
|
427
|
-
|
|
428
|
-
## 🎉 Next Steps
|
|
429
|
-
|
|
430
|
-
**Congratulations!** Your InsForge instance is running on Render.
|
|
431
|
-
|
|
432
|
-
1. **Connect AI Agent**: Follow dashboard "Connect" guide
|
|
433
|
-
2. **Configure OAuth**: Set up Google/GitHub/Discord
|
|
434
|
-
3. **Add S3 Storage**: Configure AWS S3 for file uploads
|
|
435
|
-
4. **Set Up Monitoring**: Configure alerts and notifications
|
|
436
|
-
5. **Test Functions**: Deploy serverless functions via Deno
|
|
437
|
-
6. **Build Your App**: Start using InsForge with AI agents!
|
|
438
|
-
|
|
439
|
-
---
|
|
440
|
-
|
|
441
|
-
For other deployment options, see [deployment guides](./README.md).
|
|
1
|
+
# Deploy InsForge to Render
|
|
2
|
+
|
|
3
|
+
This guide walks you through deploying InsForge on Render, a modern cloud platform with managed services and automatic scaling.
|
|
4
|
+
|
|
5
|
+
## 📋 Prerequisites
|
|
6
|
+
|
|
7
|
+
- Render account (free tier available at [render.com](https://render.com))
|
|
8
|
+
- GitHub account (for repository connection)
|
|
9
|
+
- Basic knowledge of environment variables
|
|
10
|
+
- Domain name (optional, for custom domain)
|
|
11
|
+
|
|
12
|
+
## 🎯 Why Render?
|
|
13
|
+
|
|
14
|
+
- **Managed PostgreSQL**: Fully managed database with automatic backups
|
|
15
|
+
- **Auto-deploy**: Automatic deployments from Git commits
|
|
16
|
+
- **Free SSL**: Automatic HTTPS certificates
|
|
17
|
+
- **Simple Scaling**: Easy horizontal and vertical scaling
|
|
18
|
+
- **Free Tier**: Suitable for testing and small projects
|
|
19
|
+
|
|
20
|
+
## 🚀 Deployment Steps
|
|
21
|
+
|
|
22
|
+
### 1. Fork InsForge Repository
|
|
23
|
+
|
|
24
|
+
1. Visit [https://github.com/insforge/insforge](https://github.com/insforge/insforge)
|
|
25
|
+
2. Click **Fork** to create your copy
|
|
26
|
+
3. This allows Render to connect to your repository
|
|
27
|
+
|
|
28
|
+
### 2. Set Up Render Account
|
|
29
|
+
|
|
30
|
+
1. Visit [https://render.com](https://render.com) and sign up
|
|
31
|
+
2. Connect GitHub account
|
|
32
|
+
3. Authorize Render to access repositories
|
|
33
|
+
4. Select your forked InsForge repository
|
|
34
|
+
|
|
35
|
+
### 3. Create PostgreSQL Database
|
|
36
|
+
|
|
37
|
+
#### 3.1 Create Database
|
|
38
|
+
|
|
39
|
+
1. From Render Dashboard: **New** → **PostgreSQL**
|
|
40
|
+
2. Configure:
|
|
41
|
+
- **Name**: `insforge-db`
|
|
42
|
+
- **Database**: `insforge`
|
|
43
|
+
- **User**: `insforge_user`
|
|
44
|
+
- **Region**: Select closest to users
|
|
45
|
+
- **Version**: PostgreSQL 15+
|
|
46
|
+
- **Plan**:
|
|
47
|
+
- Free: Testing (90 days)
|
|
48
|
+
- Starter ($7/month): Small production
|
|
49
|
+
- Standard ($20/month): Production
|
|
50
|
+
|
|
51
|
+
3. Click **Create Database**
|
|
52
|
+
4. Save connection details (internal & external URLs)
|
|
53
|
+
|
|
54
|
+
#### 3.2 Initialize Database
|
|
55
|
+
|
|
56
|
+
Connect and run initialization scripts:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Download init scripts
|
|
60
|
+
curl -O https://raw.githubusercontent.com/insforge/insforge/main/docker-init/db/db-init.sql
|
|
61
|
+
curl -O https://raw.githubusercontent.com/insforge/insforge/main/docker-init/db/jwt.sql
|
|
62
|
+
|
|
63
|
+
# Connect to database
|
|
64
|
+
psql <your-external-database-url>
|
|
65
|
+
|
|
66
|
+
# Run initialization
|
|
67
|
+
\i db-init.sql
|
|
68
|
+
\i jwt.sql
|
|
69
|
+
\q
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 4. Deploy Backend Service
|
|
73
|
+
|
|
74
|
+
#### 4.1 Create Web Service
|
|
75
|
+
|
|
76
|
+
1. **New** → **Web Service**
|
|
77
|
+
2. Connect repository
|
|
78
|
+
3. Configure:
|
|
79
|
+
- **Name**: `insforge-backend`
|
|
80
|
+
- **Region**: Same as database
|
|
81
|
+
- **Branch**: `main`
|
|
82
|
+
- **Runtime**: `Docker`
|
|
83
|
+
- **Dockerfile Path**: `Dockerfile`
|
|
84
|
+
- **Instance Type**: Starter ($7/month) minimum
|
|
85
|
+
|
|
86
|
+
**Start Command:**
|
|
87
|
+
```bash
|
|
88
|
+
sh -c "cd backend && npm run migrate:up && cd .. && npm run start"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
#### 4.2 Environment Variables
|
|
92
|
+
|
|
93
|
+
Add these critical variables:
|
|
94
|
+
|
|
95
|
+
```env
|
|
96
|
+
# Server
|
|
97
|
+
PORT=7130
|
|
98
|
+
|
|
99
|
+
# Database (use internal URL)
|
|
100
|
+
DATABASE_URL=${{insforge-db.DATABASE_URL}}
|
|
101
|
+
POSTGRES_HOST=<from-database>
|
|
102
|
+
POSTGRES_PORT=5432
|
|
103
|
+
POSTGRES_DB=insforge
|
|
104
|
+
POSTGRES_USER=insforge_user
|
|
105
|
+
POSTGRES_PASSWORD=<from-database>
|
|
106
|
+
|
|
107
|
+
# Security (Generate with openssl rand -base64 32)
|
|
108
|
+
JWT_SECRET=<strong-secret-32+chars>
|
|
109
|
+
ENCRYPTION_KEY=<strong-secret-24-chars>
|
|
110
|
+
|
|
111
|
+
# Admin
|
|
112
|
+
ADMIN_EMAIL=admin@example.com
|
|
113
|
+
ADMIN_PASSWORD=<strong-password>
|
|
114
|
+
|
|
115
|
+
# APIs (update after deployment)
|
|
116
|
+
API_BASE_URL=https://insforge-backend.onrender.com
|
|
117
|
+
VITE_API_BASE_URL=https://insforge-backend.onrender.com
|
|
118
|
+
|
|
119
|
+
# Services
|
|
120
|
+
POSTGREST_BASE_URL=http://insforge-postgrest:3000
|
|
121
|
+
DENO_RUNTIME_URL=http://insforge-deno:7133
|
|
122
|
+
|
|
123
|
+
# Storage
|
|
124
|
+
STORAGE_DIR=/var/data/storage
|
|
125
|
+
LOGS_DIR=/var/data/logs
|
|
126
|
+
|
|
127
|
+
# Optional: OAuth, S3, etc.
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Generate Secrets:**
|
|
131
|
+
```bash
|
|
132
|
+
openssl rand -base64 32 # JWT_SECRET
|
|
133
|
+
openssl rand -base64 24 # ENCRYPTION_KEY
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 5. Deploy PostgREST
|
|
137
|
+
|
|
138
|
+
1. **New** → **Web Service**
|
|
139
|
+
2. **Deploy from existing image**
|
|
140
|
+
3. Configure:
|
|
141
|
+
- **Name**: `insforge-postgrest`
|
|
142
|
+
- **Image**: `postgrest/postgrest:v12.2.12`
|
|
143
|
+
- **Plan**: Starter ($7/month)
|
|
144
|
+
|
|
145
|
+
**Environment Variables:**
|
|
146
|
+
```env
|
|
147
|
+
PGRST_DB_URI=${{insforge-db.DATABASE_URL}}
|
|
148
|
+
PGRST_OPENAPI_SERVER_PROXY_URI=https://insforge-backend.onrender.com
|
|
149
|
+
PGRST_DB_SCHEMA=public
|
|
150
|
+
PGRST_DB_ANON_ROLE=anon
|
|
151
|
+
PGRST_JWT_SECRET=<same-as-backend>
|
|
152
|
+
PGRST_DB_CHANNEL_ENABLED=true
|
|
153
|
+
PGRST_DB_CHANNEL=pgrst
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 6. Deploy Deno Runtime
|
|
157
|
+
|
|
158
|
+
#### 6.1 Create Deno Dockerfile
|
|
159
|
+
|
|
160
|
+
Create `Dockerfile.deno` in repository root:
|
|
161
|
+
|
|
162
|
+
```dockerfile
|
|
163
|
+
FROM denoland/deno:alpine-2.0.6
|
|
164
|
+
WORKDIR /app
|
|
165
|
+
COPY functions /app/functions
|
|
166
|
+
RUN deno cache functions/server.ts
|
|
167
|
+
EXPOSE 7133
|
|
168
|
+
ENV PORT=7133
|
|
169
|
+
CMD ["deno", "run", "--allow-net", "--allow-env", "--allow-read=./functions/worker-template.js", "functions/server.ts"]
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
#### 6.2 Create Service
|
|
173
|
+
|
|
174
|
+
1. **New** → **Web Service**
|
|
175
|
+
2. Configure:
|
|
176
|
+
- **Name**: `insforge-deno`
|
|
177
|
+
- **Runtime**: `Docker`
|
|
178
|
+
- **Dockerfile Path**: `Dockerfile.deno`
|
|
179
|
+
- **Plan**: Starter ($7/month)
|
|
180
|
+
|
|
181
|
+
**Environment Variables:**
|
|
182
|
+
```env
|
|
183
|
+
PORT=7133
|
|
184
|
+
DENO_ENV=production
|
|
185
|
+
POSTGRES_HOST=<from-database>
|
|
186
|
+
POSTGRES_PORT=5432
|
|
187
|
+
POSTGRES_DB=insforge
|
|
188
|
+
POSTGRES_USER=insforge_user
|
|
189
|
+
POSTGRES_PASSWORD=<from-database>
|
|
190
|
+
POSTGREST_BASE_URL=http://insforge-postgrest:3000
|
|
191
|
+
ENCRYPTION_KEY=<same-as-backend>
|
|
192
|
+
JWT_SECRET=<same-as-backend>
|
|
193
|
+
WORKER_TIMEOUT_MS=30000
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 7. Deploy Frontend
|
|
197
|
+
|
|
198
|
+
#### Option A: Static Site (Recommended - Free)
|
|
199
|
+
|
|
200
|
+
1. **New** → **Static Site**
|
|
201
|
+
2. Configure:
|
|
202
|
+
- **Name**: `insforge-frontend`
|
|
203
|
+
- **Root Directory**: `frontend`
|
|
204
|
+
- **Build Command**: `npm install && npm run build`
|
|
205
|
+
- **Publish Directory**: `dist`
|
|
206
|
+
|
|
207
|
+
**Environment:**
|
|
208
|
+
```env
|
|
209
|
+
VITE_API_BASE_URL=https://insforge-backend.onrender.com
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
#### Option B: Web Service
|
|
213
|
+
|
|
214
|
+
1. **New** → **Web Service**
|
|
215
|
+
2. Configure:
|
|
216
|
+
- **Root Directory**: `frontend`
|
|
217
|
+
- **Build Command**: `npm install && npm run build`
|
|
218
|
+
- **Start Command**: `npm run preview -- --host 0.0.0.0 --port $PORT`
|
|
219
|
+
|
|
220
|
+
### 8. Update Service URLs
|
|
221
|
+
|
|
222
|
+
After all services deploy, update backend environment:
|
|
223
|
+
|
|
224
|
+
```env
|
|
225
|
+
API_BASE_URL=https://insforge-backend.onrender.com
|
|
226
|
+
POSTGREST_BASE_URL=https://insforge-postgrest.onrender.com
|
|
227
|
+
DENO_RUNTIME_URL=https://insforge-deno.onrender.com
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Save to trigger redeploy.
|
|
231
|
+
|
|
232
|
+
### 9. Access Your Instance
|
|
233
|
+
|
|
234
|
+
**Service URLs:**
|
|
235
|
+
- Backend: `https://insforge-backend.onrender.com`
|
|
236
|
+
- Frontend: `https://insforge-frontend.onrender.com`
|
|
237
|
+
- PostgREST: `https://insforge-postgrest.onrender.com`
|
|
238
|
+
- Deno: `https://insforge-deno.onrender.com`
|
|
239
|
+
|
|
240
|
+
**Test Backend:**
|
|
241
|
+
```bash
|
|
242
|
+
curl https://insforge-backend.onrender.com/api/health
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Access Dashboard:**
|
|
246
|
+
```
|
|
247
|
+
https://insforge-frontend.onrender.com
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### 10. Custom Domain (Optional)
|
|
251
|
+
|
|
252
|
+
1. In each service: **Settings** → **Custom Domains**
|
|
253
|
+
2. Add domains:
|
|
254
|
+
- Backend: `api.yourdomain.com`
|
|
255
|
+
- Frontend: `app.yourdomain.com`
|
|
256
|
+
|
|
257
|
+
3. Add CNAME records in DNS:
|
|
258
|
+
```
|
|
259
|
+
api.yourdomain.com → insforge-backend.onrender.com
|
|
260
|
+
app.yourdomain.com → insforge-frontend.onrender.com
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
4. Update environment variables with custom URLs
|
|
264
|
+
5. SSL certificates provisioned automatically
|
|
265
|
+
|
|
266
|
+
## 🔧 Management
|
|
267
|
+
|
|
268
|
+
### View Logs
|
|
269
|
+
1. Service dashboard → **Logs** tab
|
|
270
|
+
2. Real-time logs with search/filter
|
|
271
|
+
|
|
272
|
+
### Manual Deploy
|
|
273
|
+
Service dashboard → **Manual Deploy** → **Deploy latest commit**
|
|
274
|
+
|
|
275
|
+
### Auto-Deploy
|
|
276
|
+
Push to GitHub → Automatic deployment
|
|
277
|
+
|
|
278
|
+
### Update InsForge
|
|
279
|
+
```bash
|
|
280
|
+
git pull upstream main
|
|
281
|
+
git push origin main # Triggers auto-deploy
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### Restart Services
|
|
285
|
+
**Manual Deploy** → **Clear build cache & deploy**
|
|
286
|
+
|
|
287
|
+
### Scale Services
|
|
288
|
+
- **Vertical**: Settings → Instance Type
|
|
289
|
+
- **Horizontal**: Adjust instances slider (Standard+ plans)
|
|
290
|
+
|
|
291
|
+
### Backup Database
|
|
292
|
+
```bash
|
|
293
|
+
# Manual backup
|
|
294
|
+
pg_dump <external-url> > backup_$(date +%Y%m%d).sql
|
|
295
|
+
|
|
296
|
+
# Automatic backups on paid plans
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## 🐛 Troubleshooting
|
|
300
|
+
|
|
301
|
+
### Build Failures
|
|
302
|
+
- Check build logs in failed deploy
|
|
303
|
+
- Clear build cache and retry
|
|
304
|
+
- Verify Dockerfile paths
|
|
305
|
+
|
|
306
|
+
### Service Won't Start
|
|
307
|
+
- Check logs for errors
|
|
308
|
+
- Verify PORT environment variable
|
|
309
|
+
- Test database connection
|
|
310
|
+
- Confirm all environment variables set
|
|
311
|
+
|
|
312
|
+
### Database Connection Errors
|
|
313
|
+
- Use internal URL for same-region services
|
|
314
|
+
- Verify credentials
|
|
315
|
+
- Check database status (Available)
|
|
316
|
+
|
|
317
|
+
### Free Tier Spin Down
|
|
318
|
+
- Services sleep after 15 min inactivity
|
|
319
|
+
- Expect 30s+ cold starts
|
|
320
|
+
- Upgrade to paid for always-on
|
|
321
|
+
|
|
322
|
+
### Environment Variable Issues
|
|
323
|
+
```javascript
|
|
324
|
+
// Add debugging
|
|
325
|
+
console.log('Env check:', {
|
|
326
|
+
DATABASE_URL: !!process.env.DATABASE_URL,
|
|
327
|
+
JWT_SECRET: !!process.env.JWT_SECRET
|
|
328
|
+
});
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
## 📊 Cost Estimation
|
|
332
|
+
|
|
333
|
+
**Starter Setup ($28/month):**
|
|
334
|
+
- PostgreSQL: $7
|
|
335
|
+
- Backend: $7
|
|
336
|
+
- PostgREST: $7
|
|
337
|
+
- Deno: $7
|
|
338
|
+
- Frontend: Free (static)
|
|
339
|
+
|
|
340
|
+
**Free Tier (Testing):**
|
|
341
|
+
- All services: Free
|
|
342
|
+
- Limitations: Spin down, 90-day DB limit
|
|
343
|
+
|
|
344
|
+
**Production ($69/month):**
|
|
345
|
+
- PostgreSQL Standard: $20
|
|
346
|
+
- Backend Standard: $25
|
|
347
|
+
- PostgREST Starter: $7
|
|
348
|
+
- Deno Starter: $7
|
|
349
|
+
- Redis: $10
|
|
350
|
+
- Frontend: Free
|
|
351
|
+
|
|
352
|
+
## 🔒 Security Best Practices
|
|
353
|
+
|
|
354
|
+
1. **Strong Secrets**: Use `openssl rand -base64 32`
|
|
355
|
+
2. **Environment Variables**: Never commit secrets
|
|
356
|
+
3. **Database**: Use managed PostgreSQL, enable backups
|
|
357
|
+
4. **HTTPS**: Automatic SSL everywhere
|
|
358
|
+
5. **Updates**: Keep dependencies current
|
|
359
|
+
6. **Access Control**: Implement proper authentication
|
|
360
|
+
7. **Monitoring**: Set up alerts for failures
|
|
361
|
+
8. **Rate Limiting**: Implement in application
|
|
362
|
+
|
|
363
|
+
## 📋 Blueprint Deployment (Advanced)
|
|
364
|
+
|
|
365
|
+
Create `render.yaml` for infrastructure-as-code:
|
|
366
|
+
|
|
367
|
+
```yaml
|
|
368
|
+
services:
|
|
369
|
+
- type: pserv
|
|
370
|
+
name: insforge-db
|
|
371
|
+
plan: starter
|
|
372
|
+
databaseName: insforge
|
|
373
|
+
|
|
374
|
+
- type: web
|
|
375
|
+
name: insforge-backend
|
|
376
|
+
env: docker
|
|
377
|
+
dockerfilePath: ./Dockerfile
|
|
378
|
+
plan: starter
|
|
379
|
+
healthCheckPath: /api/health
|
|
380
|
+
envVars:
|
|
381
|
+
- key: DATABASE_URL
|
|
382
|
+
fromDatabase:
|
|
383
|
+
name: insforge-db
|
|
384
|
+
property: connectionString
|
|
385
|
+
|
|
386
|
+
- type: web
|
|
387
|
+
name: insforge-postgrest
|
|
388
|
+
env: docker
|
|
389
|
+
image:
|
|
390
|
+
url: postgrest/postgrest:v12.2.12
|
|
391
|
+
|
|
392
|
+
- type: web
|
|
393
|
+
name: insforge-frontend
|
|
394
|
+
env: static
|
|
395
|
+
buildCommand: cd frontend && npm install && npm run build
|
|
396
|
+
staticPublishPath: ./frontend/dist
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
Deploy: **New** → **Blueprint** → Connect repository
|
|
400
|
+
|
|
401
|
+
## ✅ Post-Deployment Checklist
|
|
402
|
+
|
|
403
|
+
- [ ] All services running
|
|
404
|
+
- [ ] Database connections working
|
|
405
|
+
- [ ] Backend `/api/health` responds
|
|
406
|
+
- [ ] Frontend loads correctly
|
|
407
|
+
- [ ] Admin login works
|
|
408
|
+
- [ ] SSL certificates active
|
|
409
|
+
- [ ] Health checks passing
|
|
410
|
+
- [ ] Logs accessible
|
|
411
|
+
- [ ] Backups configured (paid)
|
|
412
|
+
- [ ] Monitoring set up
|
|
413
|
+
- [ ] Custom domains configured (if applicable)
|
|
414
|
+
|
|
415
|
+
## 🆘 Support
|
|
416
|
+
|
|
417
|
+
**Render Resources:**
|
|
418
|
+
- [Render Docs](https://render.com/docs)
|
|
419
|
+
- [Render Community](https://community.render.com)
|
|
420
|
+
- [Render Status](https://status.render.com)
|
|
421
|
+
|
|
422
|
+
**InsForge Resources:**
|
|
423
|
+
- [Documentation](https://docs.insforge.dev)
|
|
424
|
+
- [GitHub](https://github.com/insforge/insforge)
|
|
425
|
+
- [Discord](https://discord.com/invite/MPxwj5xVvW)
|
|
426
|
+
- Email: info@insforge.dev
|
|
427
|
+
|
|
428
|
+
## 🎉 Next Steps
|
|
429
|
+
|
|
430
|
+
**Congratulations!** Your InsForge instance is running on Render.
|
|
431
|
+
|
|
432
|
+
1. **Connect AI Agent**: Follow dashboard "Connect" guide
|
|
433
|
+
2. **Configure OAuth**: Set up Google/GitHub/Discord
|
|
434
|
+
3. **Add S3 Storage**: Configure AWS S3 for file uploads
|
|
435
|
+
4. **Set Up Monitoring**: Configure alerts and notifications
|
|
436
|
+
5. **Test Functions**: Deploy serverless functions via Deno
|
|
437
|
+
6. **Build Your App**: Start using InsForge with AI agents!
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
For other deployment options, see [deployment guides](./README.md).
|