Разбор трёх объектов проекта «Хорика» — инструмента для поставщика продуктов в HoReCa: репозиторий с исходным кодом, работающий дев-стенд и архив транскриптов рабочих сессий. Один продукт, три уровня: источник, развёрнутый снимок, история решений.
Исходный код: FastAPI-бэкенд, React-фронт, пайплайн «меню → КП», интеграция 1С. ~20.8k строк, 50 коммитов.
Развёрнутый стек из 7 контейнеров на общем сервере. Живые данные: 1742 организации, номенклатура и цены 1С.
Транскрипты сессий Claude Code и Grok — история того, как принимались решения по проекту.
Что это. Внутренний MVP для проверки гипотезы. Клиент — поставщик продуктов в HoReCa (не ресторан и не кейтеринг). Система находит заведения общепита в Яндекс.Картах и Поиске, собирает и раскладывает их меню до ингредиентов, матчит на номенклатуру клиента и генерирует коммерческое предложение (КП) двух типов: «что вы уже готовите и мы это поставляем» и «что вы могли бы добавить на нашей номенклатуре».
Репозиторий переехал и переименован: origin теперь farmgameowner/nashpartner, тогда как внутренние доки и сессии всё ещё ссылаются на прежний budka-dev/horeca. Имя пакета — catering-ai, продуктовое имя — «Хорика», инфраструктурный префикс — horeca_*.
Красным — шаги на LLM, которые сейчас не работают из-за блокера на стенде (см. Объект 02).
| Направление | Состояние | Комментарий |
|---|---|---|
| Инфраструктура и деплой | готово | browser-воркер добавлен в прод-compose, стенд развёрнут и проверен. |
| Калькуляторы цен (НДС, ед., упаковка) | готово | Чистое ядро на Decimal, цены прайса 1С в редакторе КП. |
| Импорт выгрузок 1С (4 CSV) | готово | Идемпотентный sync, связь с каталогом по штрихкоду. |
| Номенклатура и матчинг | готово | Каталог только из 1С; 1080 позиций, 367 ингредиент-термов. |
| Типы цен: смысл (−)/(+), дефолт-колонка | частично | 8 канонических расшифрованы; ждёт ответа заказчика. |
| Реальный шаблон КП + реквизиты, логистика | блок | Ждёт данных заказчика (Юлия). |
| Продажи/проводки 1С, cross-sell | Этап 2 | Решением заказчика выведено из Этапа 1. |
Что это. Общий сервер, на котором среди прочих проектов крутится стек «Хорики». Развёрнут из тарбола, не из git — на сервере нет рабочего дерева репозитория, только собранный код. Наружу торчит домен horeca.uxbrain.ru за TLS и единым парольным гейтом nginx (запрос отдаёт 302 на страницу логина). Доступ по SSH — по ключу владельца, загруженному в ssh-agent; названный пароль относится к веб-гейту, а не к root по SSH.
Сервер делят несколько проектов: erp, odeta, taroseer, skazka, prapor, demo-support и horeca. Стек «Хорики» — 7 контейнеров, поднят 3 дня назад, схема БД на миграции 0025, health отвечает {"status":"ok"}.
| Таблица | Строк |
|---|---|
| organizations | 1 742 |
| menu_assets | 17 713 |
| menu_items | 4 532 |
| client_products (1С) | 1 080 |
| onec_contractors | 1 370 |
| onec_product_prices | 24 742 |
| onec_price_types (530 инд.) | 540 |
| org_ingredients | 656 |
| proposals · proxies · users · regions | 6 · 6 · 1 · 1 |
Проверено 2026-09-03: llm.transport = openrouter, но ключ на стенде получает HTTP 403 Forbidden. Поэтому шаги classify_images и extract_menu не работают, и сквозной сценарий «URL → КП» разорван. Воркер при этом жив: кроны авто-ретрая и health-check шести прокси идут штатно. Нужен рабочий LLM-ключ в /root/horeca/.env и рестарт воркеров.
Диск занят на 81%. Реально освобождаемого — около 8 ГБ build-кэша Docker плюс ~17.8 ГБ образов; при росте данных стоит подчистить. Данные проекта лежат в /root/horeca_data (9.1 МБ, chmod 700) и в БД. Выделенный сервер/домен под проект, защищённый канал передачи выгрузок 1С и NDA остаются открытыми вопросами к заказчику.
Что это. Тарбол транскриптов рабочих AI-сессий по «Хорике» — «исходники того, как принимались решения»: почему выбрана та или иная схема, что отвечал заказчик, какие грабли уже проходили. Скопирован с ноутбука владельца (/home/joda/sessions.tar) через обратный SSH-туннель, положен в корень проекта и добавлен в .gitignore. Проверено: git его не отслеживает.
| Сессия | Период | Строк | О чём |
|---|---|---|---|
| claude/dc769d5a… | 18–28.06 | 1 875 | Старт: разбор репо, MVP-флоу, вопросы Юлии, волны скрапера 0–2. |
| claude/4dbc9588… | 29.06 | 277 | Включение OData в 1С, ТЗ подрядчику, парольный гейт стенда. |
| claude/915d3d69… | 28.06–09.07 | 2 399 | Волна 3 (бюджет LLM), v1-вид фронта, переписка с 1С-подрядчиком. |
| claude/1ade26d6… | 27.08–01.09 | 2 091 | Импорт выгрузок 1С, контрагенты, цены прайса в КП, переезд репо. |
| grok/019f5a94… | 13.07 | 69 | Расширение ТЗ 1С требованием продаж/проводок (plan.md + логи). |
Транскрипты содержат всё, что звучало в чате: пароли сервисных учёток, содержимое .env.prod, доступы к стенду. Поэтому файл добавлен в .gitignore и не должен попадать в репозиторий или пересылаться целиком. Выжимки решений (без сырых логов) живут в docs/PROGRESS.md, docs/QUESTIONS_YULIA.md и docs/ONEC_CONTRACTOR_BRIEF.html.