семен абдуллиндонат сервис / дизайн система
вернуться назадперейти к результату
01продукт и роль

Я выстроил дизайн-систему донат сервиса для стримеров и перенёс её в код: токены в Figma, репозиторий с доступом в Git и живые взаимодействия в Storybook

введение

Главное в этом кейсе — не набор компонентов, а способ передачи в разработку. Поведение интерфейса я собираю не в макетах, а прямо в коде, в Storybook, на тех же токенах и компонентах, что работают в продукте. Дизайнер в репозитории разработчика — схема нетипичная. разработчик получает готовое поведение, а я сразу вижу, как оно работает на деле

участие

Работал в связке с фронтенд-разработчиком. Систему вёл сам: от аудита существующих макетов до передачи в код и сборки состояний в Storybook

роль

Развивал дизайн-систему и перенёс её в claude. Мне завели репозиторий и доступ в Git: вместо статичных флоу я стал собирать живые взаимодействия прямо в нашем Storybook. Это сократило нагрузку на фронтенд: разработчик получает готовое поведение, которое можно открыть и проверить

02подход и исследования
аудит

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

принципы

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

Токен называется по роли surface/hover, а не по оттенку. Один тип параметра — один контрол

ограничения

Я был единственный дизайнер, поэтому система росла вместе с продуктом, а не «на вырост». Сейчас одна тёмная тема: слои готовы к светлой, но делать её без запроса продукта не стал. Редкие компоненты в систему не включал, пока они не повторились на нескольких экранах

переменные до системы
переменные после
03решения
решение #1

Собрал токены в шесть слоёв, где каждый ссылается только на предыдущий

00-base — числовые примитивы без смысла: шаг 4 px, размеры шрифта, высоты строк

01-typography — роли поверх базы: Display, Headline, Body, Label

02-radius и spaces — шкала значений и смысловые имена поверх неё

03-palette — только оттенки: neutral, brand и статусные цвета

1.1 color — смысл поверх палитры: background, content, ui, border

1.2 component color — токены компонентов: button, input, card и другие

Если поменять бренд-цвет, меняется одна запись в палитре: #8F42FF лежит в 03-palette, а кнопки, фокус и акценты на него ссылаются. Типографика собрана на ролях (Display, Headline, Body, Label): размер и вес задаются один раз, а стили на них ссылаются

решение #2

Описал состояния контролов один раз и для всех компонентов

Состояния описаны один раз для каждого типа контролов. Разработчик не придумывает, как выглядит фокус или ошибка: это уже решено и лежит в системе

Цвета состояний не рисуются вручную, а берутся из слоя 1.2. Например, наведение на основную кнопку ссылается на brand/hover (#A066FF), нажатие на brand/pressed (#6F2ED6)

решение #3

Перенёс систему в Claude и вместо статичных флоу стал собирать живые взаимодействия в Storybook

Когда токены были готовы, перенёс систему в Claude. Мне завели репозиторий и доступ в Git, поэтому токены и компоненты меняются через историю изменений, а не файлами в чате

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

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

Имя токена в Figma совпадает с именем переменной в коде: ui/brand/default → --ui-brand-default. При проверке ничего не нужно переводить

еще

Описал паттерны над компонентами и правила развития системы

Пустые состояния, скелетоны загрузки, поиск и шаблон заголовка с фиксированным порядком элементов описаны так же, как компоненты: один раз и с состояниями

Новый компонент появляется, только если задача повторилась и не решается существующим. Новый цвет сначала ищется среди смысловых токенов и только потом добавляется в палитру. Токен, компонент и его story обновляются вместе

Как система работает в деле: пункт меню в разборке, из каких частей он собран и на каких токенах

04результаты

Что изменилось

3 → 6коллекций переменных: было и стало
700+переменных в шести слоях
90%экранов собрано из компонентов системы
на 30% меньшевремя фронтенда на реализацию экрана
storybook

Состояния и переходы собраны в Storybook, поэтому вопросы о том, как должен вести себя интерфейс, снимаются до начала реализации: поведение можно открыть и проверить

токены

Имена токенов в Figma и в коде совпадают, поэтому расхождение с макетом видно сразу: достаточно сверить значение с токеном

Путь от макета до проверки поведения. К проверке на готовом экране добавилась проверка в Storybook до реализации

раньше
макеты и флоу в фигме→передача в разработку→реализация→проверка на готовом экране→правки
сейчас
токены в репозитории→компонент в storybook→готовое флоу→проверка до релиза