Для промт-инженеров · Lovable / GPT Engineer

Lovable — разработка проектов
шаг за шагом.

Пошаговая инструкция: от декомпозиции ТЗ и проектирования схемы данных — до интеграций, контроля контекста и ручного QA. Практические правила, проверенные на реальных проектах.

Чтение
~22 мин
Владелец
Prompt engineering
Глава 01

Инициализация и декомпозиция

С чего начать проект в Lovable — в зависимости от входных данных.

1.1

Вариант А · Старт с технического задания

#

Когда на руках есть ТЗ в виде текстового документа.

  • 01Загрузите файл ТЗ во вложение к первому промпту Lovable.
  • 02Попросите ИИ выполнить автоматическую декомпозицию: ключевая суть, технические требования, архитектурные нюансы и ограничения.
  • 03Обязательно потребуйте сначала спроектировать структуру таблиц БД (например, для Supabase) в виде SQL — и утвердите схему до генерации интерфейса.
  • 04ИИ должен вывести структурированный пошаговый план разработки прямо в чат.
Почему именно так

Утверждение схемы данных до UI экономит часы переписывания: интерфейс легко перерисовать, а изменение БД задним числом тянет за собой миграции, правки сервер-функций и RLS-политик.

1.2

Вариант Б · Старт с готового прототипа

#

Когда уже есть статический визуальный прототип.

  • 01Загрузите ТЗ во вложение к текущему проекту с прототипом.
  • 02Поставьте задачу на «оживление»: перевод статических компонентов на рабочую логику.
  • 03Строго сохраняйте существующий визуал — допускаются только минимальные технические корректировки UI.
Глава 02

Корректировка и утверждение плана

Финальная сверка до начала кодогенерации.

2.1

Ревью плана и схемы данных

#
  • Изучить предложенный ИИ план декомпозиции.
  • Изучить предложенную структуру БД (таблицы, связи, ключевые поля).
  • Вручную добавить бизнес-требования, которые ИИ упустил.
Команда на старт

«План и структура данных утверждены. Переходим к последовательной пошаговой реализации.» — короткая фраза-триггер, после которой Lovable работает по утверждённому плану.

Глава 03

Базовый функционал и ядро (Core)

В первую очередь — фундамент: пользователи, роли, права, админка.

3.2

Многопользовательский режим и роли

#

Разграничение прав доступа и ролевая модель: например, Пользователь / Модератор / Администратор. Роли всегда хранятся в отдельной таблице, а не на профиле.

RLS обязательно

Контролируйте, чтобы Lovable автоматически включал и настраивал политики Row Level Security в базе. Без RLS пользователи получают доступ к чужим записям — это инцидент безопасности, а не «бага».

3.3

Панель администратора

#
  • Статистика по зарегистрированным пользователям.
  • Блокировка и удаление учётных записей.
  • Ручное добавление пользователей при необходимости.
Глава 04

Интеграции и работа с API

Внешние сервисы подключаются после того, как ядро стабильно работает.

4.2

Интеграция с ИИ (LLM)

#

Если проект работает с нейросетями — подключение через прямой API-ключ (например, OpenAI) или через агрегатор OpenRouter.

Архитектурное требование

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

4.3

Безопасность ключей

#
Никакого хардкода

Строго запрещено хранить токены и секреты в кодовой базе. Все ключи подключаются только через настройки проекта в Lovable (переменные окружения / Secrets).

Глава 05

Контроль контекста и фиксация

Как не потерять рабочее состояние и выйти из тупика.

5.1

Точки отката · GitHub Sync

#

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

5.2

Борьба с циклическими ошибками

#
  • 01Если Lovable делает одну и ту же ошибку 3 раза подряд — остановите сессию.
  • 02Удалите последний некорректно сгенерированный код.
  • 03Вернитесь к стабильной точке из GitHub.
  • 04Переформулируйте задачу, разбив её на более мелкие подзадачи.
Глава 06

Контрольная сверка по ТЗ

Промежуточный аудит до этапа QA.

6.1

Проверка по утверждённому плану

#
  • Пройти каждый пункт плана декомпозиции, утверждённого на этапе 2.
  • Сверить кодовую базу и интерфейс с требованиями ТЗ.
  • Убедиться, что все функциональные требования закрыты.
Глава 07

Ручное тестирование и стабилизация (QA)

Финишный этап перед сдачей проекта.

7.1

Клик-тест

#

Лично прожмите каждую кнопку, форму, инпут, валидацию полей и ссылку в приложении. Никакой «выборочной» проверки — только сплошной проход.

7.2

Логирование багов

#
  • Фиксируйте все нестыковки, визуальные артефакты и логические ошибки.
  • Помечайте критичность: блокер / критичный / средний / косметика.
  • Сохраняйте сценарий воспроизведения — без него баг не баг.
7.3

Грамотная передача ошибок ИИ

#
Не пишите «не работает кнопка X»

Откройте консоль браузера (F12 → Console или Network), скопируйте точный текст технической ошибки и отправьте его в Lovable вместе с описанием контекста: что нажали, что ожидали, что произошло.

7.4

Финальная полировка

#

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

Глава 08

Перенос проекта с Lovable Cloud на self-hosted

Когда клиент требует держать данные и бэкенд на своей инфраструктуре.

8.1

Когда вообще имеет смысл переезжать

#

Lovable Cloud покрывает 90% задач: managed Supabase, edge-функции, деплой одной кнопкой. Переезд на self-hosted нужен только тогда, когда есть внешнее требование — политика клиента по хранению данных, корпоративный периметр, отдельный контур или экономика инфраструктуры на длинной дистанции.

Оцените стоимость поддержки

Self-hosted — это ваши обновления Supabase, ваши бэкапы, ваш SMTP, ваши SSL-сертификаты и ваш мониторинг. До переезда убедитесь, что клиент готов оплачивать сопровождение, а не только сам перенос.

8.2

Развилка по типу бэкенда

#
  • Вариант А — в проекте есть папка `supabase/` (миграции, edge-функции, `config.toml`). Стандартный маршрут: self-hosted Supabase на отдельном VPS + фронтенд на shared hosting.
  • Вариант Б — папки `supabase/` нет, бэкенд свой (Node/Bun/Deno, TanStack SSR, Nitro и т.п.). Нестандартный случай: один VPS, Docker Compose, Caddy как reverse-proxy. Каждый такой проект собирается индивидуально под свой стек.
Глава 09

Синхронизация Lovable ↔ GitHub

Первый обязательный шаг перед любым переносом.

9.1

Как работает двусторонний sync

#

Lovable подключается к GitHub через GitHub App и коммитит каждое изменение в `main` от имени бота `gpt-engineer-app[bot]`. Пока проект живёт в редакторе Lovable, ветка `main` — это фактически лог правок в формате git. В коммит попадает весь код приложения, `supabase/migrations/*.sql`, `supabase/functions/*` и служебная папка `.lovable/`.

  • 01В чате Lovable нажать «+» → пункт **Git** → **GitHub**.
  • 02Подтвердить установку GitHub App и создание репозитория.
  • 03Если репозиторий создаётся под корпоративным аккаунтом клиента — добавить свой личный GitHub в **Settings → Collaborators**, принять инвайт с почты.
  • 04Клонировать репозиторий локально — дальше вся работа идёт из склонированной директории.
Sync остаётся живым

После подключения бот продолжает коммитить в `main` на каждую правку в UI Lovable. Не пушьте в `main` руками правки, которые сломают этот поток — держите вашу инфраструктурную обвязку в отдельной ветке (см. этап 11).

Глава 10

Выделение ресурсов под self-hosted

Что подготовить до запуска автоматизации.

10.1

Фронтенд-хостинг (пример — Beget shared)

#
  • Проверить лимит сайтов по тарифу, при необходимости расширить.
  • Выбрать домен или создать поддомен на уже используемом домене — новые домены увеличивают счёт.
  • Выпустить SSL-сертификат для домена/поддомена (Let's Encrypt в панели); применение может занять до нескольких часов.
  • Создать сайт, привязать домен, включить редирект HTTP → HTTPS.
  • Включить SSH/SFTP на аккаунте, зафиксировать логин/пароль/порт в защищённом хранилище (не в коде и не в этой инструкции).
  • Создать почтовый ящик `noreply-<сервис>@домен` для SMTP приложения (подтверждения регистрации, сброс пароля).
10.2

Backend-сервер · self-hosted Supabase

#
  • 01В облачной панели хостинга создать VPS из готового решения **Supabase** (Docker и compose уже подняты).
  • 02Сохранить root-пароль сервера и креды админ-панели Supabase.
  • 03Дать серверу говорящее имя, чтобы не путать с другими Supabase-инстансами на аккаунте.
  • 04Сгенерировать отдельный SSH-ключ на проект (`~/.ssh/<project>/id_ed25519`), не смешивать с общим ключом.
  • 05Добавить запись `Host <alias>` в `~/.ssh/config` с `HostName`, `Port`, `User root`, `IdentityFile` и `IdentitiesOnly yes`.
ssh-config· ~/.ssh/config — пример алиаса
Host supabase_project_v1
    HostName 217.114.8.105
    Port 22
    User root
    IdentityFile ~/.ssh/projects/project/id_ed25519
    IdentitiesOnly yes
Алиас = имя скилла

Значение `Host` из `~/.ssh/config` — это ровно то, что скилл `setup-deploy-supabase` спросит как `SUPABASE_SSH_ALIAS`. Дальше он сам поставит ключ через `ssh-copy-id`, отключит `PasswordAuthentication` и вычитает `.env` self-hosted Supabase с сервера.

Глава 11

Стратегия веток main / deploy

Как разделить код приложения и инфраструктурную обвязку.

11.1

Роли веток

#
  • `main` — чистый Lovable-sync. Только код приложения, миграции, функции. Все правки поведения приложения идут сюда первыми.
  • `deploy` — это `main` + deploy-обвязка поверх: `Makefile`, `deploy.js`, `scripts/db-connect.sh`, `.htaccess`, реальный `.env` с self-hosted значениями, роутер edge-функций `supabase/functions/main/index.ts`.
  • Направление одностороннее: `main → deploy`. Никогда не мержить `deploy` обратно в `main` целой веткой.
.gitattributes с merge=ours

Deploy-only файлы защищаются `merge=ours` — при `git merge main` внутри `deploy` они не перезаписываются. Если правку случайно сделали прямо в `deploy` и она касается приложения (не обвязки) — переносите её в `main` через `git cherry-pick`, а не через обратный merge.

bash· Рабочий цикл
# правка → main (напрямую или через feature-ветку)
git checkout main
# ... коммит ...

git checkout deploy
git merge main
make deploy          # прогон этапов 5–7
git push origin main deploy
Глава 12

Секреты, миграции и edge-функции

Что делает скилл `setup-deploy-supabase` и какие грабли важно понимать.

12.1

Переменные окружения и секреты

#
  • Скилл сам вычитывает `ANON_KEY` и `API_EXTERNAL_URL` с сервера по SSH и переписывает `.env` в ветке `deploy` (`VITE_SUPABASE_URL`, `VITE_SUPABASE_PUBLISHABLE_KEY`).
  • На стороне self-hosted Supabase донастраиваются `SITE_URL`, `ADDITIONAL_REDIRECT_URLS` и SMTP.
  • После правки `.env` контейнер `auth` пересоздаётся `docker compose up -d` — `restart` не перечитывает `.env`.
  • `.env.deploy` (SSH-пароли, пароль Postgres) хранится только локально и никогда не коммитится.
Грабли, которые ловили на проде

`ADDITIONAL_REDIRECT_URLS` обязательно с wildcard (`https://domain/**`), иначе GoTrue отбрасывает нестандартные `redirect_to` и откатывается на корень — ломается сброс пароля. На Beget VPS SMTP работает только через `smtp.beget.com:2525`; порты 465/587 заблокированы провайдером.

12.2

Миграции БД на self-hosted Postgres

#

Скилл прогоняет `supabase/migrations/*.sql` по порядку через `make db-migrate-remote`, версии трекаются в `supabase_migrations.schema_migrations`. Дважды одну и ту же миграцию накатить нельзя.

Пишите миграции с учётом self-hosted

PostgREST на любой мутации делает `RETURNING *` — роли нужен SELECT на все колонки, включая секретные (`client_secret`, `access_token`), иначе 403. Обходы: generated-колонки с булевыми флагами (`has_client_id`) или `SECURITY DEFINER` RPC вместо прямых `.update()`. Для новых таблиц не забывайте `GRANT` на роль `authenticated` — Lovable Cloud мог давать их автоматически, self-hosted — нет.

12.3

Edge Functions и обязательный роутер

#

Скилл синхронизирует `supabase/functions/` на сервер и пересоздаёт контейнер (`stop && rm -f && up -d`, а не `restart`). Дополнительно кладёт файл `supabase/functions/main/index.ts` — это роутер, без которого self-hosted edge-runtime падает при старте (`could not find an appropriate entrypoint`) и все функции отдают 503.

main/ — только в ветке deploy

На Supabase Cloud роутер `main/` не нужен и не должен деплоиться — роутинг делает платформа. Файл живёт только в ветке `deploy` и защищён `merge=ours`.

Глава 13

Деплой фронтенда и smoke-тест

Финальные шаги переноса.

13.1

Сборка и заливка фронтенда

#

`make deploy` собирает статику (`npm ci && npm run build`), копирует `.htaccess` в `dist/` и синкает `rsync dist/ → сервер` (через `sshpass`, т.к. shared hosting обычно только пароль). `.htaccess` из шаблона решает SPA-роутинг (все запросы, кроме реальных файлов, ведут на `index.html`) и кэширование (`index.html` — `no-cache`, хэшированные ассеты — `immutable`).

bash· Проверка после деплоя
curl -s https://<домен>/ | head -20
# Если хостинг ставит anti-bot cookie-челлендж (Beget: beget=begetok),
# добавьте куку в запрос — иначе кажется, что деплой не сработал.
13.2

Smoke-тест на живом пользователе

#
  • Регистрация нового пользователя.
  • Письмо-подтверждение реально приходит на почту.
  • Логин, основные разделы приложения, ключевые интеграции.
  • Сброс пароля end-to-end — часто ловит редирект, уводящий мимо формы.
  • Проверка истории git на утечку секретов: `git log -p -- .env.deploy` и grep по `service_role`.
Email-флоу без спама

Для проверки писем без реальной отправки используйте admin API: `POST /auth/v1/admin/generate_link` с `service_role` ключом — получаете одноразовую ссылку напрямую.

Глава 14

Известные грабли self-hosted

Что держать в голове на длинной дистанции.

14.1

Список подводных камней

#
  • Кэширующий слой хостинга перед Apache (у Beget — `nginx-reuseport` + анти-бот прослойка) кэширует `index.html` независимо от `Cache-Control`. Диагностируется сравнением `Last-Modified`/`Date` в ответах с `Cache-Control: no-cache` и без него. Исправляется отключением «Ускорения сайта» в панели или ручной чисткой кэша после каждого деплоя.
  • `docker compose restart` не перечитывает `.env` — только `up -d`.
  • SMTP на Beget VPS: только порт 2525, 465/587 заблокированы.
  • `ADDITIONAL_REDIRECT_URLS` в GoTrue — только с wildcard.
  • В `Makefile` внутри `-F ~/.ssh/config` тильда не раскрывается в кавычках — используйте `$(HOME)/.ssh/config`.
14.2

Вариант Б · проекты без Supabase

#

Проекты со своим бэкендом (TanStack SSR/Nitro, Node/Bun и т.п.) переезжают на один VPS с Docker Compose: сервис `app` отдаёт и статику, и бэкенд одним процессом, сервис `caddy` — reverse-proxy с автоматическим Let's Encrypt SSL и security-заголовками. Процесс держится Docker'ом (`restart: unless-stopped`), отдельных systemd-юнитов на хосте нет.

  • Скилл `setup-caddy` закрывает только reverse-proxy и SSL — остальное (`Dockerfile`, `docker-compose.yml`, `Makefile`) пишется вручную под конкретный стек проекта.
  • Два SSH-алиаса: `..._ansible` (root, только для первичного бутстрапа) и `..._developer` (без sudo, в группе `docker`, для повседневных `make deploy`). Root-логин по паролю отключён.
  • Ветки `main`/`deploy` — та же идея, но `merge=ours` защищает другой набор файлов: `Dockerfile`, `docker-compose.yml`, `Caddyfile`, `Makefile`, `.dockerignore`, self-hosted-специфичный код авторизации. `package.json` не защищён — обычный three-way merge.
Готового скилла на весь Вариант Б нет

Каждый такой проект требует адаптации под свой стек. Практический подход: сначала привлечь агента для исследования конкретной архитектуры бэкенда, и только после этого проектировать деплой — не пытаться натянуть Вариант А силой.

Глава 15

Автоматизация — Claude-скиллы

Готовые скилл-пакеты, закрывающие рутину переноса.

15.1

setup-deploy-supabase (Вариант А)

#

Пакет `setup-deploy-supabase.zip` (Claude-скилл) создаёт ветку `deploy`, `Makefile`, `deploy.js`, `.gitattributes`, роутер edge-функций и `.htaccess` по шаблонам. Закрывает автоматикой этап 11 и частично 12–13. Устанавливается как глобальный скилл (`~/.claude/skills/`) или скилл проекта (`.claude/skills/`).

  • Шаблоны внутри: `Makefile.template`, `deploy.js.template`, `db-connect.sh.template`, `functions-main.template`, `env-deploy-example.template`, `gitattributes.template`, `htaccess.template`, `gitignore-additions.txt`.
  • Этапы 9 и 10 (sync с GitHub, выделение ресурсов) пока в скилл не входят — делаются руками по чек-листам выше.
15.2

setup-caddy (Вариант Б)

#

Пакет `setup-caddy.zip` настраивает Caddy как reverse-proxy с автоматическим Let's Encrypt SSL для Docker-проектов. Закрывает только Caddy-часть Варианта Б — не весь деплой целиком. Внутри: `docker-compose.caddy.yml.template`, `Caddyfile.template`, `dockerignore-additions.txt`.

Если работаете не с Claude Code

Формат скиллов — `SKILL.md` + шаблоны. Попросите свою агентскую систему адаптировать пакет под её возможности и установить аналогичным образом.