Два месяца, 20 тысяч рублей и ноль платящих: как я в одиночку запустил AI-сервис для маркетплейсов

Сразу честно, чтобы не тратить ваше время: платящих пользователей у меня пока нет. Сервис я запустил пять дней назад, оформлен я как самозанятый, команды нет, инвестора нет, офиса нет — есть я, ноутбук и привычка садиться за код после основной работы часа на четыре.

Этот текст — не «как я поднял MRR за неделю». Таких я и сам начитался. Это про то, на что реально уходят деньги и нервы, когда ты тащишь продукт один, да ещё и в российских реалиях 2026 года, где половину привычных инструментов использовать уже нельзя. Если вы такой же одиночка и думаете «а потяну ли» — может, моя смета и мои грабли вам что-то подскажут.

Что я вообще построил

ESEO — сервис, который пишет SEO-карточки для Wildberries, Ozon и Яндекс.Маркета. Закидываешь товар, на выходе получаешь название, описание, буллеты и характеристики, заточенные под поиск конкретного маркетплейса, плюс картинку и инфографику. Внутри — пайплайн из нескольких AI-агентов: один анализирует конкурентов, другой собирает ключи, третий пишет, четвёртый критикует написанное, пятый переписывает, шестой выбирает лучший вариант. Звучит как оверинжиниринг, и отчасти так и есть, но один копирайтер-LLM без критика выдаёт ровно тот мусор, за который площадки режут карточки в выдаче.

Идея простая, рынок понятный. Сложным оказалось всё остальное.

Почему пришлось тащить вообще всё в Россию

Изначально я, как нормальный человек, поднял фронт на Vercel. Деплой в одну команду, превью на каждый коммит, красота. Прожил я так недолго.

Сервис работает с персональными данными пользователей — а это значит 152-ФЗ, а это значит, что данные россиян должны лежать на серверах в России. Vercel — это не Россия. Можно было городить костыли, но я посмотрел на это трезво: продукт, который с первого дня живёт на полулегальной схеме хранения ПДн, — это бомба замедленного действия, и взорвётся она ровно тогда, когда появятся первые деньги и первое внимание.

Поэтому Vercel поехал в мусорку, а всё переехало в Яндекс Облако. Виртуалка с PM2, Managed PostgreSQL, Object Storage под картинки, отдельная машина под сбор ошибок. Никакого Kubernetes — один человек не обслуживает кластер, один человек обслуживает один `pm2 restart`. И, кстати, очень вовремя я это сделал: с 1 мая Яндекс поднял цены на ряд сервисов, так что переезжать сейчас было бы ещё дороже.

Минус переезда — ты теряешь всю магию платформы и получаешь голый Linux, который надо настраивать руками. Плюс — ты наконец понимаешь, из чего вообще состоит твой прод, и спишь спокойно по части закона. Для продукта с ПДн второе важнее.

Стек, который собирает один человек

Коротко, чтобы технари не скучали: Next.js 16 в standalone-режиме, Prisma, PostgreSQL 17 (Managed), PM2, TypeScript в строгом режиме, деплой через GitHub Actions по пушу в `main`. Тексты генерят несколько провайдеров с фолбэком (если один лёг — запрос уходит к другому), картинки — в зависимости от тарифа.

Правило, которое я выработал и которое спасало меня раз десять: не переписывать то, что работает, ради красоты. Старый код мигрирует только когда я его всё равно трогаю по другой причине. Звучит банально, но в одиночку это разница между «запустился» и «полгода рефакторил архитектуру для трёх пользователей, которых нет».

А теперь грабли. Ради них вы и читаете.

Грабли №1: одна команда уронила мне фреймворк на семь мажорных версий назад

Прилетел `npm audit` с парой уязвимостей в зависимостях. Я, как приличный человек, набрал `npm audit fix --force`. Слово `force`, кстати, должно было меня насторожить, но было поздно и я хотел спать.

Утром я обнаружил, что Next.js 16 у меня превратился в Next.js 9. Не 15, не 14. Девять. Флаг `--force` радостно «починил» уязвимости тем, что снёс мне фреймворк на семь мажорных версий назад, заодно развалив половину типов и весь роутинг. Билд, естественно, не собирался.

Спасло только то, что я коммичу часто и мелко: откатился через `git revert`, выдохнул и пошёл закрывать те же уязвимости руками — точечной установкой нужных версий пакетов. С тех пор `--force` в этом проекте у меня в личном чёрном списке, рядом с `rm -rf` без двойной проверки пути.

Мораль для одиночек: ваш единственный коллега, который поймает такие штуки, — это `git`. Коммитьте чаще, чем кажется нужным.

Грабли №2: антибот-война, которую я проигрывал каждую ночь

Чтобы писать хорошие карточки, сервису надо видеть, что у конкурентов. То есть собирать данные с Ozon и Яндекс.Маркета. И вот тут началось самое весёлое.

WB отдаёт данные относительно по-человечески. А Ozon и ЯМ встречают тебя антиботом во весь рост. Поднял отдельную виртуалку с headless-браузером — площадки её спалили моментально: датацентровый IP Яндекс Облака для них как красная тряпка, скорость запросов палится, фингерпринт браузера палится. На ЯМ я ловил издевательский вариант, когда запрос как бы успешный, но вместо товара мне прилетала страница-заглушка с заголовком «Яндекс». Сидишь, смотришь в `success: true` и не понимаешь, почему данных нет.

Решил частью платными API для данных по конкурентам, частью своим скрапером — каждый маркетплейс получил свой адаптер. И там, где думал, что вот теперь заработает, меня ждал отдельный сорт боли: платный API ответил по HTTPS, а Node наотрез отказался ему верить, потому что его SSL-сертификат от центра, которого нет в стандартном бандле Ubuntu. Формально сертификат валидный. Практически — сервер его «не существует».

Закончилось это тем, что я локально, только для одного конкретного домена, отключил проверку сертификата через отдельный HTTP-агент. Не горжусь. Работает. В одиночку ты быстро учишься отличать «правильно» от «поехали дальше», и второе чаще побеждает.

Грабли №3: «А вот это мы тебе не дадим»

Мелкая, но показательная. Я хотел, чтобы посты в сообщество VK публиковались автоматически вместе с превью-картинкой. Авторизация через VK ID, всё по документации. Дошёл до загрузки фото — и упёрся в то, что у VK ID просто нет нужного разрешения на работу с фотографиями. Не «я неправильно запросил», а «платформа в принципе через этот механизм такое не отдаёт».

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

Сколько это всё стоило

Самое интересное. Цифры реальные, из личных кабинетов, без округлений в красивую сторону.

Разовое / стартовое:

Домен eseo.su — 199 ₽
Домен eseo.site (про запас) — 249 ₽
Почтовый хостинг (забросил) — 2 019 ₽
Email-рассылки UniSender, год — 8 064 ₽

Да, две тысячи на почтовый хостинг — это деньги, выкинутые на эксперимент, который я через неделю заменил на нормальную рассылку. Так тоже бывает.

Ежемесячное (то, что капает прямо сейчас):

Яндекс Облако (виртуалки + БД + хранилище) — ~8 400 ₽/мес
Данные по конкурентам (API) — ~1 000 ₽/мес
AI-генерация (тексты + картинки) — пока копейки, нагрузки нет

Облако — главная статья расхода. По графику видно, как оно росло день за днём с примерно сотни рублей в сутки до почти четырёхсот, по мере того как я докручивал инфраструктуру.

Итого на сегодня из кармана ушло почти 20 тысяч рублей. И тут важная неприятная деталь: отдельная машина под скрапер сейчас крутится на гранте, который закончится в середине июля. После этого мой ежемесячный счёт почти удвоится. То есть пока я плачу около десяти тысяч в месяц за то, чем пользуются ноль платящих людей. Таймер тикает, и это, наверное, лучший мотиватор заняться наконец маркетингом.

Где я сейчас, честно

Запустился пять дней назад. Сайт открыт, оплата подключена и проверена живым платежом, регистрации потихоньку появляются. В деньги они пока не превратились — ни одного платного пользователя. Ноль.

Меня это не пугает ровно настолько, насколько и должно: продукт работает, юридически он чистый, инфраструктура не падает. Чего нет — так это людей, которые про него знают. Эту статью я пишу в том числе поэтому. Пока я полировал шестого AI-агента и воевал с SSL-сертификатами, я почти не занимался тем, ради чего всё затевалось — чтобы сервисом кто-то пользовался.

Что я понял, пока тащил это один

Несколько вещей, которые стоили мне времени и за которые не жалко расплатиться чужим вниманием:

Закон — это не то, что прикручивают потом. Переезд в Россию ради 152-ФЗ был самым нудным и самым правильным решением за всё время. Бомбу обезвредил до того, как она тикнула.

`git commit` — твой единственный страховочный трос, когда работаешь без коллег. История с фреймворком, упавшим на семь версий назад, могла стоить мне дня работы, а стоила одной команды отката.

«Работает» бьёт «правильно», когда ты один и горит. Половина моих решений в скрапере — это костыли, которыми я не горжусь. Зато сервис собирает данные, а я не утонул в перфекционизме.

И главное, до чего я только сейчас доезжаю: построить продукт в одиночку — сложно, но реально. А вот сделать так, чтобы о нём узнали, — отдельная работа, которой я почти не занимался. Видимо, начинаю прямо с этого текста.

---

Если среди читателей есть селлеры с WB, Ozon или ЯМ — буду благодарен, если потыкаете и скажете, где больно: eseo.su .

На старте честный отзыв от живого человека дороже любого платящего.

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

22