Docs: sync booking expired (Back#60) + Front#31 UX polish. Fixes EventHub/EventHubSpec#13
This commit is contained in:
@@ -20,7 +20,11 @@ SoT: [`boards/calentiq-ui-board-final.png`](boards/calentiq-ui-board-final.png).
|
||||
| Bookings list §D | список заявок с Confirm/Decline на `/bookings` | `/bookings` = **grouped inbox**: (A) К подтверждению — pending owner/specialist + Confirm/Decline; (B) Мои записи — participant upcoming/past + Cancel; empty groups hidden. Event card Confirm/Decline **остаётся** обязательным |
|
||||
| Login §D phone chrome | три phone frames + (на борде) Google CTA | brand-first hero + mood `--auth-*`; email/password only; mood switcher на login (иконки); taglines mood cards — на `/more`; **без** Google OAuth |
|
||||
| Favicon set | 3 отдельных favicon файла на борде | mood appicon через `applyMood` |
|
||||
| Desktop nav | phone bottom tabs на борде | desktop: top tabs (Календарь / Найти / Записи / Ещё); bottom nav — mobile |
|
||||
| Desktop nav | phone bottom tabs на борде | desktop: **одна строка** chrome — logo \| nav (Календарь / Найти / Записи / Ещё) \| nickname + logout; bottom nav — mobile |
|
||||
| Header identity | — | nickname primary (не raw email); email только в `title` tooltip |
|
||||
| Bookings past/expired | — | `expired` бейдж + Cancel скрыт; empty-state с CTA Discover / календари; soft list time |
|
||||
| Agenda empty copy | — | personal «Нет событий»; commercial «Нет слотов» |
|
||||
| More invites | пункт меню | скрыт при pending=0; badge счётчика при pending > 0 |
|
||||
| Stage | полный smoke на stage | **done** 2026-07-27: Login×3 / Calendar×3 + agenda / Discover / CONTROL commercial + Confirm·Decline / More moods |
|
||||
| Домены calentiq.* | — | публичный stage: `stage.calentiq.com` / `admin.stage.calentiq.com` (канон STAGE-BROWSER.md) |
|
||||
|
||||
@@ -32,7 +36,9 @@ IA без sidebar / без Creator mood — совпадает с non-goals (п
|
||||
|
||||
**Polish in this pass:** agenda copy/casing/counts + time-first rows; CONTROL steel rail emphasis; neutral Discover cover in mock (не flow-appicon во всех moods).
|
||||
|
||||
**Remaining intentional:** no pixel-perfect phone chrome; Discover без photo-hero grid (cover via `image_url` when API returns it); §E specialist schedule card vs panel — не pixel-perfect board mocks (follow-up).
|
||||
**Front#31 (2026-07-27):** desktop one-row chrome (logo|nav|logout); header nickname; bookings `expired` + soft list time + empty CTA; agenda personal vs commercial empty copy; Discover cover photo/fallback; More invites badge.
|
||||
|
||||
**Remaining intentional:** no pixel-perfect phone chrome; Discover без photo-hero grid (cover via `image_url` when API returns it; broken URL → wash+initials); §E specialist schedule card vs panel — не pixel-perfect board mocks (follow-up).
|
||||
|
||||
### Bookings inbox + More invites (locked 2026-07-27)
|
||||
|
||||
@@ -44,18 +50,25 @@ IA без sidebar / без Creator mood — совпадает с non-goals (п
|
||||
- **Группа B — Мои записи:** participant bookings (upcoming/past + Cancel) как раньше.
|
||||
- Пустые группы скрывать (`count=0`).
|
||||
- Опционально подпись owner vs specialist внутри A; иначе одна секция «К подтверждению».
|
||||
3. **`specialist_invite` в More:** скрывать пункт меню, если **0 pending** входящих. Deep-link `/invites?token=` работает. Исходящие invite остаются в `SpecialistsPanel`.
|
||||
3. **`specialist_invite` в More:** скрывать пункт меню, если **0 pending** входящих; при
|
||||
pending > 0 — **badge** со счётчиком. Deep-link `/invites?token=` работает. Исходящие
|
||||
invite остаются в `SpecialistsPanel`.
|
||||
4. **Не** класть строки `specialist_invite` в `/bookings`.
|
||||
5. **Past-pending / `expired`:** Back#60 помечает past-pending → `expired` и исключает из
|
||||
`booking-requests`; Confirm/Decline → `409`. UI: бейдж «истекла», Cancel скрыт
|
||||
(Bookings + EventActionCard); defensive map past+pending → expired badge.
|
||||
|
||||
API: `GET /v1/user/booking-requests` (Back) + существующий `PUT /v1/bookings/:id`.
|
||||
API: `GET /v1/user/booking-requests` (Back) + существующий `PUT /v1/bookings/:id`
|
||||
(`409` на expired / full).
|
||||
|
||||
### Follow-ups (вне этого fix-pass или частично)
|
||||
|
||||
| Тема | Статус |
|
||||
|------|--------|
|
||||
| Discover `image_url` в search serialization | Back отдаёт поле; upload API **нет** — только URL field / seed |
|
||||
| Discover `image_url` в search serialization | Back отдаёт поле; upload API **нет** — только URL field / seed; Front#31: photo vs fallback media classes + onError fallback |
|
||||
| Stage Popular clutter (e2e calendars) | filter notes: см. `EventHubSpec/STAGE-POPULAR-CLEANUP.md`; не трогать реальные smoke данные без фильтра по e2e-паттернам |
|
||||
| §E specialist schedule card vs panel | deviation: EventActionCard + SpecialistsPanel; отдельный pixel mock — Future |
|
||||
| Desktop one-row chrome | **done** Front#31 — logo \| nav \| nickname+logout |
|
||||
|
||||
## Mood concept = product surface
|
||||
|
||||
@@ -180,6 +193,8 @@ CSS-токены и chrome на mood beyond primary hex: surfaces, gradients, ev
|
||||
| 3 | Discover mood variants | [Front#27](https://git.sabilin.com/EventHub/EventHubFront/issues/27) |
|
||||
| 4 | CONTROL booking surfaces | [Front#28](https://git.sabilin.com/EventHub/EventHubFront/issues/28) |
|
||||
| 5 | Polish + stage smoke | [Front#29](https://git.sabilin.com/EventHub/EventHubFront/issues/29) |
|
||||
| — | P1/P2 UX polish + expired + desktop chrome | [Front#31](https://git.sabilin.com/EventHub/EventHubFront/issues/31) |
|
||||
| — | Past-pending → `expired` | [Back#60](https://git.sabilin.com/EventHub/EventHubBack/issues/60) |
|
||||
|
||||
Эпик: [Spec#10](https://git.sabilin.com/EventHub/EventHubSpec/issues/10).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user