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.
Files changed (531) hide show
  1. package/.env.example +19 -3
  2. package/CONTRIBUTING.md +69 -19
  3. package/LICENSE +661 -0
  4. package/README.md +304 -108
  5. package/apps/api/Dockerfile +6 -8
  6. package/apps/api/package.json +25 -21
  7. package/apps/api/src/app.ts +46 -3
  8. package/apps/api/src/config/env.ts +81 -7
  9. package/apps/api/src/lib/auth-mode.ts +42 -0
  10. package/apps/api/src/lib/auth.ts +105 -0
  11. package/apps/api/src/lib/cache.ts +128 -0
  12. package/apps/api/src/lib/cloud-auth-proxy.ts +310 -0
  13. package/apps/api/src/lib/cloud-client.ts +103 -0
  14. package/apps/api/src/lib/compose-parser.ts +138 -0
  15. package/apps/api/src/lib/controller-helpers.ts +90 -0
  16. package/apps/api/src/lib/email-templates.ts +94 -0
  17. package/apps/api/src/lib/encryption.ts +102 -0
  18. package/apps/api/src/lib/local-user.ts +65 -0
  19. package/apps/api/src/lib/mail.ts +48 -0
  20. package/apps/api/src/lib/notifications.ts +195 -0
  21. package/apps/api/src/lib/openship-cloud.ts +101 -0
  22. package/apps/api/src/lib/resources.ts +96 -0
  23. package/apps/api/src/lib/screenshots.ts +189 -0
  24. package/apps/api/src/lib/ssh-manager.ts +369 -0
  25. package/apps/api/src/lib/ssl-scheduler.ts +109 -0
  26. package/apps/api/src/lib/stack-detector.ts +708 -0
  27. package/apps/api/src/lib/system-debug.ts +10 -0
  28. package/apps/api/src/middleware/auth.ts +49 -13
  29. package/apps/api/src/middleware/error-handler.ts +23 -3
  30. package/apps/api/src/middleware/index.ts +2 -0
  31. package/apps/api/src/middleware/internal-auth.ts +40 -0
  32. package/apps/api/src/middleware/local-only.ts +20 -0
  33. package/apps/api/src/middleware/rate-limiter.ts +9 -0
  34. package/apps/api/src/modules/analytics/analytics.controller.ts +111 -0
  35. package/apps/api/src/modules/analytics/analytics.routes.ts +29 -0
  36. package/apps/api/src/modules/analytics/analytics.schema.ts +37 -0
  37. package/apps/api/src/modules/analytics/analytics.service.ts +264 -0
  38. package/apps/api/src/modules/auth/auth.routes.ts +233 -6
  39. package/apps/api/src/modules/billing/billing.routes.ts +8 -0
  40. package/apps/api/src/modules/cloud/cloud.controller.ts +225 -0
  41. package/apps/api/src/modules/cloud/cloud.routes.ts +40 -0
  42. package/apps/api/src/modules/deployments/build.service.ts +791 -0
  43. package/apps/api/src/modules/deployments/deployment-lifecycle.ts +138 -0
  44. package/apps/api/src/modules/deployments/deployment.controller.ts +324 -16
  45. package/apps/api/src/modules/deployments/deployment.routes.ts +33 -7
  46. package/apps/api/src/modules/deployments/deployment.schema.ts +37 -5
  47. package/apps/api/src/modules/deployments/deployment.service.ts +178 -11
  48. package/apps/api/src/modules/deployments/preflight.ts +280 -0
  49. package/apps/api/src/modules/deployments/prepare.service.ts +252 -0
  50. package/apps/api/src/modules/deployments/session-manager.ts +283 -0
  51. package/apps/api/src/modules/deployments/ssl.service.ts +73 -0
  52. package/apps/api/src/modules/domains/domain.controller.ts +59 -7
  53. package/apps/api/src/modules/domains/domain.routes.ts +20 -5
  54. package/apps/api/src/modules/domains/domain.schema.ts +35 -0
  55. package/apps/api/src/modules/domains/domain.service.ts +375 -9
  56. package/apps/api/src/modules/github/github.auth.ts +397 -0
  57. package/apps/api/src/modules/github/github.controller.ts +387 -0
  58. package/apps/api/src/modules/github/github.local-auth.ts +251 -0
  59. package/apps/api/src/modules/github/github.routes.ts +50 -0
  60. package/apps/api/src/modules/github/github.schema.ts +52 -0
  61. package/apps/api/src/modules/github/github.service.ts +592 -0
  62. package/apps/api/src/modules/github/github.types.ts +158 -0
  63. package/apps/api/src/modules/github/github.webhook.ts +186 -0
  64. package/apps/api/src/modules/github/index.ts +16 -0
  65. package/apps/api/src/modules/health/health.routes.ts +35 -0
  66. package/apps/api/src/modules/projects/project.controller.ts +481 -12
  67. package/apps/api/src/modules/projects/project.routes.ts +63 -6
  68. package/apps/api/src/modules/projects/project.schema.ts +104 -6
  69. package/apps/api/src/modules/projects/project.service.ts +502 -11
  70. package/apps/api/src/modules/settings/settings.controller.ts +55 -0
  71. package/apps/api/src/modules/settings/settings.routes.ts +25 -0
  72. package/apps/api/src/modules/settings/settings.service.ts +49 -0
  73. package/apps/api/src/modules/system/filesystem.controller.ts +66 -0
  74. package/apps/api/src/modules/system/index.ts +1 -0
  75. package/apps/api/src/modules/system/server-check.controller.ts +475 -0
  76. package/apps/api/src/modules/system/setup-session.ts +255 -0
  77. package/apps/api/src/modules/system/setup.controller.ts +128 -0
  78. package/apps/api/src/modules/system/system.routes.ts +42 -0
  79. package/apps/api/src/modules/webhooks/webhook.controller.ts +57 -15
  80. package/apps/api/src/modules/webhooks/webhook.routes.ts +11 -8
  81. package/apps/api/src/modules/webhooks/webhook.service.ts +46 -5
  82. package/apps/api/src/modules/webhooks/webhook.types.ts +35 -0
  83. package/apps/api/tsconfig.json +3 -1
  84. package/apps/cli/package.json +8 -10
  85. package/apps/cli/tsconfig.json +2 -1
  86. package/apps/dashboard/Dockerfile +4 -6
  87. package/apps/dashboard/components.json +20 -0
  88. package/apps/dashboard/next-env.d.ts +6 -0
  89. package/apps/dashboard/next.config.mjs +11 -1
  90. package/apps/dashboard/package.json +25 -13
  91. package/apps/dashboard/postcss.config.mjs +5 -0
  92. package/apps/dashboard/public/android-chrome-192x192.png +0 -0
  93. package/apps/dashboard/public/android-chrome-512x512.png +0 -0
  94. package/apps/dashboard/public/apple-touch-icon.png +0 -0
  95. package/apps/dashboard/public/favicon-16x16.png +0 -0
  96. package/apps/dashboard/public/favicon-32x32.png +0 -0
  97. package/apps/dashboard/public/favicon.ico +0 -0
  98. package/apps/dashboard/public/site.webmanifest +19 -0
  99. package/apps/dashboard/src/app/(auth)/forgot-password/page.tsx +114 -0
  100. package/apps/dashboard/src/app/(auth)/layout.tsx +18 -3
  101. package/apps/dashboard/src/app/(auth)/login/page.tsx +215 -6
  102. package/apps/dashboard/src/app/(auth)/providers.tsx +34 -0
  103. package/apps/dashboard/src/app/(auth)/register/page.tsx +171 -5
  104. package/apps/dashboard/src/app/(auth)/reset-password/page.tsx +172 -0
  105. package/apps/dashboard/src/app/(auth)/verify-email/page.tsx +190 -0
  106. package/apps/dashboard/src/app/(dashboard)/(deployment)/build/[id]/page.tsx +162 -0
  107. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/BuildSummary.tsx +166 -0
  108. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DnsConfiguration.tsx +119 -0
  109. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DomainSettings.tsx +291 -0
  110. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Header.tsx +71 -0
  111. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Sidebar.tsx +270 -0
  112. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/SkeletonLoader.tsx +87 -0
  113. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/page.tsx +169 -0
  114. package/apps/dashboard/src/app/(dashboard)/(deployment)/layout.tsx +7 -0
  115. package/apps/dashboard/src/app/(dashboard)/billing/page.tsx +1 -8
  116. package/apps/dashboard/src/app/(dashboard)/deployments/components/CommitDetailsModal.tsx +240 -0
  117. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentCard.tsx +121 -0
  118. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentHeader.tsx +89 -0
  119. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentMenu.tsx +182 -0
  120. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsContent.tsx +324 -0
  121. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsFilters.tsx +99 -0
  122. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsList.tsx +31 -0
  123. package/apps/dashboard/src/app/(dashboard)/deployments/components/EmptyState.tsx +101 -0
  124. package/apps/dashboard/src/app/(dashboard)/deployments/components/LoadingSkeleton.tsx +57 -0
  125. package/apps/dashboard/src/app/(dashboard)/deployments/components/ProjectFilter.tsx +109 -0
  126. package/apps/dashboard/src/app/(dashboard)/deployments/components/index.ts +9 -0
  127. package/apps/dashboard/src/app/(dashboard)/deployments/page.tsx +9 -3
  128. package/apps/dashboard/src/app/(dashboard)/deployments/types.ts +44 -0
  129. package/apps/dashboard/src/app/(dashboard)/deployments/utils.ts +176 -0
  130. package/apps/dashboard/src/app/(dashboard)/domains/page.tsx +1 -6
  131. package/apps/dashboard/src/app/(dashboard)/integrations/page.tsx +321 -0
  132. package/apps/dashboard/src/app/(dashboard)/layout.tsx +22 -32
  133. package/apps/dashboard/src/app/(dashboard)/library/components/ConnectPrompt.tsx +187 -0
  134. package/apps/dashboard/src/app/(dashboard)/library/components/LibrarySidebar.tsx +147 -0
  135. package/apps/dashboard/src/app/(dashboard)/library/components/LoadingSkeleton.tsx +39 -0
  136. package/apps/dashboard/src/app/(dashboard)/library/components/LocalProjects.tsx +548 -0
  137. package/apps/dashboard/src/app/(dashboard)/library/components/RepositoryList.tsx +292 -0
  138. package/apps/dashboard/src/app/(dashboard)/library/components/TemplateGrid.tsx +36 -0
  139. package/apps/dashboard/src/app/(dashboard)/library/components/UrlImport.tsx +74 -0
  140. package/apps/dashboard/src/app/(dashboard)/library/page.tsx +121 -0
  141. package/apps/dashboard/src/app/(dashboard)/library/types.ts +26 -0
  142. package/apps/dashboard/src/app/(dashboard)/monitoring/page.tsx +1 -6
  143. package/apps/dashboard/src/app/(dashboard)/page.tsx +485 -0
  144. package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/layout.tsx +22 -0
  145. package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/page.tsx +286 -0
  146. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/AdvancedSettings.tsx +235 -0
  147. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/BuildSettings.tsx +174 -0
  148. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeleteConfirmationDialog.tsx +45 -0
  149. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeletionModal.tsx +95 -0
  150. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/Deployments.tsx +11 -0
  151. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DomainSettings.tsx +523 -0
  152. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/EnvironmentSettings.tsx +246 -0
  153. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GeneralSettings.tsx +93 -0
  154. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitInfo.tsx +261 -0
  155. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitSettings.tsx +391 -0
  156. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/LogsSettings.tsx +133 -0
  157. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectNotFound.tsx +95 -0
  158. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectsBottomNavigation.tsx +62 -0
  159. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ResourceSettings.tsx +333 -0
  160. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingSection.tsx +66 -0
  161. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingsNavigation.tsx +27 -0
  162. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SleepModeSettings.tsx +134 -0
  163. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProductionUrl.tsx +25 -0
  164. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectIdentity.tsx +159 -0
  165. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectInfo.tsx +58 -0
  166. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/SkeletonLoader.tsx +170 -0
  167. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/StatsCards.tsx +33 -0
  168. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TopPaths.tsx +56 -0
  169. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TrafficChart.tsx +157 -0
  170. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/index.ts +14 -0
  171. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/LogsActions.tsx +52 -0
  172. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/ServerLogs.tsx +249 -0
  173. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/TerminalLogs.tsx +682 -0
  174. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/logs.css +127 -0
  175. package/apps/dashboard/src/app/(dashboard)/projects/components/DeploymentCard.tsx +73 -0
  176. package/apps/dashboard/src/app/(dashboard)/projects/components/ProjectCard.tsx +330 -0
  177. package/apps/dashboard/src/app/(dashboard)/projects/page.tsx +326 -4
  178. package/apps/dashboard/src/app/(dashboard)/providers.tsx +23 -0
  179. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/components-tab.tsx +329 -0
  180. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/overview-tab.tsx +229 -0
  181. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/terminal-tab.tsx +38 -0
  182. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/page.tsx +437 -0
  183. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/checking-state.tsx +15 -0
  184. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/choose-mode.tsx +54 -0
  185. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/component-row.tsx +65 -0
  186. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/error-banner.tsx +13 -0
  187. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/installing-panel.tsx +227 -0
  188. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/results-panel.tsx +90 -0
  189. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/setup-header.tsx +56 -0
  190. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/types.ts +13 -0
  191. package/apps/dashboard/src/app/(dashboard)/servers/new/page.tsx +666 -0
  192. package/apps/dashboard/src/app/(dashboard)/servers/page.tsx +283 -0
  193. package/apps/dashboard/src/app/(dashboard)/settings/_components/BuildPreferences.tsx +110 -0
  194. package/apps/dashboard/src/app/(dashboard)/settings/_components/CloudConnection.tsx +147 -0
  195. package/apps/dashboard/src/app/(dashboard)/settings/_components/InstanceInfo.tsx +54 -0
  196. package/apps/dashboard/src/app/(dashboard)/settings/_components/ServerConnection.tsx +407 -0
  197. package/apps/dashboard/src/app/(dashboard)/settings/_components/SettingsSection.tsx +32 -0
  198. package/apps/dashboard/src/app/(dashboard)/settings/page.tsx +62 -3
  199. package/apps/dashboard/src/app/auth/callback/close/page.tsx +23 -0
  200. package/apps/dashboard/src/app/auth/callback/install/page.tsx +40 -0
  201. package/apps/dashboard/src/app/authorize/page.tsx +137 -0
  202. package/apps/dashboard/src/app/globals.css +57 -3
  203. package/apps/dashboard/src/app/layout.tsx +43 -3
  204. package/apps/dashboard/src/components/auth-shell.tsx +66 -0
  205. package/apps/dashboard/src/components/deployments/types.ts +44 -0
  206. package/apps/dashboard/src/components/global-deployments/index.ts +17 -0
  207. package/apps/dashboard/src/components/i18n-provider.tsx +100 -0
  208. package/apps/dashboard/src/components/import-project/BuildSettings.tsx +376 -0
  209. package/apps/dashboard/src/components/import-project/BuildSkeleton.tsx +161 -0
  210. package/apps/dashboard/src/components/import-project/BuildTerminal.tsx +358 -0
  211. package/apps/dashboard/src/components/import-project/ComposeServices.tsx +455 -0
  212. package/apps/dashboard/src/components/import-project/DeploymentProcessing.tsx +510 -0
  213. package/apps/dashboard/src/components/import-project/DockerSettings.tsx +64 -0
  214. package/apps/dashboard/src/components/import-project/EnvironmentVariables.tsx +481 -0
  215. package/apps/dashboard/src/components/import-project/Frameworks.tsx +90 -0
  216. package/apps/dashboard/src/components/import-project/ProjectSettings.tsx +160 -0
  217. package/apps/dashboard/src/components/import-project/types.ts +82 -0
  218. package/apps/dashboard/src/components/integrations/GithubPermissionModal.tsx +173 -0
  219. package/apps/dashboard/src/components/language-switcher.tsx +36 -0
  220. package/apps/dashboard/src/components/logo.tsx +13 -0
  221. package/apps/dashboard/src/components/network-error-handler.tsx +27 -0
  222. package/apps/dashboard/src/components/oauth-buttons.tsx +81 -0
  223. package/apps/dashboard/src/components/overview/ActivityChart.tsx +247 -0
  224. package/apps/dashboard/src/components/overview/ApiRequestsCard.tsx +111 -0
  225. package/apps/dashboard/src/components/overview/CreditsCard.tsx +137 -0
  226. package/apps/dashboard/src/components/overview/DeploymentsChart.tsx +195 -0
  227. package/apps/dashboard/src/components/overview/EmptyState.tsx +126 -0
  228. package/apps/dashboard/src/components/overview/LoadingSkeleton.tsx +92 -0
  229. package/apps/dashboard/src/components/overview/OverviewHeader.tsx +74 -0
  230. package/apps/dashboard/src/components/overview/OverviewHeroChart.tsx +344 -0
  231. package/apps/dashboard/src/components/overview/ProjectsCard.tsx +134 -0
  232. package/apps/dashboard/src/components/overview/QuickLinks.tsx +119 -0
  233. package/apps/dashboard/src/components/overview/SandboxesCard.tsx +150 -0
  234. package/apps/dashboard/src/components/overview/StatsGrid.tsx +166 -0
  235. package/apps/dashboard/src/components/overview/TokenUsageChart.tsx +206 -0
  236. package/apps/dashboard/src/components/overview/UsageStats.tsx +79 -0
  237. package/apps/dashboard/src/components/overview/index.ts +30 -0
  238. package/apps/dashboard/src/components/overview/types.ts +116 -0
  239. package/apps/dashboard/src/components/page-header.tsx +25 -0
  240. package/apps/dashboard/src/components/project-settings/ServerSideSwitch.jsx +60 -0
  241. package/apps/dashboard/src/components/shared/AlertBox.tsx +39 -0
  242. package/apps/dashboard/src/components/shared/CTASection.tsx +45 -0
  243. package/apps/dashboard/src/components/shared/ErrorState.tsx +176 -0
  244. package/apps/dashboard/src/components/shared/FeatureCard.tsx +20 -0
  245. package/apps/dashboard/src/components/shared/MDXComponents.tsx +24 -0
  246. package/apps/dashboard/src/components/shared/MachineSettingsModal.tsx +286 -0
  247. package/apps/dashboard/src/components/shared/Modal.tsx +39 -0
  248. package/apps/dashboard/src/components/shared/OTPInput.tsx +122 -0
  249. package/apps/dashboard/src/components/shared/PageHero.tsx +21 -0
  250. package/apps/dashboard/src/components/shared/PlatformFeatureCard.tsx +27 -0
  251. package/apps/dashboard/src/components/shared/StatCard.tsx +14 -0
  252. package/apps/dashboard/src/components/shared/ValueCard.tsx +20 -0
  253. package/apps/dashboard/src/components/shared/index.ts +8 -0
  254. package/apps/dashboard/src/components/sidebar.tsx +282 -0
  255. package/apps/dashboard/src/components/theme-provider.tsx +96 -0
  256. package/apps/dashboard/src/components/toast.tsx +106 -0
  257. package/apps/dashboard/src/components/ui/CustomCursor.tsx +107 -0
  258. package/apps/dashboard/src/components/ui/CustomSelect.tsx +126 -0
  259. package/apps/dashboard/src/components/ui/DropdownMenu.tsx +174 -0
  260. package/apps/dashboard/src/components/ui/FileIcon.jsx +59 -0
  261. package/apps/dashboard/src/components/ui/IconPickerModal.tsx +273 -0
  262. package/apps/dashboard/src/components/ui/InfoBanner.jsx +39 -0
  263. package/apps/dashboard/src/components/ui/Logo.tsx +14 -0
  264. package/apps/dashboard/src/components/ui/Modal.tsx +117 -0
  265. package/apps/dashboard/src/components/ui/PageContainer.tsx +12 -0
  266. package/apps/dashboard/src/components/ui/SectionContainer.jsx +7 -0
  267. package/apps/dashboard/src/components/ui/SlidingToggle.tsx +128 -0
  268. package/apps/dashboard/src/components/ui/Toast.tsx +29 -0
  269. package/apps/dashboard/src/components/ui/button.tsx +58 -0
  270. package/apps/dashboard/src/components/ui/card.tsx +60 -0
  271. package/apps/dashboard/src/components/ui/input.tsx +20 -0
  272. package/apps/dashboard/src/components/ui/label.tsx +19 -0
  273. package/apps/dashboard/src/components/ui/select.tsx +10 -0
  274. package/apps/dashboard/src/components/ui/textarea.tsx +9 -0
  275. package/apps/dashboard/src/constants/lang-colors.ts +25 -0
  276. package/apps/dashboard/src/constants/mock.ts +38 -0
  277. package/apps/dashboard/src/context/AuthContext.tsx +91 -0
  278. package/apps/dashboard/src/context/CloudContext.tsx +275 -0
  279. package/apps/dashboard/src/context/DeploymentContext.tsx +71 -0
  280. package/apps/dashboard/src/context/GitHubContext.tsx +288 -0
  281. package/apps/dashboard/src/context/ModalContext.tsx +300 -0
  282. package/apps/dashboard/src/context/NetworkContext.tsx +32 -0
  283. package/apps/dashboard/src/context/ProjectSettingsContext.tsx +727 -0
  284. package/apps/dashboard/src/context/ToastContext.tsx +129 -0
  285. package/apps/dashboard/src/context/deployment/index.ts +3 -0
  286. package/apps/dashboard/src/context/deployment/types.ts +183 -0
  287. package/apps/dashboard/src/context/deployment/useDeploymentBuild.ts +547 -0
  288. package/apps/dashboard/src/context/deployment/useDeploymentConfig.ts +176 -0
  289. package/apps/dashboard/src/hooks/useBuildConnection.ts +334 -0
  290. package/apps/dashboard/src/hooks/useMonitorStream.ts +146 -0
  291. package/apps/dashboard/src/hooks/useProjectData.ts +110 -0
  292. package/apps/dashboard/src/hooks/useSSEConnection.ts +465 -0
  293. package/apps/dashboard/src/hooks/useSSEStream.ts +309 -0
  294. package/apps/dashboard/src/hooks/useSessions.ts +104 -0
  295. package/apps/dashboard/src/hooks/useSetupStream.ts +223 -0
  296. package/apps/dashboard/src/i18n/dictionaries/ar.json +218 -0
  297. package/apps/dashboard/src/i18n/dictionaries/en.json +218 -0
  298. package/apps/dashboard/src/i18n/index.ts +16 -0
  299. package/apps/dashboard/src/lib/api/ai.ts +22 -0
  300. package/apps/dashboard/src/lib/api/auth.ts +13 -0
  301. package/apps/dashboard/src/lib/api/client.ts +199 -0
  302. package/apps/dashboard/src/lib/api/cloud.ts +15 -0
  303. package/apps/dashboard/src/lib/api/deploy.ts +58 -0
  304. package/apps/dashboard/src/lib/api/domains.ts +13 -0
  305. package/apps/dashboard/src/lib/api/endpoints.ts +129 -0
  306. package/apps/dashboard/src/lib/api/github.ts +31 -0
  307. package/apps/dashboard/src/lib/api/icons.ts +12 -0
  308. package/apps/dashboard/src/lib/api/index.ts +41 -0
  309. package/apps/dashboard/src/lib/api/projects.ts +153 -0
  310. package/apps/dashboard/src/lib/api/sandbox.ts +14 -0
  311. package/apps/dashboard/src/lib/api/settings.ts +21 -0
  312. package/apps/dashboard/src/lib/api/system.ts +159 -0
  313. package/apps/dashboard/src/lib/auth-client.ts +54 -0
  314. package/apps/dashboard/src/lib/country.ts +25 -0
  315. package/apps/dashboard/src/lib/server/api.ts +140 -0
  316. package/apps/dashboard/src/lib/server/session.ts +103 -0
  317. package/apps/dashboard/src/lib/sseClient.ts +241 -0
  318. package/apps/dashboard/src/lib/sseMessageProcessors.ts +323 -0
  319. package/apps/dashboard/src/lib/utils.ts +6 -0
  320. package/apps/dashboard/src/proxy.ts +46 -0
  321. package/apps/dashboard/src/styles/Toast.module.css +92 -0
  322. package/apps/dashboard/src/styles/fonts.css +93 -0
  323. package/apps/dashboard/src/styles/theme.css +336 -0
  324. package/apps/dashboard/src/types/research.ts +42 -0
  325. package/apps/dashboard/src/utils/SSEParser.js +150 -0
  326. package/apps/dashboard/src/utils/authWindow.ts +143 -0
  327. package/apps/dashboard/src/utils/codeTheme.ts +127 -0
  328. package/apps/dashboard/src/utils/colors.json +2810 -0
  329. package/apps/dashboard/src/utils/date.ts +121 -0
  330. package/apps/dashboard/src/utils/deployment.ts +128 -0
  331. package/apps/dashboard/src/utils/deploymentPhaseDetector.ts +232 -0
  332. package/apps/dashboard/src/utils/extToLang.js +103 -0
  333. package/apps/dashboard/src/utils/github.ts +62 -0
  334. package/apps/dashboard/src/utils/icons.js +46 -0
  335. package/apps/dashboard/src/utils/repoSlug.ts +110 -0
  336. package/apps/dashboard/src/utils/research-api.ts +163 -0
  337. package/apps/dashboard/src/utils/suggestions.ts +84 -0
  338. package/apps/dashboard/src/utils/theme.js +1 -0
  339. package/apps/dashboard/src/utils/ui-helpers.tsx +30 -0
  340. package/apps/dashboard/src/utils/upload.js +12 -0
  341. package/apps/dashboard/tsconfig.json +27 -5
  342. package/apps/desktop/forge.config.json +36 -0
  343. package/apps/desktop/package.json +26 -0
  344. package/apps/desktop/scripts/dev.mjs +58 -0
  345. package/apps/desktop/src/main/index.ts +675 -0
  346. package/apps/desktop/src/main/types/desktop.d.ts +33 -0
  347. package/apps/desktop/src/preload/index.ts +88 -0
  348. package/apps/desktop/src/renderer/index.html +462 -0
  349. package/apps/desktop/src/renderer/onboarding.js +511 -0
  350. package/apps/desktop/src/renderer/styles.css +1139 -0
  351. package/apps/desktop/tsconfig.json +17 -0
  352. package/apps/web/.source/browser.ts +13 -0
  353. package/apps/web/.source/dynamic.ts +8 -0
  354. package/apps/web/.source/server.ts +22 -0
  355. package/apps/web/.source/source.config.mjs +20 -0
  356. package/apps/web/Dockerfile +4 -6
  357. package/apps/web/content/blog/how-ai-builds-work.mdx +55 -0
  358. package/apps/web/content/blog/introducing-openship.mdx +46 -0
  359. package/apps/web/content/blog/self-hosting-cost-breakdown.mdx +59 -0
  360. package/apps/web/content/docs/_meta.json +14 -0
  361. package/apps/web/content/docs/api.mdx +98 -0
  362. package/apps/web/content/docs/cli.mdx +80 -0
  363. package/apps/web/content/docs/first-deployment.mdx +56 -0
  364. package/apps/web/content/docs/index.mdx +27 -0
  365. package/apps/web/content/docs/installation.mdx +65 -0
  366. package/apps/web/content/docs/quickstart.mdx +45 -0
  367. package/apps/web/next-env.d.ts +6 -0
  368. package/apps/web/next.config.mjs +16 -2
  369. package/apps/web/package.json +19 -12
  370. package/apps/web/postcss.config.mjs +5 -0
  371. package/apps/web/public/android-chrome-192x192.png +0 -0
  372. package/apps/web/public/android-chrome-512x512.png +0 -0
  373. package/apps/web/public/apple-touch-icon.png +0 -0
  374. package/apps/web/public/favicon-16x16.png +0 -0
  375. package/apps/web/public/favicon-32x32.png +0 -0
  376. package/apps/web/public/favicon.ico +0 -0
  377. package/apps/web/public/site.webmanifest +1 -0
  378. package/apps/web/source.config.ts +17 -0
  379. package/apps/web/src/app/(marketing)/layout.tsx +7 -22
  380. package/apps/web/src/app/blog/[...slug]/page.tsx +247 -0
  381. package/apps/web/src/app/blog/blog.css +575 -0
  382. package/apps/web/src/app/blog/layout.tsx +50 -0
  383. package/apps/web/src/app/blog/page.tsx +235 -0
  384. package/apps/web/src/app/docs/[[...slug]]/page.tsx +67 -0
  385. package/apps/web/src/app/docs/layout.tsx +62 -0
  386. package/apps/web/src/app/docs/toc-theme.css +71 -0
  387. package/apps/web/src/app/download/page.tsx +396 -0
  388. package/apps/web/src/app/globals.css +20 -3
  389. package/apps/web/src/app/layout.tsx +57 -3
  390. package/apps/web/src/app/page.tsx +47 -6
  391. package/apps/web/src/app/robots.ts +15 -0
  392. package/apps/web/src/app/sitemap.ts +35 -0
  393. package/apps/web/src/components/blog/share-sidebar.tsx +81 -0
  394. package/apps/web/src/components/blog/writer-sidebar.tsx +81 -0
  395. package/apps/web/src/components/landing/ai-native.tsx +169 -0
  396. package/apps/web/src/components/landing/backups.tsx +139 -0
  397. package/apps/web/src/components/landing/cdn.tsx +109 -0
  398. package/apps/web/src/components/landing/coming-soon.tsx +180 -0
  399. package/apps/web/src/components/landing/dark-section.tsx +166 -0
  400. package/apps/web/src/components/landing/dashboard.tsx +407 -0
  401. package/apps/web/src/components/landing/developer-experience.tsx +224 -0
  402. package/apps/web/src/components/landing/dns-domains.tsx +146 -0
  403. package/apps/web/src/components/landing/download-button.tsx +151 -0
  404. package/apps/web/src/components/landing/features/ai-visual.tsx +48 -0
  405. package/apps/web/src/components/landing/features/cloud-visual.tsx +44 -0
  406. package/apps/web/src/components/landing/features/git-visual.tsx +61 -0
  407. package/apps/web/src/components/landing/features/index.tsx +642 -0
  408. package/apps/web/src/components/landing/features/infra-visual.tsx +69 -0
  409. package/apps/web/src/components/landing/features/rollback-visual.tsx +42 -0
  410. package/apps/web/src/components/landing/features/ssl-visual.tsx +41 -0
  411. package/apps/web/src/components/landing/features/stacks-visual.tsx +54 -0
  412. package/apps/web/src/components/landing/final-cta.tsx +116 -0
  413. package/apps/web/src/components/landing/footer.tsx +145 -0
  414. package/apps/web/src/components/landing/hero.tsx +110 -0
  415. package/apps/web/src/components/landing/how-it-works.tsx +210 -0
  416. package/apps/web/src/components/landing/index.ts +21 -0
  417. package/apps/web/src/components/landing/mail-server.tsx +122 -0
  418. package/apps/web/src/components/landing/navbar.tsx +199 -0
  419. package/apps/web/src/components/landing/no-lockin.tsx +185 -0
  420. package/apps/web/src/components/landing/open-source-cta.tsx +151 -0
  421. package/apps/web/src/components/landing/portability.tsx +190 -0
  422. package/apps/web/src/components/landing/pricing.tsx +263 -0
  423. package/apps/web/src/components/landing/scaling.tsx +209 -0
  424. package/apps/web/src/components/landing/why-openship.tsx +291 -0
  425. package/apps/web/src/hooks/use-gsap-scroll.ts +158 -0
  426. package/apps/web/src/hooks/use-platform.ts +86 -0
  427. package/apps/web/src/lib/source.ts +12 -0
  428. package/apps/web/src/styles/fonts.css +84 -0
  429. package/apps/web/src/styles/landing.css +951 -0
  430. package/apps/web/src/styles/theme.css +227 -0
  431. package/apps/web/tsconfig.json +8 -3
  432. package/bun.lock +3260 -0
  433. package/docker-compose.yml +3 -0
  434. package/docs/screenshots/.gitkeep +0 -0
  435. package/docs/screenshots/screen.png +0 -0
  436. package/openship.code-workspace +7 -0
  437. package/package.json +23 -9
  438. package/packages/adapters/docs/ARCHITECTURE.md +160 -0
  439. package/packages/adapters/docs/BUILD-PIPELINE.md +171 -0
  440. package/packages/adapters/docs/CLOUD.md +239 -0
  441. package/packages/adapters/docs/EXECUTOR.md +174 -0
  442. package/packages/adapters/docs/LOG-STREAMING.md +175 -0
  443. package/packages/adapters/docs/SYSTEM.md +191 -0
  444. package/packages/adapters/package.json +14 -9
  445. package/packages/adapters/src/index.ts +144 -4
  446. package/packages/adapters/src/infra/cloud.ts +42 -0
  447. package/packages/adapters/src/infra/index.ts +9 -0
  448. package/packages/adapters/src/infra/noop.ts +27 -0
  449. package/packages/adapters/src/infra/traefik.ts +297 -0
  450. package/packages/adapters/src/infra/types.ts +36 -0
  451. package/packages/adapters/src/platform.ts +255 -0
  452. package/packages/adapters/src/runtime/bare.ts +567 -0
  453. package/packages/adapters/src/runtime/build-pipeline.ts +237 -0
  454. package/packages/adapters/src/runtime/cloud.ts +791 -0
  455. package/packages/adapters/src/runtime/deploy-pipeline.ts +146 -0
  456. package/packages/adapters/src/runtime/docker.ts +443 -0
  457. package/packages/adapters/src/runtime/index.ts +69 -0
  458. package/packages/adapters/src/runtime/local-build.ts +112 -0
  459. package/packages/adapters/src/runtime/transfer.ts +82 -0
  460. package/packages/adapters/src/runtime/types.ts +138 -0
  461. package/packages/adapters/src/system/catalog.ts +188 -0
  462. package/packages/adapters/src/system/checks.ts +228 -0
  463. package/packages/adapters/src/system/components.ts +45 -0
  464. package/packages/adapters/src/system/debug.ts +18 -0
  465. package/packages/adapters/src/system/environment.ts +168 -0
  466. package/packages/adapters/src/system/errors.ts +34 -0
  467. package/packages/adapters/src/system/executor.ts +600 -0
  468. package/packages/adapters/src/system/index.ts +58 -0
  469. package/packages/adapters/src/system/installer.ts +310 -0
  470. package/packages/adapters/src/system/setup.ts +442 -0
  471. package/packages/adapters/src/system/state.ts +96 -0
  472. package/packages/adapters/src/system/types.ts +116 -0
  473. package/packages/adapters/src/toolchain/catalog.ts +439 -0
  474. package/packages/adapters/src/toolchain/checks.ts +181 -0
  475. package/packages/adapters/src/toolchain/index.ts +38 -0
  476. package/packages/adapters/src/toolchain/installer.ts +189 -0
  477. package/packages/adapters/src/toolchain/types.ts +84 -0
  478. package/packages/adapters/src/types.ts +277 -0
  479. package/packages/adapters/tsconfig.json +3 -1
  480. package/packages/core/package.json +9 -9
  481. package/packages/core/src/constants.ts +44 -1
  482. package/packages/core/src/index.ts +2 -0
  483. package/packages/core/src/stacks.ts +778 -0
  484. package/packages/core/src/system.ts +111 -0
  485. package/packages/core/src/types.ts +22 -1
  486. package/packages/core/src/utils.ts +8 -0
  487. package/packages/core/tsconfig.json +3 -1
  488. package/packages/db/drizzle/0000_init.sql +231 -0
  489. package/packages/db/drizzle/0001_add_server_name.sql +1 -0
  490. package/packages/db/drizzle/meta/_journal.json +20 -0
  491. package/packages/db/drizzle.config.ts +10 -0
  492. package/packages/db/package.json +26 -14
  493. package/packages/db/src/client.ts +119 -0
  494. package/packages/db/src/index.ts +57 -8
  495. package/packages/db/src/repos/account.repo.ts +92 -0
  496. package/packages/db/src/repos/deployment.repo.ts +168 -0
  497. package/packages/db/src/repos/domain.repo.ts +102 -0
  498. package/packages/db/src/repos/git-installation.repo.ts +95 -0
  499. package/packages/db/src/repos/index.ts +43 -0
  500. package/packages/db/src/repos/instance-settings.repo.ts +43 -0
  501. package/packages/db/src/repos/project.repo.ts +159 -0
  502. package/packages/db/src/repos/session.repo.ts +82 -0
  503. package/packages/db/src/repos/settings.repo.ts +51 -0
  504. package/packages/db/src/repos/user.repo.ts +94 -0
  505. package/packages/db/src/schema/auth.ts +56 -0
  506. package/packages/db/src/schema/deployment.ts +87 -0
  507. package/packages/db/src/schema/domain.ts +46 -0
  508. package/packages/db/src/schema/github.ts +24 -0
  509. package/packages/db/src/schema/index.ts +6 -0
  510. package/packages/db/src/schema/project.ts +117 -0
  511. package/packages/db/src/schema/settings.ts +103 -0
  512. package/packages/db/tsconfig.json +3 -1
  513. package/packages/ui/package.json +17 -17
  514. package/packages/ui/src/components/status-dot.tsx +1 -1
  515. package/packages/ui/tsconfig.json +7 -2
  516. package/pnpm-workspace.yaml +0 -1
  517. package/{tooling/tsconfig/base.json → tsconfig.base.json} +0 -1
  518. package/turbo.json +4 -0
  519. package/apps/api/src/modules/auth/auth.controller.ts +0 -26
  520. package/apps/api/src/modules/auth/auth.schema.ts +0 -12
  521. package/apps/api/src/modules/auth/auth.service.ts +0 -23
  522. package/apps/dashboard/src/app/page.tsx +0 -6
  523. package/apps/web/src/app/(marketing)/docs/page.tsx +0 -10
  524. package/packages/adapters/src/base-adapter.ts +0 -49
  525. package/packages/adapters/src/docker-adapter.ts +0 -43
  526. package/packages/adapters/src/oblien-adapter.ts +0 -46
  527. package/packages/adapters/src/registry.ts +0 -22
  528. package/packages/db/prisma/schema.prisma +0 -160
  529. package/tooling/tsconfig/nextjs.json +0 -10
  530. package/tooling/tsconfig/node.json +0 -10
  531. 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
+ };
@@ -1,15 +1,13 @@
1
1
  # ─── Build stage ────────────────────────────────────────
2
- FROM node:20-alpine AS builder
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 pnpm-workspace.yaml pnpm-lock.yaml* package.json ./
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 pnpm install --frozen-lockfile
12
- RUN pnpm run build --filter=openship-web...
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,14 @@
1
+ {
2
+ "title": "Documentation",
3
+ "root": true,
4
+ "pages": [
5
+ "index",
6
+ "quickstart",
7
+ "---Getting Started---",
8
+ "installation",
9
+ "first-deployment",
10
+ "---Reference---",
11
+ "cli",
12
+ "api"
13
+ ]
14
+ }
@@ -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)
@@ -0,0 +1,6 @@
1
+ /// <reference types="next" />
2
+ /// <reference types="next/image-types/global" />
3
+ import "./.next/dev/types/routes.d.ts";
4
+
5
+ // NOTE: This file should not be edited
6
+ // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.