Case study — Buxholm

One codebase. Every brand. Zero forks.

Buxholm needed a white-label iGaming platform where everything an operator sees is configuration, not code — and where standing up a new brand never means forking the product. We designed and engineered it end to end: a shared React component library, eleven runtime-switchable brands, a provider-agnostic integration layer, and a security-first backend-for-frontend — measured at a Real Experience Score of 99 on real visitors.

  • eleven live brands from one codebase — no forks
  • provider-agnostic backend, swappable by type contract
  • Real Experience Score 99, Cumulative Layout Shift 0
The Buxholm casino running the Turbo brand skin, with Ruby and Nova skins of the same build behind it
Client
Buxholm
Sector
iGaming — casino, sportsbook & player account
Role
Product design & frontend engineering, end to end
Platform
White-label — 11 brands, one shared codebase
Stack
Next.js 16 · React 19 · TypeScript
The challenge

The problem with running many brands

Running many casino brands usually means running many codebases — a fork per operator, each drifting from the last, every bug fixed as many times as there are brands. It is the kind of maintenance surface that grows linearly with success and quietly eats a business.

Buxholm wanted the opposite: one product that could wear any brand, switch skins live on screen, repoint to a different backend vendor without a code change, and still feel hand-built for each operator. That only works if the architecture refuses to hardcode anything — not a color, not a spacing value, not a backend URL, and never a player's session token in the browser.

Every brand, one codebase

One build, wearing every brand

These are the same components, the same application code, and the same integration layer — rendered under different theme files. No screen is redrawn per brand; each brand is one SCSS file of custom-property values plus a config object, switched live on screen.

  • The Buxholm casino rendered in the Turbo brand skin
    Turbotheme-web
  • The Buxholm casino rendered in the Gecko brand skin
    Geckotheme-gecko
  • The Buxholm casino rendered in the Ruby brand skin
    Rubytheme-ruby
  • The Buxholm casino rendered in the Nova brand skin
    Novatheme-nova
  • The Buxholm casino rendered in the Cobalt brand skin
    Cobalttheme-cobalt
  • The Buxholm casino rendered in the Jupiter brand skin
    Jupitertheme-jupiter
  • The Buxholm casino rendered in the Jade brand skin
    Jadetheme-jade
  • The Buxholm casino rendered in the Whale brand skin
    Whaletheme-whale
  • The Buxholm casino rendered in the Ape brand skin
    Apetheme-ape
  • The Buxholm casino rendered in the Sage brand skin
    Sagetheme-sage
What we built

The architecture behind the brand

Each piece exists to keep one promise: a new brand is configuration, never a fork.

01

A theming engine with zero hardcoded values

Every visual property of every component resolves to a CSS custom property — roughly 3,100 per brand. A brand is a single SCSS file plus a config object; switching one swaps a class on <body>, instantly, with no rebuild, no redeploy, and no per-brand component fork.

02

Eleven brands on one component library

96 components across 65 folders, ~43,000 lines of themed SCSS, all rendering from one shared library. A defect fixed once lands for every brand at the same time; a feature built once switches on across all of them. The tenth operator carries the maintenance surface of the first.

03

Provider-agnostic integration layer

Ten backend domains and ~125 typed methods over one hardened HTTP core. Each domain repoints to a different host or vendor by environment variable, and can be replaced wholesale by satisfying an exported TypeScript type — with no change at the hundred-plus call sites across the UI.

04

A security-first backend-for-frontend

~50 cookie-authenticated, server-only endpoints on Better Auth in stateless token-broker mode. The player's session token lives in a signed, httpOnly cookie and never reaches client JavaScript; every handler degrades to a valid, empty shape instead of collapsing the page.

05

Demo Studio — a live in-product configurator

A non-engineer can reskin and re-lay-out the entire site on screen: theme, navigation model, hero variant, card density, feature toggles — applied live with no reload, resettable in one click. Onboarding a new operator becomes a configuration session, not a development project.

06

Multi-currency, crypto-aware wallet

Fiat, crypto, and virtual accounts side by side, formatted per asset type — eight-decimal precision for crypto, two for fiat — with deposit, withdrawal, and payout rails and reconciled transaction history.

07

Content, i18n, and compliance built in

A typed Decap CMS layer (~20 collections) so editorial is decoupled from code, locale-routed internationalization with mandatory fallbacks, KYC (Sumsub + KYCAID), responsible-gaming limits, and per-domain geo-rules — the surface a licensed operator actually needs.

08

Performance engineered for conversion

React Server Components, parallelized data fetching, incremental static regeneration, deferred third-party SDKs, and self-hosted fonts — pages that rank because they are server-rendered and fast, and convert because first paint is quick and nothing shifts under the visitor.

Results

Measured in the field

99
Real Experience Score
0
Cumulative Layout Shift
11
Runtime brands
~3,100
Themeable properties / brand
~125
Typed API methods
0.09s
Time to First Byte

Every Core Web Vital sits inside Google's “good” band — First Input Delay at 6 ms, Interaction to Next Paint at 80 ms, First Contentful Paint at 1.03 s, Largest Contentful Paint at 2.13 s — measured on real visitors in production, not a single synthetic run. At the route level the homepage scores 99 and the live sports experience scores 100.

Under the hood

The stack

  • Next.js 16
  • React 19
  • TypeScript 5.8
  • Turborepo + pnpm
  • Better Auth
  • Redux Toolkit
  • Radix UI
  • Framer Motion
  • Zod
  • SCSS Modules + CSS custom properties
  • Decap CMS
  • Vercel Speed Insights

Want a frontend that scales to every brand?

We designed and built Buxholm end to end — the theming engine, the integration layer, the security model, the performance. Tell us what you're building and we'll tell you exactly how we'd approach it.

15 min · no pitch · usually within 24h