Skip to content

Blog

Long-form engineering notes on Next.js. No listicles.

Latest

3D Secure Takes the Customer Off Your Page

Authentication sends the browser to a bank and back, and everything React was holding is gone. How to keep a payment's state where a redirect cannot destroy it, and what to render meanwhile.

September 23, 2026 · 5 min read

Next.js and Sage. There May Be Nothing to Call.

Several Sage products run on a machine in the customer's office with no public address. That is not an obstacle to the integration - it is the integration, and it decides what a page can show.

September 23, 2026 · 8 min read

A Stripe Checkout That Does Not Trust the Browser

The client confirms the payment and the client must never create the order. Where each piece of a checkout belongs in an App Router application, and which of them can be tampered with.

September 23, 2026 · 6 min read

Where a Xero Integration Lives in a Next.js App

The OAuth callback belongs in a Route Handler. Almost nothing else does. A map of which parts of an accounting integration survive a serverless runtime and which quietly do not.

September 23, 2026 · 7 min read

Joomla and Next.js: Headless Without Losing the ACL

Joomla 4 shipped a proper Web Services API, which makes it a credible headless source. The permissions and multilingual setup you already built are the part worth keeping.

September 22, 2026 · 3 min read

OpenCart and Next.js: A Storefront Question

OpenCart runs on your server and already owns the catalogue, the cart and the checkout. Nothing here asks you to replace that. The question is whether the front end should still be its theme.

September 22, 2026 · 3 min read

Shopify vs Next.js: Not the Choice It Looks Like

These are not alternatives. Shopify stays as the commerce backend in almost every version of this; what you are really choosing is a Liquid theme or a storefront you own.

September 22, 2026 · 4 min read

WordPress vs Next.js: When a Theme Stops Being Enough

Both render HTML for a browser, so unlike most comparisons this one is head to head. For most sites WordPress wins on cost of ownership. Here is the boundary where that stops.

September 22, 2026 · 4 min read

Picking a Database for Next.js: Four Platforms

Four platforms with genuinely different models underneath. What each one is actually selling, and the constraint in each that reaches your schema rather than your config.

September 21, 2026 · 5 min read

Why Your Database Runs Out of Connections on Vercel

A serverless function instance cannot share a connection pool with the next one. Understanding what that means is the difference between a driver choice and a recurring incident.

September 21, 2026 · 6 min read

Prisma or Drizzle: Who Owns the Schema

One generates a client from a schema file it owns; the other is typed SQL you write. The decision is less about syntax than about who is the source of truth for your database.

September 21, 2026 · 5 min read

Upgrading to Next.js 16: Loud and Quiet Failures

Most of the breaking changes in 16 stop the build, which makes them safe. The ones worth planning for are the handful that change behaviour without telling you.

September 16, 2026 · 4 min read

Next.js vs Astro: How Much of Your Page Is Interactive?

Astro ships zero JavaScript until you ask for it. Next.js ships a React runtime and lets you shrink it. That one difference decides most of this.

September 16, 2026 · 5 min read

Next.js vs Express: Only One of Them Renders

Express is a server you build on. Next.js is a rendering framework with a server attached. Choosing between them is really choosing how much you want to write yourself.

September 16, 2026 · 6 min read

Next.js vs Laravel: Two Different Questions

These are not competing answers to one question. One is a front end that can reach a database, the other an application server that renders HTML. Which you need depends on where the complexity is.

September 16, 2026 · 5 min read

Next.js vs Remix: The Decision Is About Caching

Both render on the server, both do nested routing, both are fine. The difference that actually shows up in a codebase is how each one treats cached data.

September 16, 2026 · 4 min read

When Not to Use Next.js

We only build in one framework, which makes this the page you should be most suspicious of and the one worth reading. Five cases where Next.js is the wrong answer.

September 16, 2026 · 7 min read

Structured Data in Next.js, Generated From One Graph

Most JSON-LD ships as four disconnected blobs that each re-declare the organisation. One connected graph with stable @id references is less code, and the version a crawler can resolve.

September 14, 2026 · 6 min read

Taking Over a Next.js Codebase Nobody Wants to Touch

The first instinct is to rewrite it. Here is the orientation we run instead, what it produces, and how to tell the difference between a codebase that is bad and one that is merely unfamiliar.

September 10, 2026 · 5 min read

Canonicals and Sitemaps That Cannot Drift

Your sitemap lists routes your router no longer serves, and your canonical tags disagree with both. The fix is structural - derive all three from one source.

September 4, 2026 · 8 min read

Middleware Runs on Every Request You Forgot About

Middleware is the only code in a Next.js application with no opt-out. A matcher that is slightly too broad puts it in front of every image, font and prefetch, and the bill arrives as latency.

August 28, 2026 · 5 min read

Correct hreflang in Next.js, Generated Not Maintained

Most multilingual Next.js sites ship a broken hreflang cluster. The failure is always the same - the tags are written by hand. Here is how to generate them from the content that actually exists.

August 21, 2026 · 10 min read

Self-Hosting Next.js, and What Stops Working

Next.js runs anywhere Node runs. Four features are provided by the platform rather than the framework, and knowing which four is the difference between a calm migration and a surprised one.

August 14, 2026 · 6 min read

Migrating Pages Router to App Router Without a Freeze

The two routers run side by side in the same application, so the migration is route by route while your team keeps shipping. Here is the order that works and the three places it usually goes wrong.

August 7, 2026 · 8 min read

Next.js Caching: The Four Layers, and Which One Bit You

Request memoisation, the Data Cache, the Full Route Cache and the Router Cache are four separate mechanisms with four separate lifetimes. Most caching bugs are a confusion between them.

July 30, 2026 · 7 min read

next/image Will Not Fix Your LCP

The component optimises bytes. LCP is decided by when the request starts, and the usual causes of a slow one are discovery order, a lazy hero and a font that blocks the paint.

July 17, 2026 · 6 min read

Core Web Vitals in Next.js: What Actually Moves the Numbers

LCP, INP and CLS have specific causes in a Next.js application. This is the ordered list we work through on performance engagements, with the changes that pay and the ones that do not.

July 8, 2026 · 8 min read

A Multilingual Next.js Site, End to End

Routing, message loading, RTL, metadata, hreflang, sitemaps and the parts that only break in the fourth language. The architecture we ship, with the decisions that are hard to reverse marked.

June 26, 2026 · 13 min read

Where `use client` Actually Costs You

The client boundary is not a performance setting, it is a bundle boundary. Here is how to find where yours has drifted upward, and what moving it back down is worth.

June 19, 2026 · 7 min read

Server Actions, and the Three Things People Get Wrong

A Server Action is a public HTTP endpoint with a generated name. Treating it as a function call is how authorisation gets skipped, validation gets skipped, and the cache never updates.

June 5, 2026 · 6 min read

loading.tsx Is Not a Spinner

A loading file is a Suspense boundary around a whole route segment, which means it decides how much of your page waits for your slowest query. Most of them are placed by accident.

May 28, 2026 · 3 min read

The Next.js App Router Rendering Model, Explained Properly

Static, dynamic, streamed and revalidated rendering are not four settings - they are one model with a few switches. Understanding which switch you flipped is most of Next.js performance work.

May 14, 2026 · 7 min read

Tell us what you are building.

Send the repo, the Lighthouse report, or just the problem. You will get a real engineering answer, not a sales sequence.

Call us+1 848 272 7583WhatsApp+90 850 308 5436Emailinfo@codefacture.comContact page