Приложение нейросетью: кейс живого сервиса + 6 мест, где сломалось

2026-09-09 22:50:49 Время чтения 12 мин 14

Как написать приложение нейросетью и что происходит дальше: разбор собственного проекта за пять месяцев и 737 коммитов. Стек, парсер на Claude, шесть мест, где вайб-кодинг сломался, и что пришлось переписывать руками.

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

Ниже — разбор собственного проекта: пять месяцев, 737 коммитов, четыре подсистемы. Что нейросеть написала сама, что пришлось переписывать руками и шесть мест, где подход ломался. Цифры взяты из репозитория и с живого сайта на 9 сентября 2026 года.

Что за сервис

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

Главная nenadengi.ru: «Где сыграть в покер сегодня вечером», 39 турниров сегодня в 39 клубах из 85, медианный оргвзнос 1 000 ₽

На день съёмки в каталоге 85 клубов, 141 событие на неделю вперёд и больше 26 тысяч результатов турниров. Афиша обновляется каждый час.

Проект состоит из четырёх частей, и это важно для разговора о вайб-кодинге: сложность здесь не в одной большой фиче, а в том, что четыре куска должны сходиться на одной базе.

  1. Публичный сайт — каталог клубов, расписание, карта, страницы по округам и форматам.
  2. Telegram Mini App — профиль, круг знакомых, запись на турнир, чек-ин по QR, рейтинг.
  3. Админка — управление клубами, каналами и очередью парсера.
  4. Парсер — отдельный сервис на Python, который читает анонсы клубов и превращает их в события.
Расписание турниров: фильтры «Сегодня», «Успею после 21:00», «Бесплатно», карточки турниров с окном входа и оргвзносом

Стек и почему такой

Код писался в терминале через Claude Code, и выбор стека решала не мода, а то, насколько уверенно модель пишет под него код. Чем больше готовых примеров у фреймворка, тем меньше правок за нейросетью.

СлойЧто взялиФронтендNext.js 14 (App Router), React 18, TypeScript 5ОформлениеTailwind, готовые компоненты shadcn/uiБаза и авторизацияSupabase: Postgres с политиками доступа на уровне строкКартыЯндекс КартыПарсерPython 3.11, извлечение полей моделью Claude

Практический вывод: связка Next.js плюс Tailwind плюс Supabase даёт лучший результат именно потому, что она затёрта до дыр. На нишевом фреймворке модель начинает выдумывать методы, которых нет. Подробнее про выбор инструментов — в обзоре программ для вайб-кодинга.

Что модель написала сама, а что пришлось руками

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

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

Каталог клубов: 85 клубов, фильтры по округу, оргвзносу и «для новичков», карточка клуба-партнёра с оценкой 5,0
Граница проходит не по сложности кода, а по тому, помещается ли задача в один файл. Всё, что требует держать в голове схему данных, права доступа и три чужих API одновременно, модель делает хуже человека — и делает это уверенно, что хуже всего.

Парсер: самое дорогое место проекта

Клубы публикуют анонсы в Telegram-каналах свободным текстом: где-то «старт 19:00, бай-ин 1000», где-то картинка с подписью в три слова. Из этого нужно получить структурированное событие с датой, форматом, стеком и окном входа.

Это ровно та задача, где языковая модель уместна: не поиск ключевых слов, а понимание смысла. Разбор построен так: сервис забирает публичную страницу канала, а модель Claude достаёт из текста поля события. На случай отказа предусмотрен запасной провайдер.

Первая версия читала каналы через клиентскую библиотеку Telegram от имени аккаунта. От неё отказались полностью: аккаунт-читатель — это риск блокировки и лишняя сущность в проекте. Сейчас парсер работает с публичными страницами каналов обычными запросами.

Вывод, который стоил месяца: вайб-кодинг отлично пишет парсер и совершенно не помогает выбрать способ доступа к данным. Модель радостно соберёт вам решение на клиентской библиотеке, потому что так написано в большинстве примеров, и не скажет, что за это можно потерять аккаунт.

Цифры проекта

Месяц 2026 годаКоммитовЧто происходилоАпрель78Каркас, схема базы, первые страницыМай163Парсер, админка, Mini AppИюнь152Рейтинг, карта, страницы под поискИюль78Спад: сервис работал, руки не доходилиАвгуст239Переделка рейтинга, инфраструктураСентябрь27Текущая работа

Всего 737 коммитов с 20 апреля по 9 сентября. Обратите внимание на август: это не рост функций, а месяц, когда пришлось разбираться с последствиями быстрого старта.

Шесть мест, где вайб-кодинг сломался

Первое. Миграции базы делались руками. Модель охотно пишет SQL, но не заводит дисциплину: файлы миграций появлялись, а прогонялись через веб-редактор Supabase вручную. К тридцатой миграции это превратилось в отдельную работу — понять, что где применено. Конвейер миграций надо ставить на первой неделе, а не на тридцатой.

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

Третье. Сборка не влезала в память сервера. Сборка Next.js требует около 2,6 гигабайта, а на сервере, где живёт и прод, оперативной памяти 3,8. Первый прогон убил процесс. Лечится файлом подкачки, но узнаёшь об этом в тот вечер, когда деплой не проходит.

Четвёртое. Бесплатная квота GitHub Actions кончилась. Проект жёг около 3 600 минут в месяц на регулярных запусках парсера при бесплатных двух тысячах. Пришлось поднимать свой раннер. Это классическая ловушка быстрого старта: расписание по крону пишется одной строкой, а счёт приходит через месяц.

Пятое. Модель недоступна с сервера. Парсер ходит в API языковой модели, а с московского адреса эти API не отвечают. Задачи с обращением к модели пришлось увести на сервер в другой стране. Ни одна нейросеть при генерации кода про это не предупредит, потому что проблема не в коде.

Шестое. Доступ к чужим данным. В сервисе есть социальная часть: круг знакомых, история игр, приватность. Здесь сгенерированный код особенно опасен — он работает и выглядит правильным, а проверку прав забывает. Всё, что касается доступа к чужому профилю, пришлось проверять построчно. Общий разбор этой темы — в материале про минусы вайб-кодинга.

Карта клубов: 85 покерных клубов Москвы с логотипами на Яндекс Картах, слева список с оценками и ближайшими турнирами

Что это стоило по времени

Честный ответ: пять месяцев неполной занятости, и на функции ушла меньшая часть. Каркас сайта с каталогом и расписанием встал за апрель. Дальше время уходило на то, чего не видно в демо: разбор чужих текстов, права доступа, рейтинг, инфраструктура, повторные заходы после переделок.

Соотношение примерно такое: первые 20% результата — за первую неделю, оставшиеся 80% — за четыре месяца. Ровно поэтому кейсы «сайт за три часа» вроде нашумевшего outbid.lol не переносятся на сервисы: там продукт и есть та первая неделя.

Что из этого следует

Вайб-кодинг довёл проект до живого состояния, и без него его бы не было. Один человек за пять месяцев собрал четыре подсистемы, которые обычно делает небольшая команда. Это не рекламный тезис, это наблюдение.

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

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

Коротко о главном

  1. Написать приложение нейросетью реально, и это не лендинг за вечер: живой сервис — это 737 коммитов за пять месяцев.
  2. Модель уверенно пишет вёрстку, формы, фильтры и тесты. Схему базы, права доступа и предметную логику придётся вести самому.
  3. Берите массовый стек. На Next.js с Supabase модель ошибается заметно реже, чем на нишевых фреймворках.
  4. Языковая модель хороша там, где надо понять текст: разбор свободных анонсов в структурированные события — её задача.
  5. Инфраструктура выставит счёт позже кода: квоты CI, память под сборку, недоступность внешних API с российского адреса.
  6. Заводите миграции и проверку прав доступа на первой неделе. Через тридцать миграций это уже отдельный проект.