Андрій Озеров · Дизайн-системи для мультибрендових продуктів
Багато брендів. Один код.
Я будую токен-архітектуру, де новий бренд — це один файл на 55 значень. Компоненти, розмітка й релізи лишаються тими самими. Доказ нижче: живий продукт у 4 брендах і 2 темах.
Ключові цифри
- 4бренди в живому демо, і всі на одному коді
- 2теми на кожен бренд: світла й темна
- 55значень у файлі бренду. Цей файл і є весь бренд
Змініть бренд. Код лишиться на місці.


Завантажую демо…
Шість шарів. Бренд — лише один із них.
Компонент ніколи не знає, в якому він бренді. Він просить значення за змістом, тема обирає крок на кольоровій шкалі, і лише файл бренду тримає справжні кольори, шрифти й радіуси. Усі цифри нижче порахувані з токенів демо під час збірки.
Шари згори донизу
- Компоненти548 токенів · 29 компонентів
Кнопки, картки й чіпи беруть значення за змістом, а не сирі кольори чи розміри.
- Тема73 на тему × 2
Семантичні кольори: текст, заливка, рамка. Світла й темна — окрема вісь.
- Типографіка25 текстових стилів
Зібрані зі шрифтів бренду й базової шкали розмірів.
- Шкали41 кроків шкал
Світлі й темні відтінки рахуються з кольорів бренду — ніхто не підбирає їх руками.
- БрендСвій у кожного55 значень × 4 бренди
Єдиний файл, який змінюється, коли додаєте бренд.
- Основа59 значень
Сира шкала: розміри, радіуси, насиченість шрифту, базові кольори.
Простежте один токен крізь шари
- Компонент
button.primary.bg.default - Тема
color.fill.primary.default - Шкала
color.product1.500крок 500 — це сам колір бренду - Бренд
color.product1#CFA74A - Результат#CFA74A
- Компонент
button.primary.bg.default - Тема
color.fill.primary.default - Шкала
color.product1.500крок 500 — це сам колір бренду - Бренд
color.product1#CFA74A - Результат#CFA74A
- Компонент
button.primary.bg.default - Тема
color.fill.primary.default - Шкала
color.product1.500крок 500 — це сам колір бренду - Бренд
color.product1#22D3EE - Результат#22D3EE
- Компонент
button.primary.bg.default - Тема
color.fill.primary.default - Шкала
color.product1.500крок 500 — це сам колір бренду - Бренд
color.product1#22D3EE - Результат#22D3EE
- Компонент
button.primary.bg.default - Тема
color.fill.primary.default - Шкала
color.product1.500крок 500 — це сам колір бренду - Бренд
color.product1#FFC93C - Результат#FFC93C
- Компонент
button.primary.bg.default - Тема
color.fill.primary.default - Шкала
color.product1.500крок 500 — це сам колір бренду - Бренд
color.product1#FFC93C - Результат#FFC93C
- Компонент
button.primary.bg.default - Тема
color.fill.primary.default - Шкала
color.product1.500крок 500 — це сам колір бренду - Бренд
color.product1#FF3D9E - Результат#FF3D9E
- Компонент
button.primary.bg.default - Тема
color.fill.primary.default - Шкала
color.product1.500крок 500 — це сам колір бренду - Бренд
color.product1#FF3D9E - Результат#FF3D9E
- Компонент
chip.selected.bg.default - Тема
color.fill.primary.subtle - Шкала
color.product1.100на 85% світліше за колір бренду - Бренд
color.product1#CFA74A - Результат#F8F2E4
- Компонент
chip.selected.bg.default - Тема
color.fill.primary.subtle - Шкала
color.product1.900на 55% темніше за колір бренду - Бренд
color.product1#CFA74A - Результат#644E1B
- Компонент
chip.selected.bg.default - Тема
color.fill.primary.subtle - Шкала
color.product1.100на 85% світліше за колір бренду - Бренд
color.product1#22D3EE - Результат#DEF8FC
- Компонент
chip.selected.bg.default - Тема
color.fill.primary.subtle - Шкала
color.product1.900на 55% темніше за колір бренду - Бренд
color.product1#22D3EE - Результат#096472
- Компонент
chip.selected.bg.default - Тема
color.fill.primary.subtle - Шкала
color.product1.100на 85% світліше за колір бренду - Бренд
color.product1#FFC93C - Результат#FFF7E2
- Компонент
chip.selected.bg.default - Тема
color.fill.primary.subtle - Шкала
color.product1.900на 55% темніше за колір бренду - Бренд
color.product1#FFC93C - Результат#8E6600
- Компонент
chip.selected.bg.default - Тема
color.fill.primary.subtle - Шкала
color.product1.100на 85% світліше за колір бренду - Бренд
color.product1#FF3D9E - Результат#FFE2F0
- Компонент
chip.selected.bg.default - Тема
color.fill.primary.subtle - Шкала
color.product1.900на 55% темніше за колір бренду - Бренд
color.product1#FF3D9E - Результат#8E0047
- Компонент
button.borderRadius - Бренд
borderRadius.control - Основа
borderRadius.88px - Результат8px
- Компонент
button.borderRadius - Бренд
borderRadius.control - Основа
borderRadius.88px - Результат8px
- Компонент
button.borderRadius - Бренд
borderRadius.control - Основа
borderRadius.00px - Результат0px
- Компонент
button.borderRadius - Бренд
borderRadius.control - Основа
borderRadius.00px - Результат0px
- Компонент
button.borderRadius - Бренд
borderRadius.control - Основа
borderRadius.999999px - Результат999px
- Компонент
button.borderRadius - Бренд
borderRadius.control - Основа
borderRadius.999999px - Результат999px
- Компонент
button.borderRadius - Бренд
borderRadius.control - Основа
borderRadius.1212px - Результат12px
- Компонент
button.borderRadius - Бренд
borderRadius.control - Основа
borderRadius.1212px - Результат12px
Перемкніть тему сайту вгорі праворуч: світла й темна беруть різні кроки тієї самої шкали.
Як бренд потрапляє з Figma в продакшен
Бренд — це дані
Кожен бренд — один файл у Token Studio з тими самими 55 ключами: кольори, шрифти, радіуси, відступи, сітка. Дизайнери змінюють значення. Компонентних токенів ніхто не торкається.
Пайплайн збирає сам
Токени живуть у Git як JSON і збираються в CSS-змінні. Автоперевірки ловлять пропущені ключі, зламані посилання між шарами й недостатній WCAG-контраст ще до релізу.
Два атрибути перемикають
Продукт змінює бренд і тему через data-brand і data-theme на одному елементі. Та сама розмітка, ті самі компоненти, один реліз для всіх брендів.
Для команд, у яких більше одного бренду
iGaming і white-label платформи
Один продукт під багатьма брендами. Кожен оператор отримує свій вигляд без окремої кодової бази.
Фінтех із суббрендами
Основний бренд і продукти для різних аудиторій чи ринків. Однаковий UX, різний вигляд, одна бібліотека.
Агенції з одним стеком
Багато клієнтів на тих самих компонентах. Новий клієнт починається з файлу бренду, а не з форку.
Маєте більше ніж один бренд? Поговорімо.
Аудит поточної системи, токен-архітектура, повна мультибрендова бібліотека чи лише пайплайн із Figma в код. Розкажіть, де ви зараз.