Self-Hosting on Coolify vs Vercel: What I Actually Run in Production
I run seven production sites and use both Coolify and Vercel — for different reasons. Here's the honest breakdown: what each platform actually does better, what I run where, and how to decide which fits your setup.
The honest answer is that I run both, and I use each for different reasons. But if you're a solo developer managing multiple apps and you're still defaulting to Vercel for everything, you're probably leaving money on the table.
Here's how I think about the split, after running seven production sites across both platforms.
Vercel is the obvious choice when you're starting out. Zero config for Next.js, preview deployments on every PR, global CDN, and a DX that's genuinely hard to beat. I used it for everything in the early days.
The problem shows up when you start running multiple apps. Vercel's free tier is generous for one project, but the moment you need functions that run longer than the hobby limit, or you want to remove Vercel branding, or you're hitting bandwidth ceilings across several sites — the Pro plan at $20/month starts looking expensive for what you're actually getting as a solo developer.
The other issue: some things Vercel just doesn't support well. Persistent background jobs. Scheduled tasks that actually run reliably. Full Docker containers. Anything that doesn't fit neatly into the serverless model.
Coolify is an open-source, self-hosted platform that gives you a Vercel-like deployment experience on your own VPS. You point it at a Git repo, it detects the framework via Nixpacks (the same build system Heroku uses), and it handles the build and deploy pipeline. Push to a branch, Coolify deploys. It's not as polished as Vercel, but it's close enough that the friction is minimal after initial setup.
You run it on any VPS — Hetzner, DigitalOcean, Linode, whatever. The server costs are yours, and Coolify itself is free.
Being fair about this matters, because Coolify isn't a universal replacement.
Global edge network. Vercel serves from 40+ regions. A $6/month Hetzner VPS in Falkenstein is fast for European users and slower for everyone else. If you're targeting a global audience with high traffic, the CDN difference is real.
Preview deployments. Every PR gets its own URL. This is genuinely great for teams reviewing each other's work. Coolify has preview deployment support but it's not as seamless.
Zero-config Next.js. Vercel made Next.js — the integration is frictionless in a way no other platform fully matches. Coolify handles Next.js well, but edge cases (middleware config, some image optimization settings) occasionally need manual attention.
No server management. Vercel handles everything. On Coolify, you own the server. If it runs out of disk space or needs a kernel update, that's your problem.
Cost. Seven sites on a single $12/month Hetzner VPS. Vercel Pro for seven projects with non-trivial function usage would cost significantly more. The math compounds fast.
No cold starts. Coolify runs your app as a persistent Node.js process. There's no function invocation model, no cold start latency on the first request after idle time. For dashboard pages and auth-heavy flows, this is noticeably faster.
Scheduled tasks. This is the one that pushed me over the edge. Cron jobs in vercel.json only fire on Vercel's infrastructure. On Coolify, you set up Scheduled Tasks directly in the UI — just a curl command on a cron schedule, pointed at your own API route. Reliable, visible, and free.
Any workload. Docker containers, background workers, Redis, PostgreSQL locally — anything that runs in a container runs on Coolify. Vercel's model is serverless functions and static assets. If you need something outside that model, you're adding a separate service anyway.
Full control. Environment variables, resource limits, restart policies, health checks — everything is configurable and visible. With Vercel, a lot of the platform behavior is opaque by design.
All seven of my production sites — including this one — run on Coolify, hosted on a Hetzner VPS. The deployment workflow is simple: push to main for staging, merge main into production to deploy. Coolify watches the production branch and deploys automatically on push.
I keep vercel.json in the repo because Next.js reads it for redirect and header configuration — that still works fine on Coolify. The crons section of vercel.json is ignored, so any scheduled jobs go through Coolify's Scheduled Tasks UI as curl commands with my CRON_SECRET.
Supabase handles the database for all projects. That lives outside both platforms entirely.
If you move a Next.js app from Vercel to Coolify, almost everything works. The one thing that doesn't: anything that relied on Vercel-specific infrastructure. Cron jobs from vercel.json won't fire. Edge middleware runs as standard Node.js middleware instead (usually fine, occasionally not). Vercel Analytics needs to be replaced with a self-hosted or third-party alternative.
None of these are blockers, but they're worth auditing before you migrate so you're not debugging missing scheduled jobs in production.
Next.js caching in the App Router is powerful but confusing — especially after v15 flipped the defaults. Here's what the four caches actually do, what breaks silently, and the patterns I use in every production app.
I run more than 10 production apps as one developer. Here's how AI fits into my actual daily workflow: the tools, the patterns, what moved the needle, and what I stopped using.
AI SEO is real and it matters — but most advice about it is wrong. Here's what's actually moving the needle across my sites in 2026: the signals that work, the tactics that don't, and what I actually do.