Case Studies

Casino Platform Builder

White-label template
×

Case stages

Select a stage to see details.

Product: a B2B white-label platform used to launch and manage multiple casino brands ("clients") from one shared foundation.

Each client needs its own visual identity and configuration — but the underlying product logic is largely the same. That gap between "must look different" and "should work the same way underneath" is the whole design problem this case is about.

Collaboration: Product Owners, Product Designers, Business Analysts, Front-end Architects, Developers and QA — organized as specialized roles with explicit handoffs rather than one generalist team.

My scope: discovery, product modelling, design-system architecture, responsive page composition, theme configuration, component contracts, and the design-to-development workflow connecting all of it.

Where it started

A configurator already existed. Teams could customize individual parts of a casino product — navigation, hero banners, catalogues, VIP sections, tournaments, promotions — and preview the result before launch.

General
Navigation
Hero banner
Game page
Promotions
Hero banner Type 1

But that configuration was scattered across separate product sections and predefined, component-level settings. Scaling this to more clients needed a coherent system across pages, reusable widgets, themes, responsive behavior and versioned capabilities — not more of the same per-client tuning.

Продукт: B2B white-label платформа для запуска и управления несколькими казино-брендами («клиентами») на одной общей основе.

Каждому клиенту нужна своя визуальная идентичность и конфигурация — но продуктовая логика при этом во многом одинакова. Разрыв между «должно выглядеть по-разному» и «должно работать одинаково внутри» — и есть вся дизайн-задача этого кейса.

Коллаборация: Product Owner'ы, продуктовые дизайнеры, бизнес-аналитики, FE-архитекторы, разработчики и QA — как отдельные роли с явной передачей задач, а не одна универсальная команда.

Моя зона ответственности: discovery, продуктовое моделирование, архитектура дизайн-системы, адаптивная композиция страниц, настройка тем, контракты компонентов и весь workflow между дизайном и разработкой.

С чего всё началось

Конфигуратор уже существовал. Команды могли настраивать отдельные части казино-продукта — навигацию, hero-баннеры, каталоги, VIP-разделы, турниры, промо — и смотреть предпросмотр перед запуском.

General
Navigation
Hero banner
Game page
Promotions
Hero banner Type 1

Но эта настройка была разбросана по отдельным разделам продукта и предопределённым настройкам на уровне компонентов. Масштабирование на больше клиентов требовало цельной системы для страниц, переиспользуемых виджетов, тем, отзывчивого поведения и версионируемых возможностей — а не ещё больше точечных настроек под каждого клиента.

The company needed to support many visually distinct white-label products without maintaining a separate design and code path for every client.

The previous operating model created recurring, compounding issues:

  • duplicated design work across client setups;
  • repeated implementation of similar sections and behaviors;
  • inconsistent component variants between products;
  • design and implementation quietly drifting apart — the same token meaning a different value in Figma versus in code;
  • manual propagation of fixes — one bug fix had to be applied N times;
  • growing design and technical debt;
  • slow adoption of design-system updates;
  • limited visibility into which product used which component version.

The system could scale the number of clients. It was scaling the cost of maintaining them just as fast.

How might we give operators enough flexibility to create visually distinct products while preserving usability, responsiveness and system consistency?

Not only a UI-kit problem — it needed a shared product model connecting design tokens, reusable components, page composition, configuration schemas and versioning, treated as one system.

Компании нужно было поддерживать много визуально разных white-label продуктов без отдельного дизайн- и код-пути для каждого клиента.

Прежняя операционная модель создавала повторяющиеся, накапливающиеся проблемы:

  • дублирование дизайн-работы между настройками клиентов;
  • повторная реализация похожих секций и поведений;
  • несогласованные варианты компонентов между продуктами;
  • дизайн и реализация тихо расходились — один и тот же токен означал разное значение в Figma и в коде;
  • ручное распространение фиксов — один баг-фикс приходилось применять N раз;
  • растущий дизайн- и технический долг;
  • медленное внедрение обновлений дизайн-системы;
  • ограниченная видимость того, какая версия компонента используется в каком продукте.

Система могла масштабировать количество клиентов. Но она так же быстро масштабировала стоимость их поддержки.

Как дать операторам достаточно гибкости для визуально разных продуктов, сохранив юзабилити, отзывчивость и согласованность системы?

Это была не только задача UI-кита — требовалась общая продуктовая модель, связывающая токены, переиспользуемые компоненты, композицию страниц, схемы конфигурации и версионирование в одну систему.

Before proposing a direction, we traced the actual setup process end to end to separate genuine client differences from accidental ones. We reviewed:

  • how a new product was created from an existing template;
  • which design and development tasks were repeated across clients;
  • which components diverged most often, and why;
  • where client requests introduced one-off, unrepeatable behavior;
  • whether differences were visual, structural or functional;
  • how updates actually moved from design into implementation;
  • where manual handoffs introduced inconsistency.

Key insight

Most client differences turned out to be expressible through five reusable layers rather than bespoke code:

Five layers of client difference
Design tokenscolor, typography, spacing, radius, elevation
Compositionpages, sections, widget order, layout
Parameterscomponent content, variants, behavior
Feature flagscapabilities available to a specific client
Version contractcompatible template and schema version
A client is settings, not a separate codebase.

Прежде чем предлагать направление, мы проследили реальный процесс настройки от начала до конца, чтобы отделить настоящие различия клиентов от случайных. Мы изучили:

  • как новый продукт создавался из существующего шаблона;
  • какие дизайн- и dev-задачи повторялись между клиентами;
  • какие компоненты расходились чаще всего и почему;
  • где запросы клиентов создавали одноразовое, неповторяемое поведение;
  • были ли различия визуальными, структурными или функциональными;
  • как обновления реально доходили от дизайна до реализации;
  • где ручные передачи задач создавали несогласованность.

Ключевой инсайт

Большинство различий между клиентами можно было выразить через пять переиспользуемых слоёв, а не через отдельный код:

Пять слоёв различий между клиентами
Дизайн-токеныцвет, типографика, отступы, радиусы, elevation
Композициястраницы, секции, порядок виджетов, layout
Параметрыконтент компонента, варианты, поведение
Feature-флагивозможности, доступные конкретному клиенту
Версионный контрактсовместимая версия шаблона и схемы
Клиент — это настройки, а не отдельная кодовая база.

The core hypothesis: if brand differences can be fully described through the five layers above, a shared template can replace per-client forks without losing the flexibility operators actually need. Broken into testable product principles:

  • One shared core — all clients run on one maintained foundation instead of independent forks.
  • Configuration over duplication — brand and layout differences are described through settings, not copied screens or components.
  • Controlled flexibility — operators get real customization power, but not enough to break accessibility, responsiveness or system consistency.
  • Shared improvements — a new capability is built once into the common platform and made available via parameters or feature flags.
  • One design-to-code language — Figma variables, component properties, front-end tokens and constructor schemas describe the same system.
  • Safe evolution — existing clients stay stable while the shared platform keeps improving underneath them.

Each of these was a bet to validate against real usage, not an assumption treated as settled on day one.

Основная гипотеза: если различия брендов можно полностью описать через пять слоёв выше, общий шаблон может заменить форки под каждого клиента без потери нужной операторам гибкости. Разложена на проверяемые принципы:

  • Одно общее ядро — все клиенты работают на одной поддерживаемой основе вместо независимых форков.
  • Конфигурация вместо дублирования — различия бренда и layout описываются настройками, а не копированием экранов или компонентов.
  • Контролируемая гибкость — у операторов есть реальная сила кастомизации, но не настолько, чтобы сломать доступность, отзывчивость или согласованность системы.
  • Общие улучшения — новая возможность строится один раз в общей платформе и становится доступна через параметры или feature-флаги.
  • Один язык дизайна и кода — переменные Figma, свойства компонентов, фронтенд-токены и схемы конструктора описывают одну и ту же систему.
  • Безопасная эволюция — существующие клиенты остаются стабильными, пока общая платформа продолжает улучшаться под ними.

Каждый из этих пунктов был гипотезой, которую нужно было проверить на реальном использовании, а не допущением, принятым как данность с первого дня.

We shaped the system as four connected layers rather than one big configurator:

The four layers of Master Layout
1. Shared product templatereusable pages, behaviors, platform capabilities
2. Flexible design systemtoken-driven components, one library, many identities
3. Visual constructorcompose pages, themes, forms — no implementation work
4. Versioned configuration modeltokens + composition + parameters + flags + version

Alternatives considered

Rejected

Keep the per-client fork model. Fast to start — but this was the status quo already producing N codebases and repeated manual fixes. It was the problem, not a solution.

Rejected

Extend component-level settings only, without touching composition or tokens. Lower engineering lift, but couldn't address structural/visual divergence between brands.

Chosen

Full configuration model across five layers — the only option addressing visual identity, page structure and safe upgrades together, instead of solving one and leaving the rest as future debt.

The builder workspace

ML Constructor combined four areas: product navigation, a widget library, a responsive canvas, and a contextual inspector for parameters and design-system settings. Operators could create pages, add widgets, arrange them on a grid, configure content/variants/behavior, switch breakpoints, manage brand schemes, preview components live, and import/export configuration.

Design-system architecture

The design system needed to function as product infrastructure, not a static component library:

Token pipeline — one source of truth
Figma Variables
Exported tokens
CSS vars + TS types
React components
Constructor schemas

A component variant available in Figma corresponds to an implemented variant and an explicit, configurable parameter in the builder — not three separate, drifting sources of truth.

Систему выстроили как четыре связанных слоя, а не один большой конфигуратор:

Четыре слоя Master Layout
1. Общий продуктовый шаблонпереиспользуемые страницы, поведения, возможности платформы
2. Гибкая дизайн-системакомпоненты на токенах, одна библиотека — много идентичностей
3. Визуальный конструкторсборка страниц, тем, форм — без работы разработки
4. Версионируемая модель конфигурациитокены + композиция + параметры + флаги + версия

Рассмотренные альтернативы

Отклонено

Оставить модель форков под каждого клиента. Быстрый старт — но это и был status quo, уже дававший N кодовых баз и повторные ручные фиксы. Это была причина проблемы, а не решение.

Отклонено

Расширить только настройки на уровне компонентов, не трогая композицию и токены. Меньше инженерных усилий, но не решает структурное/визуальное расхождение между брендами.

Выбрано

Полная модель конфигурации из пяти слоёв — единственный вариант, решающий визуальную идентичность, структуру страниц и безопасные апдейты одновременно, а не по отдельности.

Рабочее пространство конструктора

ML Constructor объединял четыре зоны: навигацию по продукту, библиотеку виджетов, отзывчивый canvas и контекстный инспектор параметров и настроек дизайн-системы. Операторы могли создавать страницы, добавлять виджеты, расставлять их по сетке, настраивать контент/варианты/поведение, переключать брейкпоинты, управлять брендовыми схемами, видеть live-превью компонентов и импортировать/экспортировать конфигурацию.

Архитектура дизайн-системы

Дизайн-система должна была работать как продуктовая инфраструктура, а не статичная библиотека компонентов:

Пайплайн токенов — единый источник правды
Figma Variables
Экспортированные токены
CSS-переменные + TS-типы
React-компоненты
Схемы конструктора

Вариант компонента, доступный в Figma, соответствует реализованному варианту и явному, настраиваемому параметру в конструкторе — а не трём отдельным, расходящимся источникам правды.

  • Quick mode vs. Expert mode — curated presets give a low-risk path to a coherent result fast, but cap how far an advanced user can push a brand. Expert mode exposes semantic tokens and component-level decisions at the cost of a steeper learning curve. We kept both.
  • Controlled flexibility vs. operator freedom — operators cannot break accessibility, responsive behavior or system consistency, even where a specific client request would prefer they could.
  • AI-assisted speed vs. system integrity — AI was explored for auditing variables and comparing Figma structure against implementation. Every actual design-system change still requires human owner approval — never auto-merged.
  • Opt-in minor upgrades vs. uniform versions — minor updates are additive and opt-in, so existing clients are never forced to change. The cost: different clients may sit on different minor versions at any given time.
  • Quick mode vs. Expert mode — готовые пресеты дают быстрый путь к согласованному результату с низким риском, но ограничивают продвинутого пользователя. Expert mode открывает семантические токены и решения на уровне компонента ценой более крутой кривой обучения. Оставили оба режима.
  • Контролируемая гибкость vs. свобода оператора — операторы не могут сломать доступность, отзывчивость или согласованность системы, даже если конкретный запрос клиента предпочёл бы обратное.
  • Скорость с AI vs. целостность системы — AI изучали для аудита переменных и сверки структуры Figma с реализацией. Любое реальное изменение дизайн-системы всё равно требует ручного подтверждения владельца — никогда не мёржится автоматически.
  • Необязательные минорные апдейты vs. единые версии — минорные обновления аддитивны и опциональны, поэтому существующих клиентов никогда не заставляют меняться. Цена: разные клиенты в любой момент времени могут быть на разных минорных версиях.

Validation here worked at the level of the system and its contracts, not (yet) as formal end-user usability testing with operators.

1
Business Analysis documents parameters, rules and edge cases before anything is built.
2
Design-System owner validates the component contract — a human gate, not an automatic merge.
3
QA verifies the shipped result against both the written spec and the Figma source.
4
The versioning contract acts as an ongoing safety net — a breaking change is a versioning failure by definition, not by chance.
Honest gap: direct usability validation with operators using the Constructor itself is the logical next step and isn't documented yet.

Валидация здесь работала на уровне системы и её контрактов, а не (пока) как формальное юзабилити-тестирование с операторами.

1
Бизнес-аналитика документирует параметры, правила и краевые случаи до начала разработки.
2
Владелец дизайн-системы валидирует контракт компонента — ручной gate, а не авто-мёрдж.
3
QA проверяет результат и по спецификации, и по исходнику в Figma.
4
Версионный контракт работает как постоянная страховочная сетка — breaking change по определению считается сбоем версионирования, а не случайностью.
Честный пробел: прямая проверка юзабилити с операторами, работающими в конструкторе, — логичный следующий шаг, который пока не задокументирован.

Once a capability was framed as shared rather than client-specific, it moved through one repeatable path:

1
Client or stakeholder identifies a need.
2
Product Owner decides whether it should become a shared capability.
3
Product Design defines the experience, states and component behavior.
4
Design-System owner validates the component contract.
5
Business Analysis documents parameters, rules and edge cases.
6
Front-end Architecture defines the technical interface.
7
Development implements the component and configuration schema.
8
QA validates the result against spec and Figma.
9
The new widget becomes available in the Constructor.
10
Relevant clients enable it via configuration or a feature flag — no redeploy, no per-client build.

Shipping safely across versions

Patchcompatible fixes — client does nothing
Minoradditive capability — opt-in, unaffected clients
Majorcontract change — migration path required

Как только возможность рамировали как общую, а не под конкретного клиента, она проходила один повторяемый путь:

1
Клиент или стейкхолдер формулирует потребность.
2
Product Owner решает, должна ли она стать общей возможностью.
3
Продуктовый дизайн определяет опыт, состояния и поведение компонента.
4
Владелец дизайн-системы валидирует контракт компонента.
5
Бизнес-аналитика документирует параметры, правила и краевые случаи.
6
FE-архитектура определяет технический интерфейс.
7
Разработка реализует компонент и схему конфигурации.
8
QA проверяет результат по спецификации и Figma.
9
Новый виджет становится доступен в конструкторе.
10
Нужные клиенты включают его конфигом или feature-флагом — без редеплоя и без сборки под клиента.

Безопасная поставка между версиями

Patchсовместимые фиксы — клиент ничего не делает
Minorаддитивная возможность — опционально, без влияния на остальных
Majorизменение контракта — нужен путь миграции

Product outcome

  • a unified model for pages, widgets, themes and responsive behavior across clients;
  • a clear separation between product structure and brand expression;
  • a path from isolated client requests to reusable platform capabilities;
  • a versioned model for evolving the shared product without breaking it.

Design outcome

  • token-based theme architecture;
  • a reusable widget model instead of bespoke per-client components;
  • a responsive composition workflow shared across brands;
  • progressive controls (Quick / Expert) for different user expertise levels;
  • a clearer, traceable relationship between Figma, configuration and implementation.

Expected business impact (directional, not yet measured)

  • faster setup time for a new white-label brand;
  • lower design and engineering cost per client;
  • broader reuse of fixes and new features across the portfolio;
  • more consistent quality across brands;
  • lower accumulated design/technical debt over time.

Metrics to validate

  • Time to launch a new brand pending data
  • Design time per client setup pending data
  • % of components reused vs. forked pending data
  • Design-system adoption rate pending data
  • Lead time: request → reusable widget pending data
  • UI regressions reported pending data
  • Brands on the shared template pending data
What changed after feedback: left visibly open rather than fabricated. The versioning model exists specifically because early iteration surfaced the risk of breaking existing clients — but a documented, specific before/after isn't written up yet. It belongs here once confirmed.

Reflection

The hard part was rarely a single screen — it was deciding which client differences deserved to become permanent system concepts versus which were noise that should never have been custom-built. That separation is the real design work behind the builder UI.

Продуктовый результат

  • единая модель страниц, виджетов, тем и адаптивного поведения для всех клиентов;
  • чёткое разделение структуры продукта и выражения бренда;
  • путь от изолированных запросов клиентов к переиспользуемым возможностям платформы;
  • версионируемая модель для развития общего продукта без поломок.

Дизайн-результат

  • архитектура тем на токенах;
  • переиспользуемая модель виджетов вместо штучных компонентов под клиента;
  • общий для всех брендов workflow адаптивной композиции;
  • прогрессивные уровни управления (Quick / Expert) под разный опыт пользователя;
  • более чёткая, прослеживаемая связь между Figma, конфигурацией и реализацией.

Ожидаемый бизнес-эффект (направление, ещё не измерено)

  • более быстрый запуск нового white-label бренда;
  • меньше дизайн- и инженерных затрат на клиента;
  • более широкое переиспользование фиксов и новых фич по всему портфелю;
  • более стабильное качество между брендами;
  • меньше накопленного дизайн- и технического долга со временем.

Метрики для проверки

  • Время запуска нового бренда данные ожидаются
  • Время дизайна на настройку клиента данные ожидаются
  • % переиспользованных компонентов vs форкнутых данные ожидаются
  • Уровень внедрения дизайн-системы данные ожидаются
  • Lead time: запрос → переиспользуемый виджет данные ожидаются
  • Кол-во UI-регрессий данные ожидаются
  • Брендов на общем шаблоне данные ожидаются
Что изменилось после фидбека: честно оставляю этот пункт открытым, а не выдумываю. Модель версионирования появилась именно потому, что ранняя итерация показала риск сломать существующих клиентов — но конкретный, задокументированный «было/стало» пока не оформлен. Появится здесь, когда подтвердится.

Рефлексия

Сложность была редко в конкретном экране — в основном в том, какие различия клиентов заслуживали стать постоянными системными понятиями, а какие были шумом, который вообще не стоило кастомизировать. Это разделение и есть настоящая дизайн-работа за интерфейсом конструктора.