Vibe coding: как собрать мобильное приложение для сторов, не написав ни строчки руками

За месяц по времени и три дня чистой работы я выкатил в Google Play и App Store приложение TTSL Ferries — расписание паромов в Лиссабоне с живыми отправлениями, семью языками, тёмной темой и нативными сборками для Android и iOS. Весь код написал Claude Code: я не открывал IDE ни разу, только говорил, что хочу, проверял результат и давал обратную связь.
Зачем своё приложение, если есть официальное
У Transtejo есть собственное приложение. Говно говна. Конкретно:
- Расписание и живые отправления живут на разных экранах. Чтобы понять, когда следующий паром вечером, нужно переключиться в live, а чтобы свериться с расписанием в субботу — в другой раздел. Постоянный пинг-понг между вкладками.
- Фильтр живых отправлений работает отвратительно. Если ты в Cais do Sodré и твой паром идёт, скажем, в Montijo — из списка ближайших отправлений он выдавливается рейсами в Cacilhas, которые идут каждые 15 минут. Твоего парома просто нет в видимой области, пока он не окажется следующим.
- Чтобы утром посмотреть вечернее расписание, надо лезть в отдельный раздел с графиком отправлений, свёрстанным, кстати, отвратительно.
- Маршрут Terreiro do Paço — Barreiro бывает двух разных продолжительностей в зависимости от того, какой используется причал. В официальном приложении это обозначено сносками со звёздочками — вместо того, чтобы просто написать продолжительность. Зачем?
- Маршрут Belém — Porto Brandão — Trafaria существует в двух вариантах с разным порядком посещения Porto Brandão и Trafaria. Снова звёздочки и сноски, пассажиру надо в них разбираться, чтобы понять, откуда куда он поедет. У меня в приложении порядок остановок сразу выводится правильно в зависимости от конкретного рейса.
- Куча лишнего. Прогноз погоды. В приложении. Для расписания паромов. Зачем? Кому это усралось?
- Только португальский. В Португалии живёт огромное количество людей, которые по-португальски не говорят — экспаты, туристы, недавние резиденты. Официальное приложение для них непригодно: интерфейс только на португальском, без вариантов.
- Отзывы соответствующие. Люди ставят 2–3 звезды и пишут то же самое.
Простая логика: если официальный инструмент не делает того, что нужно, надо сделать свой. Раньше это означало месяцы работы — писать руками, разбираться со стеком, ловить баги. Сейчас, в век вайб-кодинга, реально быстрее собрать самому, чем искать идеальное готовое. Мы с женой пользуемся паромом регулярно, пробираться каждый раз через несколько кликов, чтобы посмотреть субботнее расписание или понять, сколько осталось до вечернего рейса, задолбало. Сел и сделал. А заодно и другим пригодится.
С чего начинать: знать, что ты строишь
Я уже собаку съел на построении UI и UX в разных проектах — и в клиентских, и в своих. Поэтому я сразу видел, как должен выглядеть экран: ближайший рейс, сколько до него минут, какая заполненность. В приложении буквально должен быть один экран. Всё. Никаких вкладок, никакой погоды, никакой навигации.
При этом вайб-кодинг отлично работает и в обратную сторону — когда идея ещё не оформлена. Можно быстро накидать несколько вариантов интерфейса, посмотреть, что удобнее, и дать потыкать другим людям. Вайб-кодинг — дешёвый инструмент проверки гипотез.
Стек: Next.js + Capacitor + Django
Это стандартный современный стек под такой класс задач. Ничего необычного.
- Capacitor — опыт в предыдущих рабочих проектах был положительный. Гибридная разработка с одной кодовой базой под Android и iOS, без дублирования. Приложение здесь элементарное, под Capacitor ложится идеально.
- Next.js + Tailwind — удобный фронт, который отлично подходит под вайб-кодинг. Сначала отлаживаешь всё, что можно, в веб-браузере, а потом уже собираешь билды под нативные Android и iOS. Здорово экономит время.
- Django REST на бэке. Многие берут FastAPI, но мне нравится Django, потому что из коробки есть Django Admin и, например, те же email-шаблоны (на этом проекте они не нужны, но в целом часто нужны). Для такого класса приложений Django на производительность практически не влияет, а знакомая технология и знакомый подход экономят время: проще деплой, не расползается зоопарк из разных стеков, универсальные навыки и скиллы для Claude Code переиспользуются между проектами.
Что Claude Code сделал за меня
Приятное открытие — сколько скучной работы можно просто не делать.
- Настройка проекта.
create-next-app,cap init, Gradle-файлы,Info.plist— просто «собери мне каркас под Android и iOS», и через минуту всё есть. - Иконки и сплэш-скрины. Я положил одну 1024×1024 картинку и сказал «нарежь её под все разрешения и обнови в нужных папках».
- Store listing. Описания для Google Play на семи языках, featured graphics, скриншоты в нужных размерах — всё делается тем же способом.
- Privacy policy. Claude сгенерировал текст под конкретный набор данных, которые приложение собирает, и сверстал отдельной страницей.
- Django admin. Одна просьба «собери админку для моделей маршрутов и расписаний» — и можно редактировать данные через веб-интерфейс.
- Реверс-инжиниринг API. У Transtejo нет публичного API — всё, что есть, используется их собственным приложением. Claude помог вытащить нужные endpoint'ы: посмотреть сетевой трафик, разобрать параметры, построить под это свою интеграцию.
- Fastlane. Claude сгенерировал всё, что нужно для Fastlane — конфиги, метаданные, локализованные описания. Сам процесс автоматизации я не запускал: обновляюсь редко, проще вручную взять готовый контент из ассетов Fastlane и залить его через веб-интерфейсы Google Play и App Store. Но при желании можно.
Я не помню, когда в последний раз сам делал adb shell или редактировал AndroidManifest.xml — всю низкоуровневую возню Claude делает за меня.
Сколько это реально заняло
Я веду трекинг своей активности 24/7 — своим же приложением, собранным тем же способом. Поэтому могу посмотреть точные цифры, а не «ну, месяц примерно».
- Всего на проект — 22.5 часа. Включая буквально всё: разработку, генерацию ассетов, прогон через Internal Testing в Google Play, поиск тестировщиков для закрытого тестирования, подготовку локализованного контента на семи языках, отладку сборок, эксперименты с UI.
- Чистый vibe coding — 6–8 часов. Собственно разработка: UI, иконки, privacy policy, Django admin, бизнес-логика.
Остальные 14–16 часов — сопутствующая рутина: сторы, скриншоты, Google Play, App Store, ревью, билды, подписи, ключи. Вайб-кодинг помогает и здесь — переводы, скриншоты, контент для сторов Claude делает тем же способом — просто не так заметно, как с кодом, но и без него уже никак.
Про календарь: первый коммит 13 марта, приложение в рабочем виде было через один-два дня. Всё остальное — ожидания и возня с магазинами. У Google Play сейчас сложная процедура закрытого тестирования, это плюс две недели ожидания. Для iOS я целый месяц ждал соглашения, чтобы выложить приложение в Евросоюзе — у Apple сейчас большая беда с ревью из-за Digital Services Act. Так что по датам коммитов ориентироваться не надо: рабочее приложение собралось быстро, дальше — больше ожиданий и бюрократии.
Что дальше
Приложение живёт, я им пользуюсь, а руки уже чешутся добавить ещё. В планах:
- Цены прямо в маршруты. Сейчас стоимость билета надо смотреть отдельно — логично прикрутить к каждой линии.
- Объявления Transtejo с автопереводом. Они периодически переносят рейсы, отменяют их из-за погоды, меняют причалы — всё это сейчас живёт на португальском в новостях на сайте. Подтянуть и перевести автоматически.
- Схема движения. Визуальная карта линий: где какой терминал, какие маршруты где пересекаются.
Выводы
- Vibe coding — это не магия, а смещение работы. Ты перестаёшь писать код и начинаешь писать требования, давать обратную связь и тестировать. Но производительность при этом растёт очень заметно: то, что раньше заняло бы месяц-два, реально делается за три дня чистого времени.
- Стек выбирается по привычке и удобству. Next.js + Tailwind + Capacitor на фронте, Django на бэке — стандартный современный стек под такой класс задач. Не нужно изобретать велосипед.
- Честно тестируй и честно проходи процедуры. Неважно, писал руками или вайбкодил — технологический процесс надо соблюдать: разработка, тесты, код-ревью, рефакторинг. Тогда получишь нормальный результат.
Приложение лежит в Google Play и App Store. Если живёшь в Лиссабоне и плаваешь на пароме — скачать для Android / скачать для iOS.