📝 Система отзывов

Живые отзывы с Яндекс.Карт превращаются в карточки Obsidian, проходят через менеджера и попадают на сайт. Источник правды — Obsidian (vault), сборка читает синхронизированную копию.

Как устроен поток

1. Скрапинг. npm run scrape:reviews тянет отзывы с Яндекс.Карт и создаёт карточки-черновики в Obsidian (BUSINESS/PRIME_TOURS/reviews/). Направление определяется автоматически по тексту.
2. Менеджер. В Obsidian проверяет карточку: уточняет поле destination (куда ездил клиент), ставит confirmed: true. В будущем это поле может приходить из amoCRM.
3. Синхронизация. При сборке отзывы со статусом published: true переносятся из Obsidian в src/content/reviews/ (через Local REST API).
4. Сборка. Astro строит страницы. На странице направления показываются релевантные отзывы, с дозаполнением общими.
Яндекс.Карты ──scrape──▶ Obsidian (карточки)
                              │  менеджер: destination + published
                              ▼
                        sync (REST API)
                              ▼
              src/content/reviews/*.md ──build──▶ сайт

Поле «куда ездил клиент»

Ключевое поле карточки — destination (id направления: maldives, thailand, turkey, uae, vietnam). Логика:

Что показывается на странице направления

Стратегия top-up (дозаполнение): сначала отзывы по этому направлению, и если их меньше трёх — добиваем общими до минимума. Блок скрывается, только если отзывов нет вообще.

СитуацияЧто увидит посетитель
Есть свои отзывы по направлениюЗаголовок «Отзывы — {направление}», свои отзывы (до 6)
Своих мало (1–2)Свои + общие до 3 штук, заголовок общий
Своих нет3 общих отзыва, заголовок «Что говорят наши клиенты»
Отзывов нет совсемБлок скрыт

Команды

КомандаЧто делает
npm run scrape:reviewsЯндекс → карточки-черновики в Obsidian
npm run sync:reviewsObsidian → src/content/reviews/
npm run buildСинхронизация + сборка сайта
Синхронизация встроена в сборку. Если Obsidian недоступен (нет ключа, CI) — сборка не падает и использует уже синхронизированные файлы.
Для скрапинга и синхронизации нужен ключ Local REST API в файле .env (см. .env.example). Доступ к vault — только через REST API.

Использование компонента

На главной — все отзывы; на странице направления — с фильтрацией:

// главная
<Reviews />

// страница направления (top-up по направлению)
<Reviews destination={dest.id} destinationTitle={title} />

Полная документация

Техническое описание — в REVIEWS_SETUP.md в корне проекта. Описание пайплайна в vault — заметка BUSINESS/PRIME_TOURS/WEB/reviews-pipeline.