AI Vibe Craft
← Назад к AI Vibe News

Редакция 6 июля 2026 г.

Разборы

Локальный inference отгружен — теперь его должны найти: кластер страниц вокруг AI background remover

Локальный inference отгружен — теперь его должны найти: кластер страниц вокруг AI background remover.

Соло-разработчик Convertify на неделе 16 выкатил on-device удаление фона на Rust — ort, ISNet, libvips, без Python в проде. На неделе 17 он сознательно не трогал inference-код и занялся тем, что для одного человека с ИИ-фичей в продукте часто важнее модели: превратить рабочий инструмент в страницы, которые поисковики связывают между собой. В отчёте автора это сформулировано жёстко — «shipping the feature is the easy half».

Неделя 16: нейросеть в продукте без Python-обвязки

Фича недели 16 — AI background remover. Стек зафиксирован в серии building in public: Rust-native рантайм, ort для inference, модель ISNet, обработка изображений через libvips. Python в цепочке нет — для соло-разработчика, который тащит нейросетевую capability в веб-инструмент сам, это практичный паттерн: меньше лишних звеньев в деплое, inference остаётся локальным относительно продукта.

Демо живёт на convertifyapp.net — в конце поста автор даёт ссылку на /remove-background. Сама capability уже работает; неделя 17 начинается с признания, что «скучная, но высокорычажная» часть только впереди.

Неделя 17: hub-and-spoke вокруг одной AI-фичи

Модель hub-and-spoke строится вокруг уже отгруженного background remover. Hub — общая страница инструмента (/remove-background в нарративе). Два spoke под конкретные use-case:

  • /remove-signature-background — удаление фона у подписи;
  • /amazon-product-photo-background — подготовка фото товара для Amazon.

Итого три live-страницы в кластере. План на неделю предполагал один–два spoke; сделано два — эта часть в отчёте отмечена как удачная. Код нового engine на неделе не писался: весь фокус на том, чтобы одна уже отгруженная AI-фича стала набором страниц, которые могут ранжироваться.

«Не про написание ещё кода движка» — про превращение одной рабочей capability в страницы, которые могут ранжироваться, и про связку, по которой их находят поисковики.

Почему страницы AI background remover стали «сиротами»

До правки spokes ссылались на hub в body, но hub не ссылался обратно на spokes. Ссылки на инструменты сайта жили во фронтенд-константе IMAGE_TOOLS — compress, resize, crop, images-to-pdf — без background remover и его веток. Новые страницы попали в sitemap, но без внутренних ссылок, передающих сигнал. Для молодого домена, который ещё набирает доверие Google, такие URL индексируются медленно и ранжируются ещё медленнее. Параллельно на сайте около 180 converter-страниц, которые «не знали» о новом кластере.

Константа кластера и перелинковка вокруг inference-инструмента

Решение — единый источник правды BACKGROUND_TOOLS:

export const BACKGROUND_TOOLS = [
  { label: "Background Remover", href: "/background-remover" },
  { label: "Signature Background", href: "/remove-signature-background" },
  { label: "Amazon Product Photo", href: "/amazon-product-photo-background" },
] as const;

В тексте hub описан как /remove-background, в константе hub — /background-remover; демо-ссылка в посте ведёт на …/remove-background. Оба варианта зафиксированы в источнике — без выбора «канонического» URL.

Серверный компонент BackgroundTools рендерит секцию «Background Removal» со ссылками из константы. Prop exclude убирает текущую страницу из списка — страница не ссылается сама на себя. После внедрения hub ссылается на оба spoke; каждый spoke — на hub и «соседа»; блок показывается только на страницах background-removal кластера.

Детекция типа страницы упростилась: вместо трёх повторяющихся проверок slug'ов — одна строка:

const isBgRemoval = BACKGROUND_TOOLS.some((tool) => tool.href === `/${mode}`);

Тот же список добавлен колонкой в footer — ссылки на кластер есть на каждой странице сайта, не только внутри hub-and-spoke. Правило масштабирования: четвёртый spoke — одна строка в BACKGROUND_TOOLS, автоматическая перекрёстная перелинковка везде.

Баг доставки контента spokes — не в модели, но в проде

Spokes хранятся как structured content в БД; body секций рендерится через dangerouslySetInnerHTML внутри <p>. На одном spoke чеклист «before you upload» был оформлен как <ul> внутри <p> — hydration mismatch в production: браузер автозакрывает <p> перед списком, DOM расходится с server HTML.

Фикс: только inline-контент в body секции; чеклист — строки через <br>. Добавлен build-time guard: сканирует bodies секций на block-level теги (ul, ol, li, div, table, headings) и падает сборку, если находит — чтобы класс бага не ушёл в прод снова.

Для соло-цикла вокруг ИИ-фичи это напоминание: spokes вокруг inference — тоже код доставки. SEO-кластер не спасёт, если production-рендер ломается на CMS-разметке.

Честные цифры: inference, sandbox и citations

Метрики из раздела «The honest numbers»:

Показатель Значение
Live background-страницы 3 (hub + 2 spokes)
Бенчмарк на VPS (4 ядра) p50 ~2,4 с, p95 ~9,6 с на изображение
AI citations (Microsoft Copilot) 75, в основном по HEIC-контенту
Google домен «всё ещё в sandbox»; impressions есть, средняя позиция ~mid-40s, клики — «trickle»
Bing те же страницы на первой странице выдачи

Расхождение Google и Bing автор трактует как норму для молодого домена; стратегия — «waiting it out while the content compounds», не «fighting» sandbox. Локальный inference на VPS отрабатывает за секунды, но findability отстаёт — типичная картина, когда capability уже в проде, а органика ещё не догнала.

Планы недели 18: медленные spokes вокруг той же AI-фичи

Дальше — ещё spokes, но медленно: Google spam updates наказывают тонкие template-swap страницы. В посте зафиксировано правило: одна–две хорошие страницы с уникальными данными, не десять «оболочек». В списке — дополнительные use-case spokes, страница под низкоконкурентный запрос webp remove background из keyword data, продолжение «медленного» наращивания backlinks для domain authority — «real ceiling right now».

Вывод для соло-разработчика с on-device inference: отгрузить модель — половина пути; вторая половина — честно связанные страницы, footer как глобальный слой ссылок и терпение к sandbox, пока контент накапливается.

Источники

  • Serhii Kalyna, «Building in public, week 17: turning one feature into a page cluster (and the internal-linking layer nobody sees)» — Dev.to (дата доступа: 2026-07-05)
  • Convertify, демо background remover — https://convertifyapp.net/remove-background (дата доступа: 2026-07-05)