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

Отзывы хранятся в Obsidian и публикуются через общий виджет на assets.primetours.ru. Виджет загружает JSON в браузере; для новых отзывов пересборка сайта не нужна.

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

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

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

Поле destination хранит id направления, например maldives, thailand, turkey, uae или vietnam:

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

Виджет отбирает отзывы с рейтингом не ниже 4. Сначала показывает отзывы о выбранном направлении. Если их меньше трёх, дополняет отзывами о других поездках, до трёх при наличии. Параметр limit ограничивает число карточек; по умолчанию — шесть.

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

Команды

КомандаЧто делает
npm run scrape:reviewsЯндекс → карточки-черновики в Obsidian
npm run sync:reviewsObsidian → JSON в соседнем assets-репозитории и локальный рейтинг
npm run buildСборка сайта, без синхронизации отзывов
Сайт использует опубликованный JSON на assets-хосте. Старые файлы src/content/reviews/ сохранены, но текущий компонент их не читает.
Для ручных команд нужен разрешённый доступ к Local REST API. В отдельном worktree соседняя папка assets может отсутствовать: перед выпуском проверяйте файл JSON и diff assets-репозитория. Число отзывов в выводе sync не подтверждает публикацию.

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

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

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

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

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

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