WORK 05 · Current

Порталы и платформы · B2B SaaS · generative search / GEO

SEO/AI portal: очереди, провайдеры и биллинг

Снимаемый риск маржи SaaS: очереди, refund, MCP estimate→charge.

Роль: Архитектура платформы и оркестрации

  • 9+AI/SERP-контуров
  • 2 слоядиспетчер очередей
  • MCPагентский API
  • refundпри fail провайдера

Задача

Сотни ключей × несколько API, 429 и таймауты плюс монеты. Без оркестрации и границ денег платформа либо встаёт, либо оплачивает эксперименты клиентов со своего кармана.

Результат

Per-provider Celery, двухслойный диспетчер, BillingService с usage log и refund, изоляция /tools/, MCP со scopes и явным согласием на списание.

  • Django
  • Celery
  • Redis
  • PostgreSQL
  • MCP

Живой сайт

Экраны visibility-платформы

Кабинет, провайдеры, очереди, биллинг, /tools/, MCP и отчёты — контур маржи, не декоративные мокапы.

Кабинет: задачи и баланс
Кабинет: задачи и баланс /app/
Провайдеры AI/SERP
Провайдеры AI/SERP /providers/
Диспетчер очередей
Диспетчер очередей /queues/
Биллинг и usage log
Биллинг и usage log /billing/
Публичные tools
Публичные tools /tools/
MCP estimate to charge
MCP estimate to charge /mcp/
Отчёт по snapshot
Отчёт по snapshot /reports/
Hub и wizard оболочки
Hub и wizard оболочки /hub/

Ставка

Платите за результат, не за хаос

Каждый вызов провайдера — квоты и токены. Архитектура либо режет хвост злоупотреблений, либо съедает маржу.

Visibility-портал выигрывает не «ещё одной нейросетью», а дисциплиной статусов и денег. Задачи в БД дают честный UX: queued / running / done / failed — без магического спиннера. Баланс монет на виду: клиент видит, за что платит, до того как сгорит пакет.

Синхронный HTTP на 30–60 сек ответа модели неприемлем. Одна общая очередь на всех провайдеров — недопустима. Публичные lead-tools не ходят в платёжное ядро как кабинет. Покупаете снимаемый риск: не спонсировать чужие эксперименты со своего prepaid.

Ставка простая: платить за успешный результат, честно refund’ить fail провайдера и не смешивать демо с прод-балансом.

  • Честные статусы задач в БД — аудит и поддержка
  • Баланс и стоимость на экране до списания
  • Без синхронных «подождите минуту» на нейросеть
/app/

Модули

Провайдеры как модули

Новый AI/SERP-контур = сервисный класс и Celery route, не раздутый комбайн.

Отдельные модули на search-LLM, Wordstat, overview, классическую выдачу и соседние контуры. Контракт один: запрос → нормализованный результат или типизированная ошибка. Health и latency на карточке — операционка, не слайд.

Падение или rate limit одного контура не валит остальные: воркеры маршрутизируются per-provider. Ретраи с backoff; после исчерпания — failed, видимый пользователю. Так вы не платите бесконечным ретраям за мёртвый API.

/providers/

Оркестрация

Два слоя очередей

БД (статусы) → Redis-семафор (fair-share) → Celery per-provider.

Диспетчер по расписанию берёт пачку jobs, захватывает семафор между клиентами и ключами, затем отдаёт в Celery. Без fair-share один кабинет с тысячей ключей забивает воркеры и душит остальных.

Глобальные provider-route и user/project-слоты работают вместе: изоляция по вендору плюс договорённый параллелизм на аккаунт. Это и есть цена архитектуры «сейчас» — она отбивается на счетах провайдеров «в месяц».

  • Нет одной общей очереди «для простоты»
  • Fair-share на пользователя/проект
  • Исчерпание ретраев → failed, не вечный retry
/queues/

Деньги

Биллинг с refund

Prepaid, таблицы цен, APIUsageLog и транзакции — источник правды для поддержки и маржи.

BillingService списывает за факт работы API или пакет анализа. Критичный паттерн: refund при ошибке провайдера из пути задачи — иначе платформа продаёт воздух и теряет доверие. Промо и рефералка живут рядом, но не в обход usage log.

Цены на модели меняются без переписывания воркеров: воркер рапортует usage, биллинг считает монеты. Прозрачность «сколько спишется» снижает споры после факта. Дашборд расходов — часть продукта, не отчёт «потом».

/billing/

Граница

/tools/ вне прод-баланса

Lead-магниты греют воронку с жёсткими лимитами — без дыры в кассе кабинета.

Fan-out, answer coverage, bot access и аналоги — отдельный контур со своей моделью прогонов. Они не получают прав кабинета с деньгами. Граница режет злоупотребления и случайный «бесплатный» продакшен-скан.

Слой кэша и snapshot видимости рядом: повторный дорогой collect без нужды — прямой убыток. TTL и инвалидация — продуктовый рычаг свежесть против маржи, не деталь инфраструктуры «потом».

/tools/

Агенты

MCP: estimate → charge

Scopes, идемпотентность, явная цена до согласия — агент не жжёт бюджет в цикле.

JSON-RPC и stdio-мост. Bearer scopes: read / write / charge / узкие factory-права. Write и charge не выдаются «для удобства» read-only интеграциям. Платные tools: estimate → принятие стоимости → charge; при недостатке баланса — понятный отказ (аналог 402), не тихий partial run.

Идемпотентные ключи защищают баланс от двойных дерганий автоматизаций. Сырые ключи провайдеров наружу не отдаются. Агентный контур — полноценный клиент API с теми же правилами денег, что UI.

  • Ротация токенов и аудит вызовов
  • Estimate перед charge обязателен
  • Нет сырых provider keys в агенте
/mcp/

Маржа

Collect отдельно от report

Падение рендера KPI не должно перезапускать дорогой сбор у провайдеров.

Сырые ответы и построение отчёта — разные стадии. Снимки и нормализованные сущности позволяют пересчитать витрину дешевле, чем пересканировать все ключи. Это прямая защита COGS на шкале кабинета.

Отчёт «из snapshot» продаёт клиенту скорость и стабильность, а вам — возможность не жечь квоты на каждый F5 дашборда.

/reports/

Ядро

Оболочки без ломки ядра

Wizard, factory, hub меняются; задачи, баланс и провайдеры стабильнее моды на UI.

Новые шеллы документируют изоляцию, чтобы онбординг не ломал оплату и статусы. Доменное ядро переживает редизайн — это дешевле, чем микросервисы «по слайду» до независимых команд и SLO.

Сознательно не сваливали все AI-вызовы в одну очередь и не смешивали demo-tools с прод-биллингом. Без лимитеров и refund SaaS спонсирует эксперименты пользователей своими деньгами — этот кейс как раз про отказ от такой модели.

  • Не дробили микросервисы ради слайда
  • Не одна очередь на всех провайдеров
  • Не смешивали demo и прод-баланс
/hub/

Итог

Итог

Visibility-портал покупают как фундамент очередей и денег: изоляция провайдеров, честный баланс, безопасный агентный контур. На этом уже строят GEO и продуктовые пайплайны — не наоборот.

Без дисциплины SaaS спонсирует чужие сканы. С ней — платите за результат и контролируемую маржу, а не за хаос ретраев и «бесплатных» tools.