Service pillar

Next.js developer

Next.js 15 as the presentation layer, WordPress for the editors, Cloudflare as the runtime. Rendering chosen per route, not per trend. For stores, dashboards, and sites that genuinely need sessions, personalisation, and streaming.

Senior B2B, EU jurisdiction, scoped per project.

Pricing is individual. I reply within one working day.

What I ship

Next.js 15 with the App Router and React 19 Server Components as the front end. WordPress 6.7+ as the editorial back end, communicating over REST or GraphQL. Cloudflare Workers and Pages for the runtime and the edge cache. TypeScript across the stack. Tailwind CSS for the design system. Anthropic Claude and Model Context Protocol when AI features earn their keep.

This is not a technology list from a job ad; it is the stack I run in my own production. Every element has a reason to be there: the App Router gives per-route rendering, RSC cuts the JavaScript shipped to the client, Workers eliminate cold starts and keep data within reach of European regulation. When an element stops holding up in practice, it drops out of the stack, which I document quarterly in the Tech Radar.

When Next.js is the right choice

Personalised pages, session-driven flows, A/B-tested experiences, transactional checkout, real-time dashboards, and authenticated workspaces all benefit from the streaming SSR + RSC model. The mental model is "render close to the data, stream what is ready, hydrate what is interactive". For pages that fit, Next.js delivers a UX that classic SSR or static cannot match.

For pages that do not fit, I say so. Content-heavy marketing sites, blogs, and documentation usually win on Astro with static + ISR at lower cost. The framework decision is part of scoping, not a default. If discovery shows your site does not need Next.js, you will hear that, together with a cheaper recommendation.

Architecture: WordPress as the back end, Next.js as the front end

In a headless setup WordPress stops rendering pages and stays what it is genuinely good at: an editorial system. The content team keeps working in the familiar admin, with the same roles, workflows, and editorial plugins. Next.js fetches content over REST or WPGraphQL and renders it with a strategy matched to the route: homepage and landing pages as static with revalidation, the product catalogue as ISR with webhook-driven invalidation, checkout and the customer account as SSR with a full session.

Three elements decide whether this architecture works in practice, and all three are part of the delivery. Editorial preview: an editor has to see a draft before publishing, so I wire draft mode to WordPress instead of telling the team "that is not possible anymore". Cache invalidation: publishing in WordPress fires a webhook that revalidates exactly the routes the change touches, instead of flushing the entire cache. Media handling: images go through the Next.js pipeline with automatic AVIF and responsive sizes, regardless of what the editor uploaded.

Performance and Core Web Vitals

Performance in Next.js does not come from the framework; it comes from the architectural decisions the framework makes possible. Streaming SSR sends the first byte before the server finishes rendering the whole page, which directly lowers TTFB and LCP. Server Components keep data-fetching logic on the server, so the client receives less JavaScript and INP stops suffering from hydrating everything at once. Caching on the Cloudflare edge answers users from the nearest point of the network instead of a single origin server.

Every project starts with a baseline: TTFB, LCP, INP, and CLS measured on real users before the change, not in a lab. After the launch the same metrics are collected via RUM and compared in a side-by-side measurement window. The outcome of the project is the difference in field data, not a Lighthouse screenshot. The public Astro vs Next.js measurement protocol on WooCommerce, with the methodology open for review, is linked in the reference section at the bottom of this page.

Headless WooCommerce on Next.js

A store is the most demanding headless variant, because it combines static content with a live transaction. I render product pages and categories as ISR: as fast as static, updated by webhook whenever a price or stock level changes. Cart, checkout, and the customer account run as SSR with a session, wired to the WooCommerce Store API. Per-customer pricing, B2B discount tiers, and login-gated catalogues, the typical wholesaler requirements, stop forcing you to give up caching across the whole store, because the rendering decision is made at the route level.

On top of that comes a layer stores ask about more and more often: readiness for AI shopping agents. Clean, server-rendered HTML with correct Product and Offer schema is the entry condition for an agent to see the catalogue at all. It is the same architecture that serves fast pages to humans, so you do not pay for it twice.

SEO, GEO, and AEO in Next.js

Server-side rendering is the visibility foundation that client-side React can never provide: AI crawlers such as GPTBot, ClaudeBot, and PerplexityBot do not execute JavaScript, and Googlebot executes it with delay and a budget. Next.js with SSR and RSC returns the full content in the first HTML response, so what the user sees is also what the bot sees.

On that foundation I build the technical layer: per-route metadata API, canonical and hreflang via metadata.alternates, sitemaps via generateSitemaps, structured data as JSON-LD matched to the page type (Product, Article, FAQPage, HowTo), Open Graph with per-page generated images. For visibility in generative search I add the GEO elements: direct-answer sections, FAQs with structured data, llms.txt, and content negotiation for agents. Every project goes through a 30-point SEO checklist before the DNS cutover.

Security and EU jurisdiction

Headless shrinks the attack surface in a way you can explain to a board in one sentence: WordPress disappears from the public internet. The login panel, XML-RPC, and plugin files stop being reachable by scanners, because Next.js serves the front end and the origin is accessible only to it. Add centrally configured security headers, server-side input validation, and secrets kept out of the repository.

For companies covered by GDPR, NIS2, or DORA, data geography matters too: a Cloudflare runtime with EU processing, data processing agreements in Polish or English, and documented data flows for the record of processing activities. A B2B contract in European jurisdiction, not the terms of service of a platform outside it.

Who this is for

  • WooCommerce stores with custom checkout flows or per-user pricing
  • SaaS dashboards and authenticated workspaces backed by WordPress as a content layer
  • Multi-region brands needing ISR with webhook-driven invalidation
  • Editorial publishers with live data feeds, comments, or real-time analytics surfaces
  • B2B wholesalers with login-gated catalogues and pricing negotiated per account

Engagement model

Senior B2B contracts in EU jurisdiction. Four phases: discovery with a content audit and performance baseline, scoping with per-route rendering decisions, an iterative build with weekly demos and a side-by-side measurement window, and finally tuning and retainer with observability and quarterly stack reviews. Fixed-scope or time-and-materials engagements. Pricing is individual, with a per-phase schedule and decision points.

Read path on the edge, write path on the origin. Cache invalidated by webhook tags.Reader / agent sends a request to Cloudflare Workers (edge). On cache hit the Edge cache (per-tag) returns HTML with almost no CPU. On cache miss Workers calls REST API /wp-json/ on the WordPress origin and renders. Editorial work happens in Block Editor + WP Admin on the origin and triggers a Webhook on publish that invalidates relevant cache tags.Reader / agentCloudflare Workers (edge)Edge cache (per-tag)cache hit (almost no CPU)cache miss → render at edgeWordPress originBlock Editor + WP AdminREST API /wp-json/Publish / slug change / stockReadReadWebhook on publishWrite
Read path on the edge, write path on the origin. Cache invalidated by webhook tags.

Frequently asked questions

When does Next.js win over Astro for headless WordPress?

When the page is personalised, session-driven, or transactional. Authenticated dashboards, checkout flows, A/B-tested pages, real-time data feeds, and live commerce all play to Next.js's strengths. Astro wins for high-traffic content sites where static + ISR is sufficient. The framework choice is per-project, not a default.

What is the role of React Server Components in production?

RSC lets the framework render React on the server and stream HTML to the client without shipping the component code. The wins are smaller JS bundles, faster TTI on slow networks, and a cleaner data-fetching pattern. The trade-off is a different mental model from classic React; the senior team's familiarity with RSC matters more than the framework version.

Can Next.js run on Cloudflare Workers?

Yes. The OpenNext adapter compiles a Next.js build to Workers-compatible output, and Cloudflare's first-party Next.js Workers integration covers most production cases. Edge functions and middleware port from Vercel Edge Runtime. I benchmark per project; not every Next.js feature is identical across runtimes.

Does Next.js cost more to host than Astro?

Often, yes. Static Astro pages serve from edge cache at near-zero CPU. Next.js SSR pages pay full render cost per request, and even ISR pays revalidation cost. For high-traffic content sites the difference is real. For commerce and personalised flows the difference is rarely the deciding factor.

How do you handle SEO with Next.js?

Per-route metadata via the App Router metadata API, structured data via inline JSON-LD or schema components, sitemap and robots via generateSitemaps and route handlers, and hreflang via the metadata.alternates field. I carry a 30-point SEO checklist into every Next.js engagement.

Is a Next.js site visible to AI and generative search engines?

Yes, provided it renders on the server. AI crawlers (GPTBot, ClaudeBot, PerplexityBot) do not execute JavaScript, so purely client-side React is empty to them. Next.js with SSR and RSC returns the full HTML in the first response, which makes the content readable to search bots and AI systems alike. I add structured data, llms.txt, and content negotiation when AI visibility is a business goal.

Do you rewrite an existing WordPress front end to Next.js?

Yes, that is the most common scenario. WordPress stays as the editorial back end while the front end moves to Next.js in stages, route by route, behind a Cloudflare proxy. URLs, schema, and editorial preview are preserved, and the redirect map only goes live after a side-by-side measurement window. The editorial team keeps working uninterrupted throughout the migration.

How long does a Next.js implementation with headless WordPress take?

Scope sets the timeline. A pilot migration of a handful of routes with measurements closes in a few weeks. A full site front end with checkout, personalisation, and multilingual support is a quarter-scale project. After discovery you get a per-phase schedule with decision points, not a single unbacked date.

Related cluster

Explore other WordPress services and knowledge base

Strengthen your business with professional technical support in key areas of the WordPress ecosystem.

Proof through migration discipline

Next.js is useful when the route really needs session state, personalisation or streaming. The proof layer shows how I preserve URLs, schema, editorial preview and rollback while changing the front end.

Cluster reading

Architecture and decision

Migration and timelines

Compliance and risk

Reference

Recommendations from LinkedIn

Recommendations and reviews of working with WPPoland

Selected recommendations from WordPress, WordCamp and e-commerce leaders - with a focus on delivery on time, technical depth, and a business-driven approach to WordPress development.

Karolina Czapla

Karolina Czapla

Marketing Strategist – Performance & Digital Strategy

“Working with Mariusz on WordCamp has shown me how rare it is to combine deep technical skill with genuine leadership. He plans, coordinates and delivers with precision, while giving the team space to grow and contribute....”

Co‑organiser, WordCamp Gdynia 2024 & 2025

Argert Boja

Argert Boja

Senior Full‑Stack Developer

“Mariusz is the teammate everyone hopes for: strong full‑stack WordPress skills, clear explanations and a positive attitude even under pressure. He moves easily between custom plugins, performance work and Gutenberg layou...”

Worked alongside Mariusz on WordPress projects

Daniel Blossfeld

Daniel Blossfeld

Process Optimization & Digitalization Consultant

“I had the pleasure of working with Mariusz for almost three years. During that time, his WordPress development skills proved invaluable across a range of projects, from website builds to online member areas and even Shop...”

Mariusz was his client for WordPress work

Jessica Di Pasquale

Jessica Di Pasquale

Leading SEO initiatives with data-driven growth strategies.

“Mariusz is a very skilled, patient and expert guy. Always ready to help and to fix errors, I really appreciated working with him. He is such a great colleague!”

Managed Mariusz directly

Belinda Koch

Belinda Koch

Web-Tracking Analyst at TUI

“Mariusz is a great person to work with. He is extremely motivated to learn new things and share his knowledge, and is very knowledgeable on a wide range of topics. We worked together on digital analytics and tracking top...”

Worked with Mariusz on digital analytics and tracking topics

Paweł Lewczuk

Paweł Lewczuk

Front-end developer, WordPress developer

“I collaborated with Mariusz on several projects and our cooperation was always exemplary. I believe there are many more joint projects ahead of us. Highly recommended!”

Mariusz was Paweł's client

Start a Next.js engagement

Tell me the scope and timeline. I reply within one working day.

Contact me