← Все кейсы

Завершённый эксперимент · 2025 — 2026

Project Polygon

Информационный портал в нише селлеров маркетплейсов с собственным AI-контент-движком, автогенерируемым Дзен-каналом и регуляторной обвязкой по 152-ФЗ. Построен полный production-цикл — от ниша-research и регистрации в РКН до фактчек-пайплайна и cron-orchestration. Через ~12 месяцев работы и месяц публичной индексации эксперимент закрыт с измеренными результатами; всё технологическое и методологическое наследие перенесено в следующие проекты.

Статус: закрыт по результату Период: 2025-09 — 2026-05 Роль: solo product engineer, architect, founder

TL;DR

Гипотеза эксперимента

Информационная ниша для селлеров российских маркетплейсов (Wildberries, Ozon, Я.Маркет, Avito) выглядела как кандидат на «вечнозелёный» long-tail-трафик: тысячи операционных вопросов («комиссии WB 2026», «штрафы Ozon за просрочку», «карточка YM по 47 параметрам»), большая аудитория, постоянный приток новичков. Гипотеза, которую я хотел проверить:

Можно ли в нише, где у меня нет собственной экспертизы продавца, построить портал, который через регулярное качественное освещение операционной повестки займёт нишу в поисковой выдаче и Дзен — за счёт оркестрированной AI-генерации, фактчека и регулярности публикаций?

Критерий успеха был мягкий: ~100k показов / 1% CTR / 100₽ дохода с тысячи — 100k₽/мес базовый рубеж окупаемости. Срок «получить первые сигналы» — 2–3 месяца после первой массовой индексации.

Product Engineering — что было построено

Архитектура верхнего уровня

Не один сайт, а распределённая система из 8 кооперирующих сервисов, разнесённых между лабовой dev-средой и production-VPS на Selectel:

Сайт-портал
SPA на React 19 + Vite, build-time prerender по sitemap, хостинг на Yandex Object Storage с RoutingRules для 301-редиректов, JSON-LD разметка категорий.
Content Engine
Selector → Writer → Critic → Cover → Audit. GigaChat-Max как writer, YandexGPT + Yandex Search как фактчекер, Puppeteer + cover-renderer для обложек, append-only audit-JSON на каждый выпуск.
Scheduler
Декларативный cron из .headman/scheduler.yaml каждого обслуживаемого сайта. Адаптеры под GitHub Actions, локальный cron, Portainer-Stack triggers.
Watch Tower
Сбор сигналов из Yandex.Search и Yandex.Suggest, скоринг ниш по трём осям (frontrun / community / content_demand), еженедельные снапшоты для пополнения каталога.
Cover Renderer
Сервис генерации обложек для Дзен-выпусков. Шаблоны на HTML+CSS, rendering через headless Chromium, выдача PNG по REST.
Reverse-pull Notifier
Очередь уведомлений на сервере + вендор на лабе. Решение для случая, когда api.telegram.org заблокирован с RU-серверов: server-side сервисы шлют в публичный endpoint notify.headman.pro, лаба тянет очередь и форвардит в TG.
Auto-Review
Сторожевой пайплайн на лабе: cron 08:45/17:45 МСК после генератора, Sonnet headless вычитывает выпуск, при пропуске GigaChat'ом — переключается в режим fallback-writer и сам собирает резервный выпуск. Гарантия ежедневного материала, ничего не публикуется без approve.
Admin Workspace
UI для просмотра очереди, триггера генерации morning/evening/weekly, approve-кнопки для публикации. Badge hasIncoming сигналит о готовых к approve черновиках.

Антигаллюцинаторный фактчек как core-компетенция

Критическая проблема LLM-контента в новостной нише — выдуманные точные числа, искажённые имена собственные и непереведённые англоязычные фрагменты. Реализованная схема контроля:

  1. Writer (GigaChat-Max) пишет черновик по отобранным источникам из дайджеста новостей.
  2. Selector до этого уже отфильтровал тонкий новостной поток (audit-маркер thin-mp-news) — если нет 2-3 операционных тем, генератор отказывается выпускать, и материал идёт в fallback-режим.
  3. Critic (YandexGPT + Yandex Search) разбирает черновик на отдельные claims и верифицирует каждый отдельным запросом к Поиску. Все claims с недостаточным evidence помечаются для блокировки.
  4. Auto-reprompt при срабатывании критика — writer переписывает проблемный фрагмент. После 2-х неуспешных попыток — human-review.
  5. Audit-JSON по каждому выпуску: черновик → claims → verdict → evidence-ссылки. Это даёт reproducible-trace и эмпирическую базу для тюнинга промптов.

Себестоимость одного выпуска при включённом фактчеке держится ниже 25 ₽ — это включает оба LLM-вызова, поисковые квоты и рендеринг обложки. При работающей дистрибуции экономика была бы реальной.

Двухрежимный auto-review (review + write-fallback)

Отдельный слой страховки от халтуры основного генератора. Sonnet-headless, запускается cron'ом на лабе через 15 минут после server-генератора:

Контракт вывода стандартизирован: @@@SEVERITY@@@, @@@PING@@@, @@@REVIEW@@@, @@@REWRITE@@@ — обёртка парсит секции и раскладывает по правильным путям. Идемпотентность через проверку существующих файлов; --force для перезапуска.

Регуляторная обвязка по 152-ФЗ

Подан полный пакет в РКН (Роскомнадзор) как оператор персональных данных: форма №179, привязка к домену, обоснование категорий обрабатываемых данных (cookies и Метрика), правовые основания. Шаблон формы и distilled знания о ловушках процесса вошли в knowledge base, переиспользуемый для следующих info-сайтов с Метрикой.

Stage/prod-пайплайн

Тот же GitOps-шаблон, что я применяю для всех HEADMAN-проектов:

Управленческие и продуктовые решения

Стек выбран под РФ-ограничения с дня 1

OpenAI и Cloudflare заблокированы РКН; Telegram API заблокирован с RU-хостеров; западные SaaS — риск отключения. Все принятые технологические решения учитывают эти ограничения:

Это не косметика, а структурное проектное решение: если завтра Selectel блокирует ещё что-то, архитектура устойчива, потому что критические зависимости либо российские, либо вынесены за периметр.

SPA + build-time prerender как cost decision

Изначально рассматривался SSR (Next.js на Node-контейнере) — но это требует компьюта 24/7. Для контентного сайта с медленным обновлением выбран Vite-SPA + build-time prerender по sitemap → раскладка plain-HTML на Yandex Object Storage. Стоимость хостинга — десятки рублей в месяц, Lighthouse 95+ без оптимизации, мгновенный rollback через переключение бакета.

Двухслойная критика вместо single-pass writer

Решение разделить writer и critic на разные модели (GigaChat пишет, YandexGPT проверяет) принято после первой итерации, где single-pass генератор давал стабильно ~15% выпусков с искажениями. Отдельный critic с независимым source of truth (Yandex Search) ловит то, что писатель не видит — например, выдуманные точные числа или искажённые имена собственных. Цена — удвоение latency и стоимости, но качество выпусков перешло порог «можно публиковать без редактора».

Auto-review как страховка, а не как доминирующий слой

Когда возник вопрос «зачем нам GigaChat, если Claude headless пишет лучше», — осознанно оставлен гибрид: GigaChat первым (быстрее, дешевле, российский стек), auto-review вторым (вычитка + fallback при skip'е). Полное замещение Claude'ом удорожило бы операцию на порядок и привязало бы нас к Anthropic — ровно то, чего нельзя на RU-инфраструктуре.

Дзен-канал как отдельная воронка, не как часть SEO-стратегии

Изначально предполагалось, что Дзен-канал и сайт работают синергично: канал гонит читателя на сайт, сайт удерживает. На практике Дзен-аудитория почти не переходит — алгоритм Дзена удерживает внутри платформы. После осознания этого канал стал самостоятельной единицей в тестовой фазе (1 канал, 2–3 месяца тестирования), не подпорка для сайта.

Измеримые результаты

Что построено и зафиксировано

Что показала индексация (29.04 — 28.05.2026)

Себестоимость и операционные метрики

Что узнал — выводы эксперимента

1. AI-контент в нише с экспертной конкуренцией не пробивается без валидатора

Главный вывод и главный артефакт. Конкуренты в нише — WB-Гид (внутренний контент Wildberries), Sellmonitor (продукт для селлеров, написанный селлерами), vc.ru / Sells (реальные кейсы с цифрами), банковские блоги для предпринимателей (T-Bank, Точка). У всех — domain authority 10+ лет и живая аудитория с собственным опытом. Свежий AI-агрегатор без живой экспертной валидации в такой выдаче не нужен ни поисковому роботу, ни читателю. 84% отказов при единичных посетителях — прямое подтверждение: даже случайный читатель моментально считывает отсутствие «голоса из шкуры».

Это правило зафиксировано как обязательный фильтр для будущих продуктовых решений: в нишу, где не у нас собственной экспертизы и нет рядом доменного эксперта, который видит халтуру AI глазами специалиста, — не входим. Это правило сильнее любого положительного кейса, потому что предотвращает повтор ошибки.

2. Дистрибуция важнее генерации

Контент-движок работает технически безупречно — 27 страниц проиндексировано, Дзен-выпуски выходят ежедневно, фактчек блокирует выдуманные числа. Но без дистрибуции (линкбилдинга, упоминаний в тематических TG-каналах селлеров, партнёрств с агентствами) контент не находит аудиторию. На бюджет инфраструктуры был потрачен один человеко-месяц, на дистрибуцию — почти ноль. Соотношение усилий не соответствовало природе ниши.

3. Технические грабли в routing бьют сильнее, чем кажется

Бесконечный цикл редиректов был результатом одной относительной ссылки в шаблоне, которая накапливала суффикс при каждом обходе. Технически тривиальный баг, но он съел crawl-бюджет домена за критическую неделю первого обхода — и Я.Робот после этого снизил частоту визитов до минимума. Урок: канонизация URL и контроль routing — это SEO-критическая инфраструктура, не косметика. В следующие порталы я заношу проверку «нет цепочек 301-редиректов длиннее одного шага» как часть pre-launch чеклиста.

4. Российский AI-стек работает

GigaChat-Max и YandexGPT с обвязкой Yandex Search дают качество, достаточное для production-публикаций при правильной двухслойной критике. Это снимает опасение «без OpenAI/Claude в RU нельзя делать AI-продукты». Можно — при условии хорошей продуктовой обвязки.

5. Регуляторная сторона — посильна и должна делаться в начале

Подача в РКН по 152-ФЗ оказалась простой при предварительной подготовке knowledge base. Главный урок — делать это до запуска, а не после: пост-фактум приходится отвечать на запросы регулятора и параллельно тушить продуктовые пожары.

Унаследованные активы

Главная ценность завершённого эксперимента — не сам портал, а переиспользуемая инфраструктура и методология. Всё перечисленное ниже продолжает работать и применяется в следующих проектах HEADMAN:

АктивГде переиспользуется
Content Engine (Selector → Writer → Critic → Cover → Audit) Шаблон для контент-движков других порталов; методология фактчека
headman-scheduler Декларативный cron для всех порталов экосистемы
cover-renderer Универсальный generator обложек для всех Дзен-/SMM-каналов
Watch Tower Мониторинг ниш и скоринг доменов для портфельной стратегии порталов
headman-notifier (reverse-pull) Уведомления из-под санкционных блокировок для всей инфраструктуры
Auto-Review pipeline Шаблон Claude-headless страховки для AI-генерации в любом проекте
РКН-knowledge base Все будущие info-сайты HEADMAN с Метрикой
Stage/prod-pipeline (GitVerse → stage-deployer → Portainer) Все HEADMAN-проекты используют этот pattern
8-уровневая методология оркестрации контента Methodology asset для портфолио и будущих продуктов

Что бы сделал иначе

  1. Применил правило валидатора до запуска, а не вывел его из провала. Перед стартом — критический вопрос: «есть ли у меня личный опыт в нише или доступ к человеку, который видит халтуру AI?». Если ответ нет — не входить.
  2. Сразу заложил бюджет на дистрибуцию, не только на генерацию. Один месяц генерации без месяца на дистрибуцию = слитый месяц.
  3. Канонизацию URL как часть pre-launch чеклиста. Проверка отсутствия циклических 301/302 в routing — обязательная перед открытием сайта роботу.
  4. Меньшее количество страниц с более глубоким контентом, а не наоборот. 100 поверхностных гайдов проиграли бы и проиграли. Лучше 10 глубоких + личный опыт.

Зачем этот кейс в портфолио

Не «успешный продукт», а демонстрация полного набора компетенций product engineering на одном проекте:

Этот кейс ценен тем, что показывает зрелость, которой нет у успешных проектов: способность принять «не получилось», аккуратно демонтировать и забрать всё пригодное в следующую итерацию. Это часть профессионального подхода к product engineering, без которой долгие проекты невозможны.

← Все кейсы