Eduardo de SouzaEduardo de Souza
← Work

WA Belloa Design System

Product Design Manager  ·  3 Designers, 2 PMs, 3 Engineers  ·  Ongoing


Context

WA Technology is a B2B iGaming provider offering white-label templates across sportsbook, casino, lottery, and fantasy verticals. Following a series of company mergers, the product ecosystem was highly fragmented — each acquired platform had its own tech stack, its own legacy components, and in many cases no original design files to work from.

The Challenge

Before Belloa, our team of three designers operated in a reactive environment. We were working without source files, scraping live screens with plugins just to have something to edit. Each product vertical had its own developers working in isolation, building on incompatible legacy libraries with no shared standards.

The problem wasn't just visual inconsistency — it was structural. We needed to fix the foundation before we could build anything that would last.

Before Belloa — isolated verticals

Sportsbook / Casino
Betstudios teamOwn library → ReactSource files missing
Fantasy
Ukrainian FE devsLegacy stackNo source files
Platform
Unknown teamReact? .NET?No oversight
Lottery
Estonian FEUnclear stackDiscontinued
Affiliates
NETEC teamThird-partyDiscontinued
Belloa design system
Sportsbook / Casino
Radix + semantic tokens · React
Fantasy
Shared component library
Platform
44-token architecture

Audit and Foundation

We started by mapping everything that existed. A system-wide audit across every front-end product under the WA umbrella — cataloguing components, headers, footers, interaction patterns, and duplicated logic. From that audit, we retroactively converted the live products into a foundational set of Figma components, giving us a baseline to work from rather than a blank canvas.

We also mapped how different verticals interacted — particularly how fantasy games were embedded as iFrames inside sportsbook and casino platforms — to ensure any new component architecture would be compatible across the stack.

Audit spread — components, headers, footers mapped across WA product ecosystem

The Radix Decision

Rather than build primitives from scratch, we made the strategic decision to adopt Radix UI as the foundation. Radix provides unstyled, accessible React primitives built on ARIA best practices — we could layer iGaming-specific styling on top without reinventing accessibility or fighting browser behaviour.

This eliminated an entire class of problems and meant every WA product and white-label client inherited a robust accessibility foundation from day one.

Radix UI unstyled React · ARIA/W3C
WA Design System
SBK library
WA template
Client 1
Client 2
Client 3
Casino library
WA template
Client 1
Client 2
Client 3
Platform library
Wireframes
Products
Fantasy library
Pick'em
Free to Play
Client brands

Pick'em as the Proving Ground

In parallel with the audit, the team was designing Pick'em — a greenfield fantasy product built entirely from scratch. That clean slate made it the perfect testing environment for the new component library. Every decision we made in Belloa was stress-tested through Pick'em in real time. It worked well enough that Pick'em became the internal gold standard for how all other verticals should be built.

Read the Pick'em case study →

Building While Shipping

A design system is never built in isolation. While we were establishing the token architecture, the business still needed to move. We ran a dual-track approach — designing and delivering new white-label projects concurrently with building the Belloa library. Each new operator became a live test of the system's flexibility.


Token Architecture

The token system went through three distinct phases as the platform matured and engineering moved to React:

V1.0

84 tokens. Functional but brittle — every new white label required significant manual rework.

V2.0

68 tokens. First reduction pass, prompted by Pick’em’s complexity. Cleaner but still not scalable.

V3.0

44 tokens. A full semantic restructure. Brand logic decoupled from functional logic. Rapid operator onboarding, no breaking changes.

surface/page
Base surface level — primary background layer
neutral-dark/100
surface/layer-1
Slightly lighter — cards and containers
neutral-dark/200
surface/layer-2
Floating elements and modals background
neutral-dark/300
surface/overlay
Scrims and backdrop overlays
overlay-black/100
surface/accent
Brand accent surface
main-dark/300
surface/inverse
High-contrast inverse background
neutral-dark/1100
content/primary
Primary text and icons — highest contrast
neutral-dark/1200
content/secondary
Secondary labels and metadata
neutral-dark/1100
content/subtle
Subtle text — disabled and decorative
neutral-dark/1000
content/on-action
Text and icons placed on action surfaces
neutral-dark/1200
content/inverse
Text on inverse/light backgrounds
neutral-dark/100
action/primary
Primary CTA — single most important action
main-dark/800
action/secondary
Supporting action — lower visual weight
main-dark/alpha/300
action/neutral
Neutral actions on dark surfaces
overlay-white/300
action/disabled
Inactive and disabled action states
neutral-dark/800
state/layer-hover
Hover state on dark surfaces
overlay-white/200
state/layer-pressed
Pressed and active interaction layer
overlay-black/500
border/default
Standard structural border
overlay-white/800
border/subtle
De-emphasised container border
overlay-white/200
border/active
Selected or active component border
main-dark/800
border/focus
Keyboard focus ring
main-dark/alpha/400
status/critical-fg
Error and destructive foreground text
red-dark/800
status/critical-bg
Error state container background
red-dark/400
status/success-fg
Success and confirmation foreground
green-dark/1100
status/success-bg
Success state container background
green-dark/800
status/warning-fg
Warning and caution foreground
yellow-dark/1100
status/warning-bg
Warning state container background
yellow-dark/alpha/300

The refined architecture follows a tiered flow: Radix UI primitives map into semantic tokens, which drive themed components. Brand-specific logic is fully decoupled from core functional logic — any operator can be onboarded without touching the system's foundations.

Select token
Radix scale
800Colors/Purple/8
Primitive
Colors/Purple/8#7c3aed
Semantic token
action/primarymain-dark/800

Used in

CTA buttonsActive nav itemSelected stateToggle on

Decoupling

A significant engineering initiative — Decoupling — ripped all interface modules out of the legacy architecture and rebuilt them properly in React. For the design team, this was the unlock we had been waiting for.

We rebuilt every component in Figma from the ground up, mirroring the new React architecture 1:1. For the first time, we had the technical capacity to introduce proper variants for complex modules — headers, footers, navigation blocks — without legacy CSS fighting every change.


Impact

Transformed a disjointed post-merger ecosystem into a unified product design language.

Reduced token architecture from 84 to 44 — accelerating white-label onboarding across 15+ operators globally.

Figma components mirror React architecture 1:1, eliminating a full class of QA errors.

Shifted the design team from reactive screen-scrapers to a proactive, empowered design organisation.


Belloa is still evolving. Token documentation via Storybook and Supernova is underway. The system that started as an audit of broken screens now powers white-label platforms across Europe, Brazil, and beyond — and it's built to keep scaling.

Get in touch →