Вайб-кодинг на практике: делаю интервальный таймер для Android с Codex
Привет, Пикабу. Хочу представить на суд общественности небольшой Android-проект, который делаю как очередной эксперимент в вайб-кодинге – разработка мобильного приложения. Это мой первый пост здесь, прошу сильно ногами не бить.
Для тех, кому интересна техническая часть проекта, и примерный процесс создания.
Приложение написано под Android на Kotlin. Интерфейс сделан на Jetpack Compose, сборка через Gradle Wrapper. Общее количество строк кода на Kotlin в этом проекте – 6600. У меня есть определенный опыт в программировании, но до работы над этим приложением с Kotlin, Jetpack Compose и Gradle я никогда не работал. Отдельный маленький привет моему отсутствию опыта в Android: на старте я не поменял applicationId, поэтому он остался почти дефолтным. Отладку делал сначала в эмуляторе, а потом стал делать непосредственно в своем телефоне, через ADB. Работаю в vscode с агентом Codex/ChatGPT.
Сам процесс вайб-кодинга в моем случае выглядит примерно следующим образом: первым промптом я обычно кратко описываю общую суть идеи, что именно хочу сделать, какие обязательные фити там нужны и для какой платформы нужно приложение. Если мне область знакома, то сразу описываю стек, если нет, как в данном случае – прошу проанализировать и дать совет по выбору стека. Далее прошу развернуть саму идею и сохранить в файл, чтобы сверяться с ним. Но на самом деле лично в этот файл практически никогда больше не залезаю, обычно отправляю туда агента для контроля и уточнений.
После того, как идея расписана, стек подобран, начинается рутинная работа. Примерно так: промпт «Проанализируй идею. План.» Далее знакомлюсь с планом, если есть какие-то замечания, правки – озвучиваю, иногда прошу агента задавать уточняющие вопросы. Если задаю вопросы, то обязательно указываю «сначала напиши список вопросов, а потом задавай их в интерактивном режиме по одному». Это для того, чтобы агент не ушел в глобальные размышления о каждой мелочи, а сразу ограничился конкретным списком вопросов. Интерактивный режим удобен тем, что не надо читать всю портянку, а можно размеренно отвечать на каждый вопрос и задавать уточняющие по мере необходимости. В конечном итоге промпт «делай». Агент у меня работает в виртуалке с полными правами, поэтому в таком режиме он может работать минут 5-10, иногда и больше без моего физического одобрения различных команд. В обычном режиме при работе с codex я не смог отключить эти вечные запросы-разрешения, поэтому и отправил его в виртуалку, наделив полной властью. Большой проект целиком он сразу не делает. Обычно он делает какую-то часть, каркас, какие-то начальные механики с заглушками, после чего отчитывается что сделал такую-то часть. Далее промпт: «что дальше по плану» - это если мне надо что-то уточнить, или сразу «делай дальше».
После нескольких итераций, когда уже получается относительно рабочее приложение – прошу его запустить. В данном случае это было в Android Emulator из Android Studio. Кстати, в последнее время почти весь необходимый софт, включая андроид-студио, Gradle и т.д. я либо прошу агента, чтобы он установил сам, либо прошу команду для PowerShell. С консолью работаю прямо из vscode.
Следующий этап, когда первая версия запускается в эмуляторе, начинается допиливание. Если нужно что-то добавить, сделать какое-то определенное меню – я ему так и описываю. Если уже что-то есть готовое, но нужны косметические правки или что-то конкретно не нравится – то раньше я так же пытался описать, а теперь просто делаю скрин экрана при помощи ножниц в виндовс, кидаю ему этот кусок скрина прямо в чат и пишу – «измени цвет», «меню сливается, предложи вариант», «измени шрифт» и т.д. Обычно к каждому такому промпту добавляю «Анализ» или «План». Далее читаю, вношу правки при необходимости и снова «Делай». Доработки функционала идут по такому-же принципу – «нужно сделать запись звука, план». Или «нужно добавить сохранение тренировок, план». Агент описывает примерную концепцию, я так же вношу правки при необходимости и потом прошу реализовать. Собственно примерно в таком режиме и происходит разработка – анализ, что есть, далее – промпт на допиливание/изменение, либо на внедрение новой фичи.
В этом проекте, в определенный момент я решил, что нужно протестировать приложение в реальных условиях. Для этого при помощи агента настроил удаленную отладку по wifi, т.к. я уже забыл все нюансы, даже подключения и далее тестировал приложение на телефоне. После очередной доработки просил его установить приложение на телефон и тестил. Для сборки дебаг-версии и релизной версии apk я попросил сделать соответствующие скрипты, т.к. часть текста, особенно политика конфиденциальности берется из md файлов на момент сборки. Ну и на случай, если вдруг по какой-то причине доступ к агенту пропадет, чтобы я мог что-то изменить, сделать и собрать сам. Хотя я понимаю, что это утопия – в таком проекте, даже с документацией в формате md на 2500 строк в этом проекте – мне это будет почти нереально. Примерное время, которое мне понадобилось на реализацию этого проекта в текущем виде – от 20 до 30 часов. Это время, которое я непосредственно провел, сидя за компом. Точным подсчетом я не занимался, оцениваю примерно.
Еще в последнее время, если проект разрастается, я начинаю заниматься рефакторингом. Прошу агента провести анализ и дать предложения по рефакторингу. Далее прошу сделать план и отправляю его делать. Если проект крупный – агент обычно делает план рефакторинга так же, по шагам – одну часть, потом остановка, потом другую и т.д. За один подход, проект размером в несколько тысяч строк он не рефакторит) Как было написано выше – общее количество строк кода в этом приложении – около 6600, небольшой рефакторинг я уже делал.
Из дополнительных инструментов я использую git, который поднял на домашнем сервере. Это удобно для хранения всех своих поделок, копания в истории, при необходимости (такое уже было пару раз). Хотя для кого-то это банальная база. Так же при помощи git деплою некоторые свои поделки на боевых серверах.
Теперь немного о самом приложении. Это классический интервальный таймер для круговых тренировок с чередованием работы и отдыха. Почему таймер? А так получилось. Мне показалось это то приложение, которое можно достаточно быстро сделать полностью работоспособным и относительно отполированным для размещения в сторах. Тем более когда-то давно я подобными пользовался, но в них не было возможности настраивать разные интервалы. Возможно сейчас такие возможности уже во многих есть, но в свое время я не нашел. Но самая главная фишка этого приложения – оно полностью бесплатное и без рекламы. Возможность добровольной поддержки разработчика есть, но это никак не влияет на его функциональность – функциональность полная и не зависит от наличия или отсутствия таких покупок у пользователя. Это некая такая «месть» всем тем, кто пишет приложения с кучей рекламы или урезанными функциями)
Буду ли я использовать рекламу, подписку и другие «нехорошие» способы монетизации в будущем в других приложениях? Скорее всего буду – я же все-таки тоже человек)
Что сейчас уже есть. На текущий момент в приложении уже реализована простая тренировка, в которой настраивается время работы и отдыха и сложная тренировка, в которой можно создать несколько интервалов со своим временем работы и отдыха – например отжимания 40/20, приседания 50/30 и т.д. Каждому интервалу можно дать свое название, которое отображается на экране работы и на экране отдыха, для подготовки к следующему упражнению. Тренировки можно сохранять.
Из дополнительных возможностей – прямо в приложении можно записать короткое аудио, до 5 секунд, там же его отредактировать (обрезать пустое начало и конец) и поставить его в качестве сигнала начала у конкретного интервала. Например: «Приседания», «Прыжки» или любое другое сообщение, можно подбадривающее)
Площадку RuStore выбрал по объективным причинам – в наше время с гуглом все очень сложно в этом плане.
Для ознакомления прикрепляю скриншоты. Если кому интересно посмотреть/протестировать – вот ссылка на рустор - Интервальный таймер.
Ради эксперимента к посту добавлю сбор на следующую фичу - поддержку нагрудных пульсометров. Сразу скажу: это не условие ее появления. Я планирую сделать эту возможность в любом случае, даже если сбор ничего не соберет. Как и все остальные функции приложения, она будет бесплатной. Просто интересно проверить, работает ли такой формат поддержки маленького бесплатного проекта. Если кому-то идея приложения близка и хочется подкинуть мотивации - буду благодарен. Панамку тоже приготовил на всякий случай, но даже если она полностью наполнится, приложение все равно останется бесплатным и без рекламы.
UPD. Сбор прикрутить не получилось, возможно из-за первого поста здесь. Значит оставляю только панамку)
З.Ы. Буду рад обратной связи, идеям, замечаниям и предложениям. Мне интересно, что хотелось бы людям видеть в этом приложении и что могло бы оказаться полезным. Но честно предупрежу – это проект для практики, для души и делается в относительно свободное от работы, и кучи других дел и обязанностей время, поэтому обещать реализацию всех идей и пожеланий не буду. Планирую делать то, что реально зацепит и к чему душа ляжет.

























