6.6 KiB
Frontend UI Guide
Статус: нормативная карта frontend UI-системы проекта.
Этот раздел фиксирует целевое состояние интерфейса и служит точкой входа для всех решений по стилям, геометрии, карточкам, формам, модалкам и shared UI primitives. Это не одна заметка, а карта правил, по которой нужно проектировать новые экраны и проводить рефакторинг старых.
Как читать этот раздел
Порядок чтения:
- 01-OVERVIEW.md
Что это за guide, где проходят границы и как устроен frontend по слоям. - 02-FOUNDATION.md
Базовые токены, поверхности, action/form primitives и источники истины. - 03-GEOMETRY.md
Целевая шкала радиусов, таксономия карточек и допустимые исключения. - 04-PATTERNS.md
Формы, dropdown-like UX, модалки, App Shell и target-pattern registry. - 05-MIGRATION.md
Что считать legacy, как двигать рефакторинг и по каким зонам идти. - 06-COMPONENT-INVENTORY.md
Какие shared и feature-shared компоненты уже есть и когда какой использовать. - 07-DEVELOPER-WORKFLOW.md
Как проектировать новый экран, форму, карточку, модалку и когда выносить код в shared. - 08-UI-REVIEW-CHECKLIST.md
Короткий checklist для PR review и самопроверки перед merge.
Для чего этот guide
Guide обязателен для:
- новых экранов в
frontend/src/app - новых shared-компонентов в
frontend/src/components - переработки существующих карточек, форм, модалок и dropdown-паттернов
- code review, где нужно определить, является ли локальное UI-решение допустимым
Guide не предназначен для:
- описания API-контрактов
- описания state management конкретной фичи
- feature-specific UX-спеков
Главная проблема системы
Сейчас frontend уже достаточно зрелый, чтобы его нормализовать системно.
Что уже в хорошем состоянии:
- палитра
- surface hierarchy
- акцентные состояния
- базовые
app-*primitives
Что расползлось:
- геометрия
- шкала радиусов
- affordance dropdown-полей
- повторяющиеся card patterns
- разные form contracts для похожих сценариев
- визуальный жанр экранов: часть страниц выглядит как operational workspace, часть как showcase/dashboard из другого продукта
Именно поэтому этот раздел фиксирует target state заранее, даже если кодовая база ещё не полностью к нему приведена.
Почему этот refactor вообще нужен
Цель refactor не в том, чтобы механически проставить одинаковые rounded-* по всему проекту.
Главная причина:
- соседние app-страницы иногда решены в разных визуальных жанрах
- из-за этого даже качественный локальный экран может выглядеть “как из другого проекта”
- если исправлять только токены, но не учитывать жанр экрана, можно легко сломать удачную страницу
Практический вывод:
- сначала нужно понять, что за экран перед нами: operational workspace, profile-like page, dashboard/feed, auth/legal flow
- потом сохранять удачный внешний контракт этого типа экрана
- и только после этого выравнивать геометрию, surfaces, controls и shared affordance
Источники истины
Ключевые frontend primitives, на которые опирается весь guide:
frontend/src/app/globals.cssfrontend/src/components/ui/Modal.tsxfrontend/src/components/shared/SearchableSelect.tsxfrontend/src/components/AppShell.tsxfrontend/src/components/requests/RequestComposeModal.tsxкак текущий reference для compose-like participant form
Быстрый контракт
Если нужно принять быстрое решение без чтения всего guide:
- controls:
rounded-lg - secondary cards:
rounded-xl - primary panels и modal shells:
rounded-2xl - pills, avatar, search capsules:
rounded-full rounded-mdиrounded-[...]: legacy или редкое исключение с отдельным обоснованием- dropdown UX с поиском, multi-select или chip-представлением должен идти через shared select-паттерн, а не через локальный ad-hoc
select
Навигация по рефакторингу
С этого раздела должен начинаться будущий глобальный refactor pass:
- нормализация карточек
- сокращение custom radii
- выравнивание shared affordance
- только потом индивидуальный разбор форм по паттернам
Что уже покрыто
Этот раздел теперь выполняет две функции:
- нормативная база по visual contract
- прикладной handbook для ежедневной разработки и review
Если вопрос про то, "как должно быть", смотреть документы 01-05.
Если вопрос про то, "как это делать в коде", смотреть документы 06-08.