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



- 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 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.
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.
Turbotheme-web
Geckotheme-gecko
Rubytheme-ruby
Novatheme-nova
Cobalttheme-cobalt
Jupitertheme-jupiter
Jadetheme-jade
Whaletheme-whale
Apetheme-ape
Sagetheme-sage
The architecture behind the brand
Each piece exists to keep one promise: a new brand is configuration, never a fork.
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.
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.
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.
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.
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.
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.
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.
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.
Measured in the field
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.
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