A Vercel-style workflow — on infrastructure we own
live, self-hosted · preview deploy
Why not Vercel, Railway, or Render?
Self-hosted PaaS
Managed cloud
Cost
Flat VPS bill
Per-seat + bandwidth + invocations
Lock-in
Our Docker, our box
Proprietary platform
Data residency
We pick region & provider
Their regions
The building blocks
Every PaaS is the same five roles — Coolify and Dokploy just pick the tools.
Container runtime
Docker
Packages each app with its dependencies and runs it isolated from the others on one host.
Builder
Nixpacks
Turns plain source into a runnable image — no Dockerfile to write or maintain.
Reverse proxy
Traefik
One public entry point; routes each domain to its container and terminates TLS.
Control plane
Coolify / Dokploy
The orchestrator + UI that holds desired state and drives the other four.
Deploy trigger
GitHub App
Git is the interface — a push is the deploy command.
You're looking at it
🔒https://deck.dokploy.theoriekennis.com
A Next.js app in a GitHub repo, deployed on our self-hosted box — served from this URL with automatic Let's Encrypt SSL.
What's running on the box
UsersHTTPS · Let's Encrypt
↓
Hetzner VPS · Docker
Traefik — reverse proxyterminates SSL · routes by domain
↓
Next deckdemo.…
TanStack deckdemo2.…
PR previewpr-123.demo.…
PaaS control plane
coolify / dokploypostgresredis
How a push becomes a deploy
Three open pieces do the work — no Dockerfile, no CI to wire.
GitHub App
the trigger
Installed on the repo. Every push or PR fires a webhook; the PaaS clones with a short-lived token — no deploy keys or personal access tokens to manage.
Nixpacks
the build
Inspects the repo, detects pnpm from the lockfile, and builds a container image — zero-config, no Dockerfile to write or maintain. Default builder on both platforms.
Traefik
the front door
Shared reverse proxy used by both Coolify and Dokploy. Routes each domain to the right container and terminates TLS, auto-issuing & renewing Let's Encrypt certs.
git push → build → deploy → HTTPS — each step handed to one open-source piece.