Przejdź do treści

Vercel alternatives: why we run Vercel and Cloudflare

Dla CTO i programistówDecyzje CTO

Filip PapranecFounder, Digitaliko

Vercel alternatives: we run both. Illustration: a preview deployment window for a Next.js site next to an alchemy.run.ts window that declares a Worker, a D1 database and a KV namespace.Vercel alternatives: we run both. Illustration: a preview deployment window for a Next.js site next to an alchemy.run.ts window that declares a Worker, a D1 database and a KV namespace.

The best Vercel alternative depends on the app, so we run both. Next.js sites, including this one, stay on Vercel. New apps run on Cloudflare Workers with a D1 database, declared in one TypeScript file with Alchemy.

The short answer: Vercel wins on Next.js and preview deployments with zero config. Cloudflare wins when the app, its database, cache and storage should live in one account, declared as code and billed per request. Below is how we decide, what the list prices say, our real config, and one problem no listicle mentions: Vercel blocked deploys from commits written by our AI agent.

Vercel or Cloudflare: which app goes where?

We do not pick a host per company. We pick it per app, by what the app needs:

The app needsWhere it runs at our placeWhy
A Next.js marketing site with previewsVercelNext.js works there without config, every branch gets a preview URL
An older Next.js app with Postgres and PrismaVercelIt runs and nobody pays for a move that changes nothing for users
A new app with a database, cache and file storageCloudflare Workers, D1, KV, R2One account, one TypeScript file declares all of it
A whole app on one server you controlA plain VPSFull control, and the bill does not grow per request

The last row is not theory. We moved a client's online marketplace from a managed cloud to a plain VPS. The right host is the one that fits the app today, not the one the last project used.

What do Vercel and Cloudflare cost on paper?

List prices, retrieved on 2026-10-24. They change, so check the pages before you decide:

  • Vercel (pricing): Hobby is $0, Pro is $20 a month with $20 of included usage credit, then pay as you go. The page lists $20 a month per developer seat on Pro.
  • Cloudflare Workers (pricing): the Free plan has 100,000 requests a day. Workers Paid has a minimum of $5 a month per account, with 10 million requests and 30 million CPU milliseconds included.
  • Cloudflare D1 (limits): 500 MB per database on Free, 10 GB on Workers Paid. Free accounts get 5 GB of storage in total.

The trap is not the price of Pro. It is the Hobby plan on a client project:

Hobby teams are restricted to non-commercial personal use only. All commercial usage of the platform requires either a Pro or Enterprise plan.

Vercel
Fair Use Guidelines (retrieved 2026-10-24)

Vercel counts a paid consultant writing the code as commercial use. So a freelancer's free account hosting a client app is a terms problem, not a saving.

We do not publish what we pay. Our bills say nothing about yours: traffic, seats and services differ for every app.

How do we deploy to Cloudflare with Alchemy?

Alchemy describes itself as "a single, type-safe TypeScript program for your cloud". In practice it is one file next to the app. This is the shape of our alchemy.run.ts, shortened and with generic names:

import alchemy from "alchemy";
import { D1Database, KVNamespace, TanStackStart } from "alchemy/cloudflare";

const app = await alchemy("my-app", {
  stage: process.env.ALCHEMY_STAGE || "production",
});

const db = await D1Database("database", {
  migrationsDir: "../../packages/db/src/migrations",
});

const cache = await KVNamespace("cache", { title: "my-app-cache" });

const web = await TanStackStart("web", {
  cwd: "../../apps/web",
  bindings: {
    DB: db,
    CACHE: cache,
    BETTER_AUTH_SECRET: process.env.BETTER_AUTH_SECRET ?? "",
    BETTER_AUTH_URL: process.env.BETTER_AUTH_URL ?? "",
  },
});

await app.finalize();

The database, the cache and the app are declared in the same language as the app itself. No YAML, no clicking in a dashboard. A deploy goes like this:

  1. Change the schema

    The Drizzle schema is TypeScript. drizzle-kit generate writes a SQL migration file.

  2. Run the deploy

    Alchemy creates or updates the D1 database and the KV namespace, and applies the migrations from migrationsDir.

  3. Bind the resources

    The app gets DB and CACHE as bindings, typed, without connection strings.

  4. Publish the Worker

    The TanStack Start build goes to Cloudflare Workers under the same stage.

One honest trade-off. Alchemy keeps its state in a local .alchemy folder by default, and ours is gitignored. So our internal app deploys from a developer machine, not from CI. Alchemy offers a CloudflareStateStore for remote state (docs). We have not set it up yet. For a client app with several people deploying, that comes first.

Why does this site stay on Vercel?

This site is Next.js 16 with static article pages and next/image. On Vercel its vercel.json is literally {}. Every branch gets its own preview URL, which is how we review a new article before it goes live.

Vercel or Cloudflare: which app goes where. Left, Vercel: Next.js sites and older Next.js apps with Postgres, zero config, a preview URL per branch, but deploys are blocked when the commit author is not a team member. Right, Cloudflare Workers: new TanStack Start apps with D1, KV and R2, declared in one alchemy.run.ts file and billed per request.Vercel or Cloudflare: which app goes where. Left, Vercel: Next.js sites and older Next.js apps with Postgres, zero config, a preview URL per branch, but deploys are blocked when the commit author is not a team member. Right, Cloudflare Workers: new TanStack Start apps with D1, KV and R2, declared in one alchemy.run.ts file and billed per request.

Next.js can run on Cloudflare too. The OpenNext adapter deploys Next.js to Workers and supports Next.js 16. We have not moved this site there, so we cannot tell you how it compares. Moving a site that works, only to change hosts, is work with no result for anyone who reads it.

The same goes for older client apps. A system we built for a freight forwarder runs Next.js with Postgres and Prisma on Vercel. It stays there. New apps start on Cloudflare because that is where our template lives, not because the old ones failed.

Why did Vercel block deploys from our AI agent?

Our AI colleague works on issues in its own account and opens pull requests. After we merged one of its PRs, the production deploy on Vercel did not run. The deployment state was BLOCKED with the code TEAM_ACCESS_REQUIRED.

The reason: Vercel blocks deployments whose commit author is not a member of the Vercel team. A squash merge keeps the agent as the author. Vercel also blocks co-authors from a Co-authored-by line. Other teams hit the same with agent co-authors (Vercel community thread).

The fix is a Vercel seat for the agent. On Cloudflare the question never came up, because Alchemy deploys from code, not from commit authors.

Which other Vercel alternatives are there?

The usual lists name the same hosts. One line each, and an honest note on what we know:

  • Netlify: a similar model to Vercel, git-based deploys and previews. Not tested by us in production.
  • Render: long-running services and managed Postgres. Not tested by us.
  • A VPS with Coolify: your own server with a deploy UI on top. We run plain VPS workloads, Coolify we have not used in production.

If someone sells you a list of ten hosts, ask which of them they run today.

Is your app ready to leave Vercel?

Go through it before you start a move. Each point is a question your repo can answer:

The first point surprises most teams. A Next.js app on Vercel often uses platform features nobody wrote down. Find them before the move, not after.

How we decide what an agent may change, and what code checks before a merge, is in Harness engineering in practice.

Want an app that runs where it fits?

We build and run web applications on Vercel, Cloudflare or your own server, with the infrastructure in your account and in code. See custom web application development. AI writes most of our code. A senior reviews every change and is accountable for production. Since 2023 we have delivered 15+ production projects.

We get back to you within two business days with a few questions about your work. Then we agree on what we do first.

If you'd rather talk first, book a 15-minute intro call.

Which of your apps is on its host only because nobody moved it?

In short

  • Pick the host per app, not per company: Next.js sites on Vercel, new apps with a database on Cloudflare Workers and D1.
  • Vercel Hobby is non-commercial only. A client project needs Pro.
  • Alchemy declares the Worker, D1 and KV in one TypeScript file. Its state is local by default.
  • Vercel blocks deploys from commit authors outside the team, AI agents included. A seat for the agent fixes it.

Frequently asked questions

What is the best Vercel alternative?

It depends on the app. For a Next.js site, Vercel itself is hard to beat. For an app that needs a database, cache and storage in one account, billed per request, we use Cloudflare Workers with D1. Netlify, Render or a VPS with Coolify are other options, but we have not run them in production.

Is Cloudflare Workers cheaper than Vercel?

On list prices the entry point is lower: Workers Paid starts at $5 a month per account with 10 million requests included, Vercel Pro is $20 a month with $20 of usage credit (both retrieved 2026-10-24). What you actually pay depends on traffic, seats and which services you use, so compare with your own numbers.

Can I run Next.js on Cloudflare?

Yes, through the OpenNext adapter, which deploys Next.js to Cloudflare Workers and supports Next.js 16. We have not moved this site there, so we cannot say how it behaves compared with Vercel.

Can I use the Vercel Hobby plan for a client project?

No. Vercel says Hobby is for personal, non-commercial use, and that includes a paid consultant writing the code. A client project needs Pro or Enterprise.

Why does Vercel block my deployment?

One common cause: the commit author or a Co-authored-by line is not a member of the Vercel team. That happens with commits written by AI agents. The fix: add the agent to the Vercel team as a member with its own seat.

Zapytaj AI o ten artykuł

AI przy odpowiedzi wykorzysta też nasze inne artykuły i doświadczenia z prawdziwych projektów.

ChatGPTClaudePerplexity
Engineering

Kolejne artykuły

Decyzje CTO

Refactor or rewrite from scratch? How to decide

Refactor when the code does the right thing badly. Rewrite when it does the wrong thing or you do not own it. A decision table for CTOs and a way to do it without stopping the roadmap.

Decyzje CTO

Technical debt slowing development: what to fix first

You can measure technical debt from git history and bugs, without an expensive tool. Fix the code that changes most and blocks the roadmap first, not the ugliest code. A guide for CTOs.

Decyzje CTO

Body shopping or a senior developer in your team?

Body shopping gives you developer hours you manage yourself. A senior in your team gives you delivered tasks and a team that learns to work with AI. Compared with outsourcing and hiring, for CTOs.

Czas przestać planować i zacząć działać.

Kontakt

  • Digitaliko s.r.o.
    Šípková 377/17
    958 03 Malé Uherce, Słowacja
  • Prosimy o kontakt
    info@digitaliko.com
    +421 950 595 506
    WhatsApp