# EventHub Front — UX backlog (после stage walk) Baseline ~6.8/10 → P0–P2 ~**8.0/10** → после P3–P4 deep walk ~**7.7/10** overall → после P5 + select fix ~**8.5–9/10** → после P6 + residual ~**10/10** (stage verified, Jul 2026). P3–P4: [EventHubFront#19](https://git.sabilin.com/EventHub/EventHubFront/issues/19) (closed). P5: [EventHubFront#20](https://git.sabilin.com/EventHub/EventHubFront/issues/20) (closed). P6: [EventHubFront#21](https://git.sabilin.com/EventHub/EventHubFront/issues/21) (closed). Residual: [EventHubFront#23](https://git.sabilin.com/EventHub/EventHubFront/issues/23) (booking polish), [EventHubDevOps#8](https://git.sabilin.com/EventHub/EventHubDevOps/issues/8) (litter ops) — closed. Canvas: `eventhub-front-ux-review` → `eventhub-front-ux-rewalk` → **`eventhub-front-ux-deep`**. Трекер: [EventHubFront#17](https://git.sabilin.com/EventHub/EventHubFront/issues/17) (P0+P1), [EventHubFront#18](https://git.sabilin.com/EventHub/EventHubFront/issues/18) (P2). ## P0 - [x] Форматировать даты локалью (ru-RU / текущий i18n) везде: Записи, события, подписка - [x] Убрать / спрятать opaque id из consumer UI (календари, поиск, специалисты) - [x] Починить дубль title события (`displayTitle` — схлопывание `TitleTitle`) ## P1 - [x] Локализовать статусы + semantic pills (`StatusBadge`) - [x] В заявках на событии показывать display name / email (`user_nickname` / `user_email` с API) - [x] **Specialists invite: одно поле адресата** — lookup + email без отдельного «Или email» ## P2 - [x] Управление календарями: поиск, фильтр personal/commercial, pin + recent (localStorage) - [x] Контраст метаданных профиля в dark / «Энергичный» mood ## P3 (после re-walk stage, UI e2f5a97 / API e301307) - [x] Починить запись title (не только `displayTitle`): `buildEventBody` / form reset через `displayTitle` - [x] Event sheet: skeleton/loading для заявок вместо flash «Нет заявок» - [x] Discover: дедуп результатов + тише type pills (скрыть при активном type-фильтре) - [x] `StatusBadge`: mood-aware стили под `data-mood=energetic` - [x] Discover/stage: чистка E2E/Journey litter — `prune-e2e-litter.sh` + Playwright teardown ([EventHubDevOps#8](https://git.sabilin.com/EventHub/EventHubDevOps/issues/8)) ## P4 - [x] Профиль: убрать ID из consumer UI - [x] Календари: empty state фильтра + «Сбросить» + группа «Закреплённые» - [x] A11y: один EventActionCard (panel/sheet по media query) - [x] MoodSwitcher: не ронять контраст при saving ## P5 (deep walk, UI 0.1.17 / API 0.1.156) - [x] Ops: сброс Mnesia на stage (`eventhub-data-1`) + `ensure-smoke-user` (calendars_count=1) - [x] Front: скрыть opaque id на Отзывах и Тикетах; локализовать статусы/типы через StatusBadge - [x] Discover Popular: дедуп по `type:id` (уже был; litter снят wipe’ом) - [x] i18n leftovers: Login `toVerify`, following type, role `user`, ticket EN chips - [x] Login forgot password — Back API (EventHubBack#57) + Front UI (EventHubFront#22) - [x] Календари: overflow «⋯» для Edit/Delete; Pin/Open на виду - [x] Month: `title` tooltip на событии в ячейке - [x] More: MoodSwitcher checkmark как у Language ## P6 (к ~10, UI 0.1.19+) Трекер: [EventHubFront#21](https://git.sabilin.com/EventHub/EventHubFront/issues/21). Вариант A (Front-first). - [x] Toolbar workspace: select + date nav без конфликта на desktop - [x] Empty states + CTA (месяц/неделя, отзывы, following) - [x] Toasts на create event / book / follow — i18n через `notify.*` - [x] i18n: Zod messages + aria date nav - [x] Verify: auto-submit `?token=` + redirect `/login?verified=1` - [x] Login forgot password — Back API (EventHubBack#57) + Front UI (EventHubFront#22) ## Residual → 10 (Jul 2026) - [x] Ops: prune E2E/Journey litter на IFT/stage + teardown в stand e2e ([EventHubDevOps#8](https://git.sabilin.com/EventHub/EventHubDevOps/issues/8)) - [x] Booking: sheet swipe-dismiss, `/bookings` upcoming/past, post-book CTA ([EventHubFront#23](https://git.sabilin.com/EventHub/EventHubFront/issues/23)) - [x] Stage verify: swipe Playwright (Pixel 5), prune on host, smoke-owned litter по префиксу ## P2 stage journey (Front#35, Jul 2026) — shipped - [x] SpecialistsPanel mobile density (имя/теги сверху, actions снизу full-width) - [x] F6: EventActionCard past+pending → expired, без Cancel; Book скрыт на past - [x] D9 модель B: guest roster → фильтр слотов по `specialist_id`; «Все слоты студии» - [x] Confirmed foreign bookings overlay на default personal (Front-only) Трекер: [EventHubFront#35](https://git.sabilin.com/EventHub/EventHubFront/issues/35). ## Mood + Lens workspace (Front#39, Jul 2026) — shipped - [x] Mood chip убран из Ещё; 3 moods, без flip/CREATOR (placement → AppShell в Front#40) - [x] Lens Обзор / Сегодня / Записи отдельно от mood и view modes - [x] Strip над сеткой (Front-derive); mobile collapsed; desktop expanded - [x] Persist: mood → `preferences.mood`; language → `user.language`; lens → localStorage Трекер: [EventHubFront#39](https://git.sabilin.com/EventHub/EventHubFront/issues/39) (`c2cb754` / `d38a927`). ## Mood AppShell + week view (Front#40, Jul 2026) — shipped - [x] Mood chip в AppShell рядом с BrandWordmark (**не** в toolbar Month/Week/Day) - [x] 3 moods; `PATCH preferences.mood`; без дубля в Ещё - [x] Week view: одна строка day-headers; scroll `.eh-cal-week-scroll` (mobile ~390) Трекер: [EventHubFront#40](https://git.sabilin.com/EventHub/EventHubFront/issues/40) (mood `7c092d1`, week `db11c41`). ## Future (не блокер 10) - [x] Swipe month/week + long-press create в календаре ([EventHubFront#24](https://git.sabilin.com/EventHub/EventHubFront/issues/24))