The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Vedar — Kamchatka travel listing page.
Платформа полного цикла — от поиска маршрута до экстренной помощи в поле. Ранее известна как TourHab / KamchatourHub / Volcano OS.
vedarai.ru · Next.js 15 · PostgreSQL · TypeScript strict · PWA · Offline-first · AI
B2C/B2B платформа: туристы ищут маршруты и бронируют туры, операторы управляют предложениями, гиды ведут группы, партнёры сдают жильё и снаряжение. В основе — безопасность: каждое место имеет профиль опасности, реалтайм-статус и привязку к МЧС.
Работает в поле без интернета: офлайн-карты, экстренная страница, инструкции выживания, офлайн-очередь SOS (уходит сам при появлении связи) и QR-эстафета — попутчик сканирует сигнал без сети у обоих, его телефон доставляет SOS из зоны покрытия. Меш-ретрансляция — дополнительный канал, когда у соседа по группе связь осталась. Экстренный ответ не зависит от AI: детерминированный SOS-детектор добавляет телефоны 112/МЧС к ответу любого чата платформы, даже когда AI-конвейер лежит целиком.
У Ведара есть публичный MCP-сервер (vedar-mcp): endpoint https://vedarai.ru/api/mcp, транспорт Streamable HTTP (JSON-RPC 2.0), авторизация не требуется. 14 инструментов: туры и их реальная занятость, безопасность мест и маршрутов, погода, жильё, трансферы, план поездки, заявки с подтверждением человеком. Подробнее: vedarai.ru/mcp · манифест /.well-known/mcp.json · /llms.txt.
В каталогах: официальный реестр MCP — ru.vedarai/mcp (манифест публикации — server.json), Smithery — tourhabk/vedar (npx -y smithery mcp add tourhabk/vedar), Glama — glama.json. Идентификаторы — в lib/mcp/catalogs.ts; их же отдают манифест, /llms.txt и /mcp.
Vedar — Kamchatka travel (English). Public MCP server for AI agents: live tours and availability, safety alerts, places, weather, stays, trip plans. Endpoint https://vedarai.ru/api/mcp, Streamable HTTP, no auth.
| Слой | Технология |
|---|---|
| Frontend | Next.js 15 App Router, TypeScript strict, Tailwind CSS |
| База данных | PostgreSQL — прямой SQL, без ORM |
| Аутентификация | JWT, role-based middleware |
| AI | Waterfall: 14 провайдеров — OpenRouter · DeepSeek · Gemini · MiMo · GLM · NVIDIA · Groq · Cerebras · Mistral · xAI · YandexGPT · MiniMax · MuseSpark · Anthropic. Плюс Mistral OCR (паспорта маршрутов) |
| PWA | Service Worker, Web Push (VAPID), Background Sync, IndexedDB |
| Меш | WebRTC P2P (VolcanoMesh) — SOS-ретрансляция между устройствами группы |
| Деплой | Timeweb Cloud — автодеплой при пуше в main |
| Боты | Telegram + MAX (Kuzmich) |
Код — цифры обновляет node scripts/update-readme-stats.mjs; запускает его post-merge.yml после каждого мержа (из CI проверка снята 15.08: устаревшая витрина держала выкладку прода):
| Метрика | Значение |
|---|---|
| Страниц | 217 |
| API routes | 794 |
| UI компонентов | 184 |
| lib-модулей | 762 |
| SQL миграций | 563 (последняя 1102) |
| Юнит-тестов | 14047 в 1316 файлах |
| GitHub Actions | 152 workflow |
Каталог — перепись GET /api/cron/catalog-census на проде, замер 2026-09-27 (обновляется после каждого мержа; «живые» — видимые и не слитые):
| Сущность | Живых |
|---|---|
Мест (places) | 379 |
Маршрутов (kamchatka_routes) | 389 |
| Гидов с действующей аттестацией | 112 |
places: is_visible = true и merged_into_id IS NULL · kamchatka_routes: is_visible = true и merged_into_id IS NULL · guide_certifications: различных guide_id с is_verified = true и неистёкшим expiry_date
Три сущности — три таблицы:
Безопасность каждого места — location_safety_profile + location_real_time_status.
Связь маршрут→точки — route_waypoints.
lib/safety/sos-detector.ts — детерминированный детектор ЧП (8 категорий:
заблудился, травма, медведь, лёд, лавина, группа не вернулась, замерзание, бедствие)/emergency.html — статичная аварийная страница/sos — расширенный SOS-экран/safety/offline — инструкции выживания/offline/manage| Группа | Примеры | Расписание |
|---|---|---|
| Безопасность | Safety Ingest, Watchdog, Rescue, SOS Bridge, KVERT ACC | каждые 5 мин – 6 ч |
| Контент | Editor, Import Routes, Enrich Routes, Places Enricher | 22:00–23:00 UTC |
| Разведка | Scout Digest, Scout Innovator, Intelligence, KB Gap, Industry Intel, Legislation Sync | 07:00–08:00 UTC |
| Память | Memory Reflector, Contradiction Scanner (safety) | раз в сутки |
| Качество | Kuzmich Eval (faithfulness: фикстура + живые вопросы туристов), метрика заземления, SSR-сторож | еженедельно |
| Бизнес | Abandoned Bookings, Payouts, Tour Reminder, Leads | почасово / 06:00 UTC |
| Боты | Kuzmich (Telegram, MAX, Web, Widget) | realtime |
Loop-агенты (работают с репозиторием, loop engineering):
| Петля | Триггер | Что делает |
|---|---|---|
| CI Sweeper | CI упал | Читает лог, чинит: PR-ветка → фикс-коммит; main → hotfix draft-PR |
| Issue Triage | ежедневно 21:00 UTC | Размечает тикеты; safety/деньги → владельцу, тривиальные → draft-PR за ночь |
| Post-Merge Cleanup | мерж PR | Удаляет смерженные ветки, закрывает issue |
| Weekly Chronicle | вс 20:00 UTC | Хроника недели в .claude/MEMORY.md — межсессионная память агентов |
Уровень автономии L2: LLM-петли готовят draft-PR, мержит человек. Деньги и safety петли не решают — приносят владельцу с лейблом needs-owner.
Общая память агентов: каждый агент на старте читает readAgentBriefing() — состояние платформы, историю запусков, must-have контекст туризма на Камчатке.
Реестры: AGENTS.md · docs/AGENTS_BOOK.md
| Хаб | Путь | Роли |
|---|---|---|
| Туристы | /hub/tourist/ | tourist |
| Операторы | /hub/operator/ | operator |
| Гиды | /hub/guide/ | guide |
| Агенты | /hub/agent/ | agent |
| Жильё | /hub/stay/ | stay-партнёр |
| Прокат снаряжения | /hub/gear/ | gear-партнёр |
| Безопасность | /hub/safety | public |
| Трансфер | /hub/transfer/ | transfer_operator |
| Рыбалка | /hub/fishing/ | public |
| Админ | /hub/admin/ | admin |
Новому разработчику — docs/DEVELOPER_GUIDE.md: быстрый старт
(миграции с нуля не проигрываются — baseline + хвост), карта репозитория, две дороги туриста по коду,
неочевидные механизмы (офлайн-очередь SOS, три планировщика кронов, маркеры), отладка прода.
Схема базы — docs/DB_SCHEMA.md, снимается с настоящего PostgreSQL.
import { pool } from '@/lib/db-pool' — только named importFROM operator_bookings / FROM operator_tours — не bookings, не tours$1, $2), никогда конкатенацияvar(--accent), var(--ocean))callAIWaterfall() / callAIFast()SELECT * FROM kamchatka_routes — только через v_kamchatka_routes_apiПолные правила: CLAUDE.md
Push в main → Timeweb видит пуш → собирает Docker → start.js накатывает миграции → поднимает сервер.
Приложение: Fair Polydeuces на Timeweb Cloud. Репо: tourhabk-ui/pos.
Docker: standalone bundle ≤ 50 МБ, images.unoptimized: true (убирает sharp ~33 МБ).
parks (заявка + email), паркам сети «Вулканы Камчатки» проставлены официальные каналы оформления; карточка парка показывает только подтверждённые ссылки/routes, /operators, /catalog рендерятся сервером с ItemList JSON-LD/hub/admin/healthКамчатка. Вулканы. Медведи. Код.