From f04dbabb3c4a8dd1175dc31c40e7d54943d700ac Mon Sep 17 00:00:00 2001 From: IK Date: Mon, 7 Sep 2026 18:51:22 +0700 Subject: [PATCH] fix: avoid duplicate leader panel --- README.md | 2 +- apps/web/src/layouts/Layout.astro | 1 + apps/web/src/pages/index.astro | 2 +- apps/web/src/styles/dashboard-polish.css | 1 + docs/ROADMAP.md | 1 + docs/UI_UX_AUDIT.md | 4 ++-- 6 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 apps/web/src/styles/dashboard-polish.css diff --git a/README.md b/README.md index 192d9a6..468cb1c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ RF4 Spotter — неофициальный сервис свежих точек RF4DB/RF4-STAT/RF4MAP/RF4 Posts сначала принимаются в изолированный staging. Полные записи с ранее подтверждёнными алиасами источника публикуются автоматически; новые соответствия и неполные записи остаются на ручной проверке. Для разрешённых community-источников действует интервал не менее 30 минут на источник. Открытая альфа не использует продуктовый allowlist: интерфейс показывает весь корректно загруженный разрешённый каталог, сохраняя требования полноты и модерации. -На сайте у каждой записи отображается источник, а у агрегированной активности — все вошедшие в расчёт источники. Неполные community-наблюдения публикуются сразу в отдельной ленте «Полевые сигналы» с предупреждением и перечнем отсутствующих полей; до подтверждения полноты они не влияют на индекс клёва. Лента раскрывается серверной кнопкой «Показать ещё», сохраняет выбранные фильтры и ограничена 48 сигналами на страницу. Совпадающие рыба, водоём, координаты и вес объединяются визуально, при этом карточка сохраняет все уникальные ссылки на исходные наблюдения. +На сайте у каждой записи отображается источник, а у агрегированной активности — все вошедшие в расчёт источники. Неполные community-наблюдения публикуются сразу в отдельной ленте «Полевые сигналы» с предупреждением и перечнем отсутствующих полей; до подтверждения полноты они не влияют на индекс клёва. Лента раскрывается серверной кнопкой «Показать ещё», сохраняет выбранные фильтры и ограничена 48 сигналами на страницу. Совпадающие рыба, водоём, координаты и вес объединяются визуально, при этом карточка сохраняет все уникальные ссылки на исходные наблюдения. Sidebar лидера скрывается при единственном результате, чтобы не повторять ту же карточку. Базовый SEO-контур готов для `rf4spotter.ru`: страницы имеют уникальные метаданные, canonical, Open Graph/Twitter Card, фирменное изображение 1200×630 и JSON-LD; доступны динамические `/robots.txt` и `/sitemap.xml`, административные и ошибочные страницы закрыты от индексации, добавлена собственная страница 404. Индексируемые каталоги рыб и водоёмов, detail-страницы и сочетания водоём + рыба строятся из актуального разрешённого справочника и включаются в sitemap. Подключены фирменные favicon/app icons, web manifest и production-кэширование статических ресурсов. Карточки активности показывают единый паспорт данных: источники, свежесть, полноту и уровень доверия. На `/status` опубликована легенда цветов всех источников и статусов качества. diff --git a/apps/web/src/layouts/Layout.astro b/apps/web/src/layouts/Layout.astro index ad5aa41..c650545 100644 --- a/apps/web/src/layouts/Layout.astro +++ b/apps/web/src/layouts/Layout.astro @@ -10,6 +10,7 @@ import "../styles/fish-silhouette.css"; import "../styles/empty-states.css"; import "../styles/alpha-banner.css"; import "../styles/signal-pagination.css"; +import "../styles/dashboard-polish.css"; import FishingIcon from "../components/FishingIcon.astro"; import AlphaBanner from "../components/AlphaBanner.astro"; const { diff --git a/apps/web/src/pages/index.astro b/apps/web/src/pages/index.astro index 50ede5e..1977780 100644 --- a/apps/web/src/pages/index.astro +++ b/apps/web/src/pages/index.astro @@ -27,7 +27,7 @@ try { items = await api(`/api/v1/activity?${query}`); } } catch { unavailable = true; } -const leaderLevel = items[0] ? activityLevel(items[0].activity_score) : null; +const leaderLevel = items.length > 1 && items[0] ? activityLevel(items[0].activity_score) : null; const selectedWaterbody = waterbodies.find(item => item.slug === waterbody)?.name_ru ?? "Все водоёмы"; const selectedFish = fishes.find(item => item.slug === fish)?.name_ru ?? "Любая рыба"; const periodLabel = { "6": "6 часов", "12": "12 часов", "24": "24 часа", "72": "72 часа" }[hours] ?? hours; diff --git a/apps/web/src/styles/dashboard-polish.css b/apps/web/src/styles/dashboard-polish.css new file mode 100644 index 0000000..cb8b144 --- /dev/null +++ b/apps/web/src/styles/dashboard-polish.css @@ -0,0 +1 @@ +.dashboard:has(>.results-column:only-child){grid-template-columns:1fr} diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index c143bd2..8b3cad9 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -123,6 +123,7 @@ ### Графические элементы и объяснение данных +- [x] Не показывать дублирующий sidebar лидера при единственной найденной точке (7 сентября 2026). - [x] Подготовить фирменный знак «крючок + поплавок + координатная сетка» и согласованный набор favicon/app icons (7 сентября 2026). - [x] Добавить честный координатный радар без имитации отсутствующей карты на страницу точки (7 сентября 2026). - [x] Добавить временную шкалу активности 72 часа с 12-часовым шагом в виде лески с поплавками (7 сентября 2026). diff --git a/docs/UI_UX_AUDIT.md b/docs/UI_UX_AUDIT.md index 12cb2e9..7600ad3 100644 --- a/docs/UI_UX_AUDIT.md +++ b/docs/UI_UX_AUDIT.md @@ -73,9 +73,9 @@ - [x] Заменить slug-input фильтрами из справочников и добавить сброс. - [x] Сделать мобильную выдачу рекордов самодостаточной с подписями значений. -- [ ] Убрать CLI-команду из публичного empty state. +- [x] Убрать CLI-команду из публичного empty state. - [ ] Добавить к уловам detail-страницы дату/свежесть и происхождение, если API их отдаёт. -- [ ] Устранить дублирование карточки и sidebar на малой выборке. +- [x] Устранить дублирование карточки и sidebar на малой выборке: блок лидера показывается только при двух и более результатах (7 сентября 2026). Критерий: фильтрация не требует технических терминов; каждая мобильная запись читается без заголовка таблицы; источник и свежесть понятны.