Vercel and Next.js

When your marketing site and your product need the same codebase

The short answer

Next.js on Vercel makes sense when your marketing pages and your logged-in product need to be one codebase rather than two systems stitched together. The tradeoff is ownership: you now have software somebody has to maintain, and content edits go through a deploy unless you deliberately build an editing layer.

Your site and your product have started overlapping. Pricing pages need to know who's logged in, app screens need to rank in search, and keeping two systems saying the same thing has become somebody's part-time job.

A woman waiting at a colleague's desk holding two identical printed pages with the same line ringed on each, while he finishes a phone call.

The signal that a site builder isn't enough any more

It's rarely a design complaint. It's that your public pages and your logged-in product have started needing to know about each other. A pricing page that shows something different to an existing customer. An app screen that has to be indexed. A signup flow that spans both.

When that's true, running two systems means maintaining two copies of your components, your brand and your copy by hand. It works for a while. It stops working around the point where a one-sentence change needs two people and a calendar invite.

The opposite mistake is just as common and costs more. A team hears that the site and the product should share a codebase, merges them, and finds out afterwards that the only thing the two halves ever shared was a logo. So be precise about where the overlap is before anyone spends money on it.

Five checks that tell you which side of the line you're on

Run these in order and write the answers down. None of them needs an engineer. You're not looking for a score, you're looking for whether the same handful of pages keeps turning up in more than one answer, because that overlap is the only thing one codebase genuinely buys you.

Do it against the site and the product you have today rather than the ones in next year's roadmap. The overlap you can point at right now is the part that's real, and it's the part a build gets scoped against.

Checks one and two decide it between them. If both come back empty, you don't have a boundary problem and this stack isn't your answer. The other three tell you what the split costs you while you leave it alone.

Two colleagues at the end of a meeting table, one working through a phone while the other adds another tally stroke to a growing row in a notepad.
  1. 1. Count the pages that change depending on who's looking

    Go through your public URLs and mark every one that would show something different to a signed-in customer than to a stranger. Pricing, the plan comparison, anything with a start-free button, anything that hides a feature behind a tier. Then count them. One or two is a narrow problem with narrow fixes. A dozen means your public site is already half a product and is being maintained as though it isn't.

  2. 2. Mark which of those also have to be found in search

    Now cross-reference. Of the pages you just marked, which ones do you need ranking for a search term? Documentation, templates, a public directory, a shared report, anything a stranger might land on before they have an account. Pages that need both a signed-in state and a search ranking are the specific thing two separate systems handle badly, and they're the honest argument for one codebase.

  3. 3. Follow one person from stranger to signed in and count the handoffs

    Trace the whole path yourself, from a search result or an ad through to actually using the thing. Count every point where the domain changes, the design visibly changes, or somebody has to type the same information twice. Each of those is a seam, and seams are where people quietly leave. Two is normal. Six means the split is costing you customers rather than just irritating your team.

  4. 4. List what exists twice today, and name who updates each copy

    Navigation, footer, buttons, brand colours, plan names, the legal wording at the bottom of the pricing page. Write each one down with the name of the person who changes it on the site next to the name of the person who changes it in the product. Where those are two different names, you've found the recurring cost. Where it's the same overworked name, you've found the risk.

  5. 5. Ask what has to stay up while the product is down

    Get this answered before anyone merges anything. If your marketing pages, your pricing and your status updates have to keep serving while the application is broken or halfway through a deploy, say so now. One codebase can do that perfectly well, but only if it was built to. It's cheap to design for in week one and expensive to discover during an incident.

One codebase, and what it commits you to

Next.js puts the marketing pages and the application in the same project, with the same components and one deploy. That's the real reason to pick it.

The commitment is that you now own software. Somebody has to keep dependencies current, respond when a build breaks, and hold the context for why things were built the way they were. That's an ongoing cost, and it belongs in the decision rather than in a discovery six months later.

What that looked like on a real build

The product work we've published includes a multi-surface build for a market-research platform: a mobile app, a web counterpart and an internal admin dashboard, hosted on Vercel. That shape is the common one, and the interesting decisions weren't inside any one surface. They were at the seams between them.

Three surfaces over one codebase is the part worth naming, because one codebase is what lets a change to a form control land everywhere at once instead of being copied three times. The product also sat next to the system the business already ran its commercial relationships in, and anything in that position has to settle once which side holds which record rather than discovering the answer during a support call.

What that build doesn't contain is a public marketing surface, so it isn't evidence for the marketing-plus-product case this page argues. Take it for what it shows: several surfaces over one codebase behaves the way you'd hope, and the decisions worth arguing about live between the surfaces rather than inside any one of them.

Who owns it in year two

This is the question that decides whether the stack was the right call, and it's almost never in the proposal. A codebase nobody is accountable for degrades quietly. Nothing breaks on day one. Then a dependency goes out of support, the build stops working on a new machine, and the person who held it all in their head has moved on.

The arrangement matters more than the handover document. Either somebody in-house can pick the codebase up, or you have a standing agreement with whoever built it, and that gets decided while there's still budget for it rather than during the first outage. Many of our engagements run a year or more for exactly that reason, and we'd rather say that out loud than let a document imply the problem is solved.

The cheapest version of ownership is a rhythm rather than an emergency. Dependencies get updated on a schedule. Build failures get read by somebody whose job it is to read them. None of that is interesting, and all of it is what separates a codebase you own from one you're hostage to.

An in-house engineer at her keyboard and the developer who built the codebase sitting beside her, both looking at one marked row in a list of scheduled updates on screen.

What's locked in, and what isn't

Next.js itself is open source and runs on plenty of hosts, including your own hardware. The framework isn't the lock-in. The host-specific features are: the ones that make deployment, caching, image handling and edge behaviour effortless and have no direct equivalent elsewhere.

That trade is usually worth making. It's worth making knowingly, because what moving would cost later is a function of exactly which of those features the build ended up leaning on.

It helps to know what moving actually involves, because the honest answer has two very different halves. Running one Next.js server yourself is well-trodden ground. The framework publishes a self-hosting guide, image handling works with no configuration on a standard server, and the main piece of advice is to put a reverse proxy in front of it rather than exposing it straight to the internet.

Running several servers is where the work is. Next.js stores its page cache on the local filesystem of each server instance by default, so more than one instance means writing a shared cache handler or serving some visitors stale pages. Every instance also has to share one encryption key for server functions, and rolling deploys need a deployment identifier so a browser holding the old version doesn't ask for files that are gone. None of that is hard. All of it is somebody's job, and it's the part an estimate leaves out.

When Next.js and Vercel are the wrong choice

When it's a marketing site and nothing else. A dozen pages, no accounts, no product surface, and a non-technical team who need to edit it. This stack makes that worse, not better, because you've added an engineering dependency to a problem that didn't have one.

When nobody will own the code. With no in-house engineer and no ongoing partner, a custom codebase is a liability on a delay. A managed platform is the honest answer even though it's the less impressive one to put in a proposal.

When the reason given is that the framework is popular. Popularity is a hiring argument. It isn't an architecture argument, and it's worth making whoever raised it say which of the two they mean.

A managed platform, your own servers, or a site builder

Three places this can run, and they fail in different directions. A managed application platform takes deploying, scaling and caching off your plate and bills you against the traffic and compute you use. Your own servers give you a bill you already understand and an operations job you now have to staff. A site builder isn't a place to run an application at all, and it belongs on the list because for plenty of teams it's still the right answer.

Our recommendation, when checks one and two come back with real overlap: the managed platform. Not because it's technically superior, but because the way these projects actually fail is that nobody is operating the thing in year two, and it's the only one of the three that shrinks that job rather than creating it. Move off it when you have people whose job is running infrastructure, or a rule about where your servers have to physically sit.

A managed application platform, your own servers, and a site builder, on what each one actually changes for you.
What it changes for youSite builderManaged platformYour own servers
What it's built to runPages, plus content gatingPages and an application in one projectAnything, once it's configured
Where the cost landsA predictable subscriptionUsage, so it moves with your trafficServers you rent, plus the person who runs them
Who's on the hook when a deploy breaksNobody, there isn't oneWhoever wrote the codeWhoever wrote the code, and whoever runs the servers
Reviewing a change before it goes liveA staging copy you maintain by handEvery branch gets a shareable URL automaticallyA staging environment you build and pay for
Running more than one instanceNot a question you haveNot a question you haveShared cache, shared keys, versioned deploys
Changing one sentence of copyAnyone, in minutesA deploy, unless a content layer was built inA deploy, unless a content layer was built in
What you can change laterWhatever the platform chooses to exposeThe application freely, the hosting behaviour less soAll of it, including the parts you'd rather not think about
A managed application platform, your own servers, and a site builder, on what each one actually changes for you.

Worth knowing before you start

  • Ask for a one-page list of every host-specific feature the build uses. That list is your portability map. If nobody can write it, you've learned that the decision was never examined.

  • Put preview deployments in front of the people who approve copy. Every branch gets its own shareable URL, and Vercel marks preview builds noindex so a draft can't compete with your live pages. Most teams never use that for review, which is the largest free delivery gain the platform offers.

  • If someone proposes moving your marketing pages into the app codebase, ask what changes for the person who edits them today. That cost is real, it lands on somebody you can name, and it almost never appears in the estimate.

Work we’ve done

Further reading

Common questions

No. Next.js is open source, it runs on other hosts and on your own infrastructure, and it publishes a self-hosting guide covering exactly that. One server is straightforward and image handling works without configuration. More than one server is where it turns into ongoing operational work rather than a one-time setup. Worth doing if you employ people who run infrastructure. Not worth doing if you don't.

Count the public pages that change for a signed-in person and also need to rank in search. Zero means the two halves have nothing structural in common, and merging them buys you a shared logo at the price of a shared release. A dozen means the split is already costing you. Two or three is the genuinely awkward number, and there it comes down to whether those particular pages are the ones your growth runs through. If they are, one codebase is worth it early. If they're a signup screen and a status page, it isn't.

Only if the build was made that way. Content can live in a CMS your team edits, with the code reading from it, and that should be decided before the build rather than after the first change request. If content is hardcoded, every edit is a deploy, and that is a choice somebody made rather than a property of the framework.

Less than people expect, if it was set up for it. The repository sits in an organization your company owns, environment variables and third-party accounts are documented, the deployment steps are written down, and a second person has run them at least once so you know the written version works. Read access to the code on its own is not an inheritance.

Usually, yes, and we'd say so rather than build it. The test isn't how many pages you have, it's whether any of them has to know who's looking at it. If none do, a site builder your own team can edit without calling anyone will serve you better, and it'll keep serving you long after we're gone.

Related

Want to talk through your situation?

A short call is usually enough to tell whether this is the right work for you. If it isn’t, we’ll say so.