Узнайте, как корректно экспортировать исходный код из платформы vibe-coding и получить чистое владение: запуск локально, настройка CI, управление секретами и подготовка репозитория для передачи.

Владение кодом — это больше, чем просто получить zip‑архив от платформы. Это значит, что вы можете собрать, запустить, изменить и выпустить приложение без обращения к исходной рабочей среде, специальным кнопкам или скрытым настройкам. Проект, которым вы действительно владеете, ведёт себя как обычный репозиторий: новый участник может склонировать его, запустить на ноутбуке и задеплоить через стандартный пайплайн.
Большая часть тревог о «замкнутости» происходит из одних и тех же пробелов:
Ещё одна частая неприятность — когда приложение на хостинге работает нормально, а локально падает из‑за того, что переменные окружения, настройка базы данных или секреты никогда не были вынесены в открытом виде.
Чистый экспорт из платформы vibe‑coding (например, Koder.ai) должен приводить к четырём результатам:
Это важно даже если вы не планируете уходить с платформы. Здоровая позиция владения — это страховка: она снижает риски, упрощает аудит и делает переговоры проще, если вы наймёте агентство, будете привлекать инвестиции или менять команды.
Если вы использовали Koder.ai, экспорт может включать привычные стеки: React‑веб, Go‑бэкенд, PostgreSQL или Flutter‑мобильное приложение. Стек важен меньше, чем принцип: всё, что нужно для запуска, должно быть видно в репозитории, а не затеряно в хостинге.
Представьте себе основателя, передающего приложение подрядчику. «Вот репозиторий» должно быть достаточно. Подрядчик не должен требовать доступ к исходному проекту на платформе, чтобы узнать базовый URL API, создать схему базы данных или понять, как собирать фронтенд.
После экспорта у вас должен быть обычный репозиторий, который можно открыть в редакторе, запустить на ноутбуке и передать другой команде без привязки к платформе.
В проектах Koder.ai экспорт часто соответствует знакомой структуре: React‑веб, Go‑бэкенд и (если оно есть) Flutter‑мобильное приложение. Имена папок варьируются, но репозиторий должен ясно показывать, где что находится и как части связаны.
Начните с поиска точек входа и предполагаемого рабочего процесса. Вам нужен первый файл, который поднимает каждое приложение, и скрипты, которые показывают, как предполагается разрабатывать и запускать проект.
Типичные признаки:
package.json и папка src/ (часто с main.tsx или подобным)go.mod и папка cmd/ или main.gopubspec.yaml и lib/main.dart для FlutterREADME или Makefile, где описано, как всё запускатьdocker-compose.yml, если экспорт рассчитан на запуск набора сервисовЗависимости должны быть зафиксированы. Для JavaScript это означает lockfile (package-lock.json, yarn.lock или pnpm-lock.yaml). Для Go — go.mod и go.sum. Отсутствие фиксированных версий не делает проект невозможным для запуска, но усложняет воспроизводимые сборки.
Конфигурация должна быть отделена от кода. Ищите примеры вроде .env.example или config.example.yaml. В экспорте не должно быть реальных секретов (API‑ключей, продакшн‑паролей). Если что‑то такое обнаружено — считайте это утечкой и быстро ротируйте ключи.
Для работы с базой найдите папку миграций (migrations/, db/migrations/) или SQL‑файлы с метками времени. В Go + PostgreSQL‑приложении вы можете также увидеть небольшой раннер миграций или скрипт их применения.
Быстрая проверка на месте: сначала найдите команды сборки и запуска (npm run dev, go run, make и подобные). Если скрипт вызывает команду, существующую только на платформе, замените её стандартными инструментами прежде чем считать репозиторий независимым.
Обращайтесь с экспортом как с релиз‑артефактом. Перед запуском пройдитесь быстрым чек‑листом «всё ли здесь». Пропущенные элементы легче найти до того, как вы начнёте менять код.
Практическая проверка полноты — найти «корни» каждой части: package.json для React, go.mod для Go и файлы миграций/seed для PostgreSQL.
Создайте новый Git‑репозиторий из экспортированной папки и закоммитьте ровно то, что получили, прежде чем менять что‑то. Это даст базовую точку и упростит ревью последующих изменений.
git init
# Optional: set default branch name
# git branch -M main
git add -A
git commit -m "Initial export"
Теперь запускайте локально небольшими, проверяемыми шагами. Устанавливайте зависимости, создавайте локальную конфигурацию, поднимайте базу данных сначала, затем бэкенд, затем фронтенд. По ходу записывайте все команды, которые вы реально использовали — эти заметки станут вашим README.
Ниже простой набор команд, который можно адаптировать под структуру экспорта:
# Frontend
cd web
npm install
npm run dev
# Backend
cd ../server
go mod download
go run ./cmd/server
Сервер может подняться, но приложение всё ещё быть сломанным. Убедитесь, что оно читает и записывает данные.
Выберите быстрые проверки, соответствующие продукту:
relation does not exist.Когда локальный запуск работает, превратите ваши рабочие заметки в настоящий README.md с командами copy‑paste: откуда запускать команды, в каком порядке стартовать сервисы и какие переменные окружения требуются.
Экспорт может запускаться, но всё ещё выглядеть «сгенерированным», а не «принадлежащим вам». Репозиторий, готовый к передаче, ясно показывает, где что лежит, как запускать проект и как поддерживать согласованность.
Начните с понятной верхнеуровневой структуры. Имена важны меньше, чем последовательность.
apps/ — фронтенды (web, mobile)services/ — API, воркеры и джобыshared/ — общие типы и утилитыinfra/ — шаблоны деплоя, скрипты и примеры окруженийdocs/ — архитектурные заметки и runbook‑ыЗатем добавьте небольшой набор файлов, которые уберут догадки:
README.md с предусловиями и точными командамиCONTRIBUTING.md с несколькими правилами (ветки, PR, никаких секретов).gitignore, чтобы локальные .env и артефакты сборки не попали в GitДержите README практичным. Если в репозитории несколько частей (React, Go, PostgreSQL), пропишите порядок старта и где лежит конфигурация (например, «копируйте .env.example в .env»).
Сделайте проверку на «чистой машине»: склонируйте в новую папку и следуйте своему README. Если экспорт пришёл из Koder.ai, считайте его первым коммитом независимого проекта, и только потом приглашайте других.
Хорошая локальная настройка отвечает на один вопрос быстро: сможет ли новый участник запустить приложение за 15 минут без догадок.
Выберите основной локальный подход и опишите его явно. Нативные установки быстры для тех, у кого уже есть нужные инструменты. Контейнеры дают согласованность между машинами, но добавляют сложность. Если вы поддерживаете оба варианта, отметьте один как основной, другой — опциональный.
Простой рабочий паттерн: одна страница README, один примерный .env и одна bootstrap‑команда.
Закоммитьте примерный файл с фейковыми значениями, чтобы люди понимали, что нужно заполнить, не сливая секреты.
# .env.example (примерные значения)
APP_ENV=local
PORT=8080
DATABASE_URL=postgres://app_user:app_pass@localhost:5432/app_db?sslmode=disable
JWT_SECRET=change-me
API_BASE_URL=http://localhost:8080
В README опишите, где хранится реальный файл (например, «скопировать в .env») и какие переменные обязательны, а какие — опциональны.
Добавьте небольшой скрипт, который выполняет скучные шаги в нужном порядке. Держите его читаемым.
#!/usr/bin/env bash
set -euo pipefail
cp -n .env.example .env || true
# Backend deps
cd backend
go mod download
# Database: create, migrate, seed
./scripts/db_create.sh
./scripts/db_migrate.sh
./scripts/db_seed.sh
# Frontend deps
cd ../web
npm install
Для БД опишите три вещи: как создать БД, как применяются миграции и как получить seed‑данные для реалистичного первого запуска.
Наконец, добавьте быстрый health‑чек, чтобы люди могли убедиться, что приложение работает до того, как начнут кликать. Небольшая конечная точка вроде GET /health, возвращающая ok и проверяющая доступность БД, часто достаточно.
После экспорта код может быть вашим, но секреты должны оставаться приватными. Предположите, что репозиторий будут просматривать новые коллеги.
Начните с инвентаризации того, что нужно приложению для работы. Не догадывайтесь — просмотрите код на предмет чтения конфигурации (переменные окружения, конфиг‑файлы) и проверьте интеграции, которые вы включали.
Базовый список секретов обычно включает: учётные данные БД, сторонние API‑ключи, настройки аутентификации (OAuth или JWT), креденшалы хранилища и специфичные для приложения секреты вроде ключей шифрования или секретов вебхуков.
Решите, где хранится каждый секрет в каждом окружении. Хорошее правило по умолчанию:
.env, который хранит разработчик (не коммитится)Если экспорт происходил из платформы вроде Koder.ai, предполагайте, что всё, что отображалось в чате, логах или панелях настроек, могло быть скопировано. Сразу вынесите секреты из репозитория.
Практический подход: закоммитьте шаблон (.env.example), держите реальные значения вне Git (добавьте .env в .gitignore) и внедряйте продакшн‑секреты на этапе деплоя.
Если есть вероятность, что секреты были раскрыты при экспорте — ротируйте их. В приоритете: пароли БД, OAuth‑секреты и подписывающие ключи вебхуков.
Добавьте пару защитных мер: pre‑commit‑проверку на очевидные паттерны секретов, скан в CI, строгую загрузку конфигурации с быстрым падением при отсутствии обязательных переменных и отдельные креденшалы для разных окружений.
Короткий SECRETS.md упростит передачу: что обязательно, где хранится для каждого окружения и кто отвечает за ротацию.
Когда вы берёте проект под контроль, CI — это ваша страховка. Держите первую версию маленькой. Каждый пуш должен проверять, что проект собирается, базовые проверки проходят и тесты не падают.
CI должен быстро отвечать на вопрос: «Безопасно ли сливать это изменение?» Для большинства репозиториев это значит: установить зависимости, собрать, прогони линтеры и юнит‑тесты.
Разделяйте джобы по частям приложения, чтобы при падении было ясно, что сломалось:
Используйте кэширование, но не позволяйте кэшу скрывать проблемы. При отсутствии кэша CI должен всё равно работать, просто медленнее.
Предпочитайте одну команду на шаг (make test, npm run test), чтобы та же команда работала локально и в CI. Это сокращает расхождения и делает логи короче.
Пример структуры (адаптируйте под ваш репозиторий):
jobs:
web:
steps:
- run: npm ci
- run: npm run lint
- run: npm run build
api:
steps:
- run: go test ./...
- run: go build ./...
Когда базовые проверки стабильны, добавьте простой релиз‑флоу: тегирование релизов, сборка артефактов и сохранение их как CI‑артефактов. Даже если вы всё ещё деплоите с платформы, воспроизводимые артефакты облегчают смену хоста позже.
Экспорт кода — это только половина дела. Другая половина — сделать так, чтобы проект вёл себя одинаково вне платформы.
Экспорты часто зависят от переменных окружения, миграций, seed‑данных и шагов сборки, которые выполнялись за вас. Пустой экран или ошибка БД при первом запуске — нормальны.
Сделайте базовый запуск до изменений: установите зависимости, задайте env‑переменные, примените миграции и запускайте сервисы по порядку. Исправляйте только то, что нужно, чтобы воспроизвести ожидаемую конфигурацию.
Самая частая оплошность — коммит реальных ключей или паролей, часто через скопированный .env или автоматически сгенерированный конфиг.
Коммитите только шаблоны. Реальные значения держите в локальной среде или в хранилище секретов.
Раннее обновление пакетов или реорганизация папок усложняет отладку: непонятно, откуда произошла проблема — от экспорта или от ваших изменений.
Сначала добейтесь рабочего запуска, затем вносите улучшения отдельными небольшими коммитами.
«Работает на моей машине» часто связано с незакреплёнными версиями инструментов (Node, Go, Flutter) или менеджеров пакетов.
Фиксируйте версии рантаймов в явном месте (файл или README), сохраняйте lockfile (package-lock, go.sum, pubspec.lock) и проверяйте установку на второй машине или в чистом контейнере.
Передачи проваливаются из‑за одной странной команды, которую никто не помнит. Запишите её, пока она ещё свежа: обязательные переменные окружения, как запускать миграции, куда писать логи и как сбрасывать локальное состояние.
Трёхчленная команда строит портал клиентов в Koder.ai: React‑веб, Go API и PostgreSQL. При передаче внешней команде они хотят, чтобы экспорт выглядел как обычный репозиторий, который можно запустить с первого дня.
День 1: экспорт, новый Git‑репозиторий и локальный запуск. Фронтенд стартует, а API падает из‑за отсутствующих переменных окружения. Они не угадывают: читают код, находят точные ключи, нужные для работы, и добавляют .env.example с плейсхолдерами. Реальные значения остаются в менеджере паролей и в локальных .env.
Они также замечают, что порты и CORS на платформе были преднастроены, а локально нужны предсказуемые значения. Устанавливают по умолчанию, например API на 8080 и веб на 3000, чтобы новые машины вели себя одинаково.
День 2: добавляют миграции и простой seed‑скрипт, который создаёт демо‑пользователя и несколько строк. Затем пишут короткий README с предусловиями, командами запуска и проверкой работоспособности (health‑эндпоинт для API и пример логина для UI).
День 3: добавляют базовый CI, который запускает тесты, линтинг и сборку для обоих сервисов при каждом pull request. Для staging документируют простой план: собрать контейнеры, задать секреты в окружении, применить миграции при деплое и иметь опцию отката.
Хорошая передача обычно включает репозиторий, который запускается локально из чистого клона, .env.example и заметки, где хранятся секреты, миграции и seed‑данные, CI‑проверки, которые быстро падают при ошибках, и короткую заметку по деплою и откату.
Прежде чем считать экспорт завершённым, докажите, что проект может жить вне платформы. Если другой разработчик может запустить его без догадок — всё в порядке.
Используйте окончательный чек‑лист:
После технической проверки сделайте владение явным: решите, кто отвечает за обновления зависимостей, изменения инфраструктуры (БД, очереди, DNS) и релизы. Если никто за это не отвечает, репозиторий со временем деградирует, даже если сегодня всё работает.
Запланируйте короткий период стабилизации перед большим фичерелизом. Два‑пять рабочих дней обычно достаточно, чтобы устранить шероховатости экспорта, усилить README и убрать «работает на моей машине»‑проблемы.
Если вы используете Koder.ai (koder.ai), экспорты плюс функции вроде снимков и отката облегчают итерации, пока вы укрепляете репозиторий. Когда репозиторий стабилен, держите Git источником правды и рассматривайте будущие экспорты как контрольные точки, а не как основную историю.
Определите следующую цель передачи простыми словами: «Любой разработчик сможет запустить это за 30 минут». Проверьте это, попросив кого‑то нового выполнить README на чистой машине. Их вопросы станут вашим финальным списком задач.
Рассматривайте владение как независимость: вы можете собрать, запустить, изменить и деплоить приложение из обычного репозитория, не обращаясь к исходному проекту на платформе, не полагаясь на скрытые UI‑настройки и не требуя «чёрных ящиков» для сборки.
Хорошая проверка: сможет ли новый участник команды клонировать репозиторий и запустить проект, следуя только README?
Начните с быстрой проверки наличия всего необходимого:
package.json, go.mod, pubspec.yaml).package-lock.json, yarn.lock, pnpm-lock.yaml, go.sum).migrations/ или похожие папки).README, Makefile, скрипты или docker-compose.yml).Если что‑то нужное для запуска описано только в UI или в чате — перенесите это в репозиторий.
Делайте всё по шагам и проверяйте результаты на каждом из них:
.env.example → .env.Потому что на хостинге могли быть вещи, которые вы не явно не указали в коде:
Сделайте настройку явной: добавьте .env.example, скрипты миграций и README с точными командами.
Стартап сервера — это ещё не гарантия корректной работы приложения. Проверьте поток данных:
relation does not exist.Если вы не можете локально воспроизвести изменения данных, значит настройка или миграции неполные.
Стандартный подход:
.env.example с примерными (фейковыми) значениями..env в .gitignore.Если вы обнаружили реальные ключи в репозитории, предполагается их компрометация — немедленно ротируйте их (в первую очередь пароли БД, OAuth‑секреты и ключи вебхуков).
Сделайте CI простым и согласованным с локальными командами:
go test ./..., линтеры/форматтеры.Пусть CI вызывает те же скрипты, что и разработчики (make test, npm run build и т.п.), — так вы уменьшите рассинхрон между локальным запуском и CI.
Да. Даже если проект уже запускается, документация делает передачу предсказуемой. Минимум:
README.md с командами «копировать‑вставить»..env.example, где отмечены обязательные и необязательные переменные.Цель: новый разработчик должен запустить приложение за 15–30 минут без догадок.
Частая и удобная структура:
apps/ — фронтенды (web, mobile).services/ — API, воркеры и джобы.shared/ — общие типы и утилиты.infra/ — шаблоны деплоя и примеры окружений.Названия менее важны, чем ясность: должно быть очевидно, что где запускается и как части связаны друг с другом.
Практическая последовательность действий:
Когда всё стабильно, считайте Git источником правды, а будущие экспорты с платформы — контрольными точками, а не основным историей.
Не рефакторьте сразу — сначала убедитесь, что проект запускается «как есть», затем вносите улучшения отдельными коммитами.