openship 0.1.0 → 0.1.1
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/.env.example +19 -3
- package/CONTRIBUTING.md +69 -19
- package/LICENSE +661 -0
- package/README.md +304 -108
- package/apps/api/Dockerfile +6 -8
- package/apps/api/package.json +25 -21
- package/apps/api/src/app.ts +46 -3
- package/apps/api/src/config/env.ts +81 -7
- package/apps/api/src/lib/auth-mode.ts +42 -0
- package/apps/api/src/lib/auth.ts +105 -0
- package/apps/api/src/lib/cache.ts +128 -0
- package/apps/api/src/lib/cloud-auth-proxy.ts +310 -0
- package/apps/api/src/lib/cloud-client.ts +103 -0
- package/apps/api/src/lib/compose-parser.ts +138 -0
- package/apps/api/src/lib/controller-helpers.ts +90 -0
- package/apps/api/src/lib/email-templates.ts +94 -0
- package/apps/api/src/lib/encryption.ts +102 -0
- package/apps/api/src/lib/local-user.ts +65 -0
- package/apps/api/src/lib/mail.ts +48 -0
- package/apps/api/src/lib/notifications.ts +195 -0
- package/apps/api/src/lib/openship-cloud.ts +101 -0
- package/apps/api/src/lib/resources.ts +96 -0
- package/apps/api/src/lib/screenshots.ts +189 -0
- package/apps/api/src/lib/ssh-manager.ts +369 -0
- package/apps/api/src/lib/ssl-scheduler.ts +109 -0
- package/apps/api/src/lib/stack-detector.ts +708 -0
- package/apps/api/src/lib/system-debug.ts +10 -0
- package/apps/api/src/middleware/auth.ts +49 -13
- package/apps/api/src/middleware/error-handler.ts +23 -3
- package/apps/api/src/middleware/index.ts +2 -0
- package/apps/api/src/middleware/internal-auth.ts +40 -0
- package/apps/api/src/middleware/local-only.ts +20 -0
- package/apps/api/src/middleware/rate-limiter.ts +9 -0
- package/apps/api/src/modules/analytics/analytics.controller.ts +111 -0
- package/apps/api/src/modules/analytics/analytics.routes.ts +29 -0
- package/apps/api/src/modules/analytics/analytics.schema.ts +37 -0
- package/apps/api/src/modules/analytics/analytics.service.ts +264 -0
- package/apps/api/src/modules/auth/auth.routes.ts +233 -6
- package/apps/api/src/modules/billing/billing.routes.ts +8 -0
- package/apps/api/src/modules/cloud/cloud.controller.ts +225 -0
- package/apps/api/src/modules/cloud/cloud.routes.ts +40 -0
- package/apps/api/src/modules/deployments/build.service.ts +791 -0
- package/apps/api/src/modules/deployments/deployment-lifecycle.ts +138 -0
- package/apps/api/src/modules/deployments/deployment.controller.ts +324 -16
- package/apps/api/src/modules/deployments/deployment.routes.ts +33 -7
- package/apps/api/src/modules/deployments/deployment.schema.ts +37 -5
- package/apps/api/src/modules/deployments/deployment.service.ts +178 -11
- package/apps/api/src/modules/deployments/preflight.ts +280 -0
- package/apps/api/src/modules/deployments/prepare.service.ts +252 -0
- package/apps/api/src/modules/deployments/session-manager.ts +283 -0
- package/apps/api/src/modules/deployments/ssl.service.ts +73 -0
- package/apps/api/src/modules/domains/domain.controller.ts +59 -7
- package/apps/api/src/modules/domains/domain.routes.ts +20 -5
- package/apps/api/src/modules/domains/domain.schema.ts +35 -0
- package/apps/api/src/modules/domains/domain.service.ts +375 -9
- package/apps/api/src/modules/github/github.auth.ts +397 -0
- package/apps/api/src/modules/github/github.controller.ts +387 -0
- package/apps/api/src/modules/github/github.local-auth.ts +251 -0
- package/apps/api/src/modules/github/github.routes.ts +50 -0
- package/apps/api/src/modules/github/github.schema.ts +52 -0
- package/apps/api/src/modules/github/github.service.ts +592 -0
- package/apps/api/src/modules/github/github.types.ts +158 -0
- package/apps/api/src/modules/github/github.webhook.ts +186 -0
- package/apps/api/src/modules/github/index.ts +16 -0
- package/apps/api/src/modules/health/health.routes.ts +35 -0
- package/apps/api/src/modules/projects/project.controller.ts +481 -12
- package/apps/api/src/modules/projects/project.routes.ts +63 -6
- package/apps/api/src/modules/projects/project.schema.ts +104 -6
- package/apps/api/src/modules/projects/project.service.ts +502 -11
- package/apps/api/src/modules/settings/settings.controller.ts +55 -0
- package/apps/api/src/modules/settings/settings.routes.ts +25 -0
- package/apps/api/src/modules/settings/settings.service.ts +49 -0
- package/apps/api/src/modules/system/filesystem.controller.ts +66 -0
- package/apps/api/src/modules/system/index.ts +1 -0
- package/apps/api/src/modules/system/server-check.controller.ts +475 -0
- package/apps/api/src/modules/system/setup-session.ts +255 -0
- package/apps/api/src/modules/system/setup.controller.ts +128 -0
- package/apps/api/src/modules/system/system.routes.ts +42 -0
- package/apps/api/src/modules/webhooks/webhook.controller.ts +57 -15
- package/apps/api/src/modules/webhooks/webhook.routes.ts +11 -8
- package/apps/api/src/modules/webhooks/webhook.service.ts +46 -5
- package/apps/api/src/modules/webhooks/webhook.types.ts +35 -0
- package/apps/api/tsconfig.json +3 -1
- package/apps/cli/package.json +8 -10
- package/apps/cli/tsconfig.json +2 -1
- package/apps/dashboard/Dockerfile +4 -6
- package/apps/dashboard/components.json +20 -0
- package/apps/dashboard/next-env.d.ts +6 -0
- package/apps/dashboard/next.config.mjs +11 -1
- package/apps/dashboard/package.json +25 -13
- package/apps/dashboard/postcss.config.mjs +5 -0
- package/apps/dashboard/public/android-chrome-192x192.png +0 -0
- package/apps/dashboard/public/android-chrome-512x512.png +0 -0
- package/apps/dashboard/public/apple-touch-icon.png +0 -0
- package/apps/dashboard/public/favicon-16x16.png +0 -0
- package/apps/dashboard/public/favicon-32x32.png +0 -0
- package/apps/dashboard/public/favicon.ico +0 -0
- package/apps/dashboard/public/site.webmanifest +19 -0
- package/apps/dashboard/src/app/(auth)/forgot-password/page.tsx +114 -0
- package/apps/dashboard/src/app/(auth)/layout.tsx +18 -3
- package/apps/dashboard/src/app/(auth)/login/page.tsx +215 -6
- package/apps/dashboard/src/app/(auth)/providers.tsx +34 -0
- package/apps/dashboard/src/app/(auth)/register/page.tsx +171 -5
- package/apps/dashboard/src/app/(auth)/reset-password/page.tsx +172 -0
- package/apps/dashboard/src/app/(auth)/verify-email/page.tsx +190 -0
- package/apps/dashboard/src/app/(dashboard)/(deployment)/build/[id]/page.tsx +162 -0
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/BuildSummary.tsx +166 -0
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DnsConfiguration.tsx +119 -0
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DomainSettings.tsx +291 -0
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Header.tsx +71 -0
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Sidebar.tsx +270 -0
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/SkeletonLoader.tsx +87 -0
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/page.tsx +169 -0
- package/apps/dashboard/src/app/(dashboard)/(deployment)/layout.tsx +7 -0
- package/apps/dashboard/src/app/(dashboard)/billing/page.tsx +1 -8
- package/apps/dashboard/src/app/(dashboard)/deployments/components/CommitDetailsModal.tsx +240 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentCard.tsx +121 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentHeader.tsx +89 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentMenu.tsx +182 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsContent.tsx +324 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsFilters.tsx +99 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsList.tsx +31 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/components/EmptyState.tsx +101 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/components/LoadingSkeleton.tsx +57 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/components/ProjectFilter.tsx +109 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/components/index.ts +9 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/page.tsx +9 -3
- package/apps/dashboard/src/app/(dashboard)/deployments/types.ts +44 -0
- package/apps/dashboard/src/app/(dashboard)/deployments/utils.ts +176 -0
- package/apps/dashboard/src/app/(dashboard)/domains/page.tsx +1 -6
- package/apps/dashboard/src/app/(dashboard)/integrations/page.tsx +321 -0
- package/apps/dashboard/src/app/(dashboard)/layout.tsx +22 -32
- package/apps/dashboard/src/app/(dashboard)/library/components/ConnectPrompt.tsx +187 -0
- package/apps/dashboard/src/app/(dashboard)/library/components/LibrarySidebar.tsx +147 -0
- package/apps/dashboard/src/app/(dashboard)/library/components/LoadingSkeleton.tsx +39 -0
- package/apps/dashboard/src/app/(dashboard)/library/components/LocalProjects.tsx +548 -0
- package/apps/dashboard/src/app/(dashboard)/library/components/RepositoryList.tsx +292 -0
- package/apps/dashboard/src/app/(dashboard)/library/components/TemplateGrid.tsx +36 -0
- package/apps/dashboard/src/app/(dashboard)/library/components/UrlImport.tsx +74 -0
- package/apps/dashboard/src/app/(dashboard)/library/page.tsx +121 -0
- package/apps/dashboard/src/app/(dashboard)/library/types.ts +26 -0
- package/apps/dashboard/src/app/(dashboard)/monitoring/page.tsx +1 -6
- package/apps/dashboard/src/app/(dashboard)/page.tsx +485 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/layout.tsx +22 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/page.tsx +286 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/AdvancedSettings.tsx +235 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/BuildSettings.tsx +174 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeleteConfirmationDialog.tsx +45 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeletionModal.tsx +95 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/Deployments.tsx +11 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DomainSettings.tsx +523 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/EnvironmentSettings.tsx +246 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GeneralSettings.tsx +93 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitInfo.tsx +261 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitSettings.tsx +391 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/LogsSettings.tsx +133 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectNotFound.tsx +95 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectsBottomNavigation.tsx +62 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ResourceSettings.tsx +333 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingSection.tsx +66 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingsNavigation.tsx +27 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SleepModeSettings.tsx +134 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProductionUrl.tsx +25 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectIdentity.tsx +159 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectInfo.tsx +58 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/SkeletonLoader.tsx +170 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/StatsCards.tsx +33 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TopPaths.tsx +56 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TrafficChart.tsx +157 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/index.ts +14 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/LogsActions.tsx +52 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/ServerLogs.tsx +249 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/TerminalLogs.tsx +682 -0
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/logs.css +127 -0
- package/apps/dashboard/src/app/(dashboard)/projects/components/DeploymentCard.tsx +73 -0
- package/apps/dashboard/src/app/(dashboard)/projects/components/ProjectCard.tsx +330 -0
- package/apps/dashboard/src/app/(dashboard)/projects/page.tsx +326 -4
- package/apps/dashboard/src/app/(dashboard)/providers.tsx +23 -0
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/components-tab.tsx +329 -0
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/overview-tab.tsx +229 -0
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/terminal-tab.tsx +38 -0
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/page.tsx +437 -0
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/checking-state.tsx +15 -0
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/choose-mode.tsx +54 -0
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/component-row.tsx +65 -0
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/error-banner.tsx +13 -0
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/installing-panel.tsx +227 -0
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/results-panel.tsx +90 -0
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/setup-header.tsx +56 -0
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/types.ts +13 -0
- package/apps/dashboard/src/app/(dashboard)/servers/new/page.tsx +666 -0
- package/apps/dashboard/src/app/(dashboard)/servers/page.tsx +283 -0
- package/apps/dashboard/src/app/(dashboard)/settings/_components/BuildPreferences.tsx +110 -0
- package/apps/dashboard/src/app/(dashboard)/settings/_components/CloudConnection.tsx +147 -0
- package/apps/dashboard/src/app/(dashboard)/settings/_components/InstanceInfo.tsx +54 -0
- package/apps/dashboard/src/app/(dashboard)/settings/_components/ServerConnection.tsx +407 -0
- package/apps/dashboard/src/app/(dashboard)/settings/_components/SettingsSection.tsx +32 -0
- package/apps/dashboard/src/app/(dashboard)/settings/page.tsx +62 -3
- package/apps/dashboard/src/app/auth/callback/close/page.tsx +23 -0
- package/apps/dashboard/src/app/auth/callback/install/page.tsx +40 -0
- package/apps/dashboard/src/app/authorize/page.tsx +137 -0
- package/apps/dashboard/src/app/globals.css +57 -3
- package/apps/dashboard/src/app/layout.tsx +43 -3
- package/apps/dashboard/src/components/auth-shell.tsx +66 -0
- package/apps/dashboard/src/components/deployments/types.ts +44 -0
- package/apps/dashboard/src/components/global-deployments/index.ts +17 -0
- package/apps/dashboard/src/components/i18n-provider.tsx +100 -0
- package/apps/dashboard/src/components/import-project/BuildSettings.tsx +376 -0
- package/apps/dashboard/src/components/import-project/BuildSkeleton.tsx +161 -0
- package/apps/dashboard/src/components/import-project/BuildTerminal.tsx +358 -0
- package/apps/dashboard/src/components/import-project/ComposeServices.tsx +455 -0
- package/apps/dashboard/src/components/import-project/DeploymentProcessing.tsx +510 -0
- package/apps/dashboard/src/components/import-project/DockerSettings.tsx +64 -0
- package/apps/dashboard/src/components/import-project/EnvironmentVariables.tsx +481 -0
- package/apps/dashboard/src/components/import-project/Frameworks.tsx +90 -0
- package/apps/dashboard/src/components/import-project/ProjectSettings.tsx +160 -0
- package/apps/dashboard/src/components/import-project/types.ts +82 -0
- package/apps/dashboard/src/components/integrations/GithubPermissionModal.tsx +173 -0
- package/apps/dashboard/src/components/language-switcher.tsx +36 -0
- package/apps/dashboard/src/components/logo.tsx +13 -0
- package/apps/dashboard/src/components/network-error-handler.tsx +27 -0
- package/apps/dashboard/src/components/oauth-buttons.tsx +81 -0
- package/apps/dashboard/src/components/overview/ActivityChart.tsx +247 -0
- package/apps/dashboard/src/components/overview/ApiRequestsCard.tsx +111 -0
- package/apps/dashboard/src/components/overview/CreditsCard.tsx +137 -0
- package/apps/dashboard/src/components/overview/DeploymentsChart.tsx +195 -0
- package/apps/dashboard/src/components/overview/EmptyState.tsx +126 -0
- package/apps/dashboard/src/components/overview/LoadingSkeleton.tsx +92 -0
- package/apps/dashboard/src/components/overview/OverviewHeader.tsx +74 -0
- package/apps/dashboard/src/components/overview/OverviewHeroChart.tsx +344 -0
- package/apps/dashboard/src/components/overview/ProjectsCard.tsx +134 -0
- package/apps/dashboard/src/components/overview/QuickLinks.tsx +119 -0
- package/apps/dashboard/src/components/overview/SandboxesCard.tsx +150 -0
- package/apps/dashboard/src/components/overview/StatsGrid.tsx +166 -0
- package/apps/dashboard/src/components/overview/TokenUsageChart.tsx +206 -0
- package/apps/dashboard/src/components/overview/UsageStats.tsx +79 -0
- package/apps/dashboard/src/components/overview/index.ts +30 -0
- package/apps/dashboard/src/components/overview/types.ts +116 -0
- package/apps/dashboard/src/components/page-header.tsx +25 -0
- package/apps/dashboard/src/components/project-settings/ServerSideSwitch.jsx +60 -0
- package/apps/dashboard/src/components/shared/AlertBox.tsx +39 -0
- package/apps/dashboard/src/components/shared/CTASection.tsx +45 -0
- package/apps/dashboard/src/components/shared/ErrorState.tsx +176 -0
- package/apps/dashboard/src/components/shared/FeatureCard.tsx +20 -0
- package/apps/dashboard/src/components/shared/MDXComponents.tsx +24 -0
- package/apps/dashboard/src/components/shared/MachineSettingsModal.tsx +286 -0
- package/apps/dashboard/src/components/shared/Modal.tsx +39 -0
- package/apps/dashboard/src/components/shared/OTPInput.tsx +122 -0
- package/apps/dashboard/src/components/shared/PageHero.tsx +21 -0
- package/apps/dashboard/src/components/shared/PlatformFeatureCard.tsx +27 -0
- package/apps/dashboard/src/components/shared/StatCard.tsx +14 -0
- package/apps/dashboard/src/components/shared/ValueCard.tsx +20 -0
- package/apps/dashboard/src/components/shared/index.ts +8 -0
- package/apps/dashboard/src/components/sidebar.tsx +282 -0
- package/apps/dashboard/src/components/theme-provider.tsx +96 -0
- package/apps/dashboard/src/components/toast.tsx +106 -0
- package/apps/dashboard/src/components/ui/CustomCursor.tsx +107 -0
- package/apps/dashboard/src/components/ui/CustomSelect.tsx +126 -0
- package/apps/dashboard/src/components/ui/DropdownMenu.tsx +174 -0
- package/apps/dashboard/src/components/ui/FileIcon.jsx +59 -0
- package/apps/dashboard/src/components/ui/IconPickerModal.tsx +273 -0
- package/apps/dashboard/src/components/ui/InfoBanner.jsx +39 -0
- package/apps/dashboard/src/components/ui/Logo.tsx +14 -0
- package/apps/dashboard/src/components/ui/Modal.tsx +117 -0
- package/apps/dashboard/src/components/ui/PageContainer.tsx +12 -0
- package/apps/dashboard/src/components/ui/SectionContainer.jsx +7 -0
- package/apps/dashboard/src/components/ui/SlidingToggle.tsx +128 -0
- package/apps/dashboard/src/components/ui/Toast.tsx +29 -0
- package/apps/dashboard/src/components/ui/button.tsx +58 -0
- package/apps/dashboard/src/components/ui/card.tsx +60 -0
- package/apps/dashboard/src/components/ui/input.tsx +20 -0
- package/apps/dashboard/src/components/ui/label.tsx +19 -0
- package/apps/dashboard/src/components/ui/select.tsx +10 -0
- package/apps/dashboard/src/components/ui/textarea.tsx +9 -0
- package/apps/dashboard/src/constants/lang-colors.ts +25 -0
- package/apps/dashboard/src/constants/mock.ts +38 -0
- package/apps/dashboard/src/context/AuthContext.tsx +91 -0
- package/apps/dashboard/src/context/CloudContext.tsx +275 -0
- package/apps/dashboard/src/context/DeploymentContext.tsx +71 -0
- package/apps/dashboard/src/context/GitHubContext.tsx +288 -0
- package/apps/dashboard/src/context/ModalContext.tsx +300 -0
- package/apps/dashboard/src/context/NetworkContext.tsx +32 -0
- package/apps/dashboard/src/context/ProjectSettingsContext.tsx +727 -0
- package/apps/dashboard/src/context/ToastContext.tsx +129 -0
- package/apps/dashboard/src/context/deployment/index.ts +3 -0
- package/apps/dashboard/src/context/deployment/types.ts +183 -0
- package/apps/dashboard/src/context/deployment/useDeploymentBuild.ts +547 -0
- package/apps/dashboard/src/context/deployment/useDeploymentConfig.ts +176 -0
- package/apps/dashboard/src/hooks/useBuildConnection.ts +334 -0
- package/apps/dashboard/src/hooks/useMonitorStream.ts +146 -0
- package/apps/dashboard/src/hooks/useProjectData.ts +110 -0
- package/apps/dashboard/src/hooks/useSSEConnection.ts +465 -0
- package/apps/dashboard/src/hooks/useSSEStream.ts +309 -0
- package/apps/dashboard/src/hooks/useSessions.ts +104 -0
- package/apps/dashboard/src/hooks/useSetupStream.ts +223 -0
- package/apps/dashboard/src/i18n/dictionaries/ar.json +218 -0
- package/apps/dashboard/src/i18n/dictionaries/en.json +218 -0
- package/apps/dashboard/src/i18n/index.ts +16 -0
- package/apps/dashboard/src/lib/api/ai.ts +22 -0
- package/apps/dashboard/src/lib/api/auth.ts +13 -0
- package/apps/dashboard/src/lib/api/client.ts +199 -0
- package/apps/dashboard/src/lib/api/cloud.ts +15 -0
- package/apps/dashboard/src/lib/api/deploy.ts +58 -0
- package/apps/dashboard/src/lib/api/domains.ts +13 -0
- package/apps/dashboard/src/lib/api/endpoints.ts +129 -0
- package/apps/dashboard/src/lib/api/github.ts +31 -0
- package/apps/dashboard/src/lib/api/icons.ts +12 -0
- package/apps/dashboard/src/lib/api/index.ts +41 -0
- package/apps/dashboard/src/lib/api/projects.ts +153 -0
- package/apps/dashboard/src/lib/api/sandbox.ts +14 -0
- package/apps/dashboard/src/lib/api/settings.ts +21 -0
- package/apps/dashboard/src/lib/api/system.ts +159 -0
- package/apps/dashboard/src/lib/auth-client.ts +54 -0
- package/apps/dashboard/src/lib/country.ts +25 -0
- package/apps/dashboard/src/lib/server/api.ts +140 -0
- package/apps/dashboard/src/lib/server/session.ts +103 -0
- package/apps/dashboard/src/lib/sseClient.ts +241 -0
- package/apps/dashboard/src/lib/sseMessageProcessors.ts +323 -0
- package/apps/dashboard/src/lib/utils.ts +6 -0
- package/apps/dashboard/src/proxy.ts +46 -0
- package/apps/dashboard/src/styles/Toast.module.css +92 -0
- package/apps/dashboard/src/styles/fonts.css +93 -0
- package/apps/dashboard/src/styles/theme.css +336 -0
- package/apps/dashboard/src/types/research.ts +42 -0
- package/apps/dashboard/src/utils/SSEParser.js +150 -0
- package/apps/dashboard/src/utils/authWindow.ts +143 -0
- package/apps/dashboard/src/utils/codeTheme.ts +127 -0
- package/apps/dashboard/src/utils/colors.json +2810 -0
- package/apps/dashboard/src/utils/date.ts +121 -0
- package/apps/dashboard/src/utils/deployment.ts +128 -0
- package/apps/dashboard/src/utils/deploymentPhaseDetector.ts +232 -0
- package/apps/dashboard/src/utils/extToLang.js +103 -0
- package/apps/dashboard/src/utils/github.ts +62 -0
- package/apps/dashboard/src/utils/icons.js +46 -0
- package/apps/dashboard/src/utils/repoSlug.ts +110 -0
- package/apps/dashboard/src/utils/research-api.ts +163 -0
- package/apps/dashboard/src/utils/suggestions.ts +84 -0
- package/apps/dashboard/src/utils/theme.js +1 -0
- package/apps/dashboard/src/utils/ui-helpers.tsx +30 -0
- package/apps/dashboard/src/utils/upload.js +12 -0
- package/apps/dashboard/tsconfig.json +27 -5
- package/apps/desktop/forge.config.json +36 -0
- package/apps/desktop/package.json +26 -0
- package/apps/desktop/scripts/dev.mjs +58 -0
- package/apps/desktop/src/main/index.ts +675 -0
- package/apps/desktop/src/main/types/desktop.d.ts +33 -0
- package/apps/desktop/src/preload/index.ts +88 -0
- package/apps/desktop/src/renderer/index.html +462 -0
- package/apps/desktop/src/renderer/onboarding.js +511 -0
- package/apps/desktop/src/renderer/styles.css +1139 -0
- package/apps/desktop/tsconfig.json +17 -0
- package/apps/web/.source/browser.ts +13 -0
- package/apps/web/.source/dynamic.ts +8 -0
- package/apps/web/.source/server.ts +22 -0
- package/apps/web/.source/source.config.mjs +20 -0
- package/apps/web/Dockerfile +4 -6
- package/apps/web/content/blog/how-ai-builds-work.mdx +55 -0
- package/apps/web/content/blog/introducing-openship.mdx +46 -0
- package/apps/web/content/blog/self-hosting-cost-breakdown.mdx +59 -0
- package/apps/web/content/docs/_meta.json +14 -0
- package/apps/web/content/docs/api.mdx +98 -0
- package/apps/web/content/docs/cli.mdx +80 -0
- package/apps/web/content/docs/first-deployment.mdx +56 -0
- package/apps/web/content/docs/index.mdx +27 -0
- package/apps/web/content/docs/installation.mdx +65 -0
- package/apps/web/content/docs/quickstart.mdx +45 -0
- package/apps/web/next-env.d.ts +6 -0
- package/apps/web/next.config.mjs +16 -2
- package/apps/web/package.json +19 -12
- package/apps/web/postcss.config.mjs +5 -0
- package/apps/web/public/android-chrome-192x192.png +0 -0
- package/apps/web/public/android-chrome-512x512.png +0 -0
- package/apps/web/public/apple-touch-icon.png +0 -0
- package/apps/web/public/favicon-16x16.png +0 -0
- package/apps/web/public/favicon-32x32.png +0 -0
- package/apps/web/public/favicon.ico +0 -0
- package/apps/web/public/site.webmanifest +1 -0
- package/apps/web/source.config.ts +17 -0
- package/apps/web/src/app/(marketing)/layout.tsx +7 -22
- package/apps/web/src/app/blog/[...slug]/page.tsx +247 -0
- package/apps/web/src/app/blog/blog.css +575 -0
- package/apps/web/src/app/blog/layout.tsx +50 -0
- package/apps/web/src/app/blog/page.tsx +235 -0
- package/apps/web/src/app/docs/[[...slug]]/page.tsx +67 -0
- package/apps/web/src/app/docs/layout.tsx +62 -0
- package/apps/web/src/app/docs/toc-theme.css +71 -0
- package/apps/web/src/app/download/page.tsx +396 -0
- package/apps/web/src/app/globals.css +20 -3
- package/apps/web/src/app/layout.tsx +57 -3
- package/apps/web/src/app/page.tsx +47 -6
- package/apps/web/src/app/robots.ts +15 -0
- package/apps/web/src/app/sitemap.ts +35 -0
- package/apps/web/src/components/blog/share-sidebar.tsx +81 -0
- package/apps/web/src/components/blog/writer-sidebar.tsx +81 -0
- package/apps/web/src/components/landing/ai-native.tsx +169 -0
- package/apps/web/src/components/landing/backups.tsx +139 -0
- package/apps/web/src/components/landing/cdn.tsx +109 -0
- package/apps/web/src/components/landing/coming-soon.tsx +180 -0
- package/apps/web/src/components/landing/dark-section.tsx +166 -0
- package/apps/web/src/components/landing/dashboard.tsx +407 -0
- package/apps/web/src/components/landing/developer-experience.tsx +224 -0
- package/apps/web/src/components/landing/dns-domains.tsx +146 -0
- package/apps/web/src/components/landing/download-button.tsx +151 -0
- package/apps/web/src/components/landing/features/ai-visual.tsx +48 -0
- package/apps/web/src/components/landing/features/cloud-visual.tsx +44 -0
- package/apps/web/src/components/landing/features/git-visual.tsx +61 -0
- package/apps/web/src/components/landing/features/index.tsx +642 -0
- package/apps/web/src/components/landing/features/infra-visual.tsx +69 -0
- package/apps/web/src/components/landing/features/rollback-visual.tsx +42 -0
- package/apps/web/src/components/landing/features/ssl-visual.tsx +41 -0
- package/apps/web/src/components/landing/features/stacks-visual.tsx +54 -0
- package/apps/web/src/components/landing/final-cta.tsx +116 -0
- package/apps/web/src/components/landing/footer.tsx +145 -0
- package/apps/web/src/components/landing/hero.tsx +110 -0
- package/apps/web/src/components/landing/how-it-works.tsx +210 -0
- package/apps/web/src/components/landing/index.ts +21 -0
- package/apps/web/src/components/landing/mail-server.tsx +122 -0
- package/apps/web/src/components/landing/navbar.tsx +199 -0
- package/apps/web/src/components/landing/no-lockin.tsx +185 -0
- package/apps/web/src/components/landing/open-source-cta.tsx +151 -0
- package/apps/web/src/components/landing/portability.tsx +190 -0
- package/apps/web/src/components/landing/pricing.tsx +263 -0
- package/apps/web/src/components/landing/scaling.tsx +209 -0
- package/apps/web/src/components/landing/why-openship.tsx +291 -0
- package/apps/web/src/hooks/use-gsap-scroll.ts +158 -0
- package/apps/web/src/hooks/use-platform.ts +86 -0
- package/apps/web/src/lib/source.ts +12 -0
- package/apps/web/src/styles/fonts.css +84 -0
- package/apps/web/src/styles/landing.css +951 -0
- package/apps/web/src/styles/theme.css +227 -0
- package/apps/web/tsconfig.json +8 -3
- package/bun.lock +3260 -0
- package/docker-compose.yml +3 -0
- package/docs/screenshots/.gitkeep +0 -0
- package/docs/screenshots/screen.png +0 -0
- package/openship.code-workspace +7 -0
- package/package.json +23 -9
- package/packages/adapters/docs/ARCHITECTURE.md +160 -0
- package/packages/adapters/docs/BUILD-PIPELINE.md +171 -0
- package/packages/adapters/docs/CLOUD.md +239 -0
- package/packages/adapters/docs/EXECUTOR.md +174 -0
- package/packages/adapters/docs/LOG-STREAMING.md +175 -0
- package/packages/adapters/docs/SYSTEM.md +191 -0
- package/packages/adapters/package.json +14 -9
- package/packages/adapters/src/index.ts +144 -4
- package/packages/adapters/src/infra/cloud.ts +42 -0
- package/packages/adapters/src/infra/index.ts +9 -0
- package/packages/adapters/src/infra/noop.ts +27 -0
- package/packages/adapters/src/infra/traefik.ts +297 -0
- package/packages/adapters/src/infra/types.ts +36 -0
- package/packages/adapters/src/platform.ts +255 -0
- package/packages/adapters/src/runtime/bare.ts +567 -0
- package/packages/adapters/src/runtime/build-pipeline.ts +237 -0
- package/packages/adapters/src/runtime/cloud.ts +791 -0
- package/packages/adapters/src/runtime/deploy-pipeline.ts +146 -0
- package/packages/adapters/src/runtime/docker.ts +443 -0
- package/packages/adapters/src/runtime/index.ts +69 -0
- package/packages/adapters/src/runtime/local-build.ts +112 -0
- package/packages/adapters/src/runtime/transfer.ts +82 -0
- package/packages/adapters/src/runtime/types.ts +138 -0
- package/packages/adapters/src/system/catalog.ts +188 -0
- package/packages/adapters/src/system/checks.ts +228 -0
- package/packages/adapters/src/system/components.ts +45 -0
- package/packages/adapters/src/system/debug.ts +18 -0
- package/packages/adapters/src/system/environment.ts +168 -0
- package/packages/adapters/src/system/errors.ts +34 -0
- package/packages/adapters/src/system/executor.ts +600 -0
- package/packages/adapters/src/system/index.ts +58 -0
- package/packages/adapters/src/system/installer.ts +310 -0
- package/packages/adapters/src/system/setup.ts +442 -0
- package/packages/adapters/src/system/state.ts +96 -0
- package/packages/adapters/src/system/types.ts +116 -0
- package/packages/adapters/src/toolchain/catalog.ts +439 -0
- package/packages/adapters/src/toolchain/checks.ts +181 -0
- package/packages/adapters/src/toolchain/index.ts +38 -0
- package/packages/adapters/src/toolchain/installer.ts +189 -0
- package/packages/adapters/src/toolchain/types.ts +84 -0
- package/packages/adapters/src/types.ts +277 -0
- package/packages/adapters/tsconfig.json +3 -1
- package/packages/core/package.json +9 -9
- package/packages/core/src/constants.ts +44 -1
- package/packages/core/src/index.ts +2 -0
- package/packages/core/src/stacks.ts +778 -0
- package/packages/core/src/system.ts +111 -0
- package/packages/core/src/types.ts +22 -1
- package/packages/core/src/utils.ts +8 -0
- package/packages/core/tsconfig.json +3 -1
- package/packages/db/drizzle/0000_init.sql +231 -0
- package/packages/db/drizzle/0001_add_server_name.sql +1 -0
- package/packages/db/drizzle/meta/_journal.json +20 -0
- package/packages/db/drizzle.config.ts +10 -0
- package/packages/db/package.json +26 -14
- package/packages/db/src/client.ts +119 -0
- package/packages/db/src/index.ts +57 -8
- package/packages/db/src/repos/account.repo.ts +92 -0
- package/packages/db/src/repos/deployment.repo.ts +168 -0
- package/packages/db/src/repos/domain.repo.ts +102 -0
- package/packages/db/src/repos/git-installation.repo.ts +95 -0
- package/packages/db/src/repos/index.ts +43 -0
- package/packages/db/src/repos/instance-settings.repo.ts +43 -0
- package/packages/db/src/repos/project.repo.ts +159 -0
- package/packages/db/src/repos/session.repo.ts +82 -0
- package/packages/db/src/repos/settings.repo.ts +51 -0
- package/packages/db/src/repos/user.repo.ts +94 -0
- package/packages/db/src/schema/auth.ts +56 -0
- package/packages/db/src/schema/deployment.ts +87 -0
- package/packages/db/src/schema/domain.ts +46 -0
- package/packages/db/src/schema/github.ts +24 -0
- package/packages/db/src/schema/index.ts +6 -0
- package/packages/db/src/schema/project.ts +117 -0
- package/packages/db/src/schema/settings.ts +103 -0
- package/packages/db/tsconfig.json +3 -1
- package/packages/ui/package.json +17 -17
- package/packages/ui/src/components/status-dot.tsx +1 -1
- package/packages/ui/tsconfig.json +7 -2
- package/pnpm-workspace.yaml +0 -1
- package/{tooling/tsconfig/base.json → tsconfig.base.json} +0 -1
- package/turbo.json +4 -0
- package/apps/api/src/modules/auth/auth.controller.ts +0 -26
- package/apps/api/src/modules/auth/auth.schema.ts +0 -12
- package/apps/api/src/modules/auth/auth.service.ts +0 -23
- package/apps/dashboard/src/app/page.tsx +0 -6
- package/apps/web/src/app/(marketing)/docs/page.tsx +0 -10
- package/packages/adapters/src/base-adapter.ts +0 -49
- package/packages/adapters/src/docker-adapter.ts +0 -43
- package/packages/adapters/src/oblien-adapter.ts +0 -46
- package/packages/adapters/src/registry.ts +0 -22
- package/packages/db/prisma/schema.prisma +0 -160
- package/tooling/tsconfig/nextjs.json +0 -10
- package/tooling/tsconfig/node.json +0 -10
- package/tooling/tsconfig/package.json +0 -7
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"baseUrl": ".",
|
|
5
|
+
"outDir": "out",
|
|
6
|
+
"rootDir": "src",
|
|
7
|
+
"module": "CommonJS",
|
|
8
|
+
"moduleResolution": "node",
|
|
9
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
10
|
+
"types": ["node"],
|
|
11
|
+
"declaration": false,
|
|
12
|
+
"declarationMap": false,
|
|
13
|
+
"sourceMap": false
|
|
14
|
+
},
|
|
15
|
+
"include": ["src/main/**/*.ts", "src/preload/**/*.ts"],
|
|
16
|
+
"exclude": ["node_modules", "dist", "out"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import { browser } from 'fumadocs-mdx/runtime/browser';
|
|
3
|
+
import type * as Config from '../source.config';
|
|
4
|
+
|
|
5
|
+
const create = browser<typeof Config, import("fumadocs-mdx/runtime/types").InternalTypeConfig & {
|
|
6
|
+
DocData: {
|
|
7
|
+
}
|
|
8
|
+
}>();
|
|
9
|
+
const browserCollections = {
|
|
10
|
+
blog: create.doc("blog", {"how-ai-builds-work.mdx": () => import("../content/blog/how-ai-builds-work.mdx?collection=blog"), "introducing-openship.mdx": () => import("../content/blog/introducing-openship.mdx?collection=blog"), "self-hosting-cost-breakdown.mdx": () => import("../content/blog/self-hosting-cost-breakdown.mdx?collection=blog"), }),
|
|
11
|
+
docs: create.doc("docs", {"api.mdx": () => import("../content/docs/api.mdx?collection=docs"), "cli.mdx": () => import("../content/docs/cli.mdx?collection=docs"), "first-deployment.mdx": () => import("../content/docs/first-deployment.mdx?collection=docs"), "index.mdx": () => import("../content/docs/index.mdx?collection=docs"), "installation.mdx": () => import("../content/docs/installation.mdx?collection=docs"), "quickstart.mdx": () => import("../content/docs/quickstart.mdx?collection=docs"), }),
|
|
12
|
+
};
|
|
13
|
+
export default browserCollections;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import { dynamic } from 'fumadocs-mdx/runtime/dynamic';
|
|
3
|
+
import * as Config from '../source.config';
|
|
4
|
+
|
|
5
|
+
const create = await dynamic<typeof Config, import("fumadocs-mdx/runtime/types").InternalTypeConfig & {
|
|
6
|
+
DocData: {
|
|
7
|
+
}
|
|
8
|
+
}>(Config, {"configPath":"./source.config.ts","environment":"next","outDir":".source"}, {"doc":{"passthroughs":["extractedReferences"]}});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import * as __fd_glob_9 from "../content/docs/quickstart.mdx?collection=docs"
|
|
3
|
+
import * as __fd_glob_8 from "../content/docs/installation.mdx?collection=docs"
|
|
4
|
+
import * as __fd_glob_7 from "../content/docs/index.mdx?collection=docs"
|
|
5
|
+
import * as __fd_glob_6 from "../content/docs/first-deployment.mdx?collection=docs"
|
|
6
|
+
import * as __fd_glob_5 from "../content/docs/cli.mdx?collection=docs"
|
|
7
|
+
import * as __fd_glob_4 from "../content/docs/api.mdx?collection=docs"
|
|
8
|
+
import { default as __fd_glob_3 } from "../content/docs/_meta.json?collection=docs"
|
|
9
|
+
import * as __fd_glob_2 from "../content/blog/self-hosting-cost-breakdown.mdx?collection=blog"
|
|
10
|
+
import * as __fd_glob_1 from "../content/blog/introducing-openship.mdx?collection=blog"
|
|
11
|
+
import * as __fd_glob_0 from "../content/blog/how-ai-builds-work.mdx?collection=blog"
|
|
12
|
+
import { server } from 'fumadocs-mdx/runtime/server';
|
|
13
|
+
import type * as Config from '../source.config';
|
|
14
|
+
|
|
15
|
+
const create = server<typeof Config, import("fumadocs-mdx/runtime/types").InternalTypeConfig & {
|
|
16
|
+
DocData: {
|
|
17
|
+
}
|
|
18
|
+
}>({"doc":{"passthroughs":["extractedReferences"]}});
|
|
19
|
+
|
|
20
|
+
export const blog = await create.docs("blog", "content/blog", {}, {"how-ai-builds-work.mdx": __fd_glob_0, "introducing-openship.mdx": __fd_glob_1, "self-hosting-cost-breakdown.mdx": __fd_glob_2, });
|
|
21
|
+
|
|
22
|
+
export const docs = await create.docs("docs", "content/docs", {"_meta.json": __fd_glob_3, }, {"api.mdx": __fd_glob_4, "cli.mdx": __fd_glob_5, "first-deployment.mdx": __fd_glob_6, "index.mdx": __fd_glob_7, "installation.mdx": __fd_glob_8, "quickstart.mdx": __fd_glob_9, });
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// source.config.ts
|
|
2
|
+
import { defineDocs, defineConfig, frontmatterSchema } from "fumadocs-mdx/config";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
var docs = defineDocs({ dir: "content/docs" });
|
|
5
|
+
var blog = defineDocs({
|
|
6
|
+
dir: "content/blog",
|
|
7
|
+
docs: {
|
|
8
|
+
schema: frontmatterSchema.extend({
|
|
9
|
+
date: z.string().optional(),
|
|
10
|
+
category: z.string().optional(),
|
|
11
|
+
author: z.string().optional()
|
|
12
|
+
})
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
var source_config_default = defineConfig();
|
|
16
|
+
export {
|
|
17
|
+
blog,
|
|
18
|
+
source_config_default as default,
|
|
19
|
+
docs
|
|
20
|
+
};
|
package/apps/web/Dockerfile
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
# ─── Build stage ────────────────────────────────────────
|
|
2
|
-
FROM
|
|
3
|
-
RUN corepack enable && corepack prepare pnpm@9.0.0 --activate
|
|
2
|
+
FROM oven/bun:1 AS builder
|
|
4
3
|
WORKDIR /app
|
|
5
4
|
|
|
6
|
-
COPY
|
|
7
|
-
COPY tooling/ ./tooling/
|
|
5
|
+
COPY package.json bun.lock pnpm-workspace.yaml ./
|
|
8
6
|
COPY packages/ ./packages/
|
|
9
7
|
COPY apps/web/ ./apps/web/
|
|
10
8
|
|
|
11
|
-
RUN
|
|
12
|
-
RUN
|
|
9
|
+
RUN bun install --frozen-lockfile
|
|
10
|
+
RUN cd apps/web && bun run build
|
|
13
11
|
|
|
14
12
|
# ─── Production stage ──────────────────────────────────
|
|
15
13
|
FROM node:20-alpine AS runner
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "How AI Builds Work in Openship"
|
|
3
|
+
description: "A look under the hood at how Openship uses AI to detect frameworks, generate configs, and optimize builds automatically."
|
|
4
|
+
date: "2026-03-08"
|
|
5
|
+
category: "Engineering"
|
|
6
|
+
author: "Openship Team"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# How AI Builds Work in Openship
|
|
10
|
+
|
|
11
|
+
When you run `openship deploy`, a lot happens before your app goes live. Here's how the AI build system works.
|
|
12
|
+
|
|
13
|
+
## Step 1: Framework detection
|
|
14
|
+
|
|
15
|
+
Openship scans your project for signals:
|
|
16
|
+
|
|
17
|
+
- `package.json` scripts and dependencies
|
|
18
|
+
- Config files (`next.config.js`, `nuxt.config.ts`, `Cargo.toml`, etc.)
|
|
19
|
+
- Dockerfile presence
|
|
20
|
+
- Directory structure patterns
|
|
21
|
+
|
|
22
|
+
This produces a confidence-scored framework match. If Openship detects Next.js with 95% confidence, it uses the Next.js build pipeline. If there's a Dockerfile, it uses that directly.
|
|
23
|
+
|
|
24
|
+
## Step 2: Config generation
|
|
25
|
+
|
|
26
|
+
Based on the detected framework, Openship generates:
|
|
27
|
+
|
|
28
|
+
- **Build command** — `npm run build`, `go build`, etc.
|
|
29
|
+
- **Start command** — `npm start`, `./server`, etc.
|
|
30
|
+
- **Port mapping** — Detects which port your app listens on
|
|
31
|
+
- **Environment variables** — Suggests required vars based on framework conventions
|
|
32
|
+
|
|
33
|
+
You can override any of these in `openship.json`.
|
|
34
|
+
|
|
35
|
+
## Step 3: Build optimization
|
|
36
|
+
|
|
37
|
+
The AI layer optimizes the build:
|
|
38
|
+
|
|
39
|
+
- **Layer caching** — Dependency layers are cached separately from source code
|
|
40
|
+
- **Multi-stage builds** — Production images exclude dev dependencies
|
|
41
|
+
- **Parallel builds** — Multi-service projects build concurrently
|
|
42
|
+
|
|
43
|
+
## Step 4: Health checks
|
|
44
|
+
|
|
45
|
+
After deployment, Openship verifies:
|
|
46
|
+
|
|
47
|
+
- The container starts successfully
|
|
48
|
+
- The health check endpoint responds
|
|
49
|
+
- SSL is provisioned and valid
|
|
50
|
+
|
|
51
|
+
If any check fails, the deployment is rolled back automatically.
|
|
52
|
+
|
|
53
|
+
## What's next
|
|
54
|
+
|
|
55
|
+
We're working on AI-powered diagnostics — when a build fails, Openship will analyze the error and suggest fixes. Stay tuned.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Introducing Openship: Deploy Anything, Own Everything"
|
|
3
|
+
description: "We're launching Openship — an open-source, self-hostable deployment platform. Here's why we built it and what it can do."
|
|
4
|
+
date: "2026-03-01"
|
|
5
|
+
category: "Announcement"
|
|
6
|
+
author: "Openship Team"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Introducing Openship: Deploy Anything, Own Everything
|
|
10
|
+
|
|
11
|
+
Today we're open-sourcing Openship — a deployment platform you can run on your own servers.
|
|
12
|
+
|
|
13
|
+
## Why we built this
|
|
14
|
+
|
|
15
|
+
Cloud platforms like Vercel and Netlify are great for getting started. But as your app grows, so does the bill. Metered CPU, per-seat pricing, bandwidth caps — it adds up fast. And when you want to leave, you realize your infrastructure is locked into their proprietary systems.
|
|
16
|
+
|
|
17
|
+
We wanted something different:
|
|
18
|
+
|
|
19
|
+
- **Self-hosted first** — Run on any Linux server. A $20/month VPS handles what costs $200+ on managed platforms.
|
|
20
|
+
- **Open source** — MIT licensed. No black boxes, no vendor lock-in.
|
|
21
|
+
- **AI-assisted** — Framework detection, build optimization, and configuration are handled automatically.
|
|
22
|
+
|
|
23
|
+
## What you can deploy
|
|
24
|
+
|
|
25
|
+
Openship supports any stack that runs in a container:
|
|
26
|
+
|
|
27
|
+
- **Frontend frameworks** — Next.js, Nuxt, SvelteKit, Astro, Remix
|
|
28
|
+
- **Backend** — Node.js, Python, Go, Rust, Ruby, PHP
|
|
29
|
+
- **Databases** — Postgres, MySQL, Redis, MongoDB
|
|
30
|
+
- **Full-stack** — Multi-service apps with shared networking
|
|
31
|
+
|
|
32
|
+
## Getting started
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
curl -fsSL https://get.openship.io | sh
|
|
36
|
+
cd your-project
|
|
37
|
+
openship deploy
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Three commands. That's it.
|
|
41
|
+
|
|
42
|
+
## What's next
|
|
43
|
+
|
|
44
|
+
We're working on load balancers, cluster management, private networking, and a built-in CI/CD pipeline. Check the [roadmap](/docs) for details.
|
|
45
|
+
|
|
46
|
+
Star us on [GitHub](https://github.com/openshiporg/openship) and join the community.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Self-Hosting vs. Managed Platforms: The Real Cost Breakdown"
|
|
3
|
+
description: "We compared the actual cost of running a production Next.js app on Vercel, AWS, and a self-hosted Openship setup. The numbers might surprise you."
|
|
4
|
+
date: "2026-03-05"
|
|
5
|
+
category: "Guide"
|
|
6
|
+
author: "Openship Team"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Self-Hosting vs. Managed Platforms: The Real Cost Breakdown
|
|
10
|
+
|
|
11
|
+
"Just use Vercel" is good advice — until your bill arrives. We ran the same Next.js app across three setups and tracked every cost for 30 days.
|
|
12
|
+
|
|
13
|
+
## The test app
|
|
14
|
+
|
|
15
|
+
A production Next.js 15 app with:
|
|
16
|
+
- ~50 routes, ISR enabled
|
|
17
|
+
- Postgres database
|
|
18
|
+
- Redis for caching
|
|
19
|
+
- ~100K monthly visitors
|
|
20
|
+
- ~500GB bandwidth/month
|
|
21
|
+
|
|
22
|
+
## The results
|
|
23
|
+
|
|
24
|
+
| | Vercel Pro | AWS (ECS + RDS) | Openship (self-hosted) |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| Compute | $150/mo | $85/mo | $24/mo |
|
|
27
|
+
| Database | $50/mo (Neon) | $45/mo | Included |
|
|
28
|
+
| Bandwidth | $120/mo | $45/mo | Included |
|
|
29
|
+
| SSL/Domains | Included | $1/mo | Included |
|
|
30
|
+
| **Total** | **$320/mo** | **$176/mo** | **$24/mo** |
|
|
31
|
+
|
|
32
|
+
The self-hosted Openship setup runs on a single Hetzner VPS (CPX31: 4 vCPU, 8GB RAM, 160GB SSD).
|
|
33
|
+
|
|
34
|
+
## The trade-offs
|
|
35
|
+
|
|
36
|
+
Managed platforms give you zero-ops. You push code, it deploys. That's real value.
|
|
37
|
+
|
|
38
|
+
But Openship closes the gap significantly:
|
|
39
|
+
- **AI handles config** — Build detection, Dockerfile generation, and SSL are automatic.
|
|
40
|
+
- **One-command deploys** — `openship deploy` is just as fast.
|
|
41
|
+
- **Built-in monitoring** — Logs, metrics, and alerts out of the box.
|
|
42
|
+
|
|
43
|
+
The remaining trade-off is server maintenance — OS updates, disk space, uptime monitoring. For most teams, that's a few hours per month.
|
|
44
|
+
|
|
45
|
+
## When to self-host
|
|
46
|
+
|
|
47
|
+
Self-hosting makes sense when:
|
|
48
|
+
- Your monthly bill exceeds ~$100 on managed platforms
|
|
49
|
+
- You need data sovereignty or compliance
|
|
50
|
+
- You want predictable, flat-rate pricing
|
|
51
|
+
- You're deploying multiple apps (cost stays the same)
|
|
52
|
+
|
|
53
|
+
## Try it
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
curl -fsSL https://get.openship.io | sh
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Your server, your data, your bill.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: API Reference
|
|
3
|
+
description: Openship REST API for programmatic access to deployments, projects, and infrastructure.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# API Reference
|
|
7
|
+
|
|
8
|
+
The Openship API lets you manage everything programmatically. All endpoints require an API key.
|
|
9
|
+
|
|
10
|
+
## Authentication
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
curl -H "Authorization: Bearer os_key_..." https://api.openship.io/v1/projects
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Generate an API key from **Dashboard → Settings → API Keys**.
|
|
17
|
+
|
|
18
|
+
## Projects
|
|
19
|
+
|
|
20
|
+
### List projects
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
GET /v1/projects
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"projects": [
|
|
29
|
+
{
|
|
30
|
+
"id": "proj_abc123",
|
|
31
|
+
"name": "my-app",
|
|
32
|
+
"framework": "nextjs",
|
|
33
|
+
"status": "active",
|
|
34
|
+
"url": "https://my-app.openship.io"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Create project
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
POST /v1/projects
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"name": "my-app",
|
|
49
|
+
"repo": "https://github.com/you/my-app",
|
|
50
|
+
"branch": "main"
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Deployments
|
|
55
|
+
|
|
56
|
+
### Trigger deployment
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
POST /v1/projects/:id/deployments
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Get deployment status
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
GET /v1/deployments/:id
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"id": "dpl_xyz789",
|
|
71
|
+
"status": "live",
|
|
72
|
+
"url": "https://my-app.openship.io",
|
|
73
|
+
"created_at": "2026-03-08T12:00:00Z",
|
|
74
|
+
"build_time_ms": 14200
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Domains
|
|
79
|
+
|
|
80
|
+
### Add domain
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
POST /v1/projects/:id/domains
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"domain": "example.com"
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Rate limits
|
|
93
|
+
|
|
94
|
+
| Plan | Requests/min |
|
|
95
|
+
|------|-------------|
|
|
96
|
+
| Free | 60 |
|
|
97
|
+
| Pro | 300 |
|
|
98
|
+
| Self-hosted | Unlimited |
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: CLI Reference
|
|
3
|
+
description: Openship CLI commands for managing deployments from the terminal.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CLI Reference
|
|
7
|
+
|
|
8
|
+
The Openship CLI lets you manage projects, deployments, domains, and more from your terminal.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
curl -fsSL https://get.openship.io/cli | sh
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Or via npm:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx openship
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Commands
|
|
23
|
+
|
|
24
|
+
### `openship init`
|
|
25
|
+
|
|
26
|
+
Initialize a project in the current directory.
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
openship init
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Detects your framework, generates `openship.json`, and links to a project.
|
|
33
|
+
|
|
34
|
+
### `openship deploy`
|
|
35
|
+
|
|
36
|
+
Deploy the current project.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
openship deploy # Deploy from current directory
|
|
40
|
+
openship deploy --prod # Deploy to production
|
|
41
|
+
openship deploy --preview # Create a preview deployment
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### `openship projects`
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
openship projects list # List all projects
|
|
48
|
+
openship projects create --name my-app # Create a new project
|
|
49
|
+
openship projects delete my-app # Delete a project
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### `openship domains`
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
openship domains list --project my-app
|
|
56
|
+
openship domains add example.com --project my-app
|
|
57
|
+
openship domains remove example.com --project my-app
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### `openship env`
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
openship env list --project my-app
|
|
64
|
+
openship env set KEY=value --project my-app
|
|
65
|
+
openship env remove KEY --project my-app
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### `openship logs`
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
openship logs --project my-app # Stream build + runtime logs
|
|
72
|
+
openship logs --project my-app --build # Build logs only
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### `openship rollback`
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
openship rollback --project my-app # Rollback to previous
|
|
79
|
+
openship rollback --project my-app --deployment abc123 # Rollback to specific
|
|
80
|
+
```
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: First Deployment
|
|
3
|
+
description: Deploy an app with custom domains, environment variables, and Git integration.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# First Deployment
|
|
7
|
+
|
|
8
|
+
This guide walks through deploying a real project with all the essentials configured.
|
|
9
|
+
|
|
10
|
+
## Deploy from Git
|
|
11
|
+
|
|
12
|
+
Connect a GitHub, GitLab, or Bitbucket repository:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
openship projects create --repo https://github.com/you/your-app
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Openship automatically:
|
|
19
|
+
- Detects the framework and build command
|
|
20
|
+
- Generates an optimized Dockerfile (if needed)
|
|
21
|
+
- Builds and deploys on every push to `main`
|
|
22
|
+
|
|
23
|
+
## Custom domains
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
openship domains add yourapp.com --project your-app
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
SSL certificates are provisioned automatically via Let's Encrypt. Wildcard certificates are supported.
|
|
30
|
+
|
|
31
|
+
## Environment variables
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
openship env set DATABASE_URL="postgres://..." --project your-app
|
|
35
|
+
openship env set REDIS_URL="redis://..." --project your-app
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Variables are encrypted at rest and injected at build time and runtime.
|
|
39
|
+
|
|
40
|
+
## Preview deployments
|
|
41
|
+
|
|
42
|
+
Every pull request gets a unique preview URL:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
https://pr-42--your-app.preview.openship.io
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Preview deployments are destroyed automatically when the PR is merged or closed.
|
|
49
|
+
|
|
50
|
+
## Rollbacks
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
openship rollback --project your-app
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Instant rollback to any previous deployment. Zero downtime.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Introduction
|
|
3
|
+
description: Welcome to Openship — the open-source, self-hostable deployment platform.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Welcome to Openship
|
|
7
|
+
|
|
8
|
+
Openship is an open-source deployment platform that lets you deploy apps, databases, and full-stack infrastructure on your own servers.
|
|
9
|
+
|
|
10
|
+
## Why Openship?
|
|
11
|
+
|
|
12
|
+
- **Self-hosted** — Run on your own servers. Your data stays yours.
|
|
13
|
+
- **AI-assisted** — Intelligent build detection, config generation, and diagnostics.
|
|
14
|
+
- **Zero lock-in** — Export everything, migrate anytime. No proprietary formats.
|
|
15
|
+
- **Open source** — MIT licensed. Inspect, modify, contribute.
|
|
16
|
+
|
|
17
|
+
## How it works
|
|
18
|
+
|
|
19
|
+
1. **Connect** — Point Openship at your Git repo or push a Docker image.
|
|
20
|
+
2. **Build** — AI detects your framework and configures the build automatically.
|
|
21
|
+
3. **Deploy** — Your app goes live with SSL, domains, and monitoring out of the box.
|
|
22
|
+
|
|
23
|
+
## Next steps
|
|
24
|
+
|
|
25
|
+
- [Quickstart](/docs/quickstart) — Deploy your first app in under 2 minutes.
|
|
26
|
+
- [Installation](/docs/installation) — Set up Openship on your own server.
|
|
27
|
+
- [CLI Reference](/docs/cli) — Manage deployments from the terminal.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Installation
|
|
3
|
+
description: Install Openship on your own server or use the managed cloud.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Installation
|
|
7
|
+
|
|
8
|
+
Openship runs on any Linux server. You can self-host it or use Openship Cloud.
|
|
9
|
+
|
|
10
|
+
## Self-hosted
|
|
11
|
+
|
|
12
|
+
### System requirements
|
|
13
|
+
|
|
14
|
+
| Component | Minimum | Recommended |
|
|
15
|
+
|-----------|---------|-------------|
|
|
16
|
+
| CPU | 2 cores | 4+ cores |
|
|
17
|
+
| RAM | 2 GB | 4+ GB |
|
|
18
|
+
| Disk | 20 GB | 50+ GB SSD |
|
|
19
|
+
| OS | Ubuntu 22.04+ | Ubuntu 24.04 |
|
|
20
|
+
|
|
21
|
+
### One-line install
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
curl -fsSL https://get.openship.io | sh
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Docker Compose
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
version: "3.8"
|
|
31
|
+
services:
|
|
32
|
+
openship:
|
|
33
|
+
image: ghcr.io/openshiporg/openship:latest
|
|
34
|
+
ports:
|
|
35
|
+
- "3000:3000"
|
|
36
|
+
- "443:443"
|
|
37
|
+
- "80:80"
|
|
38
|
+
volumes:
|
|
39
|
+
- openship-data:/data
|
|
40
|
+
restart: unless-stopped
|
|
41
|
+
|
|
42
|
+
volumes:
|
|
43
|
+
openship-data:
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
docker compose up -d
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Verify
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
openship status
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
You should see `Openship daemon running` with the dashboard URL.
|
|
57
|
+
|
|
58
|
+
## Openship Cloud
|
|
59
|
+
|
|
60
|
+
Don't want to manage a server? [Sign up for Openship Cloud](https://app.openship.io) — same platform, fully managed.
|
|
61
|
+
|
|
62
|
+
## Next steps
|
|
63
|
+
|
|
64
|
+
- [Deploy your first app](/docs/first-deployment)
|
|
65
|
+
- [CLI reference](/docs/cli)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Quickstart
|
|
3
|
+
description: Deploy your first app with Openship in under 2 minutes.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Quickstart
|
|
7
|
+
|
|
8
|
+
Get from zero to a live deployment in three steps.
|
|
9
|
+
|
|
10
|
+
## Prerequisites
|
|
11
|
+
|
|
12
|
+
- A server running Linux (Ubuntu 22.04+ recommended)
|
|
13
|
+
- Docker installed
|
|
14
|
+
- A domain name (optional, but recommended)
|
|
15
|
+
|
|
16
|
+
## 1. Install Openship
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
curl -fsSL https://get.openship.io | sh
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
This installs the Openship CLI and daemon on your server.
|
|
23
|
+
|
|
24
|
+
## 2. Initialize a project
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
cd your-project
|
|
28
|
+
openship init
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Openship detects your framework (Next.js, Node, Python, Go, etc.) and generates a deploy config.
|
|
32
|
+
|
|
33
|
+
## 3. Deploy
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
openship deploy
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
That's it. Your app is live with automatic SSL and a preview URL.
|
|
40
|
+
|
|
41
|
+
## What's next?
|
|
42
|
+
|
|
43
|
+
- [Add a custom domain](/docs/first-deployment#custom-domains)
|
|
44
|
+
- [Set up environment variables](/docs/first-deployment#environment-variables)
|
|
45
|
+
- [Configure automatic deploys from Git](/docs/first-deployment#git-integration)
|