Oct 2016 – Feb 2020 · LeoVegas Group, Stockholm

LeoVegas Gaming Platform

Frontend engineer — game experience, responsible gambling features, internal CMS

ReactReduxRelayGraphQLstyled-componentsNode.js

LeoVegas operates a real-money gaming platform across more than a dozen regulated markets — UK, Spain, Italy, Sweden, Australia, and more. Each market has its own licensing authority with specific technical requirements: session limits in the UK, reality checks in Spain, self-exclusion systems in Sweden.

I worked on two parts of the platform: Fulcrum Frontend, the consumer-facing application used by hundreds of thousands of players, and LeoAdmin, the internal CMS that operators use to manage the game catalogue, markets, and payment configurations. The same codebase compiled into separate desktop, mobile, and tablet applications.

Consumer app, internal CMS, and five regulated markets — all from one codebase. Highlighted features are what I owned: the full game experience layer and the responsible gambling tools legally required in each market.

🖥Desktop
📱Mobile
Tablet
one codebase
parallel-webpack
three builds
Game experience
Game lobbyGame launchLive CasinoIn-game deposit
Responsible gambling
Reality CheckSession limitsSelf-exclusionDeposit limits
Account
Auth + KYCBankIDDepositsWithdrawals
Data layer
Relay + GraphQLFragment-based queries
type-safe, no over-fetching
API Gatewayleo-api-gateway-service
UK
United Kingdom
Session time limits + Reality Check
ES
Spain
Balance summary every 30 min
IT
Italy
Game blocking + local content
SE
Sweden
Self-exclusion (Spelpaus)
AU
Australia
Age verification + limits
Game catalogue
Live Casino config
Jackpot settings
Market rules
Payment config
i18n content
CouchDBGame & config data
GraphQL APIEarly internal adoption
Node.js / ExpressServer + REST API

The hardest constraint was regulatory compliance across markets. The same game launch flow had to behave differently depending on which country the player was in: show a session time reminder in the UK after 60 minutes, display a balance summary in Spain every 30 minutes, block certain games entirely in Italy. This couldn't be hacked with if/else — it needed a clean architecture that let market-specific rules compose with the core flow without making the codebase unmaintainable.

One codebase, three platforms

The Fulcrum codebase compiled into three distinct applications — desktop, mobile, and tablet — using parallel-webpack with separate build configurations. Shared business logic lived in a common layer, while platform-specific UI components were conditionally included. This avoided code duplication while letting each platform optimise its own layout and interaction patterns.

Relay + GraphQL for precise data fetching

The platform used Relay as its GraphQL client, with the relay-compiler generating type-safe query code at build time. Each component declared exactly the data it needed via fragments — no over-fetching, no prop-drilling of unused fields. For a game lobby with dozens of game tiles each needing different metadata, this made a measurable difference to payload size and render performance.

Responsible gambling compliance layer

I built and maintained the responsible gambling features: Reality Check (periodic session summaries shown during play), session time limits, deposit limits, and self-exclusion flows. Each feature had market-specific variants — the Spanish Reality Check had different content and timing than the UK version — while sharing the same underlying session tracking logic. Getting these right mattered: non-compliance could cost the company its operating licence.

Game catalogue management (LeoAdmin)

LeoAdmin was the internal CMS that operators used to manage the game catalogue across markets. I added Live Casino configuration, jackpot settings, and market-specific game metadata (different titles, thumbnails, and availability rules per country). The admin connected to CouchDB for game data and exposed both a REST API and an early GraphQL interface — one of the first GraphQL implementations in the company.

Migration to React at scale

When I joined, parts of the platform were still on older JavaScript patterns. I contributed to the migration to React across the codebase — converting legacy views to components, introducing Redux for state management, and establishing patterns for how game data flowed from the API through to the UI. The migration happened incrementally without taking the platform offline.

ReactReduxRelayGraphQLstyled-componentsWebpackNode.jsCouchDBJestEnzymeLaunchDarklySSR