Приложение для Авито, которое умерло бы на второй день после запуска
Клиентский проект, первый из двух треков: аудит приложения, собранного нейросетью, и доведение его до релиза. Второй трек, наставничество по вайб-кодингу, вырос из этой работы позже - о нём отдельно.
Коротко
- Владелец сервиса для работы с Авито месяц собирал приложение сам, вайб-кодингом, до этого пройдя курс по нему. Получилось 54 страницы, 23 серверные функции и почти два десятка обращений к нейросети. До запуска оно не дошло: три недели приложение стояло, и владелец не мог назвать словами, что именно мешает.
- Аудит 14 апреля 2026 нашёл причину, которой не видно на экране: все обращения к нейросети шли через шлюз конструктора с потолком расходов в один доллар. По расчёту ниже одного активного пользователя хватало, чтобы выжечь этот доллар за месяц. Приложение встало бы на второй день после запуска.
- За восемь дней приложение перевели на промышленную инфраструктуру, 49 разрозненных правок базы свели в одну, собрали единый слой работы с нейросетью и поставили учёт расхода с проверкой лимита до обращения к провайдеру. Перерасход стал физически невозможен.
- Тяжёлые пользовательские сценарии - ассистент, прогнозы, анализ конкурентов - перевели с модели за 18 долларов за миллион выходных токенов на модель за 3 доллара. Без потери качества: новая модель по независимому индексу интеллекта умнее прежней и при этом быстрее.
Кто такой Влад и что он собрал
Влад - авитолог: ведёт объявления на Авито для чужих бизнесов. Одновременно у него 12-14 клиентов, на каждого уходит 10-12 часов в месяц, и 5-6 часов из них съедают аналитика и загрузка. Приложение он затевал сначала для себя, чтобы вернуть эти вечера, но с самого начала с прицелом выпустить его для других авитологов: боль у всех одна, и продукт под неё напрашивался.
Что это за приложение: мини-приложение в телеграме плюс веб-версия и админка. Нейросеть пишет объявления и заголовки, показывает аналитику по кабинетам, отвечает покупателям в чатах, оценивает входящие заявки по горячести, расшифровывает голосовые, анализирует конкурентов, строит прогнозы по кабинету и планирует неделю. Название я тут не называю: продукт Владов, и внимание к его бренду с моего сайта ему ни к чему.
Собирал он всё это сам, вайб-кодингом. То есть описывал желаемое обычными словами, а код за него писала нейросеть внутри конструктора. И собирал не вслепую: до этого он специально прошёл курс по вайб-кодингу. То есть перед нами не человек, который ткнул наугад, а человек, который вложился в обучение, прошёл его до конца и добросовестно применил. Итог первого захода он сформулировал сам:
"Lovable + Gemini - месяц работы, приложение так и не запустилось"
Это важная деталь, и я на ней настаиваю. Для человека, который не пишет код, Влад прошёл огромный путь: на экране был живой продукт с сильными местами, год назад на такое понадобилась бы команда. Проблема была не в нём и не в том, что он мало учился. Проблема в природе инструмента: конструктор отлично делает видимость готового продукта и почти никогда - основу, которая выдержит живых людей.
Три недели, которые нельзя было назвать словами
Мы познакомились на мероприятии eLama, там он показал приложение. После этого он ещё три недели не давал посмотреть код.
Не потому что не доверял. Потому что не мог сформулировать, что именно не так. Приложение открывалось, кнопки нажимались, демо показать было можно. Стена была, но она не имела названия, а обращаться к кому-то с формулировкой "оно как-то не запускается" неловко.
Если вы сейчас в этой точке - вы не одиноки, там стоит очередь. И это ровно та точка, в которой аудит стоит своих денег: он превращает ощущение стены в список из конкретных пунктов с приоритетами.
Что показал аудит
Кода я в тот момент не трогал. 14 апреля 2026 сделал аудит по порядку, которого держусь всегда: снять базовую картину, потом проверить каждое громкое утверждение доказательством из самого проекта, потом отдельно оценить готовность к запуску, и только в конце писать выводы. Каждый пункт помечал степенью достоверности: подтверждено, высокая вероятность, гипотеза. На выходе у Влада было четыре документа: короткое резюме, полный аудит, план лечения и пакет документации.
Вердикт приведу так, как он был написан, а потом переведу:
"реальный продукт с широкой поверхностью, а не пустой прототип… Главная проблема не в отсутствии функций, а в том, что инженерная глубина отстаёт от ширины поверхности. Reproducible install сейчас сломан, документация не соответствует реальной сложности системы, тестовая база почти отсутствует… В текущем состоянии это demoable и уже частично ценная система, но не clean launch-ready продукт."
Теперь то же самое по-человечески и в цифрах.
Ширина обогнала глубину
За месяц в конструкторе получилось 54 страницы, 23 серверные функции и 49 правок базы данных. Это не признак зрелости, это признак разрастания: функции добавлялись быстрее, чем под ними успевала появиться система, которая всё держит.
Три приложения в одном
Задумывалось одно приложение с тремя интерфейсами - телеграм, веб и админка. По факту они жили по разным правилам: кто такой пользователь и как он доказывает, что это он, в каждом решалось по-своему. Пока у трёх входов три разных представления о пользователе, правка в одном месте тихо ломает другое.
Собрать проект заново было нельзя
Чистая установка падала сразу: в проекте лежали три файла блокировки зависимостей от двух разных пакетных менеджеров, и они противоречили друг другу.
Расшифрую, потому что звучит технически, а означает простое. Файл блокировки - это точный список версий всех библиотек проекта. По нему проект собирается одинаково на любой машине. Когда таких файлов три и они спорят, собрать второй раз ровно то же приложение нельзя: получится похожее, но другое. Значит, нельзя ни надёжно развернуть, ни откатиться, если что-то пошло не так.
Проверок практически не было
Один тривиальный тест на весь проект. 441 замечание от линтера - инструмента, который ловит очевидные ошибки до запуска. Практический смысл: каждая правка проверяется руками и вслепую, а о поломке узнаёшь, когда на неё наткнётся живой человек.
Нейросети много, управления ей нет
Почти два десятка обращений к нейросети - и ни одного общего механизма, который бы ими управлял. Вердикт аудита дословно: AI-функций много, управляемой AI-системы нет.
По шкале аудита: готовность к выводу в свет 4 из 10, безопасность 3 из 10, тестируемость 2 из 10.
Одной фразой: широко, но некрепко.
План лечения я разложил по горизонтам: что чинить срочно, что за одну-две недели, что за один-два месяца, что оставить на потом. Человеку с таким диагнозом на руках нужен не приговор, а очередь.
Настоящий блокер, которого не видно на экране
Всё перечисленное видно, если открыть проект. А главная причина, по которой приложение нельзя было запускать, не отображалась нигде.
Все обращения к нейросети шли через шлюз конструктора - платформы, где приложение было собрано. Значит, доступ к моделям, квоты и поведение под нагрузкой находились вне границы проекта. А платформа автоматически вешает на это потолок расходов в один доллар. На бесплатном тарифе его нельзя ни поднять, ни пополнить: чтобы получить возможность доложить денег, нужно купить платную подписку платформы.
Сложите с тем, что учёт трат стоял только в трёх функциях из тринадцати и считался по грубой формуле, а не по реально отработавшей модели. Никто не видел, сколько какая функция жжёт. Продукт летел вслепую.
Дальше простая арифметика, которую я разворачиваю ниже: одного активного пользователя достаточно, чтобы выжечь этот доллар за месяц. Открой Влад доступ живым людям - нейросеть перестала бы отвечать на первый-второй день, а вместе с ней и половина продукта: объявления не генерируются, чаты не разбираются, аналитика не считается. Среди этих людей были бы его собственные клиенты. И сделать в тот момент нельзя ничего: потолок не поднимается, расход не виден, чинить нечем.
Выбор был из двух тупиков: не запускать вовсе или запустить и смотреть, как продукт гаснет на второй день.
Это не та проблема, которую видит человек, попросивший "задеплой и проверь, работает ли". Она видна, только если залезть внутрь и посчитать экономику приложения под нагрузкой.
"Нахрен всё, давай с нуля"
Картину я показывал ему на встрече, вечером 21 апреля. И это был момент, который я хорошо помню: Влад заметно расстроился. Месяц его работы у него на глазах превращался в что-то, что проще выбросить. Он и сказал прямо, вслух, не подбирая формулировок:
"нахрен всё, давай Avito с нуля"
Это нормальная человеческая реакция, и тут важно понимать, что рынок на ней зарабатывает: "надо всё переписывать" звучит солидно, снимает с подрядчика ответственность за чужой код и позволяет выставить чек побольше.
Я предложил обратное, и не из благородства, а потому что так правильнее для его бизнеса. Переписать с нуля - это ещё один отложенный релиз: месяцы и бюджет до того, как ты вообще узнаешь, нужен ли продукт кому-нибудь. Строить идеальную архитектуру под непроверенную идею - самый дорогой способ выяснить, что идея не пошла.
Логика была такая: сохраняем построенное, точечно вытаскиваем из ловушки, выводим в свет, проверяем спрос на живых людях. Подтвердится - тогда спокойно переписываем на основательной архитектуре, уже зная, что вкладываемся не впустую.
Влад в это сам не верил: был уверен, что либо идеально с нуля, либо никак. Когда понял, что его труд не идёт под нож, сказал, что у него "сердце креатора было довольно".
Восемь дней: что именно сделали
От аудита до закрытия трека прошло восемь дней, с 14 по 22 апреля.
Ушли с конструктора на промышленную инфраструктуру. Приложение переехало на контейнеры на российском хостинге. Контейнер - это способ упаковать приложение вместе со всем, что ему нужно, чтобы оно поднималось одной командой и всегда одинаково. На практике это значит предсказуемые развёртывания, устойчивость к перезапускам и возможность добавить мощности, когда пользователей станет больше, - вместо жизни на честном слове чужой платформы.
Свели 49 правок базы в одну. История изменений базы - это список, по которому её можно построить с нуля. У Влада их накопилось 49, часть противоречила друг другу. Свели в одну проверенную точку и подтвердили, что база разворачивается чисто.
Закрыли опасные места. В конструкторе удобно временно отключить проверку, кто ты такой, чтобы быстрее щёлкать по своему приложению. Эти времянки остались в коде - убрали. Заодно вынесли из кода зашитый адрес телеграм-приложения, привязанный к домену конструктора: без этого переезд был бы неполным.
Собрали единый слой работы с нейросетью. Раньше модели и логика расхода были зашиты в разных местах по всему коду. Стало: один слой, где модель выбирается по логическому имени - дешёвая, обычная, тяжёлая, голосовая, - а какая именно модель за этим именем стоит, задаётся настройкой снаружи. Поменять модель теперь - это правка одной строки, а не раскопки по проекту. Это важнее, чем кажется: рынок моделей обновляется каждые несколько месяцев, и продукт, который умеет переезжать за минуту, принципиально дешевле в содержании.
Поставили учёт расхода и два уровня лимитов. Учёт стал во всех обращениях к нейросети: по пользователю, по подключённому кабинету Авито, по функции и по модели, которая фактически отработала, - и в деньгах, а не только в токенах. Поверх стоит потолок на пользователя и общий потолок на ключ. Ключевое: проверка стоит перед обращением к провайдеру, а не после. Перерасход не обнаруживается потом по счёту, он физически не может случиться. И отдельная деталь ради людей: когда лимит исчерпан, отключается только нейросеть, остальной продукт продолжает работать.
Гардрейлы, кстати, попросил сам Влад, уже по ходу. Я не стал брать за это отдельные деньги: вместо расширения сметы мы обменяли их на планировавшееся урезание функционала. Объём работ не вырос, цена осталась прежней, а приложение получило защиту, которой у него не было.
Экономика моделей: дешевле и при этом умнее
Чтобы сделать это осмысленно, надо знать рынок моделей: какие есть, чем хороши, сколько стоят и где какая избыточна. Я их использую каждый день, поэтому разложил нагрузку Влада под его реальные задачи, а не по инерции.
Что было: на самой дорогой reasoning-модели сидели самые частые пользовательские сценарии - ассистент, прогнозы по кабинету, анализ конкурентов. Это худшая комбинация для экономики, дорого умножить на часто.
Что стало, по ставкам из конфигурации, которая работает в проде:
- Тяжёлые сценарии: было 18 долларов за миллион выходных токенов, стало 3. По входным - было 2,25, стало 0,5.
- Основной поток: было 2,5 за миллион выходных, стало 1,5.
- Голосовые сценарии: по входным токенам было 1 доллар, стало 0,5.
- Генерация изображений - до трёх картинок за вызов, самая дорогая функция в приложении, - на запуск выключена совсем.
И, что важнее цены, без потери качества. Тут напрашивается подозрение в классическом размене "сэкономили, но срезали мозги". Здесь наоборот: новая модель основного потока по независимому индексу интеллекта умнее прежней на 62%, при этом дешевле на 40% по выходным токенам и быстрее на 64%. Редкий случай, когда получаешь всё три сразу.
По тяжёлым задачам логика тоньше. Премиальная reasoning-модель мощная, но под предметные, очерченные задачи она избыточна. Я не срезал качество, я убрал избыточность.
Аналогия для не-технаря: ты не покупаешь Lamborghini, чтобы доехать до соседнего квартала по ямам. И не собираешь консилиум профессоров, чтобы решить, что заказать на ужин. Под задачу нужен подходящий инструмент, а не самый дорогой.
Что это значит в деньгах
Посчитаем на одном активном пользователе за месяц. Профиль нагрузки беру типовой для авитолога, который реально пользуется приложением: 30 сгенерированных объявлений с заголовками, 200 разобранных входящих сообщений, 20 голосовых, 15 сессий с ассистентом, по 4 анализа конкурентов и прогноза по кабинету.
Разбор входящих сообщений идёт на самой дешёвой модели, её мы не меняли, поэтому в сравнение она не входит - считаем только то, что реально переехало.
Как было. Ассистент, прогнозы и анализ конкурентов - это примерно 24 тысячи выходных токенов и 180 тысяч входных на премиальной модели: около 84 центов. Генерация объявлений на обычной модели - около 6 центов. Голосовые - около 6 центов. Итого примерно 96 центов на одного активного пользователя в месяц.
Теперь наложите на это потолок платформы в один доллар. Один пользователь. Один. За месяц он выжигал весь лимит приложения целиком - и это без генерации изображений, самой дорогой функции, которая тогда была включена. С ней счёт улетал за неделю. Вот почему приложение не пережило бы вторых суток с живыми людьми внутри, и вот что стоило за фразой "оно как-то не запускается".
Как стало. Тот же профиль на новых моделях: тяжёлые сценарии - около 16 центов, объявления - около 4, голос - около 3. Итого примерно 23 цента на пользователя в месяц. Вчетверо дешевле при том, что модель основного потока стала умнее и быстрее.
Разворачиваем на объём. Сто активных пользователей - это около 96 долларов в месяц в старой конфигурации против примерно 23 в новой. Тысяча пользователей - около 960 против 230. Разница в 730 долларов ежемесячно на этом масштабе и есть та величина, которая решает, сходится экономика продукта или нет.
Профиль можно поменять на свой и пересчитать - порядок величин не изменится.
Что получилось
Приложение работает в проде. Оно развёрнуто на контейнерах, база собирается из одной проверенной точки, серверные функции выкачены, целевые проверки по слою нейросети проходят. Влад получил то, ради чего всё затевалось: возможность выйти к живым людям и узнать, нужен ли продукт рынку, вместо того чтобы смотреть, как он гаснет на второй день.
А главное сказал он сам:
"Сам бы я забил. Сделали бы недоделку - и никто бы так глубоко в приложение не копал."
И про то, чем работа с инженером отличается от работы с исполнителем:
"Прошаренный человек, который понимает всю кухню и может сказать, почему так надо делать. Не потому что он так чувствует, а по факту - потому что знает, как должно быть."
У этой истории было продолжение: после релиза Влад сам попросился в обучение, и мы прошли отдельную программу по вайб-кодингу - четыре блока, за которые он собрал и вывел в прод первый блок своего следующего продукта уже без меня. Но это другой трек и другой разговор.
Что из этого следует
Конструктор не обманул Влада. Он честно сделал то, что умеет: быстро дал широкую поверхность из работающих на вид функций. Дальше начинается то, чего он не умеет, - глубина. Собрать заново предсказуемым образом. Поймать поломку до того, как на неё наткнётся живой человек. Знать, во что обходится каждое нажатие кнопки, и уметь поставить этому потолок. Это не более модный инструмент, это просто другая работа.
Четыре вещи, которые стоит проверить у себя, если вы собирали продукт в конструкторе:
- Провайдер нейросети должен быть внутри границы вашего проекта. Пока модели, квоты и лимиты принадлежат платформе, где собрано, у продукта нет собственной экономики.
- Учёт расхода нужен до вызова, а не по счёту в конце месяца. Лимит, который проверяется заранее, - это устройство. Лимит, о котором вы узнаёте из счёта, - это новость.
- Модель подбирается под задачу. Премиальная reasoning-модель на самом частом вызове - это дорого умножить на часто.
- Не переписывайте с нуля, пока не проверили спрос. Сначала дёшево выйти в свет и узнать, нужен ли продукт. Переписывать - потом и только если рынок подтвердил.
Если у вас лежит такое приложение, оно скорее всего не мусор. Ему не хватает пары недель скучных вещей и человека, который скажет, каких именно.