One controlled runtime
Target a single Linux VPS for the first release. Keep the operational model understandable before introducing distributed orchestration.
Openship is a Vercel-like deployment experience designed for developers who want the convenience of modern application delivery while keeping the runtime on a Linux VPS they control.
$ openship init ✓ project configuration ready $ openship deploy → QUEUED → BUILDING Nixpacks → BUILT → DEPLOYING Docker Compose → HEALTH_CHECKING ✓ ACTIVE logs: SSE stream connected tls: Caddy / Let's Encrypt rollback: previous known-good ready
The problem
Target a single Linux VPS for the first release. Keep the operational model understandable before introducing distributed orchestration.
Use a small CLI and a declarative openship.json contract so deployment becomes a repeatable engineering workflow rather than a dashboard ritual.
Model deployment as explicit states with retries, health checks, deployment locks, logs and rollback state instead of treating deployment as a single opaque command.
Product capabilities
Initialize, configure, deploy, inspect logs and manage deployment state without making the dashboard the primary interface.
Nixpacks is the preferred build path, with a Dockerfile fallback for applications that need explicit runtime control.
Caddy handles reverse proxying and Let's Encrypt certificate automation for application domains.
Keep the previous known-good deployment available so a failed health check can return the service to a working state.
Stream deployment progress over SSE and make the same evidence visible in the dashboard and operational tooling.
BullMQ and Redis separate build/deploy work from the control plane and make retries and queue state explicit.
Use a local/private registry model so built images remain under the operator's infrastructure boundary.
QUEUED → BUILDING → BUILT → DEPLOYING → HEALTH_CHECKING → ACTIVE, with rollback on failure.
Keep secrets handling and scheduled backup retention as first-class operational concerns rather than afterthoughts.
Architecture
Deployment lifecycle
Accept the deployment request, establish an idempotent job and acquire the deployment lock.
Resolve the build strategy, produce the application image and push it to the private registry.
Materialize the deployment through Docker Compose while preserving the previous known-good state.
Run health checks and expose live progress through structured logs and SSE.
If verification fails, roll back to the previous known-good deployment and record the resulting state.
Product direction
CLI, deployment engine, build processors, Docker Compose runtime, Caddy, basic dashboard and single-server workflow.
Multi-server management, RBAC, advanced logs, monitoring, managed backups, richer deployment history and team workflows.
Organization controls, SSO, audit capabilities, policy enforcement, support and larger infrastructure management workflows.
Portfolio showcase
This page intentionally exposes the product story and non-sensitive architecture while keeping the implementation private. Public repository links and one-click deployment can be added when the release boundary is ready.