bakeoff · MUSE HOLLOWAY
tenant: nutra-demo

Что это

live demo · без бэкенда

Автопилот для Meta → ленд → оффер. Правила живут по фазам spend (Ф1–Ф6), скоупятся per user/vertical, работают на любом объёме — от 1 кампании до 10k. Ниже — живой движок: меняет метрики и сразу показывает, какое действие сработает и почему.

Meta API · pause / budget / duplicate Группировка: campaign / adset / ad Метрики: tracker + Meta · статические + динамические

Глобальные инварианты

ROI_real ≥0.75 & spend < $50 → trash отменён (сквозное правило)
▸ Ночной стоп 01–07 · Дневной рестарт
▸ ROI за 3ч при spend > $20 → пауза
Все правила — выражения metric OP threshold + gate. Новая метрика = INSERT, без миграций.

Быстрый тест движка

drag slider → live

Архитектура

docs/ARCHITECTURE.md →
Postgres (config) + ClickHouse (events) + Postgres mat view (hourly) → RuleEngine (cron) → Meta API. Оценка O(active × rules_per_phase), шардирование по hash(tenant). Шаблон клонируется, не линкуется.
Tenant 1—* RuleSet 1—* Phase 1—* Rule · MetricDefinition(key) · Entity(campaign/adset/ad) · stats_current

Файлы

docs/ARCHITECTURE.md — диздок
docs/DB_SCHEMA.md — ER + индексы
docs/CLASS_DIAGRAM.md — mermaid
db/schema.sql — исполняемая схема
db/seed_templates.sql — 14 шаблонов
app/ — это приложение (engine.js + app.js)

Все правила (таблица)

клик по строке — редактировать
ФазаУсловиеGateScopeДействие

Симуляция — сводка по campaign / adset / ad

УровеньИмяSpendClicksVisitsSubmLeadsRevФазаРешение
Группировка работает через scope_level правила: ad-правила читают агрегат ad, adset — агрегат adset. В симуляции каждой строке можно задать уровень и увидеть разницу.

Что понимает чат

• «создай правило: Ф2 CPC > 0.9 → trash»
• «в Ф5 ROI_real ниже 0.8 при спенде 50 — trash»
• «добавь глобальное: ROI ≥0.75 и спенд <50 — не трогать»
• «выключать ночью» / «пауза если ROI за 3 часа низкий»
• «поставь шаблон Gambling FB»
Парсер — детерминированный (regex + словарь метрик), без LLM. Любая фраза → RulePatch → валидация → применение. Те же проверки, что в UI.
Демо хранит всё в localStorage. Сброс — кнопка в шапке.