Аудит соответствия · Android «По душе» · 6 сентября 2026 · вторая итерация

По душе × Figma: что есть, что расходится, чего нет

Полная сверка приложения android-events с макетом «Podushe | Mobile-app»: инвентаризация экранов и состояний (проход 1) и разбор каждого существующего экрана по дизайну и поведению (проход 2). Каждая строка — логический экран; ссылки на ноды ведут в Figma, ссылки на код — файл:строка.

Код: android-events @ 4ffbc2e (21.08.2026), ветка integration/dev-stand-2026-08-31 = origin/mainМакет: Podushe | Mobile-app, версия файла от 05.09.2026 10:01 UTC
75
логических экранов в макете (10 разделов, 608 фреймов)
41
нет в коде · 55%
30
есть, но расходится · 40%
4
соответствует · 5%
41 / 69 / 50
находок: блокеры / существенные / косметика
нет в коде 41есть, но расходится 30соответствует 4
Показывать:

Главное

  • Регистрация как сценарий отсутствует. Из 62 фреймов раздела «Вход» в коде есть три экрана (велком, номер, код) и онбординг интересов. Шаги «Где вы находитесь» / «Расскажите о себе» / «Селфи-верификация», поиск города и районов, все системные диалоги — нет. После OTP пользователь сразу попадает на карту.
  • Кабинет организатора — другой продукт. В макете (25 авг): меню «Управление» из 7 пунктов, онбординг, команда с ролями, конструктор вопросов, приглашения, чат из кабинета, QR. В коде — один экран «Участники» с заявками и кнопкой отмены.
  • Создание события построено иначе. Мастер из 5 шагов против одной формы; нет изображений, тегов, видимости, времени окончания, модалки места, лимитов и валидаций.
  • Профиль не тот. Нет QR, редактирования, статуса, локации, уровней репутации, подписок, «Обо мне», интересов, «Похожих интересов», истории, «Куда иду». Вместо этого — стат-карточки «Иду / Организую / Заявки», которых в макете нет.
  • Афиша: карта совпадает по композиции, но набор быстрых фильтров другой, шторка фильтрации, календарь, радиус, режим списка, страница категории, «Афиша города» и блок «Куда иду» отсутствуют; в шторке нет «Просмотра по интересам» и группировки по дням.
  • Страница события — самый близкий к макету экран, но с фиктивными данными (аватары «АК, ДК, МС, ЕЛ», «2,4 км от вас», второй бейдж) и без половины состояний CTA, без шторки причин жалобы и snackbar.
  • Бэкенд — не главный блокер. Контракт уже отдаёт то, что клиент подменяет заглушками или не показывает: имена и аватары идущих, расстояние, признак организатора, причины жалоб, все списки участников, видимость «по ссылке», каталог со счётчиками, подписки и повестку, приглашения, подборки, отзывы, форму поддержки, фото в чате. Без бэкенда остаются теги, вопросы при регистрации, роли команды, «только проверенные», радиус, статус, подписчики, блокировки и QR.
  • Геометрия расходится системно: кнопки 44 вместо 48, заголовки шапок прижаты влево вместо центра, шторка карты в покое 300 вместо 216 px, белый лист r32 под контентом есть только на входе, чат-пузыри и панель ввода другие, сегмент-контрол написан, но не используется.
  • Сквозное: Material-иконки и эмодзи вместо иконок и 3D-иллюстраций макета; ни одного snackbar; ни одного runtime-разрешения; пустые состояния в своём стиле. Токены цвета и типографика — совпадают.

Проход 1 · Покрытие по разделам

Раздел FigmaФреймовЛогич. экрановНетРасходитсяОкСверено
A · Вход, регистрация, верификация6214950по дереву нод
B · Афиша: карта, фильтры, поиск, событие, чат события10313850по дереву нод
C · Создание события и кабинет организатора23314851по дереву нод
D · Взаимодействие участников с событием785320по именам
E · Свайпы событий176222по именам
F · Уведомления62011по именам
G · Избранные92110по именам
H · Профиль549630по рендерам
I · Чаты и другие пользователи235320по именам
J · Настройки235140по именам

«Логические экраны» — уникальные экраны и модалки; их состояния (ошибки, пермишены, пустые) перечислены внутри каждой строки ниже. Раздел K (дизайн-система) в счёт экранов не входит.

Метод, покрытие и ограничения

Как сверялось

  • Код: android-events @ 4ffbc2e (21.08.2026), ветка integration/dev-stand-2026-08-31 = origin/main. Читались все 40 .kt (навигация в MainActivity.kt, 16 файлов экранов, компоненты, тема, DTO). Версия на стенде (ноутбук) недоступна — туннель на порт 2222 закрыт; в репозитории рабочая копия чистая, `android-events` идентичен origin/main.
  • Figma: Podushe | Mobile-app, версия файла от 05.09.2026 10:01 UTC. 18 страниц, 832 фрейма 390×N, из них 608 в 10 рабочих разделах (без «Прототип», «Архив», «Дизайн концепт»). Дерево нод скачано полностью для трёх страниц (вход 62, афиша 103, создание/управление 233 фрейма) — тексты, инстансы компонентов, заливки, шрифты; для остальных — имена фреймов, размеры и подписи 500+ переходов.
  • Рендеры: 49 PNG 2× (велком + 48 фреймов «Профиля»). Дальше Figma ответила 429, retry-after 398 137 с (≈4,6 суток, тариф Starter) и на JSON, и на рендеры.
  • Вторая итерация (глубже): 381 коннектор трёх полных страниц разрешён до пар «экран → экран» и превращён в таблицу правил поведения; из дерева нод сняты размеры, паддинги, радиусы и заливки инстансов UI-kit (таблица компонентов) и геометрия ключевых экранов; все 446 строковых литералов Compose сверены с текстами макета; потребности дизайна сверены с OpenAPI бэкенда (`api-schema.yml`, 27.08) и спеками kb/30-backend (таблица контракта).
  • Единица учёта: логический экран (одна строка), состояния из макета перечислены внутри. «Прототип» (270 копий) и версия создания от 28 июля исключены, чтобы не удваивать.
  • Не сверялось визуально: Свайпы, Уведомления, Избранные, Чаты, Настройки, три NEW-сценария «Взаимодействия», 6 фреймов NEW-профиля — статусы там выставлены по именам фреймов, подписям переходов и коду; косметика этих разделов не оценена. Живые скриншоты приложения не снимались (нет SDK/эмулятора).

Экраны, упирающиеся в бэкенд (33)

Пометки по kb/20-product/63 (16–18.08) и Dtos.kt; бэкенд отдельно не аудировался.

  • A5 Регистрация, шаг 1 из 4 — «Где вы обычно находитесь?» — Есть всё, кроме гео на клиенте: города — GET /cities, районы со счётчиками — /public/catalog?city=, сохранение — PUT /users/me/event-prefs {topics, districts} (клиент шлёт districts=[] — EventsRepository.kt:259).
  • A8 Регистрация, шаг 2 из 4 — «Расскажите о себе» — Анкета — дейтинговые ручки GET/PATCH /users/profile, фото — photos (kb: «форма чужая, маппим поля»).
  • A10 Регистрация, шаг 4 из 4 — «Подтвердите, что вы — это вы» — Селфи-верификация — дейтинговые POST /users/profile/verify/photo, GET …/verify/status (есть).
  • A13 Запрос разрешения на уведомления — kb 76 (16.08): событийные пуши реализованы локально, на стенд не выкачены; регистрация FCM-токена — дейтинговая ручка (kb 10).
  • B2 Выбор радиуса «Расстояния от меня» — Радиуса в API нет — расстояние считает клиент (kb).
  • B3 Поп-ап фильтрации (шторка над картой) — /public/events принимает city, district (через запятую), from/to, interest (через запятую), price=free|paid|unknown, q, sort=new|popular|soon, online, bbox — вся шторка, кроме «только проверенных», закрывается контрактом. Справочник районов/тем со счётчиками — /public/catalog.
  • B5 Поп-ап календарь — GET /public/events/calendar есть.
  • B9 Страница категории — Есть всё: счётчики событий по темам — /public/catalog (CatalogInterest.total), подписка — POST /users/me/calendars {kind: topic, value}, список — /public/events?interest=.
  • B14 Страница «Афиша города» — Блоки подкреплены контрактом: «Лучшие подборки» — /public/collections (+ /collections/{slug}), кружки-сторис — /public/stories, «Популярное» — /public/events?sort=popular, «В ближайшие дни» — sort=soon.
  • C1 Новое событие (форма создания) — EventDraft в API уже принимает visibility (public | link → «Публичное / Приватное»), ends_at, lat/long, cover_url (строкой; multipart-загрузки картинок для событий нет — есть только /chat-media). Тегов и «только проверенных» в контракте нет. ⚠️ EventDraftRsvpModeEnum = auto | selective, а чип «Без записи» шлёт rsvp_mode=off (CreateEventScreen.kt:315) — по схеме невалидно; на стенде не проверял.
  • C2 Модалка «Место проведения» — Геокодер/поиск мест — уточнить (в kb «страница площадки» помечена полудырой).
  • C4 QR-код события — QR-механики нет (решение владельца 16.08: только витрина).
  • C7 Редактирование события — PATCH /events/{id} — закрытый список EDITABLE_FIELDS: дату и цену бэк не отдаёт (kb).
  • C8 Организаторы (команда события) — Команды/ролей в API нет — блокер бэка.
  • C9 Вопросы при регистрации (конструктор) — Анкет регистрации в API нет — блокер бэка.
  • C11 Приглашение участников — В контракте есть «позвать компанию»: POST /events/company-invite, GET /events/company-invites, POST /events/company-invites/{id}/respond (CompanyInvite: event, message, invited/accepted/declined, my_response). Семантика близка к макету, соответствие полей уточнить.
  • D3 NEW · Регистрация на событие с вопросами и одобрением — Анкет регистрации в API нет — блокер бэка.
  • D4 NEW · Приглашение в организаторы — Ролей/приглашений в API нет.
  • D5 NEW · Приглашение участвовать в событии — Подкреплено company-invites (см. C11) и видом уведомления company_invite (NotificationsScreen.kt:247).
  • G2 Избранные — люди — Открытый вопрос владельцу (kb): дейтинг-лайки или подписки-календари (/users/me/calendars {kind: organizer}) или люди с общих событий (/events/people).
  • H3 История (прошедшие события) — Отзыв «как прошло» — GET/POST /events/{id}/review (ReviewScreen: can_review, tags, participants; ReviewResult: rating, tags, new_matches); чек-ин — POST /events/{id}/checkin. Отдаёт ли /events/mine прошедшие — уточнить.
  • H4 QR-код пользователя — QR не кодируется ничем (решение владельца 16.08 — только витрина).
  • H5 Редактирование профиля — PATCH /users/profile (дейтинговая анкета), фото — photos.
  • H6 Поп-апы «Подтвердите свой профиль» / «Повысьте доверие» + верификация из профиля — Селфи — дейтинговые ручки verify/photo; анкета — PATCH /users/profile.
  • H7 Статус и местоположение — Статуса отношений в контракте нет. Районы — PUT /users/me/event-prefs {topics, districts} + справочник /public/catalog.districts (есть; клиент шлёт districts=[]).
  • H8 Скидки партнёров — Партнёрки нет (этап 2, решение владельца: экраны на моках).
  • I1 Список чатов — Личные чаты — только пары из дейтинг-мэтчей, создать нельзя (kb).
  • I2 Профиль другого пользователя — GET /public/organizers/{id} (только для уже публиковавших: name, initials, reputation, hosted_count, rating_avg, events[], reviews[] — без фамилии и контактов, по решению владельца 12.08), GET /events/people (люди с общих прошедших событий); жалоба на пользователя — дейтинговая POST /users/{id}/report (kb); блокировки в контракте нет.
  • I3 Подписки / подписчики — Подписка = календарь организатора (/users/me/calendars), подписчиков нет (kb).
  • I4 Чат с пользователем (личный) — Парные чаты только из мэтчей дейтинга; создать из событий нельзя (kb).
  • J1 Настройки (корневой экран) — Удаление аккаунта: POST /users/me/delete (+ /delete/cancel, грейс-период) — kb 79: реализовано 16.08 локально, на стенд не выкачено, в api-schema.yml пути нет. Пуши и настройки уведомлений — kb 76: реализовано локально, клиентских ручек в схеме нет.
  • J2 Поддержка — Форма обращения подкреплена: POST /feedback {email, message} → 204 (api-schema.yml:782). Переписки/ответа в контракте нет.
  • J5 Заблокированные пользователи — Блокировки в клиентском контракте — уточнить.

Чтобы закрыть оставшиеся пробелы

  • Второй токен Figma (любой аккаунт с доступом к файлу, лучше с платным местом — лимиты выше): список из 457 нерендеренных фреймов и скрипт готовы, дорендер займёт ~1 час, отчёт обновится в тех же строках.
  • Код со стенда: открыть обратный туннель на порт 2222 — сверю `android-events` с ноутбука и перевыпущу отчёт, если он отличается от origin/main.
  • Скриншоты приложения с устройства по списку экранов из этого отчёта — единственный способ проверить пиксельные отступы и стекло; без них сверка идёт по коду.

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

Правило из макетаНодыВ кодеПримечание
A · Вход, регистрация, верификация
Велком → «Войти» → ввод номера158:9505260:24430совпадаетMainActivity.kt:114
Ссылка «Политики конфиденциальности» на вводе номера открывает документ261:26902неттекст не кликабелен
Некорректный номер → красная подпись под полем ещё до запроса582:52876частичноошибка только после ответа сети, под кнопкой
Заблокированный аккаунт → «Аккаунт заблокирован» + «Связаться с поддержкой»579:52473нет
Неверный код → «Неправильный код авторизации» + кнопка «Получить код заново»261:27297частичнотекст ошибки есть, кнопки нет
5–7 неверных кодов → «Лимит отправок исчерпан», таймер 14:59, «Изменить номер»592:5040нет
Таймер «Отправить код повторно 0:50» отсчитывает и даёт повторную отправку261:26987нетстатичная строка
Верный код, аккаунт есть → сразу карта287:29289совпадаетединственная ветка
Верный код, новый аккаунт → регистрация: запрос гео → шаг 1610:75380597:55329нет
Гео разрешена → город определён; запрещена → поиск города597:55329597:56057нет
Маленький город → шаг без выбора районов730:75312нет
Тап по карте-превью → выбор точки пином → «Выбрать это место»730:75625731:75848нет
Фото профиля: action sheet → пермишен → отказ → «Перейти в настройки»732:77022732:76894732:77193нет
Валидация имени, даты рождения и «о себе» (150 симв.)292:25797нет
Интересы: минимум 3 → «Продолжить», иначе disabled; «Пропустить»284:25333284:25738совпадаетOnboardingScreen.kt:110
Селфи: пермишен камеры → отказ → «Перейти в настройки»; лицо не распознано → «Переснять»286:26404287:26637732:79437нет
Завершение → «Профиль подтверждён» → карта → пермишен уведомлений287:27892736:98793нет
Пропуск селфи → профиль не подтверждён, репутация ниже287:26637287:28651нетстатус не отражается
B · Афиша: карта, фильтры, поиск, событие, чат события
«Рядом ▾» → шторка радиуса → чип «Рядом · до 10 км»180:8885180:9724181:9778нет«Рядом» ничего не делает
Гео не разрешена → нет кнопки «к моей локации»732:80497неткнопки нет всегда
Зум-ин: карточки «отлипают»; зум-аут: события превращаются в категории192:22038192:22445228:12862нетстандартные кластеры
Кнопка фильтров → шторка «Фильтрация»; «Сбросить» → исходное; «Применить» → карта194:24494194:29751194:30552нетвместо этого экран поиска
«Другой город» / «Другие районы» из фильтра → поиск города / районов604:65659605:67468нет
«Период» → календарь → «Применить» → возврат в фильтр194:26275194:27047194:28212нет
Нет подходящих событий → пустое состояние604:64426частичноесть на экране поиска
Поиск: «Отмена» → афиша; крестик сбрасывает текст; тап по категории → результаты192:20840192:21527192:20918частичноназад есть; крестика и категорий нет
«Смотреть списком» / скролл шторки вверх → «Страница Афиша»194:31743194:35194нетпилюля декоративная
Календарь в афише меняет даты в «Подобрано для вас» + автоскролл229:16598229:17818нет
Бейдж категории → страница категории → «Подписаться» / «Поделиться»194:36070229:14429229:14863нет
«Участвовать» → «Вы идёте» + появляется «Перейти в чат»231:19601231:20559частичноRSVP есть, кнопки чата нет
«Отмена участия» → подтверждение (action sheet)231:20559231:21452нетуходит без подтверждения
Событие с одобрением: «Подать заявку» → «Вы подали заявку» → «Заявка одобрена/отклонена»232:26455232:27767232:28174232:28673частичноpending есть, результата нет
Лимит участников / событие отменено → особые состояния CTA232:26224232:27284нет
Сердце → «Добавлено в избранные» (snackbar)231:21433частичнолайк есть, snackbar нет
«Пожаловаться» → выбор причины → «Отправить» → «Написал жалобу»608:70144608:70204608:70529нетшлёт other сразу
Чат: статусы «отправлено / не прочитано / прочитано», ошибка → «Повторная отправка»232:25127734:89321736:90140нет
Чат: скрепка → фото → пермишены → лимит → просмотр (пинч, свайп)623:41125608:71500614:79669нет
Чат: при открытой клавиатуре карточка события скрывается232:23256неткарточки нет
Карта: блок «Куда иду» с состояниями 0 / 1 / 2 / 3 / 4+ → раздел «Куда иду»693:70691693:76501нет
C · Создание события и кабинет организатора
«+» → форма создания → «Создать» → страница события организатора688:46481688:46485688:59349частичномастер 5 шагов + экран успеха
Изображение → action sheet → пермишены → отказ → заглушка вместо картинки688:46593688:46745736:92276нет
Теги: до 5, потом чипы дизейблятся; стоп-слова688:51945688:52301688:52543нет
Платно с ценой 0 → «Укажите стоимость больше 0 ₽»; Ограничено с 0 → «Минимум — 1 участник»736:92678736:93765неттолько disabled-кнопка
Своё событие: «Управлять» → Управление; при первом входе — онбординг 1–4688:59349688:61525695:77451нет
Управление → «Детали события» → редактирование → «Сохранить» → назад643:70075642:65141687:46097частичновход из «Участников», поля урезаны
Заявка → просмотр → одобрить/отклонить; участник → «Исключить» → подтверждение665:80068665:82236666:87940частичнотолько принять/отклонить в списке
«Одобрить всех» → «Заявки приняты»643:67893666:83221нет
Организаторы: добавить → роль (Менеджер / Соорганизатор / Ведущий) → сохранить / удалить684:33213686:40185686:43689нет
Вопросы: добавить / изменить / удалить / переставить; лимит 7663:72986660:52498663:73370нет
Пригласить участников → выбрать → текст → отправить → уведомление689:61761690:66479691:67384нет
«Начать чат с участниками» → чат (пустое состояние)691:93731нет
«Отменить событие» → системный alert → уведомление участникам691:97820691:97101частичноinline-подтверждение
H · Профиль
Вход в профиль неподтверждённого → поп-ап «Заполнить профиль» / «Пройти верификацию»348:43102348:45576нет
«Указать статус» → дропдаун → цветная пилюля348:37495348:37789нет
Локация → шторка с картой и районами → «Сохранить»348:54063348:54790нет
QR → «Отправить / Скопировать» → «Ссылка на профиль скопирована»348:47356348:47958нет
Скидки: копировать промокод → «Промокод скопирован»348:46985нетвместо этого экран QR
F · Уведомления
Уведомления: фильтр «только непрочитанные»; индикатор гаснет288:30381621:33597частичновсё читается разом при открытии
G · Избранные
Избранные: фильтр по интересу; вкладка «люди»; «убрать» → уведомление293:27341293:27869293:28243частичнотолько снятие сердца
E · Свайпы событий
Свайпы: инфо / тап по карточке / скролл вниз → событие233:29438частичнотолько кнопка инфо
Свайпы: фильтры как в афише; «нет подходящих» → изменить параметры233:32856233:34276нет
Гайд-тур из трёх подсказок при первом входе699:93744702:94090нет
J · Настройки
Выход и удаление аккаунта — через подтверждение350:59260нетвыход без диалога; удаление — заглушка
Поддержка: написать → отправлено → ответ350:57906350:58956нет

Есть 3 · частично 14 · нет 47 из 64. Правила восстановлены из 381 коннектора трёх страниц с полным деревом (конечные точки разрешены до экранов) и подписей переходов остальных страниц.

Компоненты и геометрия: UI-kit против кода

КомпонентFigma (из инстансов в дереве нод)КодСтатус
Кнопка основная (button-brand / -large / -primary / -delete)342×48, пилюля r296, лейбл 590/16 −0.6, контент-паддинг 20/12, боковые отступы 24; disabled — белый оверлей 11 %; n=201PodusheButton: высота **44**, паддинг 20/12, пилюля, лейбл 590/16; оверлей disabled 12 %, pressed 30 % (Buttons.kt:34–90); отступы 16 или 24расходится
Высота 44 вместо 48 на всех экранах; крупной -large нет.
button-brand-small59×32 (лейбл 590/14) и 342×48 с лейблом 590/14 — кабинет: «Одобрить всех», «Добавить», «Сохранить»; n=285нет; ближайшее — DecisionButton (пилюля 590/14, паддинг 20×10, CrewScreen.kt:277)нет в коде
button-secondary (стекло)110×44 / 175×48, стекло Regular, лейбл 590/16 #282A31; n=80PodusheButtonStyle.Secondary — стекло 44 (Buttons.kt:38, 55)совпадает
Высота 44 vs 48 у крупной.
Button-icon (круглая стеклянная)48×48 r32 стекло, внутри item-iconButton 36 r100; пара — 102×48 (36 + разделитель + 36, паддинг 6, gap 8); n=1186PodusheIconButton 48 стекло; GlassIconPair 36+8+2+8+36 с паддингом 6 (AfishaMapScreen.kt:321)совпадает
Button-mini (строка-кнопка списка)358×44 r24 #F5F5F5, паддинг-лево 16, текст 510/16 — «Добавить организатора», «Добавить вопрос», «Удалить вопрос»; n=98нет; строки настроек — SettingsRow белые r16, паддинг 16/14 (Rows.kt:240)нет в коде
Text Field358×44/46/48 r100 #F5F5F5, внутренняя тень 2, текст 510/16, ошибка — обводка #F84040 1 px; многострочное 358×90/104 **r24**; n=379PodusheTextField 44, пилюля, без тени, ошибка — обводка 1.5; многострочное — та же пилюля высотой 120 (CreateEventScreen.kt:177)частично
Многострочные поля в макете r24, в коде — пилюля (r50 %) на 120 dp.
Search Field358×46 r100, лупа + крестик очистки, рядом текст «Отмена» (290 + 60); n=71PodusheTextField с лупой (SearchScreen.kt:468); без крестика и «Отмены»частично
OTP-field84×96 r16 #F5F5F5, внутренняя тень, цифра 650/28, ошибка — обводка #F84040; n=20OtpCell 96 r16, 650/28 (AuthScreens.kt:325); без реакции на ошибкусовпадает
Обводка ошибки не реализована.
tab-filter (быстрый фильтр)высота 40, стекло Medium; активный — #282A31 с белым текстом; текст 590/16; n=601FilterTab 40, стекло / тёмный, 590/16 (Buttons.kt:125)совпадает
tab-category (категория с 3D-иконкой)высота 44, r32, обводка #000@7 %, тень 4, паддинг 6/4/16/4, 3D-иконка 36 + текст 590/16 gap 6; выбранная — тёмная с галочкой; n=506текстовые пилюли 590/14, паддинг 16×12, выбранная — синяя #007AFF (OnboardingScreen.kt:82, SearchScreen.kt:589, CreateEventScreen.kt:401)расходится
Tab Bar390×95, паддинг 20/16/20/24, gap 16; пилюля 217×62 стекло с tab-item 54 (иконка 24, подпись 590/10, gap 2, паддинг 8/6), выделение #007AFF@11 % r100; боковые круги 62 стекло (иконка 24); n=63PodusheTabBar: паддинг 20/16 + navigationBars; пилюля с паддингом 4, элементы паддинг 10/6 (≈56); боковые 54; выделение AccentTint; подписи 590/10 (TabBar.kt)совпадает
Боковые кнопки 54 вместо 62, нижний отступ 16 вместо 24.
Accent-card-event (карточка рельса)300×228: обложка ≈300×170 r20 с бейджем на градиенте, заголовок 590/18, мета «9.3 км от вас · Завтра» 510/16@40 %; n=120AccentEventCard 300, обложка 170 r20, заголовок 590/18, мета «дата · цена · идут N» (EventCards.kt:74)частично
Бейджа на обложке нет, мета другая.
Default-card-event (строка события)358×108: обложка 84×84 r8, бейдж 26, заголовок 590/18, «2.4 км от вас» 510/16@40 %, строка организатора (аватар + имя); gap 12; n=302EventRow: обложка 84 r8, бейдж, заголовок **590/16**, мета «дата · цена · идут N», сердце справа (EventCards.kt:104)частично
badge (бейдж категории)высота 26, r32, паддинг 6/2/12/2, точка/иконка + текст 590/14; заливки #F5F5F5 · #FFF@15 % (тёмный) · тинты статусов 11 %; n=955InterestBadge: паддинг 8/2, точка 7, 590/14, #F5F5F5 / #FFF@16 % (EventCards.kt:181)совпадает
На странице события бейдж 30 px с иконкой-решёткой — в коде 22.
Organizer row358×36, аватар 32, имя 510/16, chevron; gap 8; n=80OrganizerRow 32 + Body + chevron (EventScreen.kt:388)совпадает
Switch51×31; n=333PodusheSwitch 51×31, кружок 27, on = #36B554 (Rows.kt:321)совпадает
Цвет включённого не сверен (UI-kit не выгружен).
Segmented control 2/3358×40 r100 #F5F5F5, паддинг 8/4; активный — белая пилюля 590/16, неактивные 510/16; n=40PodusheSegmentedControl есть (Fields.kt:245), **нигде не используется**частично
«Предстоящие/Прошедшие», «Заявки/Участвуют/Отклонены», «Друзья/Участники» — все на нём.
Snackbar / Body342×50 r20, backdrop-blur 20, паддинг 12, галочка + текст 590/16 белый; n=25нетнет в коде
Chat bubbleширина 270, r20 с хвостом r2, паддинг 8, gap 6; чужое #F5F5F5, своё **#007AFF@11 %** с тёмным текстом; текст 510/16, время 590/10@40 %; n=65MessageBubble: max 280, r18/6, паддинг 14×10; своё — сплошной #007AFF с белым текстом, чужое — белое; время 510/14 (ChatScreen.kt:333)расходится
Masseg bar (панель ввода чата)390×95 как таббар: стеклянная скрепка 44 · стеклянное поле 230×44 · стеклянная отправка 44; n=23белая полоса, серое поле 44, синий кружок 44 (ChatScreen.kt:274–312)расходится
Event Marker (маркер карты)110×110: обложка 44×44 r6, подпись 700/10 в две строки; кластер — стопка обложек + «+ ещё N»; n=222bitmap: обложка со скруглением + подпись #282A31 с белой обводкой (EventMap.kt:316); кластер — кружок с числом (clusterBitmap)частично
Сard-user-save (карточка человека)358×70: аватар 48, имя 590/18, район и «N общих интереса» 510/16@40 %, справа действие (✓/✕/сердце/чекбокс); n=226нет; в кабинете — кружок с инициалом + имя (CrewScreen.kt:257)нет в коде
Event controls / List Item / Right item (строки кабинета)358×64 r20 #F5F5F5: иконка 36 r24 в тинте (#000@7 %, #F84040@11 %, #DFA107@11 %), заголовок 510/16, подпись 510/14@40 %, chevron 20; группы с разделителем; n=98+568нетнет в коде
Question-card358×66/101, паддинг 16/12, вопрос 510/18 + «Текст · Необязательно» 510/14@40 %, drag-handle; n=37нетнет в коде
Checkbox 24 · Radio 24 · Slider 358×44 · Tabs calendar 48 · wheelPicker · Action Sheet · Alert · Dropdownсистемные и кастомные контролы макета; n=141+230+1+124нет ни одногонет в коде
Liquid Glass MaterialRegular Large (48/62 px), Regular Medium (чипы 40), Clear/Light (тёмные экраны) — с backdrop-блюромModifier.liquidGlass: подложка + обводка + тень, без блюра (Glass.kt)частично
Зафиксированное упрощение.
Шапка экрана124 px: Button-icon 48 на (16, 64), заголовок 590/18 **по центру** (контейнер 238), правый слот 48; ниже — белый лист r32 на сером #F5F5F5statusBarsPadding + паддинг 16/8, заголовок **слева** после кнопки (AuthScaffold, SettingsScaffold, Notifications/Create/Crew/Edit/Chat/Search); белый лист только на экранах входарасходится
Единственный центрированный заголовок — на странице события (SpaceBetween).
Main Action (нижняя зона CTA)96 px, паддинг 24 со всех сторон, кнопка 342×48 (на странице события 88 px, паддинг 24/16/24/24)navigationBarsPadding + 16 (или 24) + кнопка 44 (Create/Edit/Onboarding — белая подложка; Event — градиент)частично

Совпадает 8 · частично 8 · расходится 5 · нет 7. Размеры — из `absoluteBoundingBox`, паддинги и gap — из auto-layout, заливки — из `fills`; «n» — сколько инстансов компонента встретилось на трёх выгруженных страницах.

Контракт API: что дизайн требует и что уже есть

Что нужно дизайнуБэкенд (api-schema.yml 27.08, kb/30-backend)Клиент
Расстояние «2.4 км от вас» в карточках и на событииесть EventCard.distance_m (от чего считается — уточнить)нет строка «2,4 км» захардкожена
«66 Идёт» + аватары и имена идущихесть going_count, EventCardDetail.going_preview[] {name, initials, color}нет аватары и имена захардкожены
Вид организатора на странице событияесть EventCardDetail.is_organizerчастично сравнивает id с /events/mine
Причины жалобыесть GET /events/{id}/report → reasons[], already_sent; ReasonEnum 5 значений (в макете 9)нет шлёт other
Состояния участия (одобрена / отклонена / лист ожидания / отменено)есть Rsvp.my_status: pending · going · waitlisted · declined · cancelled; my_queue_positionчастично только going / pending
Список участников по вкладкам, заявка с текстоместь Participants: going, pending, waitlisted, declined, cancelled; Participant.note/session/reply_due_atчастично going + pending
Видимость «Публичное / Приватное»есть VisibilityEnum public | link в EventDraft и EventCardнет всегда public
Дата и время окончанияесть ends_at в черновике и карточкечастично старт + 2 ч
Изображения событиячастично EventDraft.cover_url строкой; загрузки файла для событий нет (multipart есть только у /chat-media)нет
Теги · «только проверенные» · вопросы при регистрации · команда и ролинет в контракте нетнет
Приглашения на событиеесть POST /events/company-invite, GET /events/company-invites, POST …/{id}/respond (позвать компанию)нет
Шторка фильтров: город, район, даты, цена, интересыесть /public/events?city&district&from&to&interest&price=free|paid|unknown&q&sort=new|popular|soon&online&bboxчастично q, interest, price=free, from/to, online
«Только проверенные» и радиуснет нет; радиус (near, radius_km) только в спеке kb 82нет
Календарьесть /public/events/calendarнет
«Просмотр по интересам» со счётчиками, список городов и районовесть /public/catalog → interests{total}, cities, districts; /citiesнет
Страница категории и подпискаесть /public/catalog + POST /users/me/calendars {kind: topic} + /public/events?interest=нет
«Куда иду» / повесткаесть /users/me/calendars.agenda, /events/mine.attendingчастично список «Я иду» в профиле
«Афиша города»: подборки, сторис, популярноеесть /public/collections, /public/collections/{slug}, /public/stories, sort=popular|soonнет
Страница площадкиесть /public/venues/{id} + /public/events?venue=нет
Профиль другого пользователячастично /public/organizers/{id} — только публиковавшие, без фамилии; /events/people — люди с общих прошедших событийнет
Отзыв «как прошло», история, дейтинг-мэтчи после событийесть GET/POST /events/{id}/review (tags, participants, new_matches), /events/matches, POST /events/{id}/checkinнет
Фото в чатеесть POST /api/v1/chat-media (multipart photo); kb 75 — реализовано 16.08 локальнонет
Форма обращения в поддержкуесть POST /feedback {email, message}нет статичный экран
Удаление аккаунтачастично POST /users/me/delete, /delete/cancel — kb 79: реализовано 16.08 локально, в api-schema.yml нетнет кнопка ведёт в «Приватность»
Пуши и настройки уведомленийчастично kb 76: реализовано локально, клиентских ручек в схеме нетнет локальные тумблеры
Районы пользователяесть PUT /users/me/event-prefs {topics, districts}частично districts всегда []
Репутация уровнем (Высокая / Средняя / Низкая)частично /users/me/reputation → score, restriction, can_participate; порог уровней — решение продуктачастично число
Статус отношений · подписчики · блокировки · QRнет в контракте нетнет
Анкета, фото и селфи-верификацияесть дейтинговые GET/PATCH /users/profile, photos, POST /users/profile/verify/photo (kb 63/10)частично только чтение имени/телефона/фото
Режим записи «Без записи»нет EventDraftRsvpModeEnum = auto | selective; клиент шлёт off — по схеме невалидно (проверить на стенде)есть чип есть — лишний

Главный вывод: значительная часть «нет в коде» упирается не в бэкенд — контракт уже отдаёт `going_preview`, `distance_m`, `visibility`, причины жалоб, все списки участников, каталог со счётчиками, подписки и повестку, приглашения, подборки, отзывы, фидбек и фото в чате. Без бэкенда остаются теги, вопросы при регистрации, команда с ролями, «только проверенные», радиус, статус, подписчики, блокировки, QR.

Проход 2 · Экран за экраном
A · Figma 112:160

Вход, регистрация, верификация

по дереву нод62 фреймов · 14 экранов: 9 нет в коде · 5 есть, но расходится

Одна секция, 62 фрейма, 65 переходов. Полное дерево нод выгружено.

A1

Экран входа (велком)

Есть, но расходится
по рендерамКод: ui/screens/auth/AuthScreens.kt:61 WelcomeScreenФреймов Figma: 1
  • существенноКоллаж из трёх фотографий и 3D-иконки (гантеля, пазл, пилюля «Питомцы» с 3D-лапой, искры) заменены серыми градиентными плашками-заглушками (CollageStub, AuthScreens.kt:114). Это единственный экран, который видит каждый новый пользователь.
  • косметикаЗаголовок: в макете вес 760/42, вторая строка «рядом с тобой» — #282A31@40%. В коде обе строки одним цветом, вес 650.
  • косметикаФон: в макете три цветных пятна (#85DADE@30%, #AD6DE1@40%, #933ED8@40%) под коллажем; в коде один линейный градиент — похоже, но не то.
Состояния макета, что совпадает, рендеры
Состояния и содержимое в макете
  • единственное состояние
Что совпадает
  • Структура (коллаж → заголовок → подзаголовок 18/510@40% → кнопка «Войти» brand) совпадает.
Figma 158:9505
Figma 158:9505
A2

Ввод номера

Есть, но расходится
по дереву нодКод: ui/screens/auth/AuthScreens.kt:153 PhoneScreenФреймов Figma: 4
  • существенноНет состояния «Аккаунт заблокирован» (579:52473): красная подпись под полем, пояснение «Если вы считаете, что это ошибка, свяжитесь с поддержкой.» и кнопка «Связаться с поддержкой» вместо «Получить код».
  • существенноОшибка валидации «Некорректный номер» в макете — красная строка 14/510 сразу под полем (582:52876). В коде единственная ошибка — общая «Не получилось отправить код — проверьте номер» под кнопкой, после запроса в сеть (AuthScreens.kt:190).
  • существенноСсылки «Политики конфиденциальности» и «Соглашение о получении рекламных рассылок» покрашены в accent, но не кликабельны (AuthScreens.kt:200–206) — экран A3 недостижим.
  • косметикаГеометрия: заголовок шапки «Вход» в макете центрирован (контейнер 238 px между кнопкой 48 и правым слотом 48, y=64), в коде — прижат к кнопке «назад» (AuthScaffold, Row). Поле 358×46, кнопка 342×48 с отступами 24; в коде поле 44, кнопка 44 с отступами 16.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • пустое поле
  • заполнен
  • ошибка «Некорректный номер»
  • «Аккаунт заблокирован» + «Связаться с поддержкой»
Что совпадает
  • Шапка «Вход» со стеклянной кнопкой назад, заголовок «Авторизация» 28/650, подзаголовок, поле с «+7» и маской (000) 000-00-00, кнопка «Получить код» с disabled-состоянием, юридический текст 14/510@40% — совпадают.
  • Системная цифровая клавиатура — как в макете.
A3

Политика конфиденциальности (из входа)

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 1
  • блокерЭкрана нет. В настройках есть PolicyScreen (SettingsScreens.kt:308) — три строки без содержимого и без обработчиков.
Состояния макета
Состояния и содержимое в макете
  • полнотекстовый экран «Политика» со стеклянной кнопкой назад
A4

Ввод кода из СМС

Есть, но расходится
по дереву нодКод: ui/screens/auth/AuthScreens.kt:254 OtpScreenФреймов Figma: 5
  • существенноВ коде нарисована собственная цифровая клавиатура (NumPad, AuthScreens.kt:351–393) поверх экрана. В макете — системная клавиатура (инстанс Keyboard), как на вводе номера. Своя клавиатура ломает автоподстановку кода из СМС и платформенное поведение.
  • существенноНет состояния лимита (592:5040): «Лимит отправок исчерпан», задизейбленная кнопка «Повторить попытку через 14:59» и вторичная «Изменить номер». По переходу 592:5124 оно наступает после 5–7 неверных вводов — в коде счётчика попыток нет.
  • существенно«Отправить код повторно 0:50» в коде — статичная строка (AuthScreens.kt:301), таймер не идёт, повторная отправка невозможна. В макете после ошибки появляется кнопка «Получить код заново» (261:27297) — в коде её нет.
  • косметикаТекст ошибки: макет «Неправильный код авторизации», код «Код не подошёл». Кнопка: макет «Войти», код «Подтвердить».
  • косметика6 ячеек вместо 4 — осознанно (живой код шестизначный, зафиксировано в kb). Размер ячейки 84×96 r16 и шрифт 650/28 совпадают; при ошибке в макете ячейки обводятся #F84040 (OTP-field, 8 инстансов) — в коде ячейки на ошибку не реагируют.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • пустые ячейки
  • заполнено
  • «Неправильный код авторизации» + «Получить код заново»
  • «Лимит отправок исчерпан» + таймер 14:59 + «Изменить номер»
Что совпадает
  • Заголовок «Код из смс», подпись «Код отправлен на номер …», ячейки #F5F5F5 r16 с курсором #0088FF — по макету.
A5

Регистрация, шаг 1 из 4 — «Где вы обычно находитесь?»

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 10
Бэкенд: Есть всё, кроме гео на клиенте: города — GET /cities, районы со счётчиками — /public/catalog?city=, сохранение — PUT /users/me/event-prefs {topics, districts} (клиент шлёт districts=[] — EventsRepository.kt:259).
  • блокерШага нет целиком: ни выбора города, ни карты-превью, ни чипов районов, ни запроса геопозиции. Приложение вообще не запрашивает runtime-разрешение на геолокацию (ACCESS_*_LOCATION объявлены в манифесте, но не запрашиваются).
Состояния макета
Состояния и содержимое в макете
  • город определён по геопозиции (Москва) + «Изменить»
  • районы: чипы «Весь город» + 5 районов, мультивыбор 1–2, «Другие районы»
  • СПб (другой набор районов)
  • маленький город без районов (Пермь)
  • системный диалог доступа к геопозиции
  • выбор точки на карте «Где вы находитесь?» → «Выбрать это место»
A6

Поиск города

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 5
  • блокерЭкрана нет. Список городов есть на бэке (/cities, id строкой — kb).
Состояния макета
Состояния и содержимое в макете
  • список городов + кнопка «Определить по геолокации»
  • доступ к гео запрещён → action sheet «Перейти в настройки / Отмена»
  • выбран (галочка)
  • ввод «Мос» → фильтр
  • «Ничего не найдено» с 3D-иконкой
A7

Поиск районов

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 2
  • блокерЭкрана нет.
Состояния макета
Состояния и содержимое в макете
  • список с чекбоксами + «Сбросить»
  • выбрано → «Сбросить / Применить»
A8

Регистрация, шаг 2 из 4 — «Расскажите о себе»

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 19
Бэкенд: Анкета — дейтинговые ручки GET/PATCH /users/profile, фото — photos (kb: «форма чужая, маппим поля»).
  • блокерШага нет. В приложении вообще нет ни выбора фото, ни камеры (разрешение CAMERA объявлено, но не используется), ни редактирования имени/даты/пола/«о себе». Профиль показывает имя и телефон с бэка как есть.
Состояния макета
Состояния и содержимое в макете
  • пусто
  • action sheet «Сделать фото / Выбрать из галереи»
  • системные запросы доступа к камере / медиатеке
  • доступ запрещён → «Разрешите доступ… / Перейти в настройки»
  • фото добавлено («Изменить фото»)
  • ввод имени (клавиатура)
  • wheel-picker даты рождения + «Применить»
  • дропдаун пола «Мужской / Женский»
  • «Коротко о себе» 0/150 → 100/150
  • валидация: «Введите корректное имя с фамилией», «Введите корректную дату рождения», «Введите осмысленное описание»
  • «Пропустить» в шапке
A9

Регистрация, шаг 3 из 4 — «Какие события вам интересны?»

Есть, но расходится
по дереву нодКод: ui/screens/auth/OnboardingScreen.kt:37 OnboardingInterestsScreenФреймов Figma: 2
  • существенноВ макете это шаг 3 из 4 с индикатором прогресса (4 полоски), стеклянной кнопкой «назад» и «Пропустить» в шапке. В коде — отдельный экран без индикатора и без «назад», «Пропустить» — текстовая ссылка внизу под кнопкой.
  • существенноКатегории в макете — фиксированный набор из 10 с 3D-иконками (Спорт, Саморазвитие, Творчество, Питомцы, Активности, Музыка, Еда, Семья, Прогулки, Кино), выбранная — тёмная #282A31 с иконкой check. В коде — текстовые чипы из /events/topics без иконок, выбранная — синяя #007AFF без галочки (OnboardingScreen.kt:82–94).
  • косметикаТексты: макет «Какие события вам интересны?» / «Выберите минимум 3 категории, чтобы получать персональные рекомендации.», код «Что вам интересно?» / «Выберите хотя бы три — так события в афише и колоде будут подобраны под вас». Кнопка в коде меняет текст «Выбрано: N из 3» — в макете всегда «Продолжить».
Состояния макета, что совпадает
Состояния и содержимое в макете
  • ничего не выбрано (кнопка disabled)
  • выбрано ≥3 (чипы тёмные с галочкой)
Что совпадает
  • Логика «минимум три» и disabled-кнопка — по макету. Показывается один раз (пока предпочтения пусты) — разумно, хотя в макете это часть регистрации.
A10

Регистрация, шаг 4 из 4 — «Подтвердите, что вы — это вы»

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 3
Бэкенд: Селфи-верификация — дейтинговые POST /users/profile/verify/photo, GET …/verify/status (есть).
  • блокерШага нет.
Состояния макета
Состояния и содержимое в макете
  • три преимущества с 3D-иконками + «Сделать селфи»
  • системный запрос доступа к камере
  • доступ запрещён → «Разрешите доступ к камере / Перейти в настройки»
A11

Селфи (камера)

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 4
  • блокерЭкрана нет; CameraX/камера в проекте не подключены.
Состояния макета
Состояния и содержимое в макете
  • камера с овальной маской, вспышка, переворот
  • снимок → шторка «Получилось селфи? Переснять / Да, далее»
  • ошибка «Не удалось распознать лицо» → «Переснять»
A12

Поп-ап «Профиль подтвержден»

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 1
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • шторка поверх карты: 3D-бейдж, текст, «Отлично!»
A13

Запрос разрешения на уведомления

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 1
Бэкенд: kb 76 (16.08): событийные пуши реализованы локально, на стенд не выкачены; регистрация FCM-токена — дейтинговая ручка (kb 10).
  • блокерНет. POST_NOTIFICATIONS (Android 13+) в манифесте не объявлен, FCM не подключён.
Состояния макета
Состояния и содержимое в макете
  • системный диалог сразу после регистрации («почти сразу вылазит пермишен»)
A14

Поведение флоу входа

Есть, но расходится
по дереву нодКод: MainActivity.kt:78–142 (AuthStep)Фреймов Figma: 3
  • существенноВетвления «новый / существующий аккаунт» нет: после OTP всегда сразу главный экран, без шагов 1–4. Единственная ветка — онбординг интересов, если предпочтения пусты (MainActivity.kt:230–247).
  • косметикаСтатус «не подтверждён» нигде не отражается (см. H1: репутация/бейдж).
Состояния макета
Состояния и содержимое в макете
  • «если уже есть аккаунт, просто вход» — регистрация пропускается
  • «если пропустили селфи и верификацию — пользователь не подтверждён»
B · Figma 579:52323

Афиша: карта, фильтры, поиск, событие, чат события

по дереву нод103 фреймов · 13 экранов: 8 нет в коде · 5 есть, но расходится

4 секции. Секция «NEW — обновление карты + «Куда иду» (25 авг)» и «Афиша города» — новые, в коде их нет вообще.

B1

Страница «Карта» (главный экран)

Есть, но расходится
по дереву нодКод: ui/screens/afisha/AfishaMapScreen.kt:81 AfishaMapScreen; ui/components/EventMap.ktФреймов Figma: 10
  • существенноБыстрые фильтры: макет «Неделя», «Рядом ▾» (дропдаун → радиус), «Популярные», «Новые», «Проверенные». Код: «Сегодня», «Рядом», «Бесплатно», «Спорт», «С детьми» (data/mock/MockEvents.kt:389) — другой набор, «Рядом» ничего не делает без гео (AppViewModels.kt:44).
  • существенноКнопка «к моей геопозиции» (icon-NavigationArrow под зумом) отсутствует; разрешение на гео не запрашивается, карта всегда открывается на Москве (EventMap.kt:76).
  • существенноПилюля «Смотреть списком ▾» нарисована, но не кликабельна (AfishaMapScreen.kt:156–168); режима списка (B7) нет.
  • существенноШторка: в макете после рельса «Афиша города» идёт блок «Просмотр по интересам» (6 плиток с 3D-иконками и счётчиками: Спорт 22, Языки 8, Фотосессии 4, Питомцы 32, Настолки 5, Пикники 3), затем «Подобрано для вас» с группировкой по дням («Сегодня / четверг», «Завтра / пятница»). В коде блока интересов нет, список плоский без дней (AfishaMapScreen.kt:358–466).
  • существенноСтрока события (Default-card-event): в макете метаданные — «2.4 км от вас» и строка организатора (аватар + «Мария А.»), бейдж категории с «+1». В коде — «дата · цена · идут N» и сердце справа (EventCards.kt:104–149); расстояние и организатор не показываются, хотя distance_m и organizer в контракте есть (Dtos.kt:100–102).
  • существенноКластеры: макет — стопка обложек с подписью «+ ещё N»; код — кружок с числом «N»/«9+» (EventMap.kt clusterBitmap). Агрегации «события → категории» при зум-ауте нет.
  • существенноВысота шторки в покое: в макете лист начинается на y=628 (виден заголовок «Афиша города» и верх рельса), т.е. 216 px из 844; в коде sheetPeekHeight = 300.dp (AfishaMapScreen.kt:105) — карта занимает на треть меньше экрана, чем задумано.
  • косметикаШапка: порядок иконок в левой стеклянной паре — макет [фильтры | поиск], код [поиск | фильтры]; обе ведут на один экран SearchScreen. Аватар справа — в макете фото, в коде терракотовый кружок с иконкой. Зум-контрол в макете — белая пилюля 40×82 (не стекло) на x=334/y=289 плюс отдельная кнопка «к моей локации» 40×40 на 12 px ниже.
  • косметикаАкцентная карточка рельса: макет — бейдж категории поверх обложки на градиенте, мета «9.3 км от вас · Завтра»; код — бейджа на обложке нет, мета «дата · цена · идут N».
Состояния макета, что совпадает
Состояния и содержимое в макете
  • по умолчанию
  • быстрый фильтр активен (тёмный чип)
  • «Рядом · до 10 км»
  • зум: «карточки отлипают» / «ещё зум»
  • зум-аут: события превращаются в категории
  • нет доступа к гео → нет кнопки «к моей локации»
Что совпадает
  • Композиция экрана (карта фоном → шапка с двумя стеклянными парами → чипы → шторка со скруглением 32 → таббар) — по макету.
  • Маркер: обложка со скруглением, белая обводка, тень, подпись названия под ней #282A31 с белой обводкой — соответствует «Event Marker».
  • Таббар: стеклянная пилюля [Афиша · Избранные · Чаты] + круглые «Свайпы» и «+» по краям, активный таб синий на подложке AccentTint, подписи 10/590 — по UI-kit «Tab Bar».
  • Зум-контрол «+ / −» в стеклянной пилюле справа — есть.
B2

Выбор радиуса «Расстояния от меня»

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 1
Бэкенд: Радиуса в API нет — расстояние считает клиент (kb).
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • шторка со слайдером 2 / 10 / 25 / 50 / 100+ км, «Сбросить / Применить»
B3

Поп-ап фильтрации (шторка над картой)

Есть, но расходится
по дереву нодКод: ui/screens/afisha/SearchScreen.kt:438 (совмещён с поиском)Фреймов Figma: 12
Бэкенд: /public/events принимает city, district (через запятую), from/to, interest (через запятую), price=free|paid|unknown, q, sort=new|popular|soon, online, bbox — вся шторка, кроме «только проверенных», закрывается контрактом. Справочник районов/тем со счётчиками — /public/catalog.
  • существенноВ макете фильтры — нижняя шторка поверх карты с заголовком «Фильтрация» и кнопками «Сбросить / Применить». В коде — отдельный полноэкранный SearchScreen, фильтры применяются мгновенно, кнопок нет.
  • существенноНет разделов «Город» и «Район» (с переходами в поиск города/районов), нет «Период → календарь», нет чипа «Платные», нет переключателя «Только проверенные».
  • существенноЧип «Онлайн» (SearchScreen.kt:503) в макете отсутствует; интересы показаны 8 первыми топиками без 3D-иконок (SearchScreen.kt:518).
  • косметикаПустое состояние «если при вводе всех фильтров нет подходящих событий» — в коде есть общее «Ничего не нашлось» на поиске.
Состояния макета
Состояния и содержимое в макете
  • Город (Москва, «Изменить», «Определили по геопозиции»)
  • Район: чипы + «Другие районы»
  • Дата: Все / Сегодня / Завтра / На неделе / Период → календарь
  • Цена: Бесплатные / Платные
  • Интересы: сетка 10 с 3D-иконками
  • «Только проверенные» (switch) «От верифицированных пользователей»
  • «Сбросить / Применить»
  • нет подходящих событий
  • сброс возвращает исходное
B4

Поиск города / районов из фильтра

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 3
  • блокерНет (те же экраны, что A6/A7).
Состояния макета
Состояния и содержимое в макете
  • см. A6 / A7
B5

Поп-ап календарь

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 4
Бэкенд: GET /public/events/calendar есть.
  • блокерНет. Компонент «Tabs calendar» из UI-kit не реализован.
Состояния макета
Состояния и содержимое в макете
  • сетка месяца «Август 2026», выбор дат/диапазона, «Сбросить / Применить»
  • из «Афиши»: после применения меняются даты в «Подобрано для вас» + автоскролл
B6

Страница поиска

Есть, но расходится
по дереву нодКод: ui/screens/afisha/SearchScreen.kt:438 SearchScreenФреймов Figma: 5
  • существенноСтартового состояния нет: макет показывает «Недавние запросы» (Пробежка, Настолки, Кофе) и «Популярные категории» (чипы с 3D-иконками); код сразу выводит всю выдачу и чипы периодов.
  • косметикаШапка: макет — поле + текстовая кнопка «Отмена» (#007AFF); код — стеклянная кнопка назад + поле. Строки результатов в макете содержат дату «29 июля · 11:00» справа от бейджа.
  • косметикаКрестик очистки в поле (icon-x-mark) отсутствует.
  • косметикаГеометрия: в макете белый блок шапки 134 px со скруглением 32 снизу, поле 290×46 + «Отмена» 60; строки недавних запросов 44 px с разделителями; чипы категорий 44. В коде — серый фон, стеклянная кнопка 48 + поле 44.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • стартовое: поле + «Отмена», «Недавние запросы», «Популярные категории»
  • ввод запроса → «Результаты поиска»
  • некорректный текст → крестик сбрасывает
Что совпадает
  • Дебаунс ввода, живой /public/events?q=, пустое состояние «Ничего не нашлось» — есть.
B7

Страница «Афиша» (режим списка)

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 11
  • блокерРежима списка нет вообще: пилюля «Смотреть списком» декоративная (см. B1).
Состояния макета
Состояния и содержимое в макете
  • шапка «Москва / Алтуфьевский» (выбор города и района) + иконка календаря
  • быстрые чипы (с «Новые»)
  • рельс «Афиша города» → «Просмотр по интересам» → «Подобрано для вас» по дням
  • нет доступа к гео
  • карточки событий, куда уже иду
  • маленькие карточки
  • после календаря меняются даты + автоскролл
B9

Страница категории

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 4
Бэкенд: Есть всё: счётчики событий по темам — /public/catalog (CatalogInterest.total), подписка — POST /users/me/calendars {kind: topic, value}, список — /public/events?interest=.
  • блокерНет. Из бейджа категории на карточках переход в категорию («Переход в интерес») тоже не реализован.
Состояния макета
Состояния и содержимое в макете
  • шапка «Спорт», заголовок «Категория “Спорт”», «32 Событий · 342 Подписчика», описание, кнопка «Подписаться» (тёмная primary)
  • события по дням
B10

Страница события

Есть, но расходится
по дереву нодКод: ui/screens/event/EventScreen.kt:86 EventScreenФреймов Figma: 19
  • существенноСостояния CTA: в коде только None/Pending/Going (EventScreen.kt:79–83). Нет «Заявка одобрена», «Заявка отклонена», «Достигнут лимит участников» (тёмная disabled) и «Событие отменено» (красная button-delete с крестиком). Текст ожидания: макет «Вы подали заявку», код «Заявка отправлена».
  • существенноЖалоба: в макете шторка «Выберите причину» (9 причин) + «Отправить». В коде тап по «Пожаловаться» сразу шлёт reason="other" без выбора и подтверждения (AppViewModels.kt:462). Бэкенд при этом отдаёт список причин и флаг «уже отправлено»: GET /events/{id}/report → ReportScreen{reasons[], already_sent}, ReasonEnum: not_as_described / scam / forbidden / unsafe / other — в макете причин 9, в API 5, надо свести.
  • существенноФиктивные данные на живом экране: стопка аватаров с инициалами «АК, ДК, МС, ЕЛ» и строка «Данил Колбасенко, Андрей и ещё N» захардкожены (EventScreen.kt:345–358); «· 2,4 км от вас» дописано строкой (EventScreen.kt:256); второй бейдж «Активности» добавляется всегда (EventScreen.kt:219). Бэкенд всё это отдаёт: EventCardDetail.going_preview[] (name, initials, color), distance_m, interests[], is_organizer (api-schema.yml: EventCardDetail) — клиент их не читает (Dtos.kt:78–103).
  • существенно«Отмена участия» в макете идёт через подтверждение (231:20559 → action sheet 231:21452); в коде тап по «Вы идёте» сразу шлёт DELETE /rsvp (AppViewModels.kt:475–503). После записи в макете на странице появляется вторичная кнопка «Перейти в чат» (231:20559 → 232:22272) — в коде входа в чат со страницы события нет.
  • существенноБлок «Организаторы» в макете — список (организация + люди) со стрелками-переходами в профиль; в коде один организатор без перехода (EventScreen.kt:373–419). «Связаться с организатором» в коде просто переключает таб «Чаты» (MainActivity.kt:202), а не открывает чат.
  • существенноSnackbar «Добавлено в избранные» (231:21433) не реализован — сердце меняется молча. Карусель обложек с пагинацией — одна картинка.
  • косметикаБейджи категорий: макет — «# Активности» (icon-hashtag + текст на #FFF@16%), код — точка + текст (InterestBadge).
  • косметикаФон: в макете под цветной фон подкладывается размытая обложка («индивидуальный градиент под каждое событие»); в коде сплошной градиент от coverColor к #232B48 — зафиксированное упрощение, но визуально заметно.
  • косметика«Похожие события» в макете — горизонтальный пейджер колонок по две карточки 331×108 (gap 20, страницы по 2 события); в коде вертикальный список из трёх строк.
  • косметикаГеометрия: обложка 358×358 r20 на y=130, бейджи 30 px (#FFF@15%, паддинг 6/6/12/6, иконка-решётка) — в коде бейджи ≈22 px с точкой; разделители #FFF@11% и мини-карта 358×140 r16 совпадают; нижняя кнопка 342×48 (код 44).
Состояния макета, что совпадает
Состояния и содержимое в макете
  • базовое (CTA «Участвовать»)
  • «Вы подали заявку» (тёмная кнопка)
  • «Заявка одобрена» / «Заявка отклонена»
  • «Достигнут лимит участников»
  • «Событие отменено» (красная кнопка)
  • «Вы идёте» / «Отмена участия»
  • snackbar «Добавлено в избранные»
  • шторка «Пожаловаться»: «Выберите причину» — 9 причин + «Отправить»
  • карусель обложек (точки-пагинация)
Что совпадает
  • Композиция: тёмный экран, шапка «Событие» со стеклянными [назад] и [сердце | поделиться], квадратная обложка r20, бейджи, заголовок 28/650, дата 18/510@40%, разделитель, место + мини-карта с кнопкой «открыть в картах», «N Идёт» + аватары, организатор, описание, «Связаться с организатором» / «Пожаловаться на событие» (красный), похожие, липкая CTA — по макету 230:19369.
  • RSVP живой: POST/DELETE /events/{id}/rsvp, оптимистичный счётчик; лайк — реакция would_go; шаринг — системный chooser.
B11

Чат события

Есть, но расходится
по дереву нодКод: ui/screens/chats/ChatScreen.kt:216 ChatScreen; ui/ChatViewModel.ktФреймов Figma: 23
  • существенноНет карточки события в шапке (обложка, название, «Уже завтра в 10:00», переход на событие) — в коде только заголовок и подпись «Чат закрыт».
  • существенноУ чужих сообщений нет имени автора и разделителей по датам; статусов доставки/прочтения нет (только полупрозрачность pending); ошибки отправки и повторной отправки нет — по kb сообщение может потеряться молча.
  • существенноВложения фото (скрепка в «Masseg bar», пермишены, лимит, просмотр) не реализованы. Бэкенд их принимает: POST /api/v1/chat-media (multipart photo, api-schema.yml:77; kb 75 — реализовано 16.08 локально).
  • существенноПузыри: в макете своё сообщение — светло-синяя подложка #007AFF@11% с тёмным текстом, чужое — #F5F5F5, ширина 270, r20 с «хвостом» r2, паддинг 8, время 10/590@40%; в коде своё — сплошной #007AFF с белым текстом, чужое — белое, r18/6, паддинг 14×10, время 14/510 (ChatScreen.kt:333–380). Поле ввода: в макете стеклянная панель «Masseg bar» 95 px (скрепка 44 · поле 230×44 · отправить 44), в коде белая полоса с серым полем и синим кружком.
  • косметикаПустое состояние «Чат еще пустой» с 3D-иконкой отсутствует (пустой список).
Состояния макета, что совпадает
Состояния и содержимое в макете
  • карточка события в шапке («WATT Conf 2026», «Уже завтра в 10:00» ›)
  • разделители дат «Вчера / Сегодня», имя автора над чужим пузырём
  • отправлено (часы) / не прочитано / прочитано
  • ошибка отправки → «Повторная отправка»
  • вложение фото: пермишены 1–2, «Добавляем максимум», просмотр фото (пинч-зум, свайп)
  • при открытой клавиатуре карточка события скрывается
  • чат ещё пустой («Чат еще пустой / Напиши сообщение…»)
Что совпадает
  • Живой WebSocket, история GET /event-chats/{id}/messages, свои сообщения справа синим, системные по центру, закрытый чат — только чтение.
B12

NEW · Блок «Куда иду» на карте

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 6
  • блокерСекция от 25 авг 2026 — в коде нет. Данные для неё есть: GET /events/mine → attending[] и повестка GET /users/me/calendars → agenda[].
Состояния макета
Состояния и содержимое в макете
  • 0 событий
  • 1 событие
  • 2 события
  • 3 события
  • 4+ («Кофе и настолки» + «+ еще 3 события»)
  • переход в раздел / на событие
B13

NEW · Раздел «Куда иду»

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 6
  • блокерНет. Ближайший аналог — секция «Я иду» внутри профиля (ProfileScreen.kt:129–152), без сегмента и без дней.
Состояния макета
Состояния и содержимое в макете
  • сегмент «Предстоящие / Прошедшие», список по дням
  • пусто
  • переход в событие / в прошедшие
B14

Страница «Афиша города»

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 3
Бэкенд: Блоки подкреплены контрактом: «Лучшие подборки» — /public/collections (+ /collections/{slug}), кружки-сторис — /public/stories, «Популярное» — /public/events?sort=popular, «В ближайшие дни» — sort=soon.
  • блокерНет. Стрелка «›» у заголовка «Афиша города» в шторке карты (AfishaMapScreen.kt:382) ведёт в никуда — обработчика нет.
Состояния макета
Состояния и содержимое в макете
  • hero-карточка события с ценой «от 750₽ / 1 000₽»
  • «Популярное в городе» (рельс, ценники)
  • «Лучшие подборки» (коллекции «Мастерклассы на выходные», «Культурный город и театры»)
  • «Рекомендуем»
  • «В ближайшие дни»
C · Figma 579:52328

Создание события и кабинет организатора

по дереву нод233 фреймов · 14 экранов: 8 нет в коде · 5 есть, но расходится · 1 соответствует

Сверялась версия «NEW от 25 авг 2026» (46 + 134 фрейма вложенных секций «Управление»). Версия «от 28 июля» (53 фрейма) устарела и не сверялась.

C1

Новое событие (форма создания)

Есть, но расходится
по дереву нодКод: ui/screens/create/CreateEventScreen.kt:60 CreateEventScreen; ui/CreateEventViewModel.ktФреймов Figma: 28
Бэкенд: EventDraft в API уже принимает visibility (public | link → «Публичное / Приватное»), ends_at, lat/long, cover_url (строкой; multipart-загрузки картинок для событий нет — есть только /chat-media). Тегов и «только проверенных» в контракте нет. ⚠️ EventDraftRsvpModeEnum = auto | selective, а чип «Без записи» шлёт rsvp_mode=off (CreateEventScreen.kt:315) — по схеме невалидно; на стенде не проверял.
  • существенноАрхитектура другая: в макете (версия 25 авг) — одна длинная форма с кнопкой «Создать»; в коде — мастер из 5 шагов с прогресс-полосками и кнопкой «Далее» («О чём событие?», «Когда встречаемся?», «Где?», «Кто может прийти?», «Проверьте перед публикацией»). Шага-превью в макете нет, экрана успеха «🎉 Событие опубликовано» (CreateEventScreen.kt:416) тоже нет — после «Создать» открывается страница события.
  • существенноИзображения события («Добавить изображения», action sheet, пермишены, заглушка) — нет ни в UI, ни в API.
  • существенноДата и время: макет — «Начало» (дата + время wheel-picker) и «Конец» (время). Код — чипы 7 ближайших дней и 8 фиксированных часов, конец = старт + 2 часа (CreateEventScreen.kt:220–276).
  • существенноМесто: макет — «Выбрать место» → модалка C2 (поиск + карта), затем карточка «Нескучный сад, вход с Ленинского / Хамовники, Москва» и переключатель «Показывать только участникам». Код — текстовые поля «Город» и «Адрес» плюс чипы «Вживую / Онлайн» и «Ссылка на встречу», которых в макете нет.
  • существенноТеги («Добавить теги» → модалка, лимит 5, стоп-слова), «Видимость: Публичное / Приватное», «Только проверенные» — отсутствуют. Видимость при этом поддержана бэкендом (visibility: link), клиент всегда шлёт public (EventsRepository.kt:299).
  • косметикаГеометрия формы: белый лист r32 от y=124, плейсхолдер изображения 240×240 r24 по центру, поля 358×48 r100, группы «Начало/Конец» и «Доступ» — контейнеры r24 #F5F5F5, кнопка «Создать» 342×48 в зоне 96 px с паддингом 24; в коде серый фон без листа, поля 44, чипы, кнопка 44.
  • существенноОписание: макет — счётчик «0/1000 · минимум 30 символов» и подсветка при превышении; код — поле без счётчика и минимума.
  • существенноИнтересы: в коде захардкоженный список из 12 (INTEREST_OPTIONS, CreateEventScreen.kt:183), в макете — категории приложения (те же 10, что в регистрации).
  • косметикаДоступ: макет — один switch «Требуется подтверждение»; код — три чипа «Сразу / По одобрению / Без записи» (лишний режим off). Стоимость и вместимость: в макете строки-«селекторы» с chevron и валидацией текстом; в коде чипы и поля, валидация только через disabled-кнопку.
  • косметикаЗаголовок шапки: макет «Новое событие», код «Новое событие» — ок; но подзаголовков шагов («О чём событие?») в макете нет.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • одна прокручиваемая форма: изображения → «Детали события» (название, Начало, Конец) → «Выбрать место» → описание 0/1000 · минимум 30 → «Добавить теги» → «Доступ к событию: Требуется подтверждение» → Стоимость → Видимость → Вместимость → «Только проверенные» → «Создать»
  • action sheet фото / пермишены камеры и медиатеки / заглушка, если доступ не дан
  • wheel-picker даты и времени
  • «Выберите интересы» (чипы категорий)
  • теги: модалка «Введите тег #», лимит 5 (чипы дизейблятся), стоп-слова
  • Платно → поле цены, «Укажите стоимость больше 0 ₽»
  • Ограничено → «Введите кол-во участников», «Минимум — 1 участник»
Что совпадает
  • Черновик автосохраняется в /events/draft, публикация /events/draft/publish — живые.
C2

Модалка «Место проведения»

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 10
Бэкенд: Геокодер/поиск мест — уточнить (в kb «страница площадки» помечена полудырой).
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • поиск + «На карте»
  • результаты / некорректный поиск
  • карта с пином, «Выбрать это место»
  • модалка тега «Введите тег» (в той же группе фреймов)
C3

Страница события — вид организатора

Есть, но расходится
по дереву нодКод: ui/screens/event/EventScreen.kt (onCrew)Фреймов Figma: 5
  • существенноВид организатора не отличается от вида участника: нет кнопки «Управлять» (шестерёнка/карандаш), нет пилюли «+N заявки», нет «Отменить событие». Вход в кабинет — по тапу на текст «N идут · управлять» (EventScreen.kt:338) и по ссылке в профиле.
  • косметикаШторка «Поделиться» со своими кнопками «Отправить / Скопировать» заменена системным chooser'ом.
Состояния макета
Состояния и содержимое в макете
  • шапка: [карандаш | поделиться] вместо сердца, иконка-шестерёнка «Управлять»
  • «66 Идёт» + пилюля «+2 заявки»
  • «Отменить событие» красной ссылкой внизу
  • шторка «Поделиться»: «Отправить / Скопировать»
C4

QR-код события

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 1
Бэкенд: QR-механики нет (решение владельца 16.08: только витрина).
  • блокерНет. Единственный QR в коде — заглушка ▦ для скидок (DiscountsScreen.kt:411).
Состояния макета
Состояния и содержимое в макете
  • шторка с QR + системный share sheet
C5

Экран «Управление» (кабинет организатора)

Нет в коде
по дереву нодКод: ui/screens/event/CrewScreen.kt:52 (другая структура)Фреймов Figma: 9
  • блокерЭкрана-меню нет. CrewScreen — один список: заявки, «Идут», ссылка «Редактировать событие», «Отменить событие». Пять из семи пунктов меню (вопросы, организаторы, приглашения, чат, детали) в коде отсутствуют.
Состояния макета
Состояния и содержимое в макете
  • меню: Детали события / Список участников (бейдж N) / Вопросы при регистрации / Организаторы / Пригласить участников / Начать чат с участниками / Отменить событие
C6

Онбординг кабинета (4 поп-апа при первом входе)

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 6
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • «Настраивайте свои событие»
  • «Работайте с участниками»
  • «Настраивайте регистрацию»
  • «Соберите команду» → «Перейти к управлению», свайпы влево
C7

Редактирование события

Есть, но расходится
по дереву нодКод: ui/screens/event/EditEventScreen.kt:343 EditEventScreenФреймов Figma: 4
Бэкенд: PATCH /events/{id} — закрытый список EDITABLE_FIELDS: дату и цену бэк не отдаёт (kb).
  • существенноВ макете редактируется всё (изображения, даты, место, теги, доступ, видимость, вместимость); в коде — только название, описание, адрес, места, с пояснением, почему остальное нельзя (EditEventScreen.kt:412–417). Расхождение продиктовано бэкендом, но экран не выглядит как макет.
  • косметикаЗаголовок: макет «Редактирование события», код «Редактирование».
Состояния макета
Состояния и содержимое в макете
  • та же форма, что создание, кнопка «Сохранить»
  • wheel-picker нового времени
  • изменение интересов/тегов
C8

Организаторы (команда события)

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 19
Бэкенд: Команды/ролей в API нет — блокер бэка.
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • список с бейджем «Создатель»
  • «Добавить организатора»: сегмент Друзья / Все пользователи + поиск
  • шторка роли: «Показать на странице события» (switch), Контроль доступа: Менеджер (полный доступ) / Соорганизатор (нет доступа) / Ведущий (только список участников)
  • «Больше → Редактировать / Удалить»
  • некорректный запрос
C9

Вопросы при регистрации (конструктор)

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 23
Бэкенд: Анкет регистрации в API нет — блокер бэка.
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • основные вопросы: ФИО (какие данные: Имя Фамилия), Телефон, Email — switch + «Обязательно»
  • дополнительные (до 7): типы Текст / С вариантами ответа / Ссылка / Флажок, «Обязательно», множественный выбор, лимит ответов
  • добавление / редактирование / удаление вопроса
  • перетаскивание (drag handle), лимит «не более 7»
  • валидация пустого вопроса/ответа
C10

Список участников

Есть, но расходится
по дереву нодКод: ui/screens/event/CrewScreen.kt:52 CrewScreen; ui/AppViewModels.kt:87 CrewViewModelФреймов Figma: 31
  • существенноНет сегмента «Заявки / Участвуют / Отклонены», поиска и «Одобрить всех»; отклонённые не показываются вовсе — хотя Participants отдаёт going / pending / waitlisted / declined / cancelled, а у участника есть note, session, reply_due_at (api-schema.yml: Participants, Participant).
  • существенноНет просмотра профиля участника/заявки (665:80818) и исключения участника с подтверждением; действия — только «Принять / Отклонить» пилюлями внутри карточки заявки.
  • существенноКарточка человека: макет — аватар, имя, район, «N общих интереса», круглые кнопки ✓/✕; код — кружок с инициалом, имя, заметка (CrewScreen.kt:222–274).
  • косметикаПустые состояния: макет — 3D-иконка + «Пока нет новых заявок» 28/650 + подпись; код — строка «Пока никто не записался» 16/510.
  • косметикаSnackbar «Заявки приняты» отсутствует.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • сегмент «Заявки / Участвуют / Отклонены» + поиск
  • карточки Card-user-save (аватар, имя 18/590, район, «3+ общих интереса», кнопки ✓ / ✕)
  • «Одобрить всех» → snackbar «Заявки приняты»
  • просмотр заявки/участника (профиль + ответы на вопросы)
  • исключить участника (подтверждение)
  • отклонённые, «Одобрить» обратно
  • пустые состояния («Пока нет новых заявок»)
  • варианты: с одобрением и вопросами / с одобрением без вопросов / без одобрения
  • некорректный текст в поиске
Что совпадает
  • Одобрение/отклонение заявок — живое (POST …/rsvp/{user_id}/decide), подсказка «свободно N» из seats_left.
C11

Приглашение участников

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 12
Бэкенд: В контракте есть «позвать компанию»: POST /events/company-invite, GET /events/company-invites, POST /events/company-invites/{id}/respond (CompanyInvite: event, message, invited/accepted/declined, my_response). Семантика близка к макету, соответствие полей уточнить.
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • сегмент Друзья / Участники + поиск, чекбоксы, «Выбрать всех / Снять выделение»
  • просмотр выбранных, текст приглашения
  • «Отправить приглашения» → уведомление
  • пусто: «Пока некого приглашать»
C12

Начать чат с участниками (из кабинета)

Нет в коде
по дереву нодКод: — нет реализации —Фреймов Figma: 4
  • блокерИз кабинета в чат перехода нет; чат открывается только из таба «Чаты», и только когда бэкенд его создал (за 48 ч до старта).
Состояния макета
Состояния и содержимое в макете
  • «Чат еще пустой / Напиши сообщение и начните общение с участниками»
  • кто-то уже написал
C13

Отмена события

Есть, но расходится
по дереву нодКод: ui/screens/event/CrewScreen.kt:145–201Фреймов Figma: 2
  • косметикаВ макете — системный диалог; в коде — встроенная белая карточка внутри списка с кнопкой «Да, отменить». Тексты отличаются («Участники получат уведомление, чат закроется. Отменить отмену нельзя.»).
Состояния макета, что совпадает
Состояния и содержимое в макете
  • системный alert «Вы действительно хотите отменить событие?» + «После отмены мы уведомим всех участников… Это действие нельзя будет отменить.» → «Отменить событие / Назад»
  • уведомление участникам
Что совпадает
  • POST /events/{id}/cancel живой, после отмены карточка закрывается и афиша перезагружается.
C0

Создание события — версия от 28 июля 2026

Соответствует
по дереву нодКод: —Фреймов Figma: 6
  • косметикаУстаревшая версия макета: заменена секцией «NEW от 25 авг 2026». Не сверялась; в отчёт не входит, чтобы не удваивать находки.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • 53 фрейма старой версии (мастер, модалка места, QR, страница события, уведомление)
Что совпадает
  • Помечено как «устарело в Figma» — к коду претензий по ней нет.
D · Figma 792:36278

Взаимодействие участников с событием

по именам78 фреймов · 5 экранов: 3 нет в коде · 2 есть, но расходится

Две первые секции (39 фреймов) — копии состояний страницы события и чата из «Афиши», они учтены в разделе B. Три секции «NEW» (39 фреймов) — новые сценарии; детали не сверялись.

D1

Стандартные кейсы регистрации на событие

Есть, но расходится
по именамКод: ui/screens/event/EventScreen.ktФреймов Figma: 7
  • существенноТе же расхождения, что в B10 (нет состояний «одобрена/отклонена/лимит/отменено», нет шторки причин жалобы, нет snackbar).
Состояния макета
Состояния и содержимое в макете
  • копии состояний B10: участие / отмена участия / подача заявки / одобрена / отклонена / жалоба / избранное / краевые состояния
D2

Переход в чат события

Есть, но расходится
по именамКод: ui/screens/chats/ChatScreen.ktФреймов Figma: 6
  • существенноТе же расхождения, что в B11. Кроме того, со страницы события в чат перейти нельзя (переход «переход в чат» с карточки события отсутствует — только через таб «Чаты»).
Состояния макета
Состояния и содержимое в макете
  • копии состояний B11
D3

NEW · Регистрация на событие с вопросами и одобрением

Нет в коде
по именамКод: — нет реализации —Фреймов Figma: 20
Бэкенд: Анкет регистрации в API нет — блокер бэка.
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • форма «Вопросы при регистрации» (390×1059): ввод ФИО, телефона, текста, ссылки, выбор варианта, флажок, множественный выбор
  • валидация: «Некорректные имя и фамилия», «Некорректный номер», «Некорректная ссылка»
  • «подача заявки» → «Заявка одобрена» / «Заявка отклонена»
  • примеры отображения в уведомлениях
D4

NEW · Приглашение в организаторы

Нет в коде
по именамКод: — нет реализации —Фреймов Figma: 14
Бэкенд: Ролей/приглашений в API нет.
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • уведомления: приглашение стать менеджером / соорганизатором / ведущим
  • страница события с доступом к «Управлению» по роли
  • список участников (только просмотр), организаторы (только просмотр), чат (полный доступ)
D5

NEW · Приглашение участвовать в событии

Нет в коде
по именамКод: — нет реализации —Фреймов Figma: 4
Бэкенд: Подкреплено company-invites (см. C11) и видом уведомления company_invite (NotificationsScreen.kt:247).
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • уведомление «Пришло приглашение на участие» → событие → «Участвуем»
E · Figma 579:52324

Свайпы событий

по именам17 фреймов · 6 экранов: 2 нет в коде · 2 есть, но расходится · 2 соответствует

Рендеры не получены (лимит API). Сверка по именам фреймов, подписям переходов и комментариям в коде, который верстался по 233:30499.

E1

Страница со свайпами событий

Есть, но расходится
по именамКод: ui/screens/swipes/SwipesScreen.kt:74 SwipesScreenФреймов Figma: 3
  • существенноШапка свайпов: иконки [фильтры | поиск] и [колокольчик | аватар] нарисованы без обработчиков (SwipesScreen.kt:345–369) — ни фильтрация (E4), ни поиск, ни уведомления, ни профиль отсюда не открываются.
  • существенноПереход на событие в макете — «при нажатии на кнопку инфо или на саму карточку … также при скролле вниз»; в коде только кнопка «инфо» — тап по карточке и скролл ничего не делают (SwipeCard без clickable).
  • косметикаВизуальная сверка (размеры карточки 624dp, стекло кнопок, бейджи «Рядом») не выполнена — рендеры не получены. Бейдж «Рядом» захардкожен (SwipesScreen.kt:286).
Состояния макета, что совпадает
Состояния и содержимое в макете
  • колода: карточка с обложкой, прогресс-сегменты, бейджи, заголовок, дата · цена, место, 4 кнопки (вернуться / не интересно / в избранные / инфо)
  • «Первый вариант» (617:88179) — альтернативная версия
Что совпадает
  • Механика по описанию макета: свайп влево = «не интересно», вправо = в избранные, кнопки дублируют, «вернуться» = DELETE reaction, колода живая /events/deck.
E2

Свайп влево / вправо, следующая карточка

Соответствует
по именамКод: ui/screens/swipes/SwipesScreen.kt:166 SwipeableCardФреймов Figma: 4
  • косметикаНе сверено визуально (нет рендеров): цвет/интенсивность подсветки, угол крена.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • карточка уезжает с креном, подсветка Success/Error
  • под ней видна следующая
Что совпадает
  • Анимация ухода, крен, зелёная/красная подсветка, следующая карточка под текущей — реализованы.
E3

Фильтрация на странице свайпов

Нет в коде
по именамКод: — нет реализации —Фреймов Figma: 3
  • блокерНет (иконка фильтра на свайпах неактивна). Зависит от B3.
Состояния макета
Состояния и содержимое в макете
  • «система фильтрации абсолютно аналогична как и на странице афиши»
  • изменение параметров
E4

«События отфильтрованы» / нет подходящих событий

Есть, но расходится
по именамКод: ui/screens/swipes/SwipesScreen.kt:132 DeckFinishedФреймов Figma: 1
  • существенноВ коде пустое состояние — «✨ Карточки закончились / Новые события появляются каждый день / Показать ещё раз» (конец порции). Состояния «ничего не подходит под фильтры → изменить параметры» нет, потому что нет фильтров.
Состояния макета
Состояния и содержимое в макете
  • если нет подходящих событий — пустое состояние с призывом изменить параметры
E5

Страница события из свайпов

Соответствует
по именамКод: MainActivity.kt:447–453 → EventScreenФреймов Figma: 1
  • косметикаОткрывается только по кнопке «инфо» (см. E1).
Состояния макета, что совпадает
Состояния и содержимое в макете
  • по кнопке инфо / тапу / скроллу
Что совпадает
  • Страница события та же, что в афише.
E6

NEW · Гайд-тур при первом входе

Нет в коде
по именамКод: — нет реализации —Фреймов Figma: 5
  • блокерНет (секция от 25 авг 2026).
Состояния макета
Состояния и содержимое в макете
  • «Сразу же после входа» → Подсказка 1 → Дальше → Подсказка 2 → Дальше → Подсказка 3 → Готово
F · Figma 579:52326

Уведомления

по именам6 фреймов · 2 экранов: 1 есть, но расходится · 1 соответствует

Рендеры не получены.

F1

Лента уведомлений

Есть, но расходится
по именамКод: ui/screens/notifications/NotificationsScreen.kt:176 NotificationsScreenФреймов Figma: 4
  • существенноФильтра «только непрочитанные» нет; вместо этого при открытии экрана всё помечается прочитанным разом (MainActivity.kt:432, NotificationsViewModel.markAllRead) — индикатор пропадает до того, как пользователь что-то посмотрел.
  • косметикаСтрока уведомления в коде — белая карточка r16 с эмодзи по типу (🎟️ ✅ 😔 ⏰ ✏️ 🚫 🗞️ 💌 💬) и синей точкой; компонент «Сard-notify» из UI-kit (обложка события/аватар) не сверялся — рендеров нет.
  • косметикаПустое состояние «🔔 Пока тихо» — эмодзи вместо 3D-иконки, заголовок 18 вместо 28/650 (паттерн пустых состояний макета).
Состояния макета, что совпадает
Состояния и содержимое в макете
  • список (компонент «Сard-notify» из UI-kit)
  • «Просмотр только не прочитанных» (фильтр)
  • «когда нет уведомлений» — пустое состояние
  • «Индикатор пропадает»
Что совпадает
  • Живая лента /users/me/notifications, тап открывает событие по event_id, бейдж непрочитанных на колокольчике афиши.
F2

Переход на событие из уведомления

Соответствует
по именамКод: MainActivity.kt:170–179 (openEventId)Фреймов Figma: 2
Состояния макета, что совпадает
Состояния и содержимое в макете
  • событие по event_id
  • индикатор на колокольчике карты
Что совпадает
  • Есть.
G · Figma 579:52327

Избранные

по именам9 фреймов · 2 экранов: 1 нет в коде · 1 есть, но расходится

Рендеры не получены.

G1

Избранные — события

Есть, но расходится
по именамКод: ui/screens/favorites/FavoritesScreen.kt:329 FavoritesScreenФреймов Figma: 5
  • существенноФильтра по интересу нет.
  • косметикаSnackbar при удалении из избранного («Уведомление» 293:28243) отсутствует — строка просто исчезает.
  • косметикаПустое состояние «🤍 Пока пусто» — эмодзи вместо 3D-иконки; текст «Лайкайте события в свайпах — они соберутся здесь». Макет не сверялся (нет рендеров).
Состояния макета, что совпадает
Состояния и содержимое в макете
  • список избранных событий
  • «фильтр по интересу»
  • «если нет избранных» — пустое состояние
  • «убрать из избранных» (+ «Уведомление» 293:28243 — snackbar)
  • «назад»
Что совпадает
  • Живой склад would_go (/users/profile/event-interests), сердце снимает реакцию, ошибка сети с «Повторить».
G2

Избранные — люди

Нет в коде
по именамКод: — нет реализации —Фреймов Figma: 3
Бэкенд: Открытый вопрос владельцу (kb): дейтинг-лайки или подписки-календари (/users/me/calendars {kind: organizer}) или люди с общих событий (/events/people).
  • блокерВкладки «люди» нет. Экран избранного — только события, без сегмента.
Состояния макета
Состояния и содержимое в макете
  • вкладка «люди» (Card-user-save), «убрать из избранных»
H · Figma 579:52329

Профиль

по рендерам54 фреймов · 9 экранов: 6 нет в коде · 3 есть, но расходится

48 из 54 фреймов отрендерены и просмотрены. Не отрендерены 6 фреймов секции «NEW — обновлённый профиль + «Куда иду»» (кроме 693:39392).

H1

Профиль (свой)

Есть, но расходится
по рендерамКод: ui/screens/profile/ProfileScreen.kt:52 ProfileScreenФреймов Figma: 12
  • существенноЭкран построен по другой информационной модели. Макет: шапка [назад] «Профиль» [QR | шестерёнка]; карточка (аватар с кольцом и бейджем, имя + карандаш, чип локации, статус); статистика «Подписки / Подписчики / Репутация (уровень словом и цветом)»; «Обо мне»; три плитки-раздела с 3D-иконками; «Мои интересы»; «Похожие интересы» (люди); баннер дейтинга. Код: шапка [назад] «Профиль» без правых кнопок; терракотовый кружок с иконкой (или фото без кольца/бейджа); имя, телефон, «Репутация 12» числом; три числовых карточки «Иду / Организую / Заявки» (в макете нет); списки «Я организую» / «Я иду» прямо на экране; строки «Скидки партнёров / Настройки / Выйти».
  • существенноНет: QR профиля (H4), редактирования профиля (H5), статуса, шторки местоположения, «Обо мне» (поле bio в UserProfile есть — EventsRepository.kt:57, но не рисуется), уровней репутации (макет: Высокая/Средняя/Низкая; API отдаёт score, restriction, can_participate — порог уровней надо задать), подписок/подписчиков, интересов на профиле (/users/me/event-prefs есть), «Похожих интересов» (/events/people — только пересечения по прошедшим событиям), баннера «Связать с дейтингом» (ReviewResult.new_matches, /events/matches), тултипов.
  • существенноВерифицированность: макет показывает кольцо + зелёный бейдж-галочку на аватаре и тултип; код — синяя иконка Verified рядом с именем (ProfileScreen.kt:210–217).
  • косметикаШапка профиля в макете открывается из аватара на карте (306:47249 → 348:36951) — в коде так же, ок. Таббар на экране профиля в макете есть; в коде профиль — оверлей без таббара.
Состояния макета, что совпадает, рендеры
Состояния и содержимое в макете
  • подтверждённый: аватар с градиентным кольцом и зелёным бейджем, тултип «Пользователь подтверждён»
  • имя 28/650 + карандаш (редактирование)
  • чип локации «Хамовники, Китай го… +1 ›» → шторка «Местоположение»
  • «+ Указать статус» → дропдаун «Свободен / В отношениях / Все сложно» → цветная пилюля
  • блок «Подписки 64 · Подписчики 12 · Репутация ⓘ Высокая / Средняя / Низкая» (зелёный / золотой / красный) + тултип
  • «Обо мне»
  • плитки «Мои события» (3D-билеты) / «История» (3D-часы) / «Скидки» (3D-%); в NEW-версии «История» → «Куда иду» (3D-календарь)
  • «Мои интересы» — чипы с 3D-иконками
  • «Похожие интересы» — люди (аватар, имя, район, «3+ общих интереса»)
  • баннер «Связать с дейтингом»
  • неподтверждённый: серый аватар «User_0210», репутация «Низкая», без кольца
  • «сразу при входе в профиль вылазит поп-ап» — H6
Что совпадает
  • Шапка «Профиль» со стеклянной кнопкой назад, живые /users/profile, /users/me/reputation, /events/mine — есть.
Figma 348:36951
Figma 348:36951
Figma 693:39392
Figma 693:39392
H2

Мои события

Есть, но расходится
по рендерамКод: ui/screens/profile/ProfileScreen.kt:98–152 (секции внутри профиля)Фреймов Figma: 4
  • существенноОтдельного экрана нет: организуемые и посещаемые события выведены секциями внутри профиля, без сегмента «Предстоящие / Прошедшие» и без группировки по дням. Ссылка «Управлять участниками» под каждым своим событием — не из макета.
  • косметикаПустое состояние «Пока никуда не записаны» одной строкой вместо 3D-иконки + 28/650 + подпись.
Состояния макета, рендеры
Состояния и содержимое в макете
  • отдельный экран «Мои события»: сегмент «Предстоящие / Прошедшие», группировка по дням (Default-card-event: обложка, бейдж, название, «1.3 км от вас», организатор)
  • пусто: 3D-билет + «У вас пока нет событий» + «Создайте свое первое событие и пригласите людей…»
  • страница своего события: [карандаш | поделиться] в шапке
Figma 348:39844
Figma 348:39844
Figma 348:41010
Figma 348:41010
H3

История (прошедшие события)

Нет в коде
по рендерамКод: — нет реализации —Фреймов Figma: 3
Бэкенд: Отзыв «как прошло» — GET/POST /events/{id}/review (ReviewScreen: can_review, tags, participants; ReviewResult: rating, tags, new_matches); чек-ин — POST /events/{id}/checkin. Отдаёт ли /events/mine прошедшие — уточнить.
  • блокерНет. В NEW-версии профиля (693:39392) плитка «История» заменена на «Куда иду» — оба отсутствуют.
Состояния макета
Состояния и содержимое в макете
  • список по датам (20 июля / понедельник …)
  • пусто: 3D-часы + «История пока пуста» + «Посещайте новые события…»
  • страница завершённого события: пилюля «✓ Событие завершено» поверх мини-карты
H4

QR-код пользователя

Нет в коде
по рендерамКод: — нет реализации —Фреймов Figma: 3
Бэкенд: QR не кодируется ничем (решение владельца 16.08 — только витрина).
  • блокерНет.
Состояния макета, рендеры
Состояния и содержимое в макете
  • шторка: имя, QR с аватаром в центре, «Отправить / Скопировать»
  • snackbar «Ссылка на профиль скопирована»
  • системный share sheet
Figma 348:47356
Figma 348:47356
H5

Редактирование профиля

Нет в коде
по рендерамКод: — нет реализации —Фреймов Figma: 2
Бэкенд: PATCH /users/profile (дейтинговая анкета), фото — photos.
  • блокерНет (иконка-карандаш и экран отсутствуют).
Состояния макета
Состояния и содержимое в макете
  • «Редактирование»: фото, имя, описание → «Сохраняем изменения» → «информация изменяется»
H6

Поп-апы «Подтвердите свой профиль» / «Повысьте доверие» + верификация из профиля

Нет в коде
по рендерамКод: — нет реализации —Фреймов Figma: 16
Бэкенд: Селфи — дейтинговые ручки verify/photo; анкета — PATCH /users/profile.
  • блокерНичего из этого нет; приложение не различает подтверждённый и неподтверждённый профиль кроме иконки у имени.
Состояния макета, рендеры
Состояния и содержимое в макете
  • шторка «Подтвердите свой профиль» (3D-щит) → «Пройти верификацию»
  • шторка «Повысьте доверие к своему профилю» → «Заполнить профиль» → регистрация из 3 шагов (о себе / интересы / селфи)
  • системный запрос камеры / отказ → «Перейти в настройки»
  • селфи → «Получилось селфи?» → «Профиль подтвержден»
Figma 348:45576
Figma 348:45576
Figma 348:43323
Figma 348:43323
H7

Статус и местоположение

Нет в коде
по рендерамКод: — нет реализации —Фреймов Figma: 5
Бэкенд: Статуса отношений в контракте нет. Районы — PUT /users/me/event-prefs {topics, districts} + справочник /public/catalog.districts (есть; клиент шлёт districts=[]).
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • дропдаун статуса: Свободен (danger-тинт) / В отношениях (success-тинт) / Все сложно (фиолет-тинт)
  • шторка «Где вы обычно находитесь?» с картой и чипами районов, «Сбросить / Сохранить»
H8

Скидки партнёров

Есть, но расходится
по рендерамКод: ui/screens/profile/DiscountsScreen.kt:322 DiscountsScreen, QrScreenФреймов Figma: 2
Бэкенд: Партнёрки нет (этап 2, решение владельца: экраны на моках).
  • существенноКарточка другая: макет — белая карточка с круглым логотипом, зелёной строкой выгоды и строкой «Промокод … ⧉» с копированием; код — цветная градиентная карточка с эмодзи, пилюля «PODUSHE20 · Показать QR» и переход на экран QR (QrScreen), которого в макете нет.
  • косметикаЗаголовок: макет «Скидки партнёров», код «Скидки»; интро-текста нет; копирования промокода и snackbar нет.
Состояния макета, рендеры
Состояния и содержимое в макете
  • заголовок «Скидки партнёров», интро «Забота о наших участниках…»
  • карточки: логотип партнёра, название, зелёная строка скидки «-15% на беговую обувь», условие, «Промокод PODUSHE15 [копировать]»
  • snackbar «Промокод скопирован»
Figma 348:46562
Figma 348:46562
H9

NEW · «Куда иду» из профиля

Нет в коде
по именамКод: — нет реализации —Фреймов Figma: 6
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • см. B13
I · Figma 579:52330

Чаты и другие пользователи

по именам23 фреймов · 5 экранов: 3 нет в коде · 2 есть, но расходится

Рендеры не получены. Экран чужого профиля частично виден в рендере 665:80818 (страница создания события).

I1

Список чатов

Есть, но расходится
по именамКод: ui/screens/chats/ChatsScreen.kt:46 ChatsScreenФреймов Figma: 3
Бэкенд: Личные чаты — только пары из дейтинг-мэтчей, создать нельзя (kb).
  • существенноФильтра «личные / событий» нет — показываются только чаты событий (/api-chats/v1/event-chats); личных чатов в приложении нет вообще.
  • косметикаСтрока чата (Card-chat из UI-kit) не сверялась визуально; в коде — обложка 52 r10, название, последнее сообщение, пилюля с числом участников.
  • косметикаПустое состояние «💬 Чатов пока нет» — эмодзи вместо 3D-иконки.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • все чаты
  • «Просмотр только личных чатов»
  • «Просмотр только чатов событий»
  • переход в чат события / в чат с пользователем / на профиль пользователя
Что совпадает
  • Живой список, обложки из афиши по event_id, «Чат закрыт» для закрытых.
I2

Профиль другого пользователя

Нет в коде
по рендерамКод: — нет реализации —Фреймов Figma: 13
Бэкенд: GET /public/organizers/{id} (только для уже публиковавших: name, initials, reputation, hosted_count, rating_avg, events[], reviews[] — без фамилии и контактов, по решению владельца 12.08), GET /events/people (люди с общих прошедших событий); жалоба на пользователя — дейтинговая POST /users/{id}/report (kb); блокировки в контракте нет.
  • блокерНет. Из события/участников/чата на человека перейти некуда (стрелки у организаторов и участников нарисованы без действия).
Состояния макета
Состояния и содержимое в макете
  • имя 28/650, район, статус («В отношениях»), кнопки «Подписаться» (тёмная) / «Написать»
  • «Подписки / Подписчики / Репутация»
  • «Обо мне», «Интересы» (чипы с 3D), «События пользователя»
  • «Пожаловаться на пользователя» → «Отправка жалобы / Выбор категории», «Заблокировать»
  • «Добавить в избранные», «Поделиться»
I3

Подписки / подписчики

Нет в коде
по именамКод: — нет реализации —Фреймов Figma: 2
Бэкенд: Подписка = календарь организатора (/users/me/calendars), подписчиков нет (kb).
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • две вкладки, переход на подписчика
I4

Чат с пользователем (личный)

Нет в коде
по именамКод: — нет реализации —Фреймов Figma: 2
Бэкенд: Парные чаты только из мэтчей дейтинга; создать из событий нельзя (kb).
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • «Пишет» / «Написал»
I5

Чат события (из списка)

Есть, но расходится
по именамКод: ui/screens/chats/ChatScreen.ktФреймов Figma: 2
  • существенноСм. B11.
Состояния макета
Состояния и содержимое в макете
  • см. B11
J · Figma 634:54612

Настройки

по именам23 фреймов · 5 экранов: 1 нет в коде · 4 есть, но расходится

Рендеры не получены.

J1

Настройки (корневой экран)

Есть, но расходится
по именамКод: ui/screens/settings/SettingsScreens.kt:74 SettingsRootScreen (+ Notification/Privacy/Interests)Фреймов Figma: 9
Бэкенд: Удаление аккаунта: POST /users/me/delete (+ /delete/cancel, грейс-период) — kb 79: реализовано 16.08 локально, на стенд не выкачено, в api-schema.yml пути нет. Пуши и настройки уведомлений — kb 76: реализовано локально, клиентских ручек в схеме нет.
  • существенноСтруктура другая: макет — один экран с дропдаунами и тумблерами; код — меню из 5 подразделов (Уведомления, Мои интересы, Приватность, Поддержка, Документы). «Мои интересы» в макетных настройках нет (интересы живут в профиле).
  • существенно«Удалить аккаунт» в коде открывает экран «Приватность» (MainActivity.kt:343) — заглушка; подтверждения удаления и самой операции нет. «Выйти» — без диалога подтверждения (макет: «Подверждение» 350:59260).
  • существенноПриватность: макет — выпадающие списки «кому виден профиль» / «кто может писать» (значения-варианты); код — два локальных тумблера с честной подписью «ручек нет». Уведомления: макет — Push / email / sms; код — четыре локальных тумблера по видам событий.
  • косметикаРаздела «Заблокированные пользователи» нет (J5).
Состояния макета, что совпадает
Состояния и содержимое в макете
  • один экран 390×924 с выпадающими списками: «Выбор кому виден» (профиль), «Выбор кто может писать»
  • переключатели: Push (с системным пермишеном), email, sms
  • переходы: Поддержка, Политика и пользовательское соглашение, Заблокированные пользователи
  • «Выход из аккаунта» → Подтверждение → Экран входа
  • «Удалить» → Подтверждение
Что совпадает
  • Тумблеры интересов живые (PUT /users/me/event-prefs), выход чистит DataStore и ведёт на велком.
J2

Поддержка

Есть, но расходится
по именамКод: ui/screens/settings/SettingsScreens.kt:272 SupportScreenФреймов Figma: 4
Бэкенд: Форма обращения подкреплена: POST /feedback {email, message} → 204 (api-schema.yml:782). Переписки/ответа в контракте нет.
  • существенноВ коде статичная карточка «Мы на связи» с e-mail; формы обращения, отправки и ответа нет.
Состояния макета
Состояния и содержимое в макете
  • «пишем проблему» → «Отправляем» → «Приходит ответ» (переписка)
J3

Политика конфиденциальности / Пользовательское соглашение

Есть, но расходится
по именамКод: ui/screens/settings/SettingsScreens.kt:308 PolicyScreenФреймов Figma: 2
  • существенноЭкран «Документы» — три строки без обработчиков и без текста (подпись обещает «открываются в браузере», но ссылок нет).
Состояния макета
Состояния и содержимое в макете
  • полнотекстовые экраны
J4

Подтверждение выхода / удаления → Экран входа

Есть, но расходится
по именамКод: MainActivity.kt:338–343Фреймов Figma: 3
  • существенноДиалога подтверждения нет; удаление не реализовано.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • диалог «Подверждение»
  • после выхода — велком
Что совпадает
  • После выхода открывается велком.
J5

Заблокированные пользователи

Нет в коде
по именамКод: — нет реализации —Фреймов Figma: 4
Бэкенд: Блокировки в клиентском контракте — уточнить.
  • блокерНет.
Состояния макета
Состояния и содержимое в макете
  • список, «Разблокировать», пустое состояние
K · Figma 175:164

Дизайн-система (UI-kit)

по дереву нод31 фреймов · 5 экранов: 4 есть, но расходится · 1 соответствует

Страница UI-kit не выгружена (лимит). Токены сверены по фактическим заливкам/шрифтам экранов трёх выгруженных страниц против Color.kt / Type.kt / компонентов.

K1

Цвета

Соответствует
по дереву нодКод: ui/theme/Color.ktФреймов Figma: 1
  • косметикаТерракота #D47E64 (PodusheColors.Terracotta) в экранах макета не встречается, а в коде ею закрашены все аватары-заглушки и точка бейджа интереса (EventCards.kt:194). В макете точка бейджа серая, аватары — фото.
  • косметикаГрадиент акцентных карточек #00CCFF → #8637C6 (Accent-card-event) в коде заменён градиентом от coverColor.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • #282A31 текст (+@40%), #007AFF accent (+@11–12% тинт), #0088FF курсор, #F5F5F5 поля, #262626 тёмные плашки, #F84040 danger, #36B554 success, #DFA107 gold, #8637C6 purple, #9DE743 lime, стекло #FAFAFA@69% / #FFF@7% + обводка #FFF@30%
Что совпадает
  • Все базовые токены совпадают с заливками макета (проверено по 398 экранам трёх страниц).
K2

Типографика

Есть, но расходится
по дереву нодКод: ui/theme/Type.ktФреймов Figma: 1
  • косметикаНет стиля дисплея 760/42 (заголовки «Реальные встречи…», «Настраивайте свои событие», «Соберите команду»); код берёт 650 при 42sp.
  • косметикаНет стилей 590/20 (заголовок Card-event large) и 510/18 (подзаголовки регистрации, дата события — в коде Title18 с весом 510, ок).
  • косметикаInter вместо SF Pro — принятое решение (kb); визуально шире, заголовки 28/650 выглядят крупнее макетных.
Состояния макета, что совпадает
Состояния и содержимое в макете
  • SF Pro 510 / 590 / 650, кегли 10 · 14 · 16 · 17 · 18 · 20 · 28; дисплей 760/42 (велком, онбординг кабинета)
Что совпадает
  • TitleScreen 650/28/32, Title18 590/18, Body 510/16, Small 510/14, Caption 590/10 — по частотам макета.
K3

Кнопки, поля, чипы, переключатели

Есть, но расходится
по дереву нодКод: ui/components/Buttons.kt, Fields.kt, Rows.ktФреймов Figma: 1
  • существенноКатегорийные чипы tab-category (3D-иконка + текст, выбранная — тёмная с галочкой) не реализованы: везде текстовые пилюли, выбранная — синяя.
  • существенноНет компонентов: Segmented control (есть PodusheSegmentedControl в Fields.kt:245, но нигде не используется), Slider, Tabs calendar, Tooltip, Snackbar, Checkbox/Radio, wheel-picker, Action sheet, Dropdown («Выпадающий список»).
  • косметикаКнопка одной высоты 44; крупной button-brand-large для основных CTA нет.
  • косметикаПереключатель: включённый — #36B554 (success) в коде; в макете «Switch» — проверить (не выгружен UI-kit; на экранах фильтра фигурирует #007AFF@11% подложка).
Состояния макета, что совпадает
Состояния и содержимое в макете
  • button-brand (44) и button-brand-large (NEW-экраны: «Создать», «Продолжить», «Сохранить»), button-primary (#282A31), button-secondary (стекло), button-delete, button-mini, Button-icon 48 стекло
  • Text Field пилюля #F5F5F5, Search Field, OTP-field
  • tab-filter (чипы), tab-category (чипы с 3D-иконкой), Segmented control 2/3, Switch, Checkbox, Radio, Slider, Tabs calendar, Tooltip, Snackbar
Что совпадает
  • Пилюли-кнопки brand/primary/delete/secondary(стекло) со состояниями pressed/disabled — по UI-kit «Buttons». Поля-пилюли #F5F5F5 44 — по «Text Field». Стеклянная круглая Button-icon 48 — есть.
K4

Иконки и иллюстрации

Есть, но расходится
по рендерамКод: все экраны (Icons.Default.*, эмодзи)Фреймов Figma: 1
  • существенноВо всём приложении Material-иконки (Icons.Default.*) вместо набора макета: билет/сердце/чат в таббаре, Tune/Search/NotificationsNone/Person в шапках, ArrowBack вместо chevron-left и т. д. SVG-набор из Figma не экспортирован.
  • существенно3D-иконки (категории, пустые состояния, плитки профиля, регистрация, онбординг) заменены эмодзи (🐾 🎁 ⚙️ 🔔 🤍 ✨ 🎉 💬 📡 🔍) или отсутствуют.
  • косметикаLiquid Glass без backdrop-блюра (полупрозрачная подложка + обводка + тень, Glass.kt) — зафиксированное упрощение; на фото-фонах (карта, обложки) отличие заметно.
  • косметикаАватары: макет — фото с градиентным кольцом; код — цветной круг с инициалом/иконкой.
Состояния макета
Состояния и содержимое в макете
  • собственный набор «icons» (icon-ticket, icon-heart, icon-cards, icon-chat-bubble-oval-left-ellipsis, icon-filter, icon-magnifying-glass, icon-bell-alert, icon-map-pin, icon-hashtag, icon-NavigationArrow…) + heroicons
  • 3D-иконки (3d-icon-*: sport, pet, puzzle, eat, education, movie, music, camera, heart, check, passport, verification, watch, clock, sale, ticket, users, chat, language)
  • Liquid Glass Material (Regular / Medium / Clear) с блюром
K5

Сквозные паттерны: пустые состояния, snackbar, системные диалоги, пермишены

Есть, но расходится
по дереву нодКод: —Фреймов Figma: 1
  • существенноНи одного snackbar в приложении; все подтверждения действий молчаливые.
  • существенноПриложение не запрашивает ни одного runtime-разрешения (гео, камера, галерея, уведомления) — соответственно нет ни одного из ~15 макетных экранов с системными диалогами и ветками «не разрешил → перейти в настройки».
  • косметикаПустые состояния везде в едином, но не макетном стиле: эмодзи 64sp + заголовок 18 + подпись.
Состояния макета
Состояния и содержимое в макете
  • пустое состояние = 3D-иконка + заголовок 28/650 + подпись 16/510@40% («Ничего не найдено», «Пока нет новых заявок», «У вас пока нет событий», «История пока пуста», «Чат еще пустой», «Пока некого приглашать»)
  • Snackbar / Body (тёмная пилюля с галочкой): «Добавлено в избранные», «Заявки приняты», «Промокод скопирован», «Ссылка на профиль скопирована», «Событие завершено»
  • системные alert'ы и action sheet'ы для пермишенов и подтверждений; «Перейти в настройки» при отказе