insforge 0.3.2 → 1.2.10
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 -0
- package/.cursor/rules/cursor-rules.mdc +94 -0
- package/.dockerignore +3 -0
- package/.env.example +33 -4
- package/.github/ISSUE_TEMPLATE/bug_report.yml +13 -60
- package/.github/ISSUE_TEMPLATE/config.yml +2 -2
- package/.github/ISSUE_TEMPLATE/feature_request.yml +10 -63
- package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
- package/.github/workflows/build-image.yml +2 -1
- package/.github/workflows/e2e.yml +63 -0
- package/CHANGELOG.md +41 -0
- package/CLAUDE_PLUGIN.md +104 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/CONTRIBUTING.md +1 -1
- package/Dockerfile +4 -1
- package/README.md +66 -18
- package/assets/mcpInstallv2.png +0 -0
- package/assets/sampleResponse.png +0 -0
- package/auth/index.html +13 -0
- package/auth/package.json +28 -0
- package/auth/public/favicon.ico +0 -0
- package/auth/src/App.tsx +33 -0
- package/auth/src/components/ErrorCard.tsx +37 -0
- package/auth/src/components/Layout.tsx +13 -0
- package/auth/src/index.css +19 -0
- package/auth/src/lib/broadcastService.ts +115 -0
- package/auth/src/lib/utils.ts +11 -0
- package/auth/src/main.tsx +22 -0
- package/auth/src/pages/ForgotPasswordPage.tsx +11 -0
- package/auth/src/pages/ResetPasswordPage.tsx +11 -0
- package/auth/src/pages/SignInPage.tsx +57 -0
- package/auth/src/pages/SignUpPage.tsx +57 -0
- package/auth/src/pages/VerifyEmailPage.tsx +20 -0
- package/auth/src/vite-env.d.ts +10 -0
- package/auth/tsconfig.json +32 -0
- package/auth/tsconfig.node.json +11 -0
- package/auth/vite.config.ts +25 -0
- package/backend/package.json +9 -9
- package/backend/src/api/{middleware → middlewares}/auth.ts +8 -9
- package/backend/src/api/middlewares/rate-limiters.ts +127 -0
- package/backend/src/api/routes/{ai.ts → ai/index.routes.ts} +20 -24
- package/backend/src/api/routes/auth/index.routes.ts +570 -0
- package/backend/src/api/routes/auth/oauth.routes.ts +448 -0
- package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +107 -65
- package/backend/src/api/routes/database/index.routes.ts +13 -0
- package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +22 -8
- package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +20 -23
- package/backend/src/api/routes/docs/index.routes.ts +76 -0
- package/backend/src/api/routes/functions/index.routes.ts +188 -0
- package/backend/src/api/routes/{logs.ts → logs/index.routes.ts} +25 -30
- package/backend/src/api/routes/{metadata.ts → metadata/index.routes.ts} +21 -31
- package/backend/src/api/routes/{secrets.ts → secrets/index.routes.ts} +27 -22
- package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +34 -53
- package/backend/src/api/routes/usage/index.routes.ts +89 -0
- package/backend/src/infra/config/app.config.ts +51 -0
- package/backend/src/{core/database/manager.ts → infra/database/database.manager.ts} +76 -85
- package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -0
- package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +8 -0
- package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +60 -0
- package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -0
- package/backend/src/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
- package/backend/src/infra/security/token.manager.ts +125 -0
- package/backend/src/{core/socket/socket.ts → infra/socket/socket.manager.ts} +15 -15
- package/backend/src/providers/ai/openrouter.provider.ts +377 -0
- package/backend/src/providers/email/base.provider.ts +41 -0
- package/backend/src/providers/email/cloud.provider.ts +187 -0
- package/backend/src/{core/logs/providers → providers/logs}/base.provider.ts +11 -11
- package/backend/src/{core/logs/providers → providers/logs}/cloudwatch.provider.ts +61 -38
- package/backend/src/providers/logs/local.provider.ts +185 -0
- package/backend/src/providers/oauth/base.provider.ts +29 -0
- package/backend/src/providers/oauth/discord.provider.ts +195 -0
- package/backend/src/providers/oauth/facebook.provider.ts +194 -0
- package/backend/src/providers/oauth/github.provider.ts +208 -0
- package/backend/src/providers/oauth/google.provider.ts +249 -0
- package/backend/src/providers/oauth/index.ts +7 -0
- package/backend/src/providers/oauth/linkedin.provider.ts +240 -0
- package/backend/src/providers/oauth/microsoft.provider.ts +169 -0
- package/backend/src/providers/oauth/x.provider.ts +202 -0
- package/backend/src/providers/storage/base.provider.ts +29 -0
- package/backend/src/providers/storage/local.provider.ts +103 -0
- package/backend/src/providers/storage/s3.provider.ts +313 -0
- package/backend/src/server.ts +70 -74
- package/backend/src/{core/ai/config.ts → services/ai/ai-config.service.ts} +19 -24
- package/backend/src/services/ai/ai-model.service.ts +60 -0
- package/backend/src/{core/ai/usage.ts → services/ai/ai-usage.service.ts} +28 -35
- package/backend/src/{core/ai/chat.ts → services/ai/chat-completion.service.ts} +37 -24
- package/backend/src/services/ai/helpers.ts +64 -0
- package/backend/src/{core/ai/image.ts → services/ai/image-generation.service.ts} +17 -19
- package/backend/src/services/ai/index.ts +13 -0
- package/backend/src/services/auth/auth-config.service.ts +250 -0
- package/backend/src/services/auth/auth-otp.service.ts +424 -0
- package/backend/src/services/auth/auth.service.ts +1136 -0
- package/backend/src/services/auth/index.ts +4 -0
- package/backend/src/{core/auth/oauth.ts → services/auth/oauth-config.service.ts} +106 -52
- package/backend/src/{core/database/advance.ts → services/database/database-advance.service.ts} +97 -131
- package/backend/src/services/database/database-table.service.ts +811 -0
- package/backend/src/services/email/email.service.ts +75 -0
- package/backend/src/{core/functions/functions.ts → services/functions/function.service.ts} +95 -88
- package/backend/src/{core/logs/audit.ts → services/logs/audit.service.ts} +92 -75
- package/backend/src/services/logs/log.service.ts +73 -0
- package/backend/src/{core/secrets/secrets.ts → services/secrets/secret.service.ts} +48 -66
- package/backend/src/services/storage/storage.service.ts +617 -0
- package/backend/src/services/usage/usage.service.ts +149 -0
- package/backend/src/types/auth.ts +66 -2
- package/backend/src/types/email.ts +8 -0
- package/backend/src/types/error-constants.ts +4 -0
- package/backend/src/types/logs.ts +0 -29
- package/backend/src/{core/socket/types.ts → types/socket.ts} +5 -6
- package/backend/src/utils/environment.ts +9 -3
- package/backend/src/utils/logger.ts +20 -2
- package/backend/src/utils/seed.ts +150 -57
- package/backend/src/utils/sql-parser.ts +1 -1
- package/backend/src/utils/utils.ts +114 -0
- package/backend/src/utils/validations.ts +40 -4
- package/backend/tests/local/test-ai-config.sh +129 -0
- package/backend/tests/local/test-ai-usage.sh +80 -0
- package/backend/tests/local/test-auth-router.sh +1 -1
- package/backend/tests/local/test-e2e.sh +1 -1
- package/backend/tests/local/test-functions.sh +123 -0
- package/backend/tests/local/test-logs.sh +132 -0
- package/backend/tests/local/test-public-bucket.sh +3 -3
- package/backend/tests/local/test-secrets.sh +14 -12
- package/backend/tests/local/test-traditional-rest.sh +2 -2
- package/backend/tests/manual/test-rawsql-modes.sh +244 -0
- package/backend/tests/test-config.sh +37 -1
- package/backend/tests/unit/cloud-token.test.ts +48 -0
- package/backend/tests/unit/constant.test.ts +8 -0
- package/backend/tests/unit/email.test.ts +372 -0
- package/backend/tests/unit/environment.test.ts +59 -0
- package/backend/tests/unit/helpers.test.ts +63 -0
- package/backend/tests/unit/logger.test.ts +22 -0
- package/backend/tests/unit/rate-limit.test.ts +154 -0
- package/backend/tests/unit/response.test.ts +58 -0
- package/backend/tests/unit/sql-parser.test.ts +74 -0
- package/backend/tests/unit/uuid.test.ts +21 -0
- package/backend/tests/unit/validations.test.ts +80 -0
- package/backend/tsconfig.json +1 -1
- package/backend/vitest.config.ts +11 -0
- package/claude-plugin/.claude-plugin/plugin.json +24 -0
- package/claude-plugin/README.md +133 -0
- package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -0
- package/docker-compose.prod.yml +60 -4
- package/docker-compose.yml +65 -4
- package/docker-init/db/db-init.sql +6 -34
- package/docker-init/logs/vector.yml +236 -0
- package/docs/README.md +44 -0
- package/docs/changelog.mdx +67 -0
- package/docs/core-concepts/ai/architecture.mdx +373 -0
- package/docs/core-concepts/ai/sdk.mdx +213 -0
- package/docs/core-concepts/authentication/architecture.mdx +278 -0
- package/docs/core-concepts/authentication/sdk.mdx +414 -0
- package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -0
- package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -0
- package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -0
- package/docs/core-concepts/authentication/ui-components/react.mdx +129 -0
- package/docs/core-concepts/database/architecture.mdx +256 -0
- package/docs/core-concepts/database/sdk.mdx +382 -0
- package/docs/core-concepts/functions/architecture.mdx +105 -0
- package/docs/core-concepts/functions/sdk.mdx +184 -0
- package/docs/core-concepts/storage/architecture.mdx +243 -0
- package/docs/core-concepts/storage/sdk.mdx +253 -0
- package/docs/deployment/README.md +94 -0
- package/docs/deployment/deploy-to-aws-ec2.md +565 -0
- package/docs/deployment/deploy-to-azure-virtual-machines.md +313 -0
- package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -0
- package/docs/deployment/deploy-to-render.md +441 -0
- package/docs/docs.json +210 -0
- package/docs/examples/framework-guides/nextjs.mdx +131 -0
- package/docs/examples/framework-guides/nuxt.mdx +165 -0
- package/docs/examples/framework-guides/react.mdx +165 -0
- package/docs/examples/framework-guides/svelte.mdx +153 -0
- package/docs/examples/framework-guides/vue.mdx +159 -0
- package/docs/examples/overview.mdx +67 -0
- package/docs/favicon.svg +19 -0
- package/docs/images/changelog/nov-2025/auth-components.webp +0 -0
- package/docs/images/changelog/nov-2025/database-metadata.webp +0 -0
- package/docs/images/changelog/nov-2025/quickstart-prompts.webp +0 -0
- package/docs/images/changelog/nov-2025/sql-editor.webp +0 -0
- package/docs/images/changelog/nov-2025/usage-page.webp +0 -0
- package/docs/images/changelog/october-2025/csv-upload.webp +0 -0
- package/docs/images/changelog/october-2025/logs-feature.webp +0 -0
- package/docs/images/changelog/october-2025/oauth-providers.webp +0 -0
- package/docs/images/checks-passed.png +0 -0
- package/docs/images/dashboard-connect-expanded.png +0 -0
- package/docs/images/dashboard-connect.png +0 -0
- package/docs/images/hero-dark.png +0 -0
- package/docs/images/hero-light.png +0 -0
- package/docs/images/icons/ai.svg +4 -0
- package/docs/images/icons/auth.svg +1 -0
- package/docs/images/icons/database.svg +1 -0
- package/docs/images/icons/function.svg +1 -0
- package/docs/images/icons/storage.svg +1 -0
- package/docs/images/logos/nextjs.svg +4 -0
- package/docs/images/logos/nuxt.svg +4 -0
- package/docs/images/logos/react.svg +5 -0
- package/docs/images/logos/svelte.svg +4 -0
- package/docs/images/logos/vue.svg +5 -0
- package/docs/images/mcp-install.png +0 -0
- package/docs/images/onboarding-mcp.png +0 -0
- package/docs/insforge-instructions-sdk.md +55 -374
- package/docs/introduction.mdx +45 -0
- package/docs/logo/dark.svg +22 -0
- package/docs/logo/light.svg +20 -0
- package/docs/partnership.mdx +647 -0
- package/docs/quickstart.mdx +83 -0
- package/docs/showcase/2048-arena.png +0 -0
- package/docs/showcase/framegen-cloud.png +0 -0
- package/docs/showcase/line-connect-race.png +0 -0
- package/docs/showcase/moment-vibe.png +0 -0
- package/docs/showcase/national-flags.png +0 -0
- package/docs/showcase/pokemon-vibe.png +0 -0
- package/docs/showcase/pure-browse-buy.png +0 -0
- package/docs/showcase.mdx +52 -0
- package/docs/snippets/sdk-installation.mdx +22 -0
- package/docs/snippets/service-icons.mdx +27 -0
- package/eslint.config.js +10 -3
- package/frontend/package.json +10 -4
- package/frontend/src/App.tsx +13 -82
- package/frontend/src/assets/icons/connected.svg +3 -0
- package/frontend/src/assets/icons/loader.svg +9 -0
- package/frontend/src/assets/logos/apple.svg +4 -0
- package/frontend/src/assets/logos/discord.svg +1 -1
- package/frontend/src/assets/logos/facebook.svg +3 -0
- package/frontend/src/assets/logos/instagram.svg +2 -0
- package/frontend/src/assets/logos/linkedin.svg +3 -0
- package/frontend/src/assets/logos/microsoft.svg +1 -0
- package/frontend/src/assets/logos/spotify.svg +17 -0
- package/frontend/src/assets/logos/tiktok.svg +6 -0
- package/frontend/src/assets/logos/x.svg +3 -0
- package/frontend/src/components/Checkbox.tsx +27 -29
- package/frontend/src/components/CodeBlock.tsx +55 -2
- package/frontend/src/components/CodeEditor.tsx +92 -0
- package/frontend/src/components/ConfirmDialog.tsx +1 -1
- package/frontend/src/components/ConnectCTA.tsx +38 -0
- package/frontend/src/components/CopyButton.tsx +52 -15
- package/frontend/src/components/ErrorState.tsx +1 -2
- package/frontend/src/components/FeatureSidebar.tsx +6 -6
- package/frontend/src/components/FeatureSidebarItem.tsx +2 -2
- package/frontend/src/components/JsonHighlight.tsx +21 -9
- package/frontend/src/components/ProjectInfoModal.tsx +128 -0
- package/frontend/src/components/PromptDialog.tsx +1 -4
- package/frontend/src/components/SearchInput.tsx +1 -2
- package/frontend/src/components/Stepper.tsx +53 -0
- package/frontend/src/components/ThemeToggle.tsx +3 -3
- package/frontend/src/components/datagrid/DataGrid.tsx +25 -32
- package/frontend/src/components/datagrid/cell-editors/DateCellEditor.tsx +1 -2
- package/frontend/src/components/datagrid/cell-editors/JsonCellEditor.tsx +2 -4
- package/frontend/src/components/datagrid/index.ts +23 -0
- package/frontend/src/components/index.ts +23 -30
- package/frontend/src/components/layout/AppHeader.tsx +133 -92
- package/frontend/src/components/layout/AppSidebar.tsx +80 -170
- package/frontend/src/components/layout/Layout.tsx +12 -23
- package/frontend/src/components/layout/PrimaryMenu.tsx +187 -0
- package/frontend/src/components/layout/SecondaryMenu.tsx +70 -0
- package/frontend/src/components/layout/index.ts +5 -0
- package/frontend/src/components/radix/Tooltip.tsx +24 -13
- package/frontend/src/components/radix/index.ts +22 -0
- package/frontend/src/features/ai/components/AIConfigCard.tsx +129 -83
- package/frontend/src/features/ai/components/AIEmptyState.tsx +12 -7
- package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +101 -0
- package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -0
- package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -0
- package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -0
- package/frontend/src/features/ai/components/index.ts +6 -0
- package/frontend/src/features/ai/helpers.ts +57 -71
- package/frontend/src/features/ai/hooks/useAIConfigs.ts +39 -113
- package/frontend/src/features/ai/hooks/useAIUsage.ts +0 -2
- package/frontend/src/features/ai/page/AIPage.tsx +67 -79
- package/frontend/src/features/ai/services/ai.service.ts +5 -5
- package/frontend/src/features/auth/components/AuthPreview.tsx +96 -0
- package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +53 -30
- package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +44 -14
- package/frontend/src/features/auth/components/index.ts +5 -0
- package/frontend/src/features/auth/helpers.tsx +200 -0
- package/frontend/src/features/auth/hooks/useAnonToken.ts +30 -0
- package/frontend/src/features/auth/hooks/useAuthConfig.ts +48 -0
- package/frontend/src/features/auth/hooks/useOAuthConfig.ts +14 -10
- package/frontend/src/features/auth/hooks/useUsers.ts +43 -5
- package/frontend/src/features/auth/index.ts +3 -2
- package/frontend/src/features/auth/page/AuthMethodsPage.tsx +275 -0
- package/frontend/src/features/auth/page/ConfigurationPage.tsx +395 -0
- package/frontend/src/features/auth/page/UsersPage.tsx +285 -0
- package/frontend/src/features/auth/services/anonToken.service.ts +11 -0
- package/frontend/src/features/auth/services/config.service.ts +19 -0
- package/frontend/src/features/auth/services/{oauth.service.ts → oauth-config.service.ts} +4 -4
- package/frontend/src/features/auth/services/{auth.service.ts → user.service.ts} +7 -53
- package/frontend/src/features/dashboard/components/ConnectionSuccessBanner.tsx +35 -0
- package/frontend/src/features/dashboard/components/PromptCard.tsx +21 -0
- package/frontend/src/features/dashboard/components/PromptDialog.tsx +103 -0
- package/frontend/src/features/dashboard/components/StatsCard.tsx +50 -0
- package/frontend/src/features/dashboard/components/index.ts +4 -0
- package/frontend/src/features/dashboard/page/DashboardPage.tsx +187 -169
- package/frontend/src/features/dashboard/prompts/ai-chatbot.ts +13 -0
- package/frontend/src/features/dashboard/prompts/crm-system.ts +13 -0
- package/frontend/src/features/dashboard/prompts/ecommerce-platform.ts +12 -0
- package/frontend/src/features/dashboard/prompts/index.ts +31 -0
- package/frontend/src/features/dashboard/prompts/instagram-clone.ts +11 -0
- package/frontend/src/features/dashboard/prompts/notion-clone.ts +14 -0
- package/frontend/src/features/dashboard/prompts/reddit-clone.ts +12 -0
- package/frontend/src/features/database/components/DatabaseDataGrid.tsx +48 -17
- package/frontend/src/features/database/components/ForeignKeyCell.tsx +15 -34
- package/frontend/src/features/database/components/ForeignKeyPopover.tsx +19 -20
- package/frontend/src/features/database/components/LinkRecordModal.tsx +120 -125
- package/frontend/src/features/database/components/RecordFormDialog.tsx +22 -33
- package/frontend/src/features/database/components/RecordFormField.tsx +45 -47
- package/frontend/src/features/database/components/TableEmptyState.tsx +6 -5
- package/frontend/src/features/database/components/TableForm.tsx +28 -15
- package/frontend/src/features/database/components/TableFormColumn.tsx +2 -3
- package/frontend/src/features/database/components/TableSidebar.tsx +1 -1
- package/frontend/src/features/database/components/TablesEmptyState.tsx +48 -0
- package/frontend/src/features/database/components/TemplateCard.tsx +37 -0
- package/frontend/src/features/database/components/TemplatePreview.tsx +92 -0
- package/frontend/src/features/database/components/index.ts +19 -0
- package/frontend/src/features/database/constants.ts +28 -2
- package/frontend/src/features/database/contexts/SQLEditorContext.tsx +188 -0
- package/frontend/src/features/database/helpers.ts +2 -2
- package/frontend/src/features/database/hooks/useCSVImport.ts +29 -0
- package/frontend/src/features/database/hooks/useFullMetadata.ts +18 -0
- package/frontend/src/features/database/hooks/useRawSQL.ts +55 -0
- package/frontend/src/features/database/hooks/useRecords.ts +139 -0
- package/frontend/src/features/database/hooks/useTables.ts +131 -0
- package/frontend/src/features/database/index.ts +6 -1
- package/frontend/src/features/database/page/FunctionsPage.tsx +211 -0
- package/frontend/src/features/database/page/IndexesPage.tsx +240 -0
- package/frontend/src/features/database/page/PoliciesPage.tsx +248 -0
- package/frontend/src/features/database/page/SQLEditorPage.tsx +382 -0
- package/frontend/src/features/database/page/{DatabasePage.tsx → TablesPage.tsx} +186 -185
- package/frontend/src/features/database/page/TemplatesPage.tsx +39 -0
- package/frontend/src/features/database/page/TriggersPage.tsx +242 -0
- package/frontend/src/features/database/services/advance.service.ts +66 -0
- package/frontend/src/features/database/services/{database.service.ts → record.service.ts} +67 -64
- package/frontend/src/features/database/services/table.service.ts +64 -0
- package/frontend/src/features/database/templates/ai-chatbot.ts +402 -0
- package/frontend/src/features/database/templates/crm-system.ts +528 -0
- package/frontend/src/features/database/templates/ecommerce-platform.ts +553 -0
- package/frontend/src/features/database/templates/index.ts +34 -0
- package/frontend/src/features/database/templates/instagram-clone.ts +222 -0
- package/frontend/src/features/database/templates/notion-clone.ts +483 -0
- package/frontend/src/features/database/templates/reddit-clone.ts +526 -0
- package/frontend/src/features/functions/components/FunctionRow.tsx +2 -1
- package/frontend/src/features/functions/components/FunctionsSidebar.tsx +1 -1
- package/frontend/src/features/functions/components/SecretRow.tsx +1 -1
- package/frontend/src/features/functions/components/index.ts +5 -0
- package/frontend/src/features/functions/hooks/useFunctions.ts +4 -4
- package/frontend/src/features/{secrets → functions}/hooks/useSecrets.ts +5 -5
- package/frontend/src/features/functions/page/FunctionsPage.tsx +160 -17
- package/frontend/src/features/functions/{components/SecretsContent.tsx → page/SecretsPage.tsx} +8 -12
- package/frontend/src/features/functions/services/{functions.service.ts → function.service.ts} +2 -2
- package/frontend/src/features/{secrets/services/secrets.service.ts → functions/services/secret.service.ts} +2 -2
- package/frontend/src/features/login/hooks/usePartnerOrigin.ts +27 -0
- package/frontend/src/features/login/page/CloudLoginPage.tsx +79 -54
- package/frontend/src/features/login/page/LoginPage.tsx +16 -23
- package/frontend/src/features/login/services/partnership.service.ts +65 -0
- package/frontend/src/features/logs/components/LogsDataGrid.tsx +89 -0
- package/frontend/src/features/logs/components/SeverityBadge.tsx +18 -0
- package/frontend/src/features/logs/components/index.ts +2 -0
- package/frontend/src/features/logs/helpers.ts +24 -0
- package/frontend/src/features/logs/hooks/useAuditLogs.ts +4 -4
- package/frontend/src/features/logs/hooks/useLogSources.ts +137 -0
- package/frontend/src/features/logs/hooks/useLogs.ts +163 -0
- package/frontend/src/features/logs/hooks/useMcpUsage.ts +181 -0
- package/frontend/src/features/logs/index.ts +8 -2
- package/frontend/src/features/logs/page/AuditsPage.tsx +91 -38
- package/frontend/src/features/logs/page/LogsPage.tsx +152 -0
- package/frontend/src/features/logs/page/MCPLogsPage.tsx +84 -0
- package/frontend/src/features/logs/services/audit.service.ts +63 -0
- package/frontend/src/features/logs/services/log.service.ts +15 -110
- package/frontend/src/features/logs/services/usage.service.ts +31 -0
- package/frontend/src/features/onboard/components/McpConnectionStatus.tsx +68 -0
- package/frontend/src/features/onboard/components/OnboardingModal.tsx +267 -0
- package/frontend/src/features/onboard/components/VideoDemoModal.tsx +38 -0
- package/frontend/src/features/onboard/components/index.ts +4 -0
- package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +2 -2
- package/frontend/src/features/onboard/components/mcp/{mcp-helper.tsx → helpers.tsx} +8 -8
- package/frontend/src/features/onboard/components/mcp/index.ts +2 -3
- package/frontend/src/features/onboard/index.ts +13 -3
- package/frontend/src/features/storage/components/BucketEmptyState.tsx +9 -6
- package/frontend/src/features/storage/components/BucketFormDialog.tsx +25 -41
- package/frontend/src/features/storage/components/FilePreviewDialog.tsx +20 -8
- package/frontend/src/features/storage/components/StorageDataGrid.tsx +4 -3
- package/frontend/src/features/storage/components/StorageManager.tsx +23 -34
- package/frontend/src/features/storage/components/index.ts +12 -0
- package/frontend/src/features/storage/hooks/useStorage.ts +208 -0
- package/frontend/src/features/storage/page/StoragePage.tsx +41 -115
- package/frontend/src/features/storage/services/storage.service.ts +22 -1
- package/frontend/src/features/visualizer/components/AuthNode.tsx +72 -56
- package/frontend/src/features/visualizer/components/BucketNode.tsx +4 -4
- package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +108 -80
- package/frontend/src/features/visualizer/components/TableNode.tsx +34 -41
- package/frontend/src/features/visualizer/components/VisualizerSkeleton.tsx +12 -4
- package/frontend/src/features/visualizer/page/VisualizerPage.tsx +33 -29
- package/frontend/src/index.css +1 -0
- package/frontend/src/lib/analytics/posthog.tsx +27 -0
- package/frontend/src/lib/contexts/AuthContext.tsx +38 -31
- package/frontend/src/lib/contexts/SocketContext.tsx +5 -6
- package/frontend/src/{features/metadata → lib}/hooks/useMetadata.ts +1 -1
- package/frontend/src/lib/hooks/useToast.tsx +6 -2
- package/frontend/src/lib/routing/AppRoutes.tsx +84 -0
- package/frontend/src/lib/routing/RequireAuth.tsx +27 -0
- package/frontend/src/lib/utils/cloudMessaging.ts +20 -0
- package/frontend/src/lib/utils/menuItems.ts +183 -0
- package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
- package/frontend/src/lib/utils/utils.ts +19 -1
- package/frontend/src/vite-env.d.ts +1 -0
- package/frontend/vite.config.ts +5 -3
- package/functions/server.ts +28 -3
- package/functions/worker-template.js +15 -4
- package/i18n/README.ar.md +130 -0
- package/i18n/README.de.md +130 -0
- package/i18n/README.es.md +154 -0
- package/i18n/README.fr.md +134 -0
- package/i18n/README.hi.md +129 -0
- package/i18n/README.ja.md +174 -0
- package/i18n/README.ko.md +137 -0
- package/i18n/README.pt-BR.md +131 -0
- package/i18n/README.ru.md +129 -0
- package/i18n/README.zh-CN.md +133 -0
- package/openapi/ai.yaml +31 -4
- package/openapi/auth.yaml +827 -146
- package/package.json +16 -7
- package/shared-schemas/package.json +1 -1
- package/shared-schemas/src/ai-api.schema.ts +34 -58
- package/shared-schemas/src/ai.schema.ts +5 -0
- package/shared-schemas/src/auth-api.schema.ts +154 -8
- package/shared-schemas/src/auth.schema.ts +42 -6
- package/shared-schemas/src/cloud-events.schema.ts +57 -0
- package/shared-schemas/src/database-api.schema.ts +3 -3
- package/shared-schemas/src/database.schema.ts +1 -1
- package/shared-schemas/src/index.ts +1 -0
- package/shared-schemas/src/logs-api.schema.ts +7 -1
- package/shared-schemas/src/logs.schema.ts +26 -0
- package/shared-schemas/src/metadata.schema.ts +9 -4
- package/test-gemini.sh +35 -0
- package/test-usage-admin.sh +57 -0
- package/test-usage.sh +50 -0
- package/zeabur/README.md +13 -0
- package/zeabur/template.yml +1032 -0
- package/.github/workflows/deploy-aws.yml +0 -130
- package/backend/src/api/routes/agent.ts +0 -29
- package/backend/src/api/routes/auth.oauth.ts +0 -482
- package/backend/src/api/routes/auth.ts +0 -386
- package/backend/src/api/routes/docs.ts +0 -66
- package/backend/src/api/routes/functions.ts +0 -183
- package/backend/src/api/routes/openapi.ts +0 -82
- package/backend/src/api/routes/usage.ts +0 -96
- package/backend/src/core/ai/client.ts +0 -242
- package/backend/src/core/ai/model.ts +0 -117
- package/backend/src/core/auth/auth.ts +0 -781
- package/backend/src/core/database/table.ts +0 -772
- package/backend/src/core/documentation/agent.ts +0 -689
- package/backend/src/core/documentation/openapi.ts +0 -856
- package/backend/src/core/logs/analytics.ts +0 -76
- package/backend/src/core/logs/providers/localdb.provider.ts +0 -246
- package/backend/src/core/storage/storage.ts +0 -923
- package/backend/src/utils/cloud-token.ts +0 -39
- package/backend/src/utils/helpers.ts +0 -49
- package/backend/src/utils/uuid.ts +0 -9
- package/backend/tests/manual/test-better-auth.sh +0 -303
- package/docker-init/db/logs.sql +0 -9
- package/frontend/README.md +0 -112
- package/frontend/src/components/datagrid/index.tsx +0 -20
- package/frontend/src/components/layout/CloudLayout.tsx +0 -95
- package/frontend/src/features/ai/components/AIConfigDialog.tsx +0 -76
- package/frontend/src/features/ai/components/AIConfigForm.tsx +0 -222
- package/frontend/src/features/ai/components/fields/ModalityField.tsx +0 -87
- package/frontend/src/features/ai/components/fields/ModelSelectionField.tsx +0 -134
- package/frontend/src/features/ai/components/fields/SystemPromptField.tsx +0 -33
- package/frontend/src/features/auth/components/AddOAuthDialog.tsx +0 -106
- package/frontend/src/features/auth/components/AuthMethodTab.tsx +0 -238
- package/frontend/src/features/auth/components/UsersTab.tsx +0 -114
- package/frontend/src/features/auth/page/AuthenticationPage.tsx +0 -169
- package/frontend/src/features/database/hooks/UseLinkModal.tsx +0 -78
- package/frontend/src/features/functions/components/FunctionViewer.tsx +0 -46
- package/frontend/src/features/functions/components/FunctionsContent.tsx +0 -88
- package/frontend/src/features/login/components/AuthErrorBoundary.tsx +0 -87
- package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
- package/frontend/src/features/logs/components/AnalyticsLogsTable.tsx +0 -313
- package/frontend/src/features/logs/components/LogsTable.tsx +0 -199
- package/frontend/src/features/logs/page/AnalyticsLogsPage.tsx +0 -530
- package/frontend/src/features/metadata/index.ts +0 -0
- package/frontend/src/features/metadata/page/MetadataPage.tsx +0 -136
- package/frontend/src/features/onboard/components/CompletionCard.tsx +0 -41
- package/frontend/src/features/onboard/components/OnboardButton.tsx +0 -84
- package/frontend/src/features/onboard/components/StepContent.tsx +0 -91
- package/frontend/src/features/onboard/components/TestConnectionStep.tsx +0 -53
- package/frontend/src/features/onboard/components/mcp/McpInstallation.tsx +0 -144
- package/frontend/src/features/onboard/page/OnBoardPage.tsx +0 -104
- package/frontend/src/features/onboard/types.ts +0 -8
- package/frontend/src/lib/contexts/OnboardStepContext.tsx +0 -68
- package/frontend/src/lib/hooks/useOnboardingCompletion.ts +0 -29
- /package/backend/src/api/{middleware → middlewares}/error.ts +0 -0
- /package/backend/src/api/{middleware → middlewares}/upload.ts +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/012_add-storage-uploaded-by.sql +0 -0
- /package/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
|
@@ -1,193 +1,211 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { Card, CardContent } from '@/components/radix/Card';
|
|
5
|
-
import { Users, Database, HardDrive, ArrowLeftRight, Link2 } from 'lucide-react';
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { useLocation, useNavigate } from 'react-router-dom';
|
|
3
|
+
import { useMetadata } from '@/lib/hooks/useMetadata';
|
|
6
4
|
import { useUsers } from '@/features/auth';
|
|
5
|
+
import { Users, Database, HardDrive, Lock, ChevronRight } from 'lucide-react';
|
|
6
|
+
import { ConnectionSuccessBanner, StatsCard, PromptCard, PromptDialog } from '../components';
|
|
7
|
+
import { useMcpUsage } from '@/features/logs/hooks/useMcpUsage';
|
|
8
|
+
import { LogsDataGrid, type LogsColumnDef } from '@/features/logs/components/LogsDataGrid';
|
|
9
|
+
import { cn, formatTime } from '@/lib/utils/utils';
|
|
10
|
+
import { Button } from '@/components';
|
|
11
|
+
import { quickStartPrompts, type PromptTemplate } from '../prompts';
|
|
7
12
|
|
|
8
13
|
export default function DashboardPage() {
|
|
9
|
-
const navigate = useNavigate();
|
|
10
14
|
const location = useLocation();
|
|
15
|
+
const navigate = useNavigate();
|
|
16
|
+
const [selectedPrompt, setSelectedPrompt] = useState<PromptTemplate | null>(null);
|
|
17
|
+
const [promptDialogOpen, setPromptDialogOpen] = useState(false);
|
|
11
18
|
const { metadata, auth, tables, storage, isLoading } = useMetadata();
|
|
12
19
|
const { totalUsers } = useUsers();
|
|
20
|
+
const { records } = useMcpUsage();
|
|
13
21
|
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
const authCount = auth?.oauths.length ?? 0;
|
|
23
|
+
const tableCount = tables?.length ?? 0;
|
|
24
|
+
const showBanner = location.state?.showSuccessBanner === true;
|
|
25
|
+
|
|
26
|
+
const mcpColumns: LogsColumnDef[] = [
|
|
27
|
+
{
|
|
28
|
+
key: 'tool_name',
|
|
29
|
+
name: 'MCP Call',
|
|
30
|
+
width: '12fr',
|
|
31
|
+
renderCell: ({ row }) => (
|
|
32
|
+
<p className="text-sm text-gray-900 dark:text-white font-normal leading-6">
|
|
33
|
+
{String(row.tool_name ?? '')}
|
|
34
|
+
</p>
|
|
35
|
+
),
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
key: 'created_at',
|
|
39
|
+
name: 'Time',
|
|
40
|
+
width: 'minmax(200px, 1fr)',
|
|
41
|
+
renderCell: ({ row }) => (
|
|
42
|
+
<p className="text-sm text-gray-900 dark:text-white font-normal leading-6">
|
|
43
|
+
{formatTime(String(row.created_at ?? ''))}
|
|
44
|
+
</p>
|
|
45
|
+
),
|
|
46
|
+
},
|
|
47
|
+
];
|
|
20
48
|
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
// Send message to parent window to open onboarding overlay
|
|
24
|
-
window.parent.postMessage(
|
|
25
|
-
{
|
|
26
|
-
type: 'SHOW_CONNECT_OVERLAY',
|
|
27
|
-
},
|
|
28
|
-
'*'
|
|
29
|
-
);
|
|
30
|
-
} else {
|
|
31
|
-
void handleNavigateTo('onboard');
|
|
32
|
-
}
|
|
49
|
+
const handleViewMoreClick = () => {
|
|
50
|
+
void navigate('/dashboard/logs/MCP');
|
|
33
51
|
};
|
|
34
52
|
|
|
35
53
|
return (
|
|
36
|
-
<main className="h-full bg-white dark:bg-neutral-800">
|
|
37
|
-
<div className="flex
|
|
38
|
-
<div className="flex flex-col gap-6
|
|
39
|
-
{/*
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
54
|
+
<main className="h-full bg-white dark:bg-neutral-800 overflow-y-auto px-6">
|
|
55
|
+
<div className="flex flex-col gap-16 w-full max-w-[1080px] mx-auto pt-6 pb-8">
|
|
56
|
+
<div className="flex flex-col gap-6">
|
|
57
|
+
{/* Connection Success Banner - Only shows once on first connection */}
|
|
58
|
+
{showBanner && <ConnectionSuccessBanner />}
|
|
59
|
+
<h1 className="text-xl font-semibold text-gray-900 dark:text-white tracking-[-0.1px]">
|
|
60
|
+
Dashboard
|
|
61
|
+
</h1>
|
|
62
|
+
|
|
63
|
+
{/* Stats Section */}
|
|
64
|
+
<section className="flex flex-col gap-6 w-full">
|
|
65
|
+
<div className="flex gap-6 w-full h-[176px]">
|
|
66
|
+
<StatsCard
|
|
67
|
+
icon={Users}
|
|
68
|
+
title="AUTH"
|
|
69
|
+
value={(totalUsers || 0).toLocaleString()}
|
|
70
|
+
unit={totalUsers === 1 ? 'user' : 'users'}
|
|
71
|
+
description={`${authCount} OAuth ${authCount === 1 ? 'provider' : 'providers'} enabled`}
|
|
72
|
+
isLoading={isLoading}
|
|
73
|
+
/>
|
|
74
|
+
|
|
75
|
+
<StatsCard
|
|
76
|
+
icon={Database}
|
|
77
|
+
title="Database"
|
|
78
|
+
value={(metadata?.database?.totalSizeInGB || 0).toFixed(2)}
|
|
79
|
+
unit="GB"
|
|
80
|
+
description={`${tableCount} ${tableCount === 1 ? 'Table' : 'Tables'}`}
|
|
81
|
+
isLoading={isLoading}
|
|
82
|
+
/>
|
|
83
|
+
|
|
84
|
+
<StatsCard
|
|
85
|
+
icon={HardDrive}
|
|
86
|
+
title="Storage"
|
|
87
|
+
value={(storage?.totalSizeInGB || 0).toFixed(2)}
|
|
88
|
+
unit="GB"
|
|
89
|
+
description={`${storage?.buckets?.length || 0} ${storage?.buckets?.length === 1 ? 'Bucket' : 'Buckets'}`}
|
|
90
|
+
isLoading={isLoading}
|
|
91
|
+
/>
|
|
92
|
+
</div>
|
|
93
|
+
</section>
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
{/* Quick Start Prompt Section */}
|
|
97
|
+
<section className="flex flex-col gap-6 w-full">
|
|
98
|
+
<div className="flex flex-col gap-1 w-full">
|
|
99
|
+
<h2 className="text-xl font-semibold text-gray-900 dark:text-white tracking-[-0.1px]">
|
|
100
|
+
Quick Start Prompt
|
|
101
|
+
</h2>
|
|
102
|
+
<p className="text-sm text-gray-500 dark:text-neutral-400 leading-6">
|
|
103
|
+
Paste the prompts below into your agent to quickly start building real apps.
|
|
104
|
+
</p>
|
|
44
105
|
</div>
|
|
45
106
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
107
|
+
<div className="grid grid-cols-3 gap-6 w-full">
|
|
108
|
+
{quickStartPrompts.map((prompt, index) => (
|
|
109
|
+
<PromptCard
|
|
110
|
+
key={index}
|
|
111
|
+
title={prompt.title}
|
|
112
|
+
onClick={() => {
|
|
113
|
+
setSelectedPrompt(prompt);
|
|
114
|
+
setPromptDialogOpen(true);
|
|
115
|
+
}}
|
|
116
|
+
/>
|
|
117
|
+
))}
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
<PromptDialog
|
|
121
|
+
open={promptDialogOpen}
|
|
122
|
+
onOpenChange={setPromptDialogOpen}
|
|
123
|
+
promptTemplate={selectedPrompt}
|
|
124
|
+
/>
|
|
125
|
+
</section>
|
|
126
|
+
|
|
127
|
+
{/* Templates & Components Section */}
|
|
128
|
+
<section className="flex flex-col gap-6 w-full">
|
|
129
|
+
<div className="flex flex-col gap-1 w-full">
|
|
130
|
+
<h2 className="text-xl font-semibold text-gray-900 dark:text-white tracking-[-0.1px]">
|
|
131
|
+
Explore Our Platform
|
|
132
|
+
</h2>
|
|
133
|
+
<p className="text-sm text-gray-500 dark:text-neutral-400 leading-6">
|
|
134
|
+
InsForge gives you every backend feature you need. Use the whole platform or just the
|
|
135
|
+
features you want.
|
|
136
|
+
</p>
|
|
137
|
+
</div>
|
|
72
138
|
|
|
73
|
-
{/* Stats Cards */}
|
|
74
139
|
<div className="flex gap-6 w-full">
|
|
75
|
-
{/*
|
|
76
|
-
<
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
</span>
|
|
84
|
-
</div>
|
|
85
|
-
</div>
|
|
86
|
-
<div className="flex flex-col gap-4">
|
|
87
|
-
<div className="flex items-baseline gap-2">
|
|
88
|
-
{isLoading ? (
|
|
89
|
-
<Skeleton className="h-8 w-16 bg-gray-200 dark:bg-neutral-700" />
|
|
90
|
-
) : (
|
|
91
|
-
<>
|
|
92
|
-
<span className="text-2xl font-normal text-gray-900 dark:text-white tracking-[-0.144px]">
|
|
93
|
-
{(totalUsers || 0).toLocaleString()}
|
|
94
|
-
</span>
|
|
95
|
-
<span className="text-sm font-normal text-gray-500 dark:text-neutral-400">
|
|
96
|
-
{totalUsers === 1 ? 'user' : 'users'}
|
|
97
|
-
</span>
|
|
98
|
-
</>
|
|
99
|
-
)}
|
|
100
|
-
</div>
|
|
101
|
-
{isLoading ? (
|
|
102
|
-
<Skeleton className="h-5 w-36 bg-gray-200 dark:bg-neutral-700" />
|
|
103
|
-
) : (
|
|
104
|
-
<p className="text-base text-gray-500 dark:text-neutral-400">
|
|
105
|
-
{(() => {
|
|
106
|
-
const authCount = auth?.oauths.length || 0;
|
|
107
|
-
return `${authCount} OAuth ${authCount === 1 ? 'provider' : 'providers'} enabled`;
|
|
108
|
-
})()}
|
|
109
|
-
</p>
|
|
110
|
-
)}
|
|
140
|
+
{/* Sign-in Component Card */}
|
|
141
|
+
<button
|
|
142
|
+
onClick={() => void navigate('/dashboard/authentication/auth-methods')}
|
|
143
|
+
className="flex-1 bg-white dark:bg-[#363636] border border-gray-200 dark:border-[#414141] rounded-lg p-4 flex items-center gap-3 hover:bg-gray-50 hover:border-gray-300 dark:hover:bg-neutral-700 dark:hover:border-[#525252] hover:shadow-sm transition-all group"
|
|
144
|
+
>
|
|
145
|
+
<div className="flex-1 flex items-center gap-4">
|
|
146
|
+
<div className="bg-gray-100 dark:bg-neutral-800 rounded p-3.5 flex items-center justify-center shrink-0">
|
|
147
|
+
<Lock className="w-6 h-6 text-gray-600 dark:text-neutral-400" />
|
|
111
148
|
</div>
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
<div className="flex items-center gap-2 h-7">
|
|
120
|
-
<Database className="w-5 h-5 text-gray-700 dark:text-white" />
|
|
121
|
-
<span className="text-base font-normal text-gray-900 dark:text-white">
|
|
122
|
-
Database
|
|
123
|
-
</span>
|
|
124
|
-
</div>
|
|
149
|
+
<div className="flex flex-col gap-1 items-start text-left">
|
|
150
|
+
<p className="text-base text-gray-900 dark:text-white font-normal leading-6">
|
|
151
|
+
Authentication
|
|
152
|
+
</p>
|
|
153
|
+
<p className="text-sm text-gray-500 dark:text-neutral-400 leading-6">
|
|
154
|
+
User Authentication and management
|
|
155
|
+
</p>
|
|
125
156
|
</div>
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
</>
|
|
139
|
-
)}
|
|
140
|
-
</div>
|
|
141
|
-
{isLoading ? (
|
|
142
|
-
<Skeleton className="h-5 w-16 bg-gray-200 dark:bg-neutral-700" />
|
|
143
|
-
) : (
|
|
144
|
-
<p className="text-base text-gray-500 dark:text-neutral-400">
|
|
145
|
-
{tables.length || 0} {tables.length === 1 ? 'Table' : 'Tables'}
|
|
146
|
-
</p>
|
|
147
|
-
)}
|
|
157
|
+
</div>
|
|
158
|
+
<ChevronRight className="w-5 h-5 text-gray-400 dark:text-neutral-400 shrink-0 group-hover:translate-x-0.5 transition-transform" />
|
|
159
|
+
</button>
|
|
160
|
+
|
|
161
|
+
{/* Database Templates Card */}
|
|
162
|
+
<button
|
|
163
|
+
onClick={() => void navigate('/dashboard/tables')}
|
|
164
|
+
className="flex-1 bg-white dark:bg-[#363636] border border-gray-200 dark:border-[#414141] rounded-lg p-4 flex items-center gap-3 hover:bg-gray-50 hover:border-gray-300 dark:hover:bg-neutral-700 dark:hover:border-[#525252] hover:shadow-sm transition-all group"
|
|
165
|
+
>
|
|
166
|
+
<div className="flex-1 flex items-center gap-4">
|
|
167
|
+
<div className="bg-gray-100 dark:bg-neutral-800 rounded p-3.5 flex items-center justify-center shrink-0">
|
|
168
|
+
<Database className="w-6 h-6 text-gray-600 dark:text-neutral-400" />
|
|
148
169
|
</div>
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
<div className="flex items-center gap-2 h-7">
|
|
157
|
-
<HardDrive className="w-5 h-5 text-gray-700 dark:text-white" />
|
|
158
|
-
<span className="text-base font-normal text-gray-900 dark:text-white">
|
|
159
|
-
Storage
|
|
160
|
-
</span>
|
|
161
|
-
</div>
|
|
170
|
+
<div className="flex flex-col gap-1 items-start text-left">
|
|
171
|
+
<p className="text-base text-gray-900 dark:text-white font-normal leading-6">
|
|
172
|
+
Database
|
|
173
|
+
</p>
|
|
174
|
+
<p className="text-sm text-gray-500 dark:text-neutral-400 leading-6">
|
|
175
|
+
Manage your tables and data
|
|
176
|
+
</p>
|
|
162
177
|
</div>
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
178
|
+
</div>
|
|
179
|
+
<ChevronRight className="w-5 h-5 text-gray-400 dark:text-neutral-400 shrink-0 group-hover:translate-x-0.5 transition-transform" />
|
|
180
|
+
</button>
|
|
181
|
+
</div>
|
|
182
|
+
</section>
|
|
183
|
+
|
|
184
|
+
{/* MCP Call Records Section */}
|
|
185
|
+
<section className="flex flex-col gap-6 w-full">
|
|
186
|
+
<div className="flex items-center justify-between w-full">
|
|
187
|
+
<p className="text-xl font-semibold text-gray-900 dark:text-white">MCP Call Records</p>
|
|
188
|
+
<Button
|
|
189
|
+
onClick={handleViewMoreClick}
|
|
190
|
+
className="h-8 px-4 font-medium dark:bg-emerald-300 dark:text-black"
|
|
191
|
+
>
|
|
192
|
+
View More
|
|
193
|
+
</Button>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
<div className={cn('w-full overflow-hidden', !records.length && 'h-60')}>
|
|
197
|
+
<LogsDataGrid
|
|
198
|
+
columnDefs={mcpColumns}
|
|
199
|
+
data={records.slice(0, 5)}
|
|
200
|
+
emptyState={
|
|
201
|
+
<div className="h-20 text-sm text-zinc-500 dark:text-zinc-400">
|
|
202
|
+
No MCP call records found
|
|
186
203
|
</div>
|
|
187
|
-
|
|
188
|
-
|
|
204
|
+
}
|
|
205
|
+
noPadding
|
|
206
|
+
/>
|
|
189
207
|
</div>
|
|
190
|
-
</
|
|
208
|
+
</section>
|
|
191
209
|
</div>
|
|
192
210
|
</main>
|
|
193
211
|
);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const aiChatbotPrompt = {
|
|
2
|
+
title: 'AI Chatbot',
|
|
3
|
+
description: 'Paste below prompts to your agent as a quick start for building real apps',
|
|
4
|
+
prompt: `Build an AI chatbot app using InsForge as the backend platform with these features:
|
|
5
|
+
• Sign in and sign out before chatting
|
|
6
|
+
• Chat window with message history per conversation
|
|
7
|
+
• Create and delete conversations
|
|
8
|
+
• Upload images in chat and store them in InsForge storage
|
|
9
|
+
• Show uploaded images inline
|
|
10
|
+
• Clear all messages in a conversation
|
|
11
|
+
• Each user only sees their own chats and files`,
|
|
12
|
+
features: ['Authentication', 'Database', 'Storage', 'AI Integration'],
|
|
13
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const crmSystemPrompt = {
|
|
2
|
+
title: 'CRM',
|
|
3
|
+
description: 'Paste below prompts to your agent as a quick start for building real apps',
|
|
4
|
+
prompt: `Build a lightweight CRM app using InsForge as the backend platform with these features:
|
|
5
|
+
• Contacts with search and simple tags
|
|
6
|
+
• Companies and linked contacts
|
|
7
|
+
• Deals pipeline with stages and easy stage updates
|
|
8
|
+
• Deal detail with notes, tasks, and next follow up date
|
|
9
|
+
• Reminders for upcoming tasks and follow ups
|
|
10
|
+
• Activity timeline that logs deal stage changes and notes
|
|
11
|
+
• File attachments stored in InsForge storage and shown on the deal page`,
|
|
12
|
+
features: ['Authentication', 'Database', 'Storage'],
|
|
13
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const ecommercePlatformPrompt = {
|
|
2
|
+
title: 'E-commerce',
|
|
3
|
+
description: 'Paste below prompts to your agent as a quick start for building real apps',
|
|
4
|
+
prompt: `Build an app similar to a modern online store using InsForge as the backend platform that has these features:
|
|
5
|
+
• Displays a list of products with images, names, prices, and descriptions
|
|
6
|
+
• Allows users to add products to a shopping cart
|
|
7
|
+
• Has a "Cart" page for reviewing and removing items before checkout
|
|
8
|
+
• Has a simple checkout form for entering shipping details
|
|
9
|
+
• Allows business owners to add, edit, and delete products
|
|
10
|
+
• Stores product images in InsForge storage`,
|
|
11
|
+
features: ['Authentication', 'Database', 'Storage'],
|
|
12
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { crmSystemPrompt } from './crm-system';
|
|
2
|
+
import { aiChatbotPrompt } from './ai-chatbot';
|
|
3
|
+
import { ecommercePlatformPrompt } from './ecommerce-platform';
|
|
4
|
+
import { redditClonePrompt } from './reddit-clone';
|
|
5
|
+
import { instagramClonePrompt } from './instagram-clone';
|
|
6
|
+
import { notionClonePrompt } from './notion-clone';
|
|
7
|
+
|
|
8
|
+
export interface PromptTemplate {
|
|
9
|
+
title: string;
|
|
10
|
+
description: string;
|
|
11
|
+
prompt: string;
|
|
12
|
+
features: string[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const quickStartPrompts: PromptTemplate[] = [
|
|
16
|
+
crmSystemPrompt,
|
|
17
|
+
aiChatbotPrompt,
|
|
18
|
+
ecommercePlatformPrompt,
|
|
19
|
+
redditClonePrompt,
|
|
20
|
+
instagramClonePrompt,
|
|
21
|
+
notionClonePrompt,
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export {
|
|
25
|
+
crmSystemPrompt,
|
|
26
|
+
aiChatbotPrompt,
|
|
27
|
+
ecommercePlatformPrompt,
|
|
28
|
+
redditClonePrompt,
|
|
29
|
+
instagramClonePrompt,
|
|
30
|
+
notionClonePrompt,
|
|
31
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const instagramClonePrompt = {
|
|
2
|
+
title: 'Instagram Clone',
|
|
3
|
+
description: 'Paste below prompts to your agent as a quick start for building real apps',
|
|
4
|
+
prompt: `Build an app similar to Instagram with a global shared image stream using InsForge as the backend platform that has these features:
|
|
5
|
+
• Has a drag and drop box for uploading images to InsForge storage with an optional caption
|
|
6
|
+
• Has a "Feed" tab for viewing the global image stream
|
|
7
|
+
• Has a "My Photos" tab for viewing and deleting your own images
|
|
8
|
+
• Allows liking images in the "Feed" tab
|
|
9
|
+
• Shows like count for each image`,
|
|
10
|
+
features: ['Authentication', 'Database', 'Storage'],
|
|
11
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const notionClonePrompt = {
|
|
2
|
+
title: 'Notion Clone',
|
|
3
|
+
description: 'Paste below prompts to your agent as a quick start for building real apps',
|
|
4
|
+
prompt: `Make a notes app like Notion using InsForge as the backend platform with these features:
|
|
5
|
+
• User authentication for sign in and sign out
|
|
6
|
+
• Pages list in a sidebar with create and delete
|
|
7
|
+
• Each page has a title and rich text or simple markdown content
|
|
8
|
+
• Support private pages for each user and public pages visible to all users
|
|
9
|
+
• Search over page titles
|
|
10
|
+
• Clean and minimal interface with white space and a neutral color palette
|
|
11
|
+
• Focus on readable text with minimal distractions
|
|
12
|
+
• Optional file attachments stored in InsForge storage and shown inside the page`,
|
|
13
|
+
features: ['Authentication', 'Database', 'Storage'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const redditClonePrompt = {
|
|
2
|
+
title: 'Reddit Clone',
|
|
3
|
+
description: 'Paste below prompts to your agent as a quick start for building real apps',
|
|
4
|
+
prompt: `Build an app similar to Reddit with community-based discussion threads using InsForge as the backend platform that has these features:
|
|
5
|
+
• Has a "Communities" list where users can browse or create communities
|
|
6
|
+
• Each community has its own posts feed
|
|
7
|
+
• Users can create posts with a title and body (text or image upload to InsForge storage)
|
|
8
|
+
• Users can comment on posts and reply to other comments
|
|
9
|
+
• Allows upvoting and downvoting for both posts and comments
|
|
10
|
+
• Shows vote counts and comment counts for each post`,
|
|
11
|
+
features: ['Authentication', 'Database', 'Storage'],
|
|
12
|
+
};
|