№ 01 What we host

Next.js, run the way it’s actually built.

Server-rendered routes and API handlers get a dedicated instance sized to the app. A fully static export costs a fraction of that. Either way, a push to main deploys it, and CodeHerder ships the small changes in between.

When this isn't the right fit Is the app a fully static export with no API routes? Then the build pipeline on this page still applies, but the hosting is Static Starter. Say so on the quote form and we size it down.

№ 02 The requirements

What it needs to run

The shape of the workload, before any hosting decision gets made.

Runtime
Node.js, long-running
Build step
next build, run on every push
Standing process?
Yes, if any route is server-rendered or an API handler
Data store
Optional: whatever the app talks to (often Postgres)
Verdict
Dedicated by default · Static if the whole app exports
№ 03 How it runs

How it runs here

The same management as every other tier we run, written in Next.js's own terms.

  • Provisioning

    A dedicated instance sized to the app. Node is installed, and a process manager restarts the app on a crash or a deploy.

  • Deploys

    Push to main. Our pipeline builds the app and restarts it. You keep no separate CI of your own.

  • Data + backups

    If the app talks to Postgres, it gets a managed tier. That tier is backed up every night with the app.

  • TLS / DNS / monitoring

    Certificates renew on their own and we manage DNS end to end. Monitoring restarts a crashed or hung process and alerts a person.

    What a visitor sees during a restart →
№ 04 Moving it in

Moving it in

Already running somewhere else? The full migration playbook covers the general steps. Below is what is specific to Next.js.

  1. 1

    Point us at the repo

    Read access is all we need. We read the output mode from the config, so there is no questionnaire.

  2. 2

    We stand up a copy

    We provision it as code and build it the way your deploys will run. We check it before anything goes live.

  3. 3

    Cutover on your schedule

    DNS and TLS switch over with little-to-no downtime. A rollback stays ready if anything looks wrong.

The real gotchas
  • The output mode matters most. `output: "export"` needs only a static host. Middleware, route handlers or server actions need a standing process.
  • A variable baked in at build time and one read at run time behave differently across a redeploy. Check which is which before the first cutover.
  • Image optimisation and incremental static regeneration both need a server process. A static export drops them without a warning.
№ 05 The loop

The loop, on Next.js

Next.js apps keep changing after launch: a new route, a copy tweak, a dependency bump. The loop briefs and ships all three.

  1. 01Build

    CustomLabs

    Bring an app you already built. Or CustomLabs designs and builds the first version to the framework’s own conventions.

  2. 02Iterate

    CodeHerder

    Brief a new route, a copy change or a small feature in plain language. An agent opens a pull request against the real app, in its own file structure.

  3. 03Run

    CustomHosted

    A dedicated instance sized to the app, or a static export if that is all it needs. Every push deploys it, and we patch and back it up.

An example brief
The brief
A `/pricing` route, styled to match the rest of the app, with data pulled from an existing API route.
What the pull request holds
The route and the fetch, in one pull request the agent opens against the real repo.
A real one
The site is blinding at night (+751 −258 · 19 files · merged 2026-07-31).
№ 06 Output modes

Which output mode are you running?

On a Next.js app, the biggest cost lever is whether the app needs a server at all. Instance size comes second.

Next.js has three deployment shapes under one framework name. Their prices differ, and that is why Next.js gets its own page instead of a generic "Node app" row. A route that uses generateStaticParams and no server-only APIs compiles to plain HTML, CSS and JS. That is a Static Starter site. A dedicated instance serving files that never change at request time is money spent on nothing.

Middleware, a server action, a route handler that touches a database, or revalidate-based incremental static regeneration changes that. One route with any of them needs a long-running Node process to answer requests. That is the dedicated shape this page quotes by default. It applies however small the rest of the app is.

Most apps are a mix: a marketing shell that could be static, next to a signed-in dashboard that cannot. We do not force one verdict on the whole repo. Describe the split on the quote form, and we size the instance to the parts that need a server.

№ 07 A starting configuration

A starting configuration

A server-rendered app: a dedicated instance sized for Next.js, plus the iteration add-on.

Base plan
Dedicated S
Iteration — CodeHerder loop
+$25/mo
Estimated total
$54/mo
№ 08 FAQ

Next.js questions

The questions this stack raises on its own. General hosting questions live on the homepage.

  1. 01Do I need a dedicated instance for every Next.js app?

    Only if a route is server-rendered, uses middleware or exposes an API handler. A pure static export runs on Static Starter. Tell us your output mode and we size it to match.

  2. 02Do you support the app router and server actions?

    Yes. Both need a standing Node process, and the dedicated tier provisions one.

  3. 03What about incremental static regeneration?

    ISR needs a running server to revalidate pages on a schedule. It works on the dedicated tier, but not on a static export.

  4. 04Can CodeHerder work in a monorepo?

    Yes. A brief can target one app or package inside a monorepo. The agent opens its pull request against only the paths that matter.

  5. 05What if we outgrow Dedicated S?

    Move up a tier at any time, for more CPU and RAM on the same Node process. The resize is one short restart, in a window you pick. You do not rebuild anything.

Ready to start?

Tell us what you're running — one fixed monthly rate, within a business day.

Get a quote →