From 5221a2f3b738f55d41ef87f6ccc2a27a2ede72de Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Mon, 6 Jul 2026 15:42:26 -0600 Subject: [PATCH] feat: add comparison page for Dokploy vs. Vercel - Introduced a new comparison page detailing the differences between Dokploy and Vercel, including features, pricing, and integration options. - Updated the competitors list to include Vercel. - Added a link to the new comparison page in the footer for improved navigation. --- apps/website/app/comparison/page.tsx | 6 + apps/website/app/dokploy-vs-vercel/page.tsx | 429 ++++++++++++++++++++ apps/website/components/Footer.tsx | 4 + 3 files changed, 439 insertions(+) create mode 100644 apps/website/app/dokploy-vs-vercel/page.tsx diff --git a/apps/website/app/comparison/page.tsx b/apps/website/app/comparison/page.tsx index 27a4854..1b23efe 100644 --- a/apps/website/app/comparison/page.tsx +++ b/apps/website/app/comparison/page.tsx @@ -44,6 +44,12 @@ const competitors = [ description: "Compare Dokploy's self-hosted infrastructure ownership to Render's fully managed, per-service PaaS.", }, + { + name: "Vercel", + href: "/dokploy-vs-vercel", + description: + "See how Dokploy's Docker-native, full-stack deployment compares to Vercel's serverless, frontend-first platform.", + }, ]; const whyDokploy = [ diff --git a/apps/website/app/dokploy-vs-vercel/page.tsx b/apps/website/app/dokploy-vs-vercel/page.tsx new file mode 100644 index 0000000..edc1793 --- /dev/null +++ b/apps/website/app/dokploy-vs-vercel/page.tsx @@ -0,0 +1,429 @@ +import { Container } from "@/components/Container"; +import { CallToAction } from "@/components/CallToAction"; +import { Testimonials } from "@/components/Testimonials"; +import { ComparisonStats } from "@/components/comparison-stats"; +import AnimatedGridPattern from "@/components/ui/animated-grid-pattern"; +import { + Check, + X, + Container as ContainerLucide, + Settings, + HardDrive, + Gauge, + Bot, +} from "lucide-react"; +import Image from "next/image"; +import Link from "next/link"; +import type { Metadata } from "next"; +import { Button } from "@/components/ui/button"; + +export const metadata: Metadata = { + title: "Dokploy vs. Vercel: Docker-Native vs. Serverless", + description: + "Compare Dokploy vs. Vercel: Docker support, runtime limits, persistent storage, pricing, and full-stack infrastructure. Decide which fits your team.", +}; + +const featureComparisonRows = [ + { feature: "Self-hostable on your own VPS or server", dokploy: true, vercel: false }, + { feature: "Run on any cloud provider via SSH", dokploy: true, vercel: false }, + { feature: "Deploy Docker images and containers", dokploy: true, vercel: false }, + { feature: "Docker Compose support", dokploy: true, vercel: false }, + { feature: "Docker Stack support", dokploy: true, vercel: false }, + { feature: "Persistent filesystem (Docker volumes)", dokploy: true, vercel: false }, + { feature: "Persistent disk shared across services", dokploy: true, vercel: false }, + { feature: "Named Docker volume backups to S3", dokploy: true, vercel: false }, + { feature: "One-click scheduled database backups to S3", dokploy: true, vercel: false }, + { feature: "Long-running processes and background workers", dokploy: true, vercel: false }, + { + feature: "WebSocket connections without function duration limits", + dokploy: true, + vercel: false, + }, + { feature: "Unlimited function duration", dokploy: true, vercel: false }, + { feature: "Custom build servers", dokploy: true, vercel: false }, + { feature: "Nixpacks build support", dokploy: true, vercel: false }, + { feature: "Heroku Buildpacks support", dokploy: true, vercel: false }, + { feature: "Preview deployments", dokploy: true, vercel: true }, + { feature: "Multi-server deployment", dokploy: true, vercel: false }, + { feature: "Docker Swarm clustering", dokploy: true, vercel: false }, + { feature: "One-command installation", dokploy: true, vercel: false }, + { feature: "Scheduled jobs (cron)", dokploy: true, vercel: true }, + { feature: "Built-in monitoring metrics (CPU, RAM, Disk)", dokploy: true, vercel: false }, + { feature: "Automated metric alerts built in", dokploy: true, vercel: true }, + { feature: "AI-assisted deployments", dokploy: true, vercel: true }, + { feature: "MCP server support", dokploy: true, vercel: true }, + { feature: "API and CLI automation", dokploy: true, vercel: true }, + { feature: "Fine-grained RBAC", dokploy: true, vercel: false }, + { feature: "SSO / SAML", dokploy: true, vercel: true }, + { feature: "Audit logs", dokploy: true, vercel: true }, + { feature: "Predictable per-server platform pricing", dokploy: true, vercel: false }, + { feature: "No per-seat billing", dokploy: true, vercel: false }, +]; + +const whyChooseItems = [ + { + icon: ContainerLucide, + title: "Deploy apps with Docker, Compose, and Stack", + description: + "Dokploy supports Docker, Docker Compose, and Docker Stack, so your containers run exactly as they do locally—no rewriting for a serverless model. Vercel does not support deploying Docker images or running Docker containers.", + }, + { + icon: Settings, + title: "Run services without runtime limits", + description: + "Dokploy runs apps as containers on servers you control, with no platform-imposed timeouts. Vercel Functions have duration, memory, and payload caps that rule out long-running processes, persistent connections, and media pipelines.", + }, + { + icon: HardDrive, + title: "Keep persistent data on your own servers", + description: + "Dokploy supports persistent Docker volumes with scheduled S3 backups, making it a stronger fit for stateful apps, SQLite-backed tools, and self-hosted services that need durable local storage. Vercel's filesystem is read-only outside a small scratch space.", + }, + { + icon: Gauge, + title: "Monitor and alert without extra tooling", + description: + "Get CPU, memory, and disk metrics out of the box, with automated alerts built in. Vercel offers observability for function invocations and edge requests, but not server-level infrastructure metrics.", + }, + { + icon: Bot, + title: "Deploy AI-built apps in governed environments", + description: + "Give your team a governed sandbox to ship AI-assisted apps, complete with RBAC, audit logs, SSO, and a path from AI-generated code to a live URL.", + }, +]; + +const pricingRows = [ + { label: "Pricing model", dokploy: "Per server", vercel: "Per seat + metered usage" }, + { + label: "Entry price", + dokploy: "Free (open source, self-hosted)", + vercel: "Free (Hobby, non-commercial only)", + }, + { + label: "Production tier", + dokploy: "$15/month (Startup, 3 servers)", + vercel: "$20/month per deploying seat", + }, + { label: "Apps per plan", dokploy: "Unlimited", vercel: "Unlimited on Pro" }, + { label: "Databases", dokploy: "Unlimited per server", vercel: "Not included – third-party add-ons" }, + { + label: "Bandwidth", + dokploy: "Included (your server's allowance)", + vercel: "1 TB included on Pro; metered above that", + }, + { label: "Infrastructure", dokploy: "Your own servers (any provider)", vercel: "Vercel-managed only" }, +]; + +const integrationRows = [ + { + category: "Git providers", + dokploy: "GitHub, GitLab, Bitbucket, Gitea, Git Generic", + vercel: "GitHub, GitLab, Bitbucket, Azure DevOps", + }, + { + category: "Build and deployment systems", + dokploy: + "Docker, Docker Compose, Nixpacks, Heroku Buildpacks, Paketo Buildpacks, Railpack", + vercel: "Vercel framework detection (35+ frameworks), Vercel CLI", + }, + { + category: "Notifications and communication", + dokploy: + "Slack, Telegram, Discord, Lark, Email (SMTP), Resend, Gotify, Ntfy, Pushover, Webhook", + vercel: "Slack, Email, Webhook", + }, +]; + +export default function DokployVsVercelPage() { + return ( +
+ {/* Hero Section */} +
+ + +
+

+ Dokploy vs. Vercel +

+

+ Learn why so many teams are choosing Dokploy as their application + deployment tool over Vercel. +

+ +
+
+

Dokploy

+

+ Dokploy is built for full-stack, Docker-native deployment on + infrastructure you own. Choose Vercel if your app is + primarily frontend or serverless and you want a managed + platform optimized for that model. +

+
+
+

Vercel

+

+ For frontend and serverless-first teams that want a managed + platform with a global edge network, zero-config framework + support, and instant preview deployments—without managing + infrastructure. +

+
+
+ +
+ + +
+
+
+
+ + {/* Dokploy vs Vercel at a glance */} +
+ +
+

+ Dokploy vs. Vercel at a glance +

+

+ Read our comprehensive Vercel vs. Dokploy features comparison + before you make your decision. +

+
+ +
+ + + + + + + + + + {featureComparisonRows.map((row) => ( + + + + + + ))} + +
FeatureDokployVercel
{row.feature} + {row.dokploy ? ( + + ) : ( + + )} + + {row.vercel ? ( + + ) : ( + + )} +
+
+
+
+ + {/* Why you should choose Dokploy */} +
+ +
+

+ Why you should choose Dokploy +

+
+ +
+ {whyChooseItems.map((item, index) => ( +
+
+
+ +
+

+ {item.title} +

+

{item.description}

+
+
+ {index === 0 ? ( +
+ Dokploy deployment panel showing build and deployment logs +
+ ) : index === 1 ? ( +
+ Dokploy deploy settings showing server and provider configuration +
+ ) : index === 2 ? ( +
+ Dokploy Create Backup modal for database and volume backups +
+ ) : index === 3 ? ( +
+ Dokploy monitoring dashboard showing CPU, memory, disk and I/O metrics +
+ ) : ( +
+ Dokploy projects dashboard showing AI app deployments +
+ )} +
+
+ ))} +
+
+
+ + {/* Pricing comparison */} +
+ +
+

+ Pricing comparison: per-server vs. per-seat and per-function +

+

+ Dokploy Cloud charges per server, not per seat or per function, so + your platform cost stays flat as your team and app count grow. + Vercel charges $20 per deploying team member per month, plus + metered usage across bandwidth, function invocations, active CPU + time, and edge requests. For backend-heavy or multi-developer + teams, costs can accrue quickly. +

+
+ +
+ + + + + + + + + {pricingRows.map((row) => ( + + + + + + ))} + +
+ + Dokploy Cloud + Vercel
{row.label} + {row.dokploy} + + {row.vercel} +
+
+
+
+ + {/* Dokploy integrates with the leading solutions */} +
+ +
+

+ Dokploy integrates with the leading solutions +

+
+ +
+ + + + + + + + + + {integrationRows.map((row) => ( + + + + + + ))} + +
CategoryDokployVercel
{row.category} + {row.dokploy} + + {row.vercel} +
+
+
+
+ + {/* Thousands have chosen Dokploy - Stats */} + + + {/* Testimonials */} + + + {/* Final CTA */} + +
+ ); +} diff --git a/apps/website/components/Footer.tsx b/apps/website/components/Footer.tsx index 4e67b9e..ba06343 100644 --- a/apps/website/components/Footer.tsx +++ b/apps/website/components/Footer.tsx @@ -73,6 +73,10 @@ const footerSections = [ href: "/dokploy-vs-render", label: "Dokploy vs. Render", }, + { + href: "/dokploy-vs-vercel", + label: "Dokploy vs. Vercel", + }, { href: "/blog", label: "Blog" }, { href: "https://docs.dokploy.com/docs/core",