Vibe Coding сломал мое приложение: как починить код, который написала нейросеть
Ваш MVP на базе ИИ отлично выглядел на демо. Теперь он падает в продакшене, утекают данные, и никто не может его поддерживать. Системный план диагностики, спасения и стабилизации вайб-кодинг проектов — от команды, которая разгребает такие кодовые базы каждую неделю.

Если вайб-кодинг сломал ваше приложение — вы не одиноки, и ситуация поправима.
Vibe coding — создание софта через промпты в ИИ-инструментах вроде Cursor, Copilot или ChatGPT вместо ручного написания кода — даёт впечатляющие прототипы за считанные часы. Но эти прототипы регулярно рассыпаются в боевых условиях: дыры в безопасности, отсутствие обработки ошибок, нетестируемый спагетти-код и деплои, которые молча падают.
Мы знаем это не из чужих статей. Из последних 40+ проектов, которые пришли к нам на починку ИИ-кода с начала 2025 года, больше половины были целиком или частично сгенерированы нейросетью. Паттерны сбоев настолько повторяемы, что мы можем предсказать проблемы по первому git log: десять коммитов с сообщением «fix», отсутствие веток, прямые пуши в main — и мы уже знаем, что тестов нет, а деплой ручной.
Решение требует системного аудита, точечного рефакторинга и, во многих случаях, профессионального вмешательства — того, что мы называем code rescue.
Почему вайб-кодинг ломает приложения — раз за разом
Термин «vibe coding» ввёл Андрей Карпатый в начале 2025 года: вы описываете, что хотите, на обычном языке, ИИ-модель генерирует код, а вы принимаете результат по ощущениям — «вроде работает» — вместо того чтобы проверять каждую строчку.
Подход мгновенно демократизировал создание софта. Нетехнические основатели, дизайнеры и продакт-менеджеры вдруг смогли собирать работающие MVP за часы. И в этом нет ничего плохого — проблема начинается дальше.
«Работает на демо» и «готово к продакшену» — совершенно разные инженерные стандарты. ИИ-модели оптимизируют под правдоподобие: генерируют код, который выглядит корректным и запускается без немедленных ошибок. Они не оптимизируют под поддерживаемость, безопасность или производительность под нагрузкой.
Но дело не в том, что ИИ «плохой инструмент». ИИ — отличный ускоритель. Проблема в том, что ускоритель без инженерной дисциплины не создаёт софт — он ускоряет накопление технического долга. Каждый промпт, принятый без ревью, — это архитектурное решение, за которое никто не взял ответственность. Умножьте на сотни промптов — и вы получите AI-generated кодовую базу, где каждый модуль принимал решения локально, а за целое не отвечал никто.
7 самых частых причин поломки ИИ-кода
Проанализировав десятки вайб-кодинг проектов, пришедших к нам на спасение, мы выявили чёткие паттерны. Это не единичные случаи — они встречаются практически в каждом AI-generated приложении, которое ни разу не смотрел опытный разработчик.
1. Уязвимости безопасности на виду
ИИ не думает про атакующих. Он пишет happy path. Результат — захардкоженные API-ключи во фронтенде, отсутствующая валидация ввода, SQL-инъекции и аутентификация, которую можно обойти модифицированным запросом.
Но самые опасные уязвимости — не те, что видны сразу. Вот реальный паттерн, который мы находим в каждом втором ИИ-сгенерированном SaaS с оплатой:
// ❌ ИИ-сгенерированный код обработки платежа
app.post('/api/upgrade', async (req, res) => {
const { planId } = req.body;
const user = await User.findById(req.userId);
user.plan = planId; // Меняем план
await user.save(); // Сохраняем
await stripe.charges.create({ // Снимаем оплату
amount: getPlanPrice(planId),
customer: user.stripeId
});
res.json({ success: true });
});На первый взгляд нормально. Но если Stripe-вызов упадёт — пользователь уже получил премиум-план, а деньги не списались. Нет транзакции, нет отката. В тестовом окружении Stripe всегда возвращает 200, поэтому баг не проявляется до продакшена.
// ✅ Правильный порядок: сначала деньги, потом апгрейд
app.post('/api/upgrade', async (req, res) => {
const { planId } = req.body;
const user = await User.findById(req.userId);
const charge = await stripe.charges.create({
amount: getPlanPrice(planId),
customer: user.stripeId
});
// Апгрейд только если оплата прошла
user.plan = planId;
user.lastChargeId = charge.id;
await user.save();
res.json({ success: true });
});Реальный случай из нашей практики: SaaS-продукт, целиком сгенерированный в Cursor — Stripe-интеграция жила в клиентском JavaScript, включая секретный ключ. Любой с DevTools в браузере мог его увидеть. Мы нашли ключ за 40 секунд после открытия проекта.
2. Ноль покрытия тестами
ИИ-инструменты почти никогда не генерируют тесты, если не попросить явно, и даже тогда тесты получаются поверхностными — проверяют, что функция не падает, но не проверяют граничные случаи и бизнес-логику. Типичный вайб-кодинг проект: ровно 0% покрытия. Каждое изменение — лотерея. Нельзя рефакторить, обновлять зависимости или добавлять фичи без риска тихой поломки в другом конце приложения.
3. Спагетти-архитектура и дублирование логики
LLM генерирует код по одному промпту за раз. Каждый ответ локально связный, но глобально хаотичный.
Вот что мы видим типично — и вот как это чинится:
// ❌ До рефакторинга: три компонента, три копии одного вызова
// Dashboard.jsx
const userData = await fetch('/api/user').then(r => r.json());
// Profile.jsx
const user = await fetch('/api/user').then(r => r.json()).catch(() => null);
// Settings.jsx
const currentUser = await fetch('/api/user').then(res => res.json());Три компонента, три копии одного вызова, три разных способа обработки ошибок. Когда API меняется — ломаются все три, и чинить нужно в трёх местах. А через месяц их будет шесть.
// ✅ После рефакторинга: единый сервис с обработкой ошибок
// services/userService.js
class UserService {
#cache = null;
#pending = null;
async getCurrentUser() {
if (this.#cache) return this.#cache;
if (this.#pending) return this.#pending;
this.#pending = fetch('/api/user')
.then(r => {
if (!r.ok) throw new Error(`User API: ${r.status}`);
return r.json();
})
.then(data => { this.#cache = data; return data; })
.finally(() => { this.#pending = null; });
return this.#pending;
}
invalidate() { this.#cache = null; }
}
export const userService = new UserService();Одна точка входа, единая обработка ошибок, кеширование, защита от параллельных запросов. Любое изменение API — правка в одном месте.
4. Дыры в деплое и инфраструктуре
ИИ собрал ваше приложение для localhost. Оно работает на вашем компьютере. Но нет Dockerfile, нет CI/CD-пайплайна, нет управления переменными окружения, нет staging-среды. Первая попытка деплоя обнажает десятки проблем конфигурации — от отсутствующих переменных окружения до жёстко прописанных localhost:3000 в URL-ах API.
Неожиданная деталь: по нашим наблюдениям, примерно 40% времени при спасении AI-проектов уходит не на код, а на инфраструктуру. Настройка нормального CI/CD, staging-среды и управления секретами часто занимает больше времени, чем исправление бизнес-логики.
5. Схема базы данных, которая не масштабируется
ИИ-генерированные схемы БД работают для 10 пользователей, но ложатся при 1 000. Нет индексов, нет стратегии миграций, нет валидации данных на уровне схемы. Мы видели проект, где вся пользовательская аналитика хранилась как JSON-блобы в текстовых столбцах SQLite — потому что так было быстрее получить «рабочий» ответ от ИИ.
6. Хаос зависимостей
ИИ-модели тянут любую библиотеку, которая кажется подходящей в момент промпта. Результат: конфликтующие версии зависимостей, заброшенные пакеты с известными уязвимостями, три разных HTTP-клиента (axios, node-fetch и нативный fetch) в одном проекте, и package.json на 80+ зависимостей, половина из которых не используется.
7. Нет обработки ошибок и логирования
Когда в продакшене что-то идёт не так — а так бывает всегда — вайб-кодинг приложения не дают ничего. Нет структурированного логирования, нет error boundaries, нет мониторинга. Приложение падает — пользователь видит белый экран. Вы видите белый экран. Дебаг означает чтение тысяч строк ИИ-кода без комментариев и без понятных точек входа.
Кейс: SaaS-платформа, 14 000 строк, 3 недели до стабильности
Анонимный кейс из нашей практики — типичный по структуре проблем.
Что пришло: B2B SaaS на React + Node.js + PostgreSQL, сгенерированный в Cursor за ~3 недели. 14 000 строк кода. Stripe-интеграция, пользовательские роли, дашборд с аналитикой. Работало на демо. В продакшене — 500-е ошибки при параллельных запросах, утечка Stripe-ключей на фронт, ни одного теста.
Что мы нашли при аудите:
- 11 уязвимостей безопасности, из них 3 критических (включая Stripe secret key в клиентском бандле)
- Один и тот же запрос к БД дублировался в 7 местах
- Нулевое покрытие тестами
- Отсутствие миграций — схема менялась прямыми
ALTER TABLEв продакшене - 23 npm-пакета с известными уязвимостями
Что мы сделали:
- День 1–2: закрыли критические уязвимости, ротировали все скомпрометированные ключи
- День 3–5: настроили Sentry, CI/CD через GitHub Actions, staging-окружение
- Неделя 2: написали интеграционные тесты для 5 критических путей, консолидировали дублированные запросы к БД
- Неделя 3: рефакторинг аутентификации, нормализация схемы, настройка миграций через Prisma
Чего мы не ожидали: самой трудоёмкой частью оказались не уязвимости и не рефакторинг кода. 60% времени ушло на то, чтобы понять неявные зависимости между модулями — какие компоненты на самом деле зависят друг от друга, какие побочные эффекты вызывает изменение в одном месте. ИИ-сгенерированный код не имеет явной архитектуры, и эти связи приходится восстанавливать по поведению, а не по коду. Это работа, которую нельзя автоматизировать — только опыт и системное мышление.
Результат: приложение стабильно работает, команда клиента может вносить изменения без страха, время ответа API сократилось в 4 раза после добавления индексов.
Как починить сломанный ИИ-код: пошаговый план
Неважно, вы основатель, уставившийся на сломанный MVP, или разработчик, которому вручили вайб-кодинг проект со словами «просто почини» — вот системный подход к починке AI-generated кода.
Шаг 1: Триаж — что реально работает?
Прежде чем трогать код, составьте карту текущего состояния. Какие фичи работают корректно? Какие — с известными багами? Какие полностью сломаны? Можете ли вы надёжно деплоить изменения? Есть ли активные уязвимости, требующие немедленного патча?
Мы начинаем каждый проект с автоматического сканирования: статический анализ кода (ESLint с security-плагинами, SonarQube), npm audit / pip audit для зависимостей, проверка секретов через gitleaks. Это даёт объективную картину за час, а не за день ручного чтения.
Триаж отделяет срочные фиксы от долгосрочных улучшений и предотвращает типичную ошибку — начинать полный реврайт, когда хватило бы точечных исправлений.
Шаг 2: Закрыть периметр безопасности
Безопасность — всегда первая в очереди. Ротировать все засвеченные API-ключи. Добавить валидацию ввода. Внедрить нормальную аутентификацию. Настроить HTTPS. Каждый день, пока небезопасное приложение работает в продакшене, вы копите юридические и репутационные риски — и чем дольше ждёте, тем дороже обходится устранение последствий.
Шаг 3: Настроить мониторинг до изменения кода
Установите трекинг ошибок (Sentry, LogRocket или аналог) и базовую аналитику до того, как начнёте рефакторить. Нужно знать, что ломается и как часто. Без мониторинга вы чините вслепую — и не узнаете, сделали ли лучше или хуже.
Шаг 4: Написать тесты для критических путей
Всё сразу протестировать нельзя. Определите 3–5 самых критичных пользовательских сценариев — регистрация, оплата, основная фича — и напишите для них интеграционные тесты. Это даст страховочную сеть: когда начнёте рефакторить, тесты покажут, если что-то сломалось.
Шаг 5: Рефакторить инкрементально
Не переписывайте всё разом. Вынесите дублированную логику в общие сервисы. Консолидируйте управление состоянием. Замените один проблемный модуль за другим. Каждое изменение должно быть достаточно маленьким, чтобы проверить его на тестах из предыдущего шага.
Спасать или перестраивать: как принять решение
Самая дорогая ошибка при починке ИИ-кода — выбрать полный реврайт, когда достаточно было спасения. Или наоборот — тратить недели на патчи кодовой базы, которая архитектурно не жизнеспособна.
Спасение оправдано, когда:
- Базовая архитектура здоровая — проблемы в реализации, не в фундаменте
- Приложение работает для большинства пользователей большую часть времени
- Стек технологий современный и подходит под задачу
- Кодовая база управляемого размера с умеренной связанностью модулей
- Приложение должно работать, пока идут улучшения
Перестройка оправдана, когда:
- Фундаментальная архитектура не может поддержать ваши требования
- Проблемы безопасности настолько глубоки, что патчи создают больше рисков, чем новый старт
- Стоимость понимания существующего кода превышает стоимость его переписывания — это ключевой индикатор
- У вас есть время: перестройка обычно занимает 2–4 месяца
Как мы оцениваем? Не по количеству строк — 20 000 строк в React-SPA и 20 000 строк в монолите на Express представляют собой совершенно разные ситуации. Мы смотрим на связанность модулей, глубину зависимостей, наличие чётких точек входа и цикломатическую сложность критических путей. Если на понимание модуля уходит больше времени, чем на его переписывание, — это сигнал.
По нашему опыту, примерно 70% вайб-кодинг проектов можно спасти. Остальные 30% требуют частичной или полной перестройки — но даже тогда бизнес-логика и пользовательские исследования из оригинального прототипа имеют огромную ценность и переносятся в новую архитектуру.
Почему не попросить ИИ починить свой же код?
Это первый вопрос каждого вайб-кодера. И он логичный — если ИИ написал код, может, он и починит?
Для изолированного бага — иногда работает. Если конкретная функция возвращает неправильный результат, ИИ вполне может исправить её. Но для системных проблем — тех, о которых эта статья — подход «попросить ИИ ещё раз» чаще всего приводит к порочному кругу: фикс ломает что-то другое, фикс этого ломает третье, и через четыре часа у вас больше проблем, чем в начале.
Причина проста: ИИ-инструменты работают без памяти об архитектурных решениях. Каждый промпт получает локально оптимальный ответ, который может противоречить предыдущим решениям. ИИ не видит систему целиком.
Профессиональные разработчики привносят именно это — архитектурную ответственность. Они видят, почему изменение в модуле аутентификации прокатится до платёжного потока. Они применяют паттерны, проверенные на сотнях проектов. И, что важно, лучшие инженерные команды сегодня активно используют ИИ как инструмент — но оставляют архитектурные решения за людьми.
Дело не в том, что люди «лучше» ИИ или наоборот. Дело в ответственности. Кто-то должен отвечать за систему как целое — и пока что это может быть только человек с инженерным мышлением.
Наш подход к спасению ИИ-кода
В Webappski мы с 2015 года занимаемся code rescue — задолго до того, как ИИ начал генерировать код. Раньше к нам приходили проекты после ухода аутсорс-команд, теперь — после вайб-кодинга. Паттерны хаоса удивительно похожи; разница в скорости, с которой этот хаос накапливается.
Мы не обещаем, что починка будет быстрой или простой. Rescue-проекты — это всегда грязь, компромиссы и неожиданности. Иногда в процессе аудита мы рекомендуем приостановить разработку на 1–2 недели полностью — потому что каждый новый коммит в нестабильную кодовую базу увеличивает стоимость починки. Это не то, что клиенты хотят слышать, но честность на старте экономит месяцы на финише.
Как устроен наш процесс:
- Бесплатный диагностический аудит. Автоматический анализ + ручная проверка критических модулей. На выходе — документ с конкретным списком проблем, приоритетами и чёткой рекомендацией: спасение, частичная или полная перестройка. Занимает 2–3 рабочих дня. Бесплатно, без обязательств.
- Приоритетный патч безопасности. Если находим активные уязвимости — закрываем их до начала основных работ.
- Инкрементальная стабилизация. Тесты, мониторинг, CI/CD. Приложение остаётся в строю, пока мы его улучшаем. Типичный срок стабилизации — 2–4 недели для проектов среднего размера.
- Архитектурный рефакторинг. Перестраиваем кодовую базу в поддерживаемые, документированные модули. Каждое решение задокументировано, каждый паттерн объяснён.
- Передача знаний. Мы не создаём зависимость от себя. По завершению ваша команда (или будущие разработчики) получает кодовую базу, с которой реально можно работать, и документацию, которая объясняет почему, а не только что.
Работаем с React, Angular, Vue, Next.js, Node.js, Python и другими современными стеками. Конкретный ИИ-инструмент не важен — паттерны сбоев одинаковы для Cursor, Copilot, ChatGPT, Claude и остальных.
Как предотвратить следующий крах: лучшие практики
Вайб-кодинг — легитимный ускоритель разработки при правильном использовании. Ключ — относиться к ИИ-коду как к черновику, а не к готовому продукту.
- Проверять каждый вывод ИИ. Читайте код, прежде чем принять. Если не можете понять, что он делает, — это тревожный сигнал, а не повод нажать Accept.
- Требовать тесты. Просите ИИ генерировать тесты вместе с фичами. Добавьте это в системный промпт — сам он этого не сделает.
- Контроль версий с первого дня. Git-коммиты должны быть маленькими и описательными. Если что-то сломается — можно откатить к рабочему состоянию.
- Задать архитектурные правила заранее. Определите структуру папок, подход к управлению состоянием и паттерны API до написания кода. Скормите эти ограничения ИИ в системном промпте или в
.cursorrules. - Запланировать профессиональные ревью. Даже двухчасовое код-ревью от опытного разработчика раз в две недели может поймать проблемы до того, как они станут снежным комом.
- Не деплоить без аудита безопасности. Перед каждым деплоем в продакшен кто-то, разбирающийся в безопасности, должен проверить аутентификацию, авторизацию и работу с данными.
Вывод: ваше вайб-кодинг приложение не обречено
Код может быть хаотичным, но продуктовое мышление, пользовательские сценарии и бизнес-логика за ним имеют реальную ценность. С правильным подходом — системный триаж, security-first фиксы, инкрементальный рефакторинг — большинство ИИ-проектов можно превратить в стабильное, поддерживаемое ПО.
Худшее решение — ничего не делать. Уязвимости не лечатся сами, технический долг растёт экспоненциально. Второе по бесполезности — просить тот же ИИ исправить собственные ошибки по кругу.
Если у вас уже есть подозрение, что с приложением что-то не так, — скорее всего, так и есть. Чем раньше проведёте аудит, тем дешевле обойдётся починка.
Получить бесплатный диагностический аудит →
Что входит: автоматический анализ кода + ручная проверка критических модулей. Что получите: документ с конкретным списком проблем, приоритетами и рекомендацией (спасение / частичная / полная перестройка). Срок: 2–3 рабочих дня. Стоимость: бесплатно, без обязательств.
FAQ: Починка сломанного ИИ-кода
Можно ли починить вайб-кодинг приложение, снова попросив ИИ?
Для изолированных багов — иногда да. Для системных проблем (архитектура, безопасность, масштабирование) — нет. ИИ не имеет архитектурной памяти: каждый промпт на фикс может решить одну проблему, создавая новые. Когда вы замечаете, что чините по кругу — это сигнал обратиться к инженеру.
Сколько стоит спасение вайб-кодинг проекта?
Зависит от тяжести. Патч безопасности и базовая стабилизация — дни. Полный архитектурный рефакторинг средней по размеру аппликации — обычно 2–6 недель. Начните с бесплатного аудита — он покажет объём до принятия решения.
Переписывать с нуля или чинить?
Около 70% проектов можно спасти точечным рефакторингом — это быстрее и дешевле. Переписка оправдана, когда архитектура фундаментально не может поддержать ваши требования. Профессиональный аудит покажет, какой путь экономически выгоднее.
Что если у нас вообще нет документации?
Это норма для вайб-кодинг проектов — у подавляющего большинства наших клиентов нет ни документации, ни README. Часть нашего процесса — реверс-инжиниринг кодовой базы и создание документации с нуля.
Что если код писали несколько ИИ-инструментов подряд?
Видим это часто: начали в ChatGPT, продолжили в Cursor, доделывали в Copilot. Каждый инструмент привнёс свои паттерны и стилистику. Это усложняет диагностику, но не меняет подход — мы работаем с результатом, а не с историей его создания.
Что если проект уже в продакшене с реальными пользователями?
Это большинство наших клиентов. Инкрементальная стабилизация именно для этого — приложение продолжает работать, пока мы его улучшаем. Ни минуты даунтайма.
Вайб-кодинг — это всегда плохо?
Нет. Вайб-кодинг отлично подходит для быстрого прототипирования, валидации идей и внутренних инструментов с низкими рисками. Проблемы возникают, когда прототип выкатывается как продакшен-софт без профессиональной проверки. ИИ — ускоритель. Но ускоритель без руля — это не инновация, а авария.