Service · Web development

Custom React JS website development.

Custom websites and web applications on the modern React stack: SPA, SSR or SSG, with React 18+, Next.js, TanStack and shadcn/ui. For customer portals, dashboards, e-commerce front-ends, marketplaces and brand experiences where UI state and component discipline make the difference.

React 18+TypeScriptNext.js / RSCshadcn/ui

React JS is not a framework — it is the foundation you choose.

React is Meta's open-source UI library, which has reshaped the way the web is built since 2013. Components instead of templates, declarative state instead of DOM manipulation. Today the choice is no longer about whether to use React, but about which React context: a classic single-page application, a Next.js app with server components, or an Astro site with React as an island.

For business websites and web applications, React is almost always the pragmatic default once the interface goes beyond content pages. Dashboards, customer portals, e-commerce front ends, marketplaces, configurators and design-system-driven brand sites, anywhere UI state, form flows or dynamic data are central, sit squarely in React's sweet spot.

We build React projects for clients who want custom software without being tied to a closed platform. The broader service context is on web development; for SPA projects see building a single-page application, and for capacity see hire a React developer. On this page you can read when React is the right fit, when another framework is fairer, which stack we start with, and how a project runs.

When React JS is the right choice.

Five patterns where React-built websites and web applications consistently pay off. If you recognise one of them, React belongs on your shortlist.

Customer portals & dashboards

Lots of UI state, few content pages

A portal where users filter data, sort tables, complete forms and see real-time status updates. This is where React shines: TanStack Query for server state, Zustand or Redux Toolkit for client state, React Hook Form for forms and TanStack Table for data tables. No template engine that falls over halfway, but one consistent component model used throughout the app.

E-commerce front ends

Headless commerce on a fast React layer

For headless setups on Shopify, BigCommerce, commercetools or Magento, React with Next.js is the standard. Product pages via incremental static regeneration or partial prerendering, cart and checkout as client components, and server actions for mutations. The result is a fast storefront that search engines favour and that your merchandising team can drive through a dedicated design system.

Marketplaces & SaaS extensions

Products that grow over time

Marketplaces, multi-tenant SaaS applications and internal tooling that grow with the business. A component library shared across the whole organisation pays off here, via design tokens, a UI package and generated API clients from OpenAPI or GraphQL. For the back end we often work with Laravel, Node or a Python API.

Design-system-driven brand experiences

Brands running their own design system

For brands that want to consolidate their digital presence into one design system, and run web, mobile and internal tools from it, React is a natural hub. Components in Storybook, design tokens in a shared package and code sharing with the mobile app via React Native. One source, multiple channels.

Real-time & collaborative UI

WebSockets, optimistic updates, presence

Apps where several users work in the same view at once: planning boards, editors, dashboards with live data. React's reconciliation model and hooks architecture keep presence tracking, optimistic updates and server pushes orderly rather than messy. We add Liveblocks, Partykit, Pusher or a custom WebSocket layer where it fits.

Migrating from a legacy stack

From jQuery, AngularJS or legacy PHP front ends

You have a working site or app on a stack that is no longer maintained: AngularJS, jQuery with server templates, or an old Vue 1 or Ember install. We migrate incrementally: new screens in React, while the existing environment keeps running behind a micro-frontend boundary. No big-bang rewrite.

When React JS is not the right choice.

Honesty saves you an expensive change of direction halfway through. These are three situations where we refer clients to a different framework or a simpler stack.

Not 01

Content sites without serious dynamic requirements

For brand websites, magazines, marketing pages or corporate sites with little interactivity, React is often too heavy. Astro or Eleventy offers the same editorial flexibility with considerably less JavaScript in the browser, better Core Web Vitals out of the box and a simpler editorial workflow. Astro can also run React components as islands, so you can start with Astro and add isolated React islands wherever interactivity genuinely adds value.

Not 02

Microsites and simple campaign pages

A temporary campaign site, a product launch page or a ten-page microsite does not need to be a full React project. For these projects, the faster time to first byte, editorial speed and cost control of a static site generator (Astro, Eleventy, Hugo) are usually the better choice. Add React when you need an interactive widget, not as the default.

Not 03

Back-office tooling that Laravel can deliver faster

For internal CRUD applications, admin panels and back-office tooling, a Laravel stack with Filament or Livewire can get you to production faster than a separate React front end on top of an API. You save the authentication layer, the API contracts and the duplicated state. We choose that route where the feature set is primarily about database fields rather than rich client-side interaction, and we discuss this openly in the first conversation.

React versus Vue, Svelte and Angular: a sober comparison.

The four mainstream options side by side, for anyone still choosing or who wants a second opinion. If you are unsure, we guide the decision in the first conversation, based on your existing stack, team and product ambitions.

Criterion
React
Vue 3
Svelte / SvelteKit
Angular
Language & mental model
JSX, hooks, functional
SFC templates, composition API
Compiler-first, little runtime
TypeScript-heavy, RxJS, OOP
Dutch talent pool
Very large, the default choice
Large, mainly creative agencies
Small, growing slowly
Large, mainly enterprise
Ecosystem & libraries
The broadest, everything is available
Robust, often in parallel with React
Younger, high quality
Complete but closed
Server-side / meta-framework
Next.js, Remix, Astro+React
Nuxt 3
SvelteKit
Angular Universal
Bundle size
Larger, RSC reduces this
Small, comparable to React
Very small, the compiler strips a lot
Large, full framework
Learning curve
Hooks take practice
Easy to get started
Quick to become productive
Steeper, many concepts
Code sharing with mobile
High via React Native
Limited, no native equivalent
No native equivalent
NativeScript route, niche
Best for
Portals, dashboards, SaaS, headless commerce
Content-heavy sites, agencies
Performance-critical, embeddable widgets
Large enterprise monoliths

The modern React stack in 2026.

Our default configuration for production-grade websites and web applications. Depending on your scope we substitute components, but these are the building blocks we start with by default.

Core & framework

React 18+, Next.js 14+ App Router, RSC

We start with a recent React release using the Next.js App Router and React Server Components wherever they fit. Server components render as much as possible on the server so the browser bundle stays small, while client components run only where interactivity is needed. For projects without an SSR requirement we choose Vite with react-router or TanStack Router, which are lighter and faster than a full Next.js setup when that is not needed.

TypeScript & validation

TypeScript strict, Zod, generated types

Every React codebase we build is TypeScript-only, with strict mode enabled and no any escape hatches. API contracts are type-safe: for REST we generate types from OpenAPI, and for GraphQL we use GraphQL Code Generator. On the input side, we validate runtime data with Zod, covering both forms and external payloads, so the boundary between "what the compiler knows" and "what the browser receives" is explicit.

Data & state

TanStack Query, Zustand, Redux Toolkit

TanStack Query is our default for server state, handling caching, refetching, optimistic updates and mutations within one consistent model. For client state, we use Zustand in most cases and reserve Redux Toolkit for when complexity genuinely calls for Redux DevTools and time-travel debugging. Global UI state, such as modals, toasts and theme, runs on a lightweight Zustand store.

UI & design system

Tailwind, shadcn/ui, Radix Primitives

Tailwind CSS for utility-first styling, linked to design tokens from your brand identity. shadcn/ui provides accessible, copyable components built on Radix primitives: rather than a closed component library, you copy the components into your own codebase and adapt them. For clients with a strong brand we build on that and publish an internal UI package via Storybook with visual regression tests.

Forms & tables

React Hook Form, TanStack Table

React Hook Form for high-performance forms with minimal re-renders and Zod validation on both sides. TanStack Table for data grids: it is headless, so styling stays entirely yours, while sorting, filtering, pagination, virtualisation and column pinning come ready to use. For form-heavy portals, this combination saves sprints of boilerplate that would otherwise be written by hand.

Routing & data loading

Next.js routes, TanStack Router, Server Actions

For Next.js projects we use the App Router, with file-based routing, layouts and parallel routes. Data loading happens through async server components, or through Server Actions for mutations, with streaming SSR where it improves TTFB. For pure SPAs we choose TanStack Router, which offers type-safe routes, a loader API that works well alongside TanStack Query, and search-parameter validation with Zod.

Testing & quality

Vitest, Playwright, Testing Library

Vitest for unit and integration tests, React Testing Library for components, and Playwright for end-to-end flows in real browsers. Storybook with Chromatic or Playwright snapshots covers visual regression. Accessibility is built in from the start, with axe-core running in CI, semantic roles, focus management and contrast checks against WCAG 2.2 AA, rather than being a separate phase at the end.

Hosting & edge

Vercel, Netlify, Cloudflare, own Node

For Next.js, Vercel is the most convenient route, offering preview deployments per pull request, edge rendering and automatic cache invalidation. Cloudflare Pages and Workers suit edge-first scenarios or teams already on the Cloudflare stack, and Netlify works well for Astro and React projects. Where compliance or cost requires it, we run Next.js in standalone mode on your own Node server within your VPC on AWS, GCP or Azure, so you are not tied to a single provider.

Monitoring & analytics

Sentry, Vercel Analytics, PostHog

Sentry for JavaScript errors and performance traces, with source maps and release tracking. Web Vitals via Vercel Analytics or a privacy-friendly alternative. PostHog for funnels, feature flags and phased rollouts. Feature flags are part of the architecture from day one.

CI/CD & security

GitHub Actions, Dependabot, OWASP checks

GitHub Actions for pull request checks (lint, type-check, tests, build) and preview deployments. Dependabot or Renovate for dependency updates, with OWASP dependency-check and npm audit in CI. For authentication, we choose NextAuth/Auth.js, Clerk or a custom OIDC integration with your identity provider.

Three flavours of React engagement.

Depending on where you stand and what it will deliver. We'll advise which flavour suits you in the first conversation: no fixed format, but clear outlines.

SPA engagement · fixed sprint budget

Customer portal or dashboard as a single-page app

An interactive portal or dashboard without public SEO pressure: TanStack Router, TanStack Query, shadcn/ui and your own design token set. Authentication via SSO or magic link, a fine-grained role model and an API layer that we build ourselves where needed. The broader SPA context is covered on custom single-page application development.

Vite + ReactTanStack RouterSSOshadcn/ui
Next.js engagement · fixed sprint budget

Public website or webshop with SSR and RSC

Next.js with the App Router and server components for public pages that search engines and users need to load quickly. Headless CMS of your choice (Sanity, Strapi, Storyblok), e-commerce integrations via Shopify, BigCommerce or commercetools, and server actions for mutations. Edge rendering, ISR and partial pre-rendering where they improve TTFB.

Next.js App RouterRSCHeadless CMSVercel or self-hosted Node
Design system engagement · fixed sprint budget

Own component library + monorepo for multiple channels

A shared React component package for your website, customer portal and, if relevant, a React Native app. Design tokens via Style Dictionary, Storybook as a living style guide, visual regression tests and generated API clients in a monorepo (Turborepo or Nx). For brands that want to consolidate their digital presence into a single source.

MonorepoStorybookDesign tokensVisual regression
Not yet sure about a large project?

Test your idea first: a working prototype in 1 day

With OneDayBuild, we turn your idea into something tangible in one day for €1,150, so you can see whether further development is worth the investment. Decide to go ahead with the full build? Then we credit the full cost.

Explore OneDayBuild →

What you get at the end.

A production-grade React codebase, plus everything around it so you can run and continue developing the site or web application yourself. No vendor lock-in, no hidden licences, no inaccessible configuration.

  • The live applicationProduction and staging environments on your own Vercel, Netlify, Cloudflare or cloud account. You are the legal and operational owner of the runtime.
  • Codebase, TypeScript-only and testedFull source in your own GitHub organisation, strict TypeScript, lint and format configuration, unit and e2e tests, and GitHub Actions for PR checks and deployments.
  • Design system and StorybookComponents documented in Storybook, design tokens as a shared package, and visual regression tests. Usable by your own developers and designers without us as a bottleneck.
  • Documentation and ADRsBuild instructions, deployment runbook, Architecture Decision Records and an overview of all third-party services with their roles and costs.
  • Monitoring from day oneSentry for errors and performance traces, Web Vitals, log pipeline and uptime checks. Includes alerting configuration for the first week.
  • Handover to your teamTwo knowledge-transfer sessions, a walkthrough of the architecture and pair programming with your developers who will maintain the codebase. Accessibility report where EN 301 549 or WCAG 2.2 AA is required.
  • Maintenance contract (optional)Ongoing monitoring, dependency updates, security patches, performance tuning and further development. Fixed monthly fee with clear response-time levels per ticket priority.

How a React engagement works.

1

Introduction and scoping

A conversation in which we understand what you want to build, for whom and in which stack it fits. We test whether React is the right answer for your case, and we say so honestly when Astro, Vue or a Laravel back office would be quicker or better suited. By the end of the conversation you have a direction, an initial scope outline and an idea of the engagement.

2

Architecture and design sprint

We draw up a sprint plan, sketch the architecture, choose the specific stack components (Next.js or Vite, headless CMS, hosting, auth) and, where it adds value, run a short design sprint for the key screens. For production apps, a spike runs in parallel on the most demanding performance screen or the trickiest integration, so that our assumptions are validated up front.

3

Building in sprints

Every sprint delivers a working preview deployment per pull request. You test along with us, as do your stakeholders, and feedback is incorporated incrementally. Core flows come first, edge cases later. Code reviews, automated tests, accessibility checks and performance budgets are part of the cycle, not something tacked on once at the end.

4

Hardening and go-live

Before go-live, we run a focused hardening sprint: load testing, Lighthouse audits, a security scan, a penetration test where relevant, and a DNS cutover plan. For public sites, we set up redirects from the old URL structure and provide a new XML sitemap.

5

Operations and ongoing development

After launch, the team keeps a close eye on monitoring, processes the first round of feedback and ensures dependencies stay up to date. Further development continues in new sprints, with priorities driven by data and user feedback. Your team can take over ownership whenever it is ready, with no lock-in.

For those for whom we build React websites and web applications.

Four target groups for whom our way of working with React delivers proven value.

Product organisations

SaaS front-ends and customer portals

You have a product with a growing user base and an API you maintain yourselves. We build the web app your customers use — dashboard, settings, SSO, roles and organisation management — and make sure your team can continue developing it.

Scale-ups

Headless commerce and marketplaces

You are outgrowing what a Shopify theme or a Magento front-end can handle and want the storefront in-house. Next.js for the public side, a separate React app for admin, and a team that understands performance and SEO.

Enterprises

Modernising legacy front-ends

An outdated AngularJS, jQuery or legacy PHP front-end that can no longer be developed safely. We migrate in phases to React, with clear knowledge transfer. For extra capacity, you can also hire React developers.

Agencies & brands

Design-system-driven brand experiences

For brands consolidating their digital presence into a single design system that powers the website, customer portal and, where relevant, a mobile app. We deliver the React implementation and the Storybook documentation. You keep control over the brand and channels.

Fabian van Dijk Business Developer · Appfront

Your first point of contact for React JS projects at Appfront. Reach us at fabian.vandijk@appfront.nl for a no-obligation conversation about whether React JS suits your stack, and when Astro, Vue or a Laravel back office is the honest answer.

Frequently asked questions about React JS.

What clients usually want to know before we start.

React or Next.js — what is the difference in practice?
React is the UI library; Next.js is a meta-framework that builds on React with routing, server rendering, server actions and image optimisation. For public sites under SEO pressure, we choose Next.js (App Router, React Server Components). For private apps — customer portals, dashboards — we often opt for a lighter Vite setup with TanStack Router.
Next.js or Astro with React islands — when to choose which?
We choose Astro with React islands for content-heavy sites where most pages can be static, using React only where interaction is needed — a filter widget or a configurator. We choose Next.js when the entire product is a React app with dynamic data and complex routing. Astro with React often works well for marketing sites paired with a separate portal.
React Server Components — do you use them as standard?
Where we use the Next.js App Router: yes. Server Components move work from the browser to the server, reduce the JS bundle and make data fetching more orderly. We reserve Client Components for what is truly interactive: forms, toggles, charts, drag-and-drop. For some existing Next.js codebases, the Pages Router remains the pragmatic choice.
How do you choose between Zustand, Redux Toolkit and React Context?
Default: TanStack Query for server state, Zustand for lightweight client state, and React Context only for dependency injection of services and themes. We choose Redux Toolkit when complexity becomes so high that Redux DevTools and time-travel debugging are worth it, which in practice is rare. For forms, React Hook Form is the right layer.
Do you work with a design system, or do you build one?
Both are possible. If you have a design system in Figma with tokens and components, we implement it via Tailwind config and shadcn/ui. If you have nothing yet, we set up a minimal design system with tokens and a component library in Storybook. For brands that feed multiple channels, we build a shared monorepo package used by the web, the customer portal and, where relevant, React Native.
How do you handle authentication and SSO?
Depending on your requirements, we choose NextAuth/Auth.js for Next.js projects, Clerk for a quick out-of-the-box route, or a custom OIDC or SAML integration with your IdP (Azure AD, Google Workspace, Auth0, Keycloak). For B2B portals we work with a role and organisation model. Session management happens server-side wherever possible, with no tokens in localStorage.
What about SEO: is React a problem for search engines?
Not with SSR or static generation. For public sites we always choose Next.js with SSR/SSG, or Astro with React islands. For closed portals that should not be indexed, SEO does not matter and a lighter Vite SPA can work perfectly well. We deliver structured data, canonical URLs and sitemaps as standard.
How do you approach performance and Core Web Vitals?
Server-render what you can, client-render what you must. RSCs to reduce the bundle, code-splitting per route, image optimisation via next/image, and font loading via subsetting and font-display swap. Lighthouse budgets in CI, and Web Vitals via Real User Monitoring in production. For heavy tables, virtualisation via TanStack Virtual.
What about accessibility?
WCAG 2.2 AA as the target, semantic roles via Radix primitives, focus management for modals and menus, keyboard navigation tested as standard, screen reader testing with VoiceOver and NVDA, contrast checks and axe-core in CI. For projects under EN 301 549, we deliver an accessibility report with known issues and mitigations.
Which backend do you most often pair with React?
Three routes. Laravel for clients with PHP expertise or those who want a rich admin panel with Filament. Node.js (NestJS, Hono, Fastify) for full-TypeScript stacks where code and types are shared between frontend and backend. Python (FastAPI, Django) for ML- or data-heavy applications.
Vendor lock-in: will we be tied to Vercel later?
No. Next.js runs in standalone mode on your own Node server in your VPC at AWS, GCP or Azure. Edge functions can also run on Cloudflare Workers. Where it suits your compliance requirements, we deliberately move the database, queues and object storage away from Vercel. Vercel is a convenience, not a requirement.
Can we have our existing React codebase reviewed?
Yes. We carry out a focused code review on architecture, performance, accessibility and security, and deliver a written report with priorities: quick wins, medium-term work and strategic decisions. For longer-term capacity questions afterwards, we can join your team through hiring a React developer.

Talk to us about your React JS project.

A free, no-obligation half-hour introductory call. We'll listen to what you want to build, look at how it fits your existing stack and team, and give you honest advice (React, Vue, Astro or something entirely different) rather than automatically pitching our own work.

Edit content