Vibe-кодинг: создание Android-приложения с ИИ от идеи до продакшена | AiManual
AiManual Logo Ai / Manual.
20 Май 2026 Гайд

Vibe-кодинг: как я создал Android-приложение с помощью ИИ от идеи до продакшена

Подробный опыт DevOps: как я за 2 недели создал Android-приложение (Kotlin, Node.js, Docker) с помощью ИИ, без найма разработчиков. Архитектура, авторизация, БД

Когда надоело ждать мидлов

Признаюсь честно — я DevOps. Моя зона комфорта — CI/CD, кубер, терраформ. Мобильная разработка для меня темный лес. Но когда очередная идея для pet-проекта умерла из-за того, что не мог найти React Native разработчика на аутсорс, я психанул. И решил: напишу всё сам. С помощью ИИ. Без единой строчки кода, написанной мной лично. Звучит как сказка? Спойлер: это работает, но с костылями.

Я поставил себе задачу — сделать Android-приложение для трекинга привычек с бэкендом, авторизацией и синхронизацией. Стек нарисовался сам: Kotlin для нативного Android, Node.js + Express для бэка, PostgreSQL для данных, всё это обернуто в Docker Compose. И никакого React Native (хотя ради VIP-версии потом добавил React-панель для админа). Весь код генерировали Claude 4 и Gemini 3 Flash (да, я переключался между ними, когда один начинал тупить).

В этой статье я расскажу, как прошел путь от пустого экрана до релиза в Google Play, какие грабли собрал и почему vibe-кодинг — это не серебряная пуля, а мощный инструмент в руках того, кто хотя бы понимает архитектуру.

Важный контекст: до этого я уже пробовал vibe-кодинг на десктопе — делал клиппер подкастов в Replit за 5 часов. Но мобильная разработка — совсем другой зверь. Тут и экраны, и lifecycle, и гугловые сервисы. Без понимания базовых концепций Android вы просто утонете в промптах.

Шаг 1: Промпт как искусство

Моя первая ошибка — я думал, что ИИ читает мысли. Написал: «Сделай приложение для привычек с бэкендом». Получил 500 строк кода, который даже не компилировался. Пришлось учиться формулировать точно.

Вот реальный промпт, который запустил проект:

Создай Android-приложение на Kotlin с Compose для трекинга ежедневных привычек.
   Архитектура: MVVM с одним Activity, di через Hilt.
   Бэкенд: Node.js Express + Prisma ORM + PostgreSQL, запуск через Docker Compose.
   Экраны: список привычек (с группировкой по статусу), форма добавления, экран статистики.
   Auth: JWT токены, регистрация по email + пароль, хранение токена в EncryptedSharedPreferences.
   Сеть: Retrofit + OkHttp, перехватчик для подстановки токена.
   Напиши полный код для экрана списка привычек, включая ViewModel, Repository, DTO, а также эндпоинты на бэке.

Я отправил это в Claude 4 (версия от февраля 2026, с improved coding capabilities). Через 20 секунд получил 4 файла. Работало с первой попытки? Чёрта с два. Пришлось править типы в DTO и добавлять обработку ошибок. Но скелет был.

1 Промпт-инжиниринг для кода

Совет: добавляйте в промпт не только желаемый функционал, но и анти-паттерны, которые ИИ часто генерирует. Например: «Не используй GlobalScope, не сохраняй пароли в SharedPreferences, не блокируй UI поток». Иначе получите legacy сразу из коробки.

Архитектура, которую ИИ собрал, а я ревьюил

Одна из частых критик vibe-кодинга — убитая архитектура. И да, первый вариант от ИИ выглядел как слоёный пирог из рандомных паттернов. Но я не просто копипастил — я нанял ИИ в качестве архитектора, задавая вопросы: «Почему ты выбрал Repository pattern? А как тут реализован offline-first?»

В итоге архитектура получилась такой:

Слой Технология Что сгенерировал ИИ Что пришлось переписать
Android UIJetpack Compose95%Состояние экранов, анимации
ViewModelKotlin Coroutines + StateFlow100%-
RepositoryRoom (local) + Retrofit (remote)80%Обработка конфликтов синхронизации
Бэкенд APINode.js Express70%Валидация, мидлвары CORS
База данныхPostgreSQL + Prisma100%-
DockerDocker Compose100%Немного изменил healthcheck

Самое смешное — Docker Compose и Prisma-схему ИИ нагенерил идеально. Потому что это конфигурация, а не логика. Чем меньше «бизнес-логики» требуется, тем лучше работает ИИ.

Авторизация — головная боль, которую я переложил на ИИ

JWT-авторизация — классическая задача. Но когда ИИ предлагает хранить токен в обычных SharedPreferences, хочется плакать. Пришлось явно указать: EncryptedSharedPreferences, перехватчик для автоматического обновления access token, рефреш-токен в httpOnly cookie на бэке.

Вот фрагмент перехватчика, который сгенерировал Gemini 3 Flash после нескольких уточнений:

class AuthInterceptor(
    private val tokenProvider: TokenProvider
) : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val original = chain.request()
        val token = tokenProvider.getAccessToken()
        val request = if (token != null) {
            original.newBuilder()
                .header("Authorization", "Bearer $token")
                .build()
        } else original
        
        val response = chain.proceed(request)
        
        if (response.code == 401) {
            // Попробовать обновить токен
            val newToken = tokenProvider.refreshToken()
            if (newToken != null) {
                val retryRequest = original.newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                response.close()
                return chain.proceed(retryRequest)
            }
        }
        return response
    }
}

Работает? Да. Но я потратил час на отладку race condition при параллельных запросах, когда оба получают 401 и пытаются обновить токен. ИИ такое не умеет — пришлось добавить блокировку с Mutex самому.

Типичная ошибка: ИИ часто предлагает хранить refresh token в том же месте, что и access token, или вообще в SQLite. Не ведитесь — используйте EncryptedSharedPreferences или Android Keystore. Я даже написал промпт: «Предположи, что я параноик по безопасности, и предложи самый безопасный способ хранения» — помогло.

Бэкенд: Node.js в Docker, который я не писал

С бэкендом было проще: ИИ отлично генерирует CRUD и мидлвары. Я попросил Claude 4 написать полностью Express-приложение с эндпоинтами /api/habits и /api/auth, подключить Prisma, а заодно сгенерировать docker-compose.yml с бэкендом, постгресом и nginx как reverse proxy.

Единственная проблема — ИИ положил пароль к БД прямо в docker-compose.yml. Никогда так не делайте. Используйте переменные окружения через .env. Я поправил промпт: «Используй .env для конфиденциальных данных и добавь example.env в репозиторий». ИИ перегенерировал всё корректно.

В итоге запуск бэкенда выглядит так:

docker-compose up -d
# Бэк на localhost:3000, PostgreSQL на 5432, adminer на 8080

Красота. Но если у вас нет опыта с Docker, вы не поймете, почему сервис не стартует, если порт занят. Vibe-кодинг не отменяет базовых знаний инфраструктуры.

Фронтенд? А зачем? (Спойлер: React-админка)

Изначально я планировал только нативное приложение. Но потом захотел админ-панель для просмотра статистики. ИИ предложил сделать её на React с MUI, разместить в отдельном Docker-контейнере, а на Android добавить WebView для быстрого доступа.

Я сгенерировал React-панель через Cursor (IDE с ИИ), просто описывая компоненты голосом. Да, я разговаривал с компьютером: «Сделай таблицу с колонками привычка, пользователь, частота выполнения, добавь фильтр по дате». Cursor создал компонент, но стили были ужасны. Пришлось дописать промпт «используй Tailwind CSS, примени минималистичный дизайн как в Linear». Получилось неплохо.

Любопытный момент: я использовал подход из статьи Lovable Mobile — ИИ-генерация приложений прямо на устройстве, но для себя упростил: WebView с React-панелью грузится с сервера, а не генерируется локально. Зато быстро, и не требует одобрения Apple (у нас же Android).

База данных: Prisma — лучший друг ИИ-разработчика

ORM Prisma идеально подходит для vibe-кодинга, потому что её schema language очень декларативна. ИИ легко генерирует модели, индексы, связи. Вот как ИИ описал модель Habit:

model User {
  id        String   @id @default(cuid())
  email     String   @unique
  password  String
  habits    Habit[]
  createdAt DateTime @default(now())
}

model Habit {
  id        String   @id @default(cuid())
  userId    String
  title     String
  streak    Int      @default(0)
  lastDone  DateTime?
  user      User     @relation(fields: [userId], references: [id])
  logs      HabitLog[]
  createdAt DateTime @default(now())
}

model HabitLog {
  id        String   @id @default(cuid())
  habitId   String
  habit     Habit    @relation(fields: [habitId], references: [id])
  doneAt    DateTime @default(now())
}

Миграции создал через npx prisma migrate dev. ИИ даже сгенерировал seed-файл с тестовыми данными. Единственное — он забыл добавить составной уникальный индекс на (habitId, doneAt), чтобы нельзя было залогировать выполнение дважды в один день. Пришлось дописать самому, но это мелочь.

💡
Лайфхак: попросите ИИ написать тесты для вашей БД (на Jest или Mocha). Если тесты падают — скорее всего, в схеме ошибка. Я так выловил три бага в валидации на бэке.

Сборка APK и деплой — момент истины

Собрать APK вручную с Android Studio — полчаса. Но я хотел CI/CD. ИИ сгенерировал GitHub Actions workflow, который собирает релизный APK, подписывает его и пушит в Google Play Console через Gradle Play Publisher. Работало не сразу — ИИ забыл указать путь к keystore. Но после уточнения — полет нормальный.

Бэкенд я задеплоил на VPS через Docker Compose + Nginx + Let's Encrypt. Это моя родная стихия, тут ИИ не нужен. Но для полноты эксперимента попросил Claude написать Ansible-плейбук для развёртывания. Получилось криво, но после рефакторинга — сойдёт.

Боли, грабли и откровения

  1. ИИ не держит контекст. После 10-15 сообщений он начинает забывать, что говорил в начале. Приходится резюмировать: «Напомни, какой паттерн мы выбрали для репозитория?»
  2. Галлюцинации API. Gemini предложил использовать метод localBroadcastManager, который deprecated ещё в 2022. Пришлось явно указать: «Используй новейшие версии библиотек, проверь актуальность на 2026 год».
  3. Код без обработки ошибок. ИИ пишет позитивный сценарий. Try-catch, логирование, fallback — нужно добавлять отдельным промптом.
  4. Безопасность — ваша зона ответственности. ИИ вставил API ключ от Firebase прямо в код. Я ебанулся. Всегда проверяйте, не захардкодил ли AI секреты.

Результат: приложение в продакшене

Через 2 недели (вечерами, после работы) у меня было:

  • Android-приложение в Google Play (публичная бета).
  • Бэкенд на Node.js + PostgreSQL, завернутый в Docker.
  • React-админка.
  • CI/CD — пушим в main, через 10 минут новая версия в сторе.
  • ~500 активных пользователей за первую неделю (сарафанное радио).

Я не написал ни строчки кода руками. Но я написал около 200 промптов, потратил 20 часов на отладку и рефакторинг. Vibe-кодинг — это не магия, это новый способ программирования, где вы — архитектор и QA, а ИИ — клавиатура и компилятор.

Если хотите повторить — начните с малого. Не пытайтесь сразу сделать полноценный стартап. Сделайте Hello World через ИИ, потом экран с кнопкой, потом запрос к бэку. И только потом — продакшен. И обязательно читайте наш гайд по созданию Android-приложения с Claude и Android Studio — там разобраны базовые ошибки новичков.

Часто задаваемые вопросы (FAQ)

Какую модель ИИ лучше использовать для мобильной разработки?

Я переключался между Claude 4 (для длинных контекстов и архитектуры) и Gemini 3 Flash (для быстрых итераций и UI). Claude точнее в логике, Gemini быстрее. Для Android специфики (Compose, Lifecycle) лучше показал себя Claude.

Обязательно ли знать программирование?

Да. Вы должны хотя бы читать код и понимать, что такое база данных, API, JWT. Иначе вы не сможете найти ошибку в сгенерированном коде и рискуете запустить в продакшен уязвимое приложение.

Сколько это стоит?

Подписки на AI (Claude Pro $20/мес + Gemini Advanced $20/мес), сервер VPS $10/мес, аккаунт разработчика Google $25 (одноразово). Итого ~$50 в месяц. Считайте, сэкономили зарплату разработчика.

Как быть с лицензиями? Будет ли код принадлежать мне?

Код, сгенерированный ИИ, обычно принадлежит вам (читайте условия сервиса). Но я рекомендую не копипастить 1-в-1, а переписывать ключевые модули, чтобы избежать проблем с копирайтом.

На этом всё. Vibe-кодинг живёт и побеждает. Но не обольщайтесь — хороший архитектор всё ещё нужен. Им придётся стать вам.

Подписаться на канал