Repository navigation
Feature Stubs Clarity
Статус: в main. Подзадачи #259–#264 закрыты. Эпик: UX/UI аудит сайта. Задача: #253.
Единая подпись неготового элемента: «Появится позже».
Гость, клиент, менеджер и администратор отличают работающее действие от того, чего на сайте ещё нет. Неготовое не выглядит настоящей кнопкой, формой, контактом, отзывом или оценкой. Подпись одна: «Появится позже». Такой элемент неактивен и не сообщает об успехе.
Простой пример: в подвале блок рассылки остаётся на месте, поле и кнопка не принимают email, тост «Спасибо за подписку!» не появляется, рядом написано «Появится позже».
- Сценарии: гость на главной, в каталоге, на туре и на странице 404; клиент в кабинете, профиле и заявке; менеджер в заявке и чате; администратор открывает те же кабинет и панель менеджера, отдельного экрана администратора нет.
- Входит: подпись и неактивность уже нарисованных неготовых элементов, замена вымышленных контактов, честный текст пустых отзывов, скрытие нулевой оценки, нейтральный фон направления без своего фото.
- Не входит: рассылка, паспорт, аватар, счета, заметки, вложения, API отзывов, оплата; возврат снятых ссылок подвала; поиск на главной (#248); тексты преимуществ на главной (#222, #239); кнопка «Оплатить» и «Завершить» (#189); горящие предложения (#74).
- Критерии приёмки (Дано / Когда / Тогда):
- Дано: публичная страница. Когда: посетитель смотрит подвал. Тогда: почты и адреса агентства нет, телефон имеет вид
+7 999 999-99-99и подпись «Появится позже», рассылка не отправляется. - Дано: профиль. Когда: пользователь смотрит фото и паспорт. Тогда: оба элемента неактивны и подписаны «Появится позже», имя и телефон по-прежнему сохраняются.
- Дано: заявка менеджера и чат. Когда: пользователь смотрит заметки, счёт и скрепку. Тогда: элементы неактивны, подпись «Появится позже», тост «Скоро» не появляется, текстовые сообщения отправляются.
- Дано: главная, страница тура и заявка. Когда: пользователь открывает отзывы или оценку. Тогда: нет фразы про отсутствие отзывов у конкретного тура и нет оценки 0. Текст «Появится позже».
- Дано: направление без фото. Когда: гость смотрит карточку на главной. Тогда: нет общего чужого кадра, название и переход в каталог на месте.
- Дано: публичная страница. Когда: посетитель смотрит подвал. Тогда: почты и адреса агентства нет, телефон имеет вид
Новых сущностей, полей, миграций и методов API нет. Меняется только фронтенд: тексты, disabled, доступные имена и отсутствие успешного тоста. Запросы сохранения профиля, статуса заявки, предложения и текстового сообщения чата остаются прежними.
Маршруты (src/Frontend/travel-agency-frontend/src/App.tsx, строки 90-124):
- Гость,
PublicLayout(шапка и подвал):/,/tours,/tours/:id, неизвестный путь (404). - Клиент, менеджер и администратор,
DashboardLayout(шапка, без подвала):/dashboard,/dashboard/bookings,/dashboard/bookings/:id,/dashboard/profile,/dashboard/favorites. - Менеджер и администратор,
ManagerLayout(шапка, без подвала):/manager,/manager/bookings,/manager/bookings/:id,/manager/tours,/manager/tours/new,/manager/tours/:tourId,/manager/clients.
Правило подписи:
- Нет данных и нет действия: видимый текст «Появится позже», контрол неактивен, успешного тоста нет.
- Для вида нужен телефон:
+7 999 999-99-99и та же подпись, без ссылкиtel:. - Рабочее ограничение (email только для чтения) эту подпись не получает.
- Рабочая ссылка на существующий якорь остаётся.
Файл: src/Frontend/travel-agency-frontend/src/components/layout/Footer.tsx. Подвал подключает PublicLayout.tsx.
| Элемент | Строки | Сейчас | Решение |
|---|---|---|---|
Телефон +7 (800) 555-35-35
|
13 | текст, похожий на номер 8 800 | исправить: +7 999 999-99-99 и «Появится позже», не ссылка |
Почта info@travelagency.ru
|
14 | вымышленный адрес | пометить: текст «Появится позже» |
Адрес Москва, ул. Тверская 1
|
15 | вымышленный адрес | пометить: текст «Появится позже» |
| Строка сайта | в подвале нет | сайта нет | оставить: строку не добавлять |
| Рассылка | 21-25, 81-113 | форма шлёт тост «Спасибо за подписку!» | пометить: поле и кнопка неактивны, подпись «Появится позже», тоста нет |
| «Популярные туры», «Отзывы» | 7-10 |
/tours, /#reviews
|
оставить |
| «О нас», «Блог», «Карьера», «FAQ», соцсети | в разметке нет, проверка в Footer.test.tsx 18-27 |
сняты в #182 | оставить снятыми |
| «Направления» | в разметке нет | снято в #231 | оставить снятым |
Шапка (Header.tsx, строки 19-23): «Туры», «Отзывы», «Контакты» ведут на /tours, /#reviews, /#contacts. Якоря есть. Оставить.
getDestinations пишет в photo пустую строку (catalog.ts, строки 504-510): бэкенд фото не отдаёт. Карточка при пустом фото берёт общий кадр Unsplash (DestinationsGrid.tsx, строки 11 и 69). У разных направлений одна и та же чужая фотография. Название, страна и переход в каталог рабочие. Бейдж «N туров» уже скрыт при tourCount === 0 (строки 89-93).
Решение: исправить фон на нейтральную песочную плашку, как у тура без картинки. Подпись «Появится позже» на карточке не нужна.
ProfilePage.tsx, маршрут /dashboard/profile.
| Элемент | Строки | Сейчас | Решение |
|---|---|---|---|
| Кнопка камеры | 92-94 | выглядит активной, обработчика нет | пометить: неактивна, доступное имя «Появится позже» |
| Паспорт | 131-137 | неактивен, «Пока не поддерживается» только при пустом значении | пометить: всегда виден текст «Появится позже», в сохранение не уходит |
| 125-129 | неактивен, в сохранение не входит | оставить | |
| Имя, фамилия, телефон, «Сохранить» | 46-61, 107-123, 140-143 | сохраняются | оставить |
Загрузка фото, город и настройки остаются в #101. Эта фича их не реализует.
ManagerBookingDetailPage.tsx, маршрут /manager/bookings/:id.
| Элемент | Строки | Сейчас | Решение |
|---|---|---|---|
| Заметки | 244-260 | поле активно, кнопка «Сохранить (скоро)» неактивна, title="Скоро"
|
пометить: поле и кнопка неактивны, текст «Появится позже» |
| Счёт | 399-408 | кнопка активна, тост «Скоро» | пометить: кнопка неактивна, тоста нет, текст «Появится позже» |
| Быстрые ответы | 283-305 | копируют текст в буфер | оставить |
| Статус и предложение | 324-356 | работают | оставить |
Хранение заметок и выставление счетов в эту фичу не входят.
ChatWindow.tsx, строки 287-294. Компонент стоит на заявке клиента и на заявке менеджера. Скрепка неактивна, но об этом говорит только title="Скоро". Отправка текста работает.
Решение: пометить. Кнопка неактивна, текст «Появится позже» виден без наведения. Загрузка файлов не входит.
Списка отзывов в API нет. ReviewsSlider.tsx (строка 11) и TourTabs.tsx (строка 27) держат пустые константы.
| Элемент | Строки | Сейчас | Решение |
|---|---|---|---|
| Блок на главной |
ReviewsSlider.tsx 27 |
«Скоро здесь появятся отзывы», якорь reviews
|
пометить: «Появится позже», якорь оставить |
| Вкладка на туре |
TourTabs.tsx 136-140 |
«Пока нет отзывов для этого тура» | пометить: «Появится позже» |
| Оценка на заявке клиента |
BookingDetailPage.tsx 116-123, ноль задаёт catalog.ts 111-112 |
звёзды и «(0 отзывов)» | пометить: нет оценки 0, текст «Появится позже» или блок скрыт |
| Оценка на заявке менеджера |
ManagerBookingDetailPage.tsx 381-388 |
заполненная звезда и прочерк, потому что 0 считается пустым | пометить: нет звезды с пустой оценкой, «Появится позже» или строка скрыта |
Ссылки шапки и подвала на /#reviews оставить. Карусель горящих предложений на главной не подключена (HomePage.tsx, строка 14, #74).
| Элемент | Где | Почему не здесь |
|---|---|---|
| «Оплатить» без обработчика |
BookingDetailPage.tsx 138-141 |
#189: скрыть до оплаты #145, вместо кнопки текст про связь с менеджером |
| «Завершить» у клиента |
BookingDetailPage.tsx 312-321 |
#189 |
| Утверждения на главной |
HeroSection.tsx, WhyUsSection.tsx
|
закрытые #222 и #239, не переоткрывать |
| Поиск на главной | SearchBar |
закрытая #248 |
searchTours |
catalog.ts 539-546 |
в интерфейсе не вызывается, отдельная задача не нужна |
HotDealsCarousel, TourFormModal, TourTableRow, TourMobileCard
|
компоненты без маршрута | на экранах нет, отдельная задача не нужна |
| Вопрос | Варианты | Выбрано | Почему | Дата |
|---|---|---|---|---|
| Единая подпись | «Появится позже»; «Скоро»; «Пока не поддерживается»; разные формулировки по экранам | «Появится позже» | одна фраза на всех ролях, элемент при ней неактивен | 2026-10-23 |
| Телефон в подвале | убрать строку; оставить 8 800; явный тестовый номер |
+7 999 999-99-99 и «Появится позже», без tel:
|
номер нужен для вида, текущий похож на настоящий | 2026-10-23 |
| Почта, адрес, сайт | вымышленные строки; подпись без данных; придумать сайт | почта и адрес заменяются на «Появится позже», строку сайта не добавлять | данных нет, новую пустую строку не рисовать | 2026-10-23 |
| Рассылка | убрать блок; оставить рабочий тост; оставить блок неактивным | блок остаётся, поле и кнопка неактивны, тоста успеха нет | блок можно показать, действие обещать нельзя | 2026-10-23 |
| Снятые ссылки подвала | вернуть страницами-заглушками; оставить снятыми | оставить снятыми | #182 и #231 закрыты | 2026-10-23 |
| Фото и паспорт | сделать в рамках #101; только пометить | пометить, #101 не реализовывать | цель этой фичи: честный вид, не новый профиль | 2026-10-23 |
| Email в профиле | подпись «Появится позже»; оставить тихим полем только для чтения | оставить без подписи «Появится позже» | это действующее ограничение, не отсутствующая функция | 2026-10-23 |
| Заметки и счёт | спрятать; оставить тост «Скоро»; неактивная подпись | неактивны, подпись «Появится позже», тоста нет | клик с тостом выглядит как начало работы | 2026-10-23 |
| Скрепка | спрятать; оставить только title; видимая подпись |
видимая «Появится позже», кнопка неактивна | подсказка по наведению незаметна | 2026-10-23 |
| Пустые отзывы и оценка 0 | «отзывов пока нет»; скрыть вкладку; подпись «Появится позже» | подпись «Появится позже», оценку 0 не показывать | пустой список выглядит как данные конкретного тура, 0 выглядит как оценка | 2026-10-23 |
| Фото направления | общий кадр Unsplash; нейтральный фон | нейтральный песочный фон | один чужой кадр на все направления выглядит как фото места | 2026-10-23 |
| «Оплатить» | пометить здесь; оставить #189 | вне фичи | у #189 уже есть свой текст и критерий скрытия | 2026-10-23 |
#253 остаётся открытой родительской задачей, пока не закрыты подзадачи ниже.
| Подзадача | Раздел страницы | Задача | Статус |
|---|---|---|---|
| Контакты и рассылка в подвале | Подвал | #259 | в очереди |
| Фото и паспорт в профиле | Профиль | #260 | в очереди |
| Заметки и счёт менеджера | Заявка менеджера | #261 | в очереди |
| Вложение в чате | Чат | #262 | в очереди |
| Отзывы и нулевая оценка | Отзывы и рейтинг | #263 | в очереди |
| Фон направления без фото | Направления | #264 | в очереди |
На подзадачах нужны метки bug и статус: очередь. На #253 нужны тип: родительская и статус: в работе вместо статус: очередь, иначе на доске две колонки статуса сразу.
| № | Предусловие | Шаги | Ожидаемый результат | Уровень |
|---|---|---|---|---|
| ТК-1 | публичная страница | открыть подвал | телефон +7 999 999-99-99 и «Появится позже»; почта и адрес равны «Появится позже»; нет info@travelagency.ru и «Тверская»; строки сайта нет |
unit |
| ТК-2 | подвал | попытка отправить рассылку | поле и кнопка неактивны, тост «Спасибо за подписку!» не появляется, видна «Появится позже» | unit |
| ТК-3 | шапка и подвал | открыть «Туры», «Популярные туры», «Отзывы», «Контакты» |
/tours, /tours, /#reviews, /#contacts; пунктов «О нас», «Блог», «Карьера», «FAQ», «Направления» нет |
unit |
| ТК-4 | профиль клиента | нажать камеру, прочитать паспорт, сохранить имя | камера и паспорт неактивны и подписаны «Появится позже»; у email этой подписи нет; имя уходит в сохранение, паспорт нет | unit |
| ТК-5 | заявка менеджера | заметки, счёт, статус, быстрый ответ | заметки и счёт неактивны, подпись «Появится позже», тоста «Скоро» нет; статус и копирование ответа работают | unit |
| ТК-6 | чат клиента и чат менеджера | скрепка и непустое сообщение | скрепка неактивна, «Появится позже» видно без наведения; текст отправляется | unit |
| ТК-7 | главная и страница тура | блок отзывов и вкладка «Отзывы» | текст «Появится позже»; нет «Пока нет отзывов для этого тура»; якорь reviews на месте |
unit |
| ТК-8 | заявка клиента и заявка менеджера | блок оценки тура | нет звёзд с оценкой 0 и нет «(0 отзывов)»; нет заполненной звезды с пустой оценкой | unit |
| ТК-9 | главная, направление с пустым photo
|
карточка направления | общего URL Unsplash нет; нейтральный фон; название, страна и переход в каталог на месте; бейдж числа туров при нуле скрыт | unit |
| ТК-10 | гость, клиент, менеджер, админ на dev | пройти маршруты из раздела «Архитектура» | неготовое подписано одинаково и неактивно; рабочие ссылки, сохранение профиля, статус, предложение и текст чата на месте | вручную на dev |
Система
API
Сервисы
Как реализовано
Справочное
- Эпик: модель туров под импорт
- Разбор Tourvisor (к импорту)
- ТЗ агрегации туров (к импорту)
- Эпик: подключение туроператоров
- Эпик: полный цикл бронирования
- Эпик: мелкие доработки и заметки
- Эпик: профили и настройки
- Эпик: UX/UI аудит сайта
- Эпик: отзывы клиентов
- Эпик: визуальный редизайн
- Эпик: ИИ-агенты на сайте
- Фича: почему выбирают нас
- Фича: витрина туров на главной
- Фича: раздел администрирования
- Фича: карточки собеседника в чате
- Фича: профиль клиента
- Фича: поиск и календарь на главной
- Фича: профиль менеджера
- Фича: аккаунт и сервер профиля
- Фича: видимость полей группами
- Фича: явные неготовые элементы
- Фича: галерея на странице тура
- Фича: единые поля дат
- Шаблон эпика
- Шаблон фичи