ИИ-кейсы

Как я строил сервис через вайбкоддинг и какие были проблемы

«Нужен программист, а его нет». А я взял и сделал — сам, без единой строчки кода

Прораб на ИИ-стройке: как я собрал SafeRoad руками агента — и почему главный навык не код, а привычка не верить ему на слово

Артикул: ЦЫГАН 07/2026 · Размер: лонгрид, 12 минут · Состав: 100% реальный опыт + 0 строчек кода мной · Гарантия: агент врёт уверенно, с сертификатом качества · Проверено на себе, шишки прилагаются :)

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

Сразу про себя, кто это пишет: кода профессионально я не писал ни разу в жизни. Я предприниматель — с 2014-го строю бизнесы вокруг автоматизации и цифровой трансформации, последние пять лет вплотную с нейросетями. Весь код за меня писал ИИ-агент, а я в этой истории — подопытный кролик.

И вот два часа назад я натравил своих же ИИ-агентов на историю собственного проекта: пусть перечитают всё — гит-коммиты, боевую базу, мои рабочие заметки — и доложат, без права приукрашивать, что там было на самом деле. Результат на первый взгляд странный: 0 из 49 моих же штрафов попали точно в мой собственный справочник камер. Ни одного.

И это не баг. Это ровно то, что и должно было получиться. Каждая точка на этой карте — от окраины Минска до трассы М-1 — хотя бы раз прошла через мои руки, и я лучше многих знаю, где именно точность врёт. Почему — дальше по порядку.

Вывод-спойлер, кто не хочет долго читать:
Тот самый сервис — SafeRoad (saferoad.by) — я собрал, не написав ни строчки кода сам. Секрет не в программировании. Секрет в роли технического заказчика.

0. Я — заказчик

Именно цифра 0, и это самый главный этап.

Вот смешная штука: я семь лет отучился на физика — и не проработал по специальности ни дня. Пригодилось ровно одно: привычка не верить показаниям прибора, пока не перепроверил его независимым способом. Профдеформация, и да — я такой :)

ПОДРЯДЧИК кладёт кирпичи SafeRoad ЗАКАЗЧИК проверяет, что ровно

Слева — кто кладёт кирпичи. Справа — кто отвечает, чтобы не рухнуло. В SafeRoad оба — но я только справа, с каской и придиркой

Ровно это я перенёс в разработку SafeRoad. А мой ИИ-агент — по-простому, Claude Code (за который, конечно, ещё пришлось повоевать с оплатой из Беларуси без иностранной карты — отдельный квест со своим финальным боссом). И роль, которая реально нужна рядом с ним, — заказчик.

Разница огромная. Подрядчик кладёт кирпичи. Заказчик читает чертёж, принимает этапы и подписывает акт, только поднявшись и проверив своими руками, что стена ровная.

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

Доверяй, но проверяй — не мой афоризм, но именно на нём всё и держится.

Забегая вперёд: три раза этот принцип встречался мне на дороге в самом буквальном смысле — назовём это Цыганским контролем качества, звучит солидно, согласен. Два раза он спас проект от катастрофы, и один раз — не совсем. Расскажу все три случая по порядку.

1. Почему мой ИИ прописан дома, не в облаке

Первый момент, где роль заказчика проверяется на прочность, — это данные.

Постановление о штрафе — не просто цифры. Там ФИО, паспорт, адрес прописки. По закону Беларуси №99-З гонять такое через облачные API без правовых оснований — это трансграничная передача персональных данных. «Потом разберёмся» тут не работает. Это прямой юридический риск.

дома · Mac mini ФИО · паспорт адрес прописки 17 нейтральных полей номер · дата · сумма · место облако карта · геокодер

Таможня для данных: наружу выпускаем только то, что не стыдно показать; паспорт остаётся дома

Решение простое до банальности: распознавание фото идёт строго локально, на Mac mini у меня дома. Наружу из этой машины уходит только 17 нейтральных полей — номер постановления, дата, сумма, место. ФИО и паспорт физически не покидают домашнюю сеть.

Заодно закрылся и денежный вопрос: на облачное распознавание я не трачу ни цента. На карту и геокодер весь бюджет — потолок $5 в месяц, цель — вообще ноль.

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

24 июня прогнал двух кандидатов на роль «читателя фотографий» на 9 эталонных фото реальных штрафов: Qwen3-VL (модель на 8 миллиардов параметров) и Gemma4 e4b.

Результат по номеру постановления: 9 из 9 у первого, 4 из 9 у второго. По номеру машины у Gemma4 — 0 из 9. Ноль. И это не единственная беда — 22 грубые ошибки на 9 фото: модель уверенно, без единой запинки, придумывала несуществующие марки машин и адреса, которых на фото не было.

Вот честно — не ожидал такого разброса между моделями примерно одного размера. Если вы прямо сейчас доверяете выбор ИИ-инструмента агенту на слово, без собственного экзамена на своих же данных, — рискуете получить уверенного враля с сертификатом качества вместо рабочей программы. Взял Qwen3-VL, вопрос закрыт.

2. Как я чуть не начал ловить штрафы не там

Второй момент — там, где я один раз чуть не поверил докладу вместо приборов.

Задача вроде простая: взять текст «трасса Р-40, км 43» и превратить в точку на карте. Ан нет.

Р-40 · где камеры куда поставило ≈ 90 км

Обещали трассу Р-40. Получили соседнюю область за 90 км. Навигатор такой ошибки не простил бы

Первая версия геокодирования ставила дорожные штрафы мимо на 70–100 километров. Серьёзно. Не на пятьсот метров — на сто километров.

Причина двойная. Агент собирал геометрию дороги из кусков OpenStreetMap — и брал только самый длинный непрерывный кусок, выбрасывая остальные. А трасса Р-40 в реальности разорвана в базе OpenStreetMap на части: терялся южный отрезок в 9,7 км — именно там, где стоят камеры.

Вторая причина хуже первой. Эталон, по которому агент сверял точность своего же алгоритма на первой итерации, сам был выходом более раннего прототипа. Тесты были зелёные — код сверяли сам с собой. Реальность в проверке не участвовала вовсе.

Если сам придумываешь «правильный ответ» для теста — легко незаметно протестировать код против самого себя и получить зелёный чек-лист на сломанной системе.

Переделали на гибрид: километровые столбы дорог из карт (это разметка расстояния в цифровой геометрии дороги) для трасс плюс переписанная сборка геометрии для региональных дорог. Перезалили 9 921 такую отметку. После фикса — промах не больше 9 метров на магистралях.

Если сейчас вы принимаете «зелёный тест» от своего агента как финальное доказательство — на всякий случай спросите: а из чего сделан этот тест? Не из результата ли той же самой системы, которую он проверяет?

3. Две грабли, на которые наступаешь молча

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

Скриншот личного кабинета SafeRoad по согласованному дизайну: дашборд со штрафами, карта, список

Так кабинет должен был выглядеть по макету. Агент же просто перекрасил старый в тёмное — и я потерял день, пока руками не сверил результат с этим экраном. (данные на скрине демонстрационные, без ФИО)

Грабля первая: редизайн личного кабинета. У меня был согласованный макет нового дизайна — лежал в папке проекта, ждал реализации. Задача агенту звучала как «сделай тёмную тему». Агент открыл существующий код, увидел старый интерфейс — и просто перекрасил его в тёмный, вместо того чтобы построить новый дашборд по макету.

Задеплоили. Открыл — и понял: это провал.

Полный.

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

Урок звучит скучно, но стоил мне этого дня: прежде чем сказать агенту «сделай» — спроси себя, он вообще ВИДЕЛ, что должно получиться, или уже чинит то, что и так есть перед глазами?

Грабля вторая, тише первой: один и тот же секретный ключ подписи использовался в двух средах — на веб-сервере в облаке и на домашнем Mac mini для короткой ссылки привязки Telegram-бота. Физически — два разных значения переменной окружения. Пользователь жмёт «привязать» — бот честно отвечает «ссылка устарела», хотя по документам всё настроено.

Тихий рассинхрон конфигурации — вот и вся причина, никакой ошибки в логике. И его не видно, пока не сравнишь оба места напрямую — руками, рядом, одновременно.

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

4. Что получилось, если считать честно

Возвращаюсь к цифре из начала: 0 из 49.

И ЭТО НОРМАЛЬНО 0 / 49 точных совпадений

49 штрафов, 0 точных попаданий, 100% рабочая система. Да, звучит как парадокс — но это и есть честный MVP

Ноль штрафов в моей базе точно совпали с моим же справочником камер (945 штук, кстати, я его сам выгрузил и обработал). 41 точка встала по километру трассы, 5 — по улице, 3 — по городу. Все — приблизительные, и все требуют (или уже прошли) ручную правку маркера на карте.

Это не баг и не недоделка. Ручная правка неточной отметки заложена в продукт с первого дня: я, как заказчик, с самого начала понимал — гео-данные по Беларуси неполные, и врать пользователю точностью, которой нет, хуже, чем честно попросить подвинуть булавку на карте.

Если считать по-честному: первый коммит — 23 июня, первый боевой деплой — 25 июня. Двое суток с половиной от идеи до продакшена. Сейчас, на 92-м коммите, в базе 14 зарегистрированных владельцев и 49 штрафов. Не миллион пользователей. Реальные люди, реальные штрафы, реальная карта.

Скажу честно — цифры пока маленькие. Но система работает, и я лично ей пользуюсь каждый день)

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

Ноль из сорока девяти. И это нормально.

Вместо резюме

Первое — роль, которая реально нужна рядом с ИИ-агентом, — навык заказчика: ставить задачу так, будто объясняешь толковому подрядчику, простыми словами, без жаргона, который вы оба знаете кое-как.

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

Третье — «готово» — это цифры, которые ты увидел своими глазами, и точки на карте, которые сам проверил руками. Отчёт агента тут вообще ни при чём.

Расставь на трассе свои камеры контроля. Дальше она сама скажет, где ты был неправ.

Если у вас тоже есть идея, которая застряла в столе полгода — не потому что она плохая, а потому что «нужен программист, а его нет» — вот с чего начать сегодня, а не когда-нибудь.

Памятка: как найти свою идею и начать её воплощать — сегодня, не «когда найдётся программист»

  1. Ищи личную боль — конкретную проблему, которая у тебя лично повторяется. У меня это были штрафы с камер, которые я сам не успевал вовремя оплачивать.
  2. Опиши задачу как для толкового подрядчика — простыми словами, без технического жаргона. Условия, ограничения, что должно получиться на выходе.
  3. Требуй на каждом шаге цифры, скриншот, тестовый прогон — что угодно, кроме голого «сделано».
  4. Заведи журнал ошибок агента. Скучная документация, которую никто не любит вести. Но именно она экономит вам второй день переделки — тот самый, что я потерял на грабле номер один.
  5. Начни с одной, самой болезненной функции. Не строй сразу всё. У меня первой была именно точка на карте — без кабинета, без бота, без напоминаний.

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

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

Напишите в комментариях — какая задача лежит у вас в столе полгода, потому что «нужен программист, а его нет»?

Всем спасибо кто дочитал