Exporta el código fuente desde una plataforma de vibe-coding de forma limpia
Aprende a exportar el código fuente desde una plataforma de vibe-coding y conservar la propiedad: ejecutar localmente, configurar CI, gestionar secretos y preparar un repo listo para traspaso.

Qué significa tomar propiedad después de la exportación
Poseer el código es más que recibir un zip desde una plataforma. Significa que puedes compilar, ejecutar, cambiar y enviar la app sin necesitar el workspace original, botones especiales o ajustes ocultos. Un proyecto que realmente posees se comporta como cualquier repo normal: un compañero puede clonarlo, arrancarlo en su portátil y desplegarlo mediante un pipeline estándar.
La mayoría de la ansiedad por lock-in viene de unos pocos huecos recurrentes:
- Configuración que existe solo en la UI de la plataforma
- Pasos de compilación que ocurren "en otro lugar"
- Dependencias que se asumen pero no están documentadas
Otra sorpresa común es que la app funcione bien en la versión alojada, pero falle localmente porque variables de entorno, configuración de la base de datos o secretos nunca se hicieron explícitos.
Una exportación limpia desde una plataforma de vibe-coding debería conducir a cuatro resultados:
- Puedes ejecutar la app exportada localmente con pasos predecibles.
- Puedes desplegarla desde tu propio repo usando CI, no clics manuales.
- Los secretos se manejan de forma segura (sin claves en Git, sin adivinanzas).
- El repo está listo para el traspaso, de modo que una nueva persona pueda incorporarse rápido y confiar en lo que ve.
Esto importa aunque nunca planees abandonar la plataforma. Una postura sólida de propiedad es un seguro: reduce riesgos, facilita auditorías y simplifica negociaciones si contratas una agencia, buscas financiación o cambias de equipo.
Si usaste Koder.ai, tu exportación puede incluir stacks comunes como una app web React, un backend en Go, PostgreSQL o una app móvil Flutter. El stack importa menos que el principio: todo lo necesario para ejecutar debe ser visible en el repositorio, no atrapado en un entorno alojado.
Imagina a un fundador entregando una app a un contratista. "Aquí está el repo" debería ser suficiente. El contratista no debería necesitar acceso al proyecto original de la plataforma para encontrar la URL base de la API, crear el esquema de la base de datos o aprender a compilar el frontend.
Qué deberías esperar en un proyecto exportado
Después de exportar, deberías tener un repositorio normal que puedas abrir en un editor, ejecutar en tu portátil y entregar a otro equipo sin necesitar la plataforma original.
En proyectos de Koder.ai, las exportaciones suelen mapear a estructuras familiares: una app web React, un backend en Go y (si la construiste) una app móvil Flutter. Los nombres de carpetas varían, pero el repo debe dejar claro dónde vive cada parte y cómo se conectan.
La forma del proyecto: carpetas, puntos de entrada y qué ejecuta qué
Empieza ubicando los puntos de entrada y el flujo previsto. Quieres el primer archivo que arranca cada app, además de los scripts que muestran cómo desarrollar y ejecutarla.
Señales típicas:
- Web: un
package.jsonmás una carpetasrc/(a menudo conmain.tsxo similar) - Backend:
go.mody una carpetacmd/omain.go - Móvil:
pubspec.yamlde Flutter ylib/main.dart - Un
READMEoMakefileen el nivel superior que describa cómo ejecutar todo - Un
docker-compose.ymlsi la exportación está pensada para ejecutarse como un conjunto de servicios
Dependencias, configuración y piezas de base de datos
Las dependencias deberían estar fijadas. Para JavaScript eso significa un lockfile (package-lock.json, yarn.lock o pnpm-lock.yaml). Para Go, go.mod y go.sum. La ausencia de pins no hace imposible ejecutar el proyecto, pero dificulta builds reproducibles.
La configuración debe estar separada del código. Busca ejemplos como .env.example o config.example.yaml. No deberías ver secretos reales (claves API, contraseñas de producción) comprometidos en la exportación. Si los ves, considéralos una filtración y rótalos.
Para trabajo con base de datos, localiza una carpeta de migraciones (migrations/, db/migrations/) o archivos SQL con marcas temporales. En una app Go + PostgreSQL también puedes encontrar un pequeño runner de migraciones o un script que aplica las migraciones.
Una comprobación rápida de sentido común: ubica primero los comandos de build y ejecución (npm run dev, go run, make y similares). Si un script depende de un comando exclusivo de la plataforma, reemplázalo por herramientas estándar antes de declarar el repo independiente.
Paso a paso: exportar, commitear y ejecutar localmente
Trata la exportación como un artefacto de release. Antes de ejecutar nada, haz un rápido pase de "¿está todo aquí?". Las piezas faltantes son más fáciles de detectar ahora que después de empezar a cambiar cosas.
Una comprobación práctica de completitud es buscar las “raíces” de cada parte: un package.json para una web React, un go.mod para un backend Go y archivos de migración/seed para PostgreSQL.
Un primer commit limpio (para que el historial empiece legible)
Crea un repositorio Git fresco desde la carpeta exportada y commitea exactamente lo que recibiste antes de arreglar nada. Eso te da una línea base limpia y facilita revisar los cambios posteriores.
git init
# Optional: set default branch name
# git branch -M main
git add -A
git commit -m "Initial export"
Ahora ejecuta localmente en pasos pequeños y verificables. Instala dependencias, crea la configuración local, arranca la base de datos primero, luego el backend y por último el frontend. Mientras lo haces, anota cada comando que realmente usas. Esas notas se convertirán en tu README.
Aquí hay una secuencia de comandos simple que puedes adaptar a tu estructura exportada:
# Frontend
cd web
npm install
npm run dev
# Backend
cd ../server
go mod download
go run ./cmd/server
Confirma que la base de datos realmente funciona (no solo que el "servidor arrancó")
Un servidor puede iniciar mientras la app sigue rota. Confirma que puede leer y escribir datos.
Elige comprobaciones rápidas que coincidan con el producto:
- Abre una página que dependa claramente de datos (una lista, perfil, dashboard).
- Crea un registro (registro de usuario, crear ítem, añadir nota), actualiza y confirma que se persistió.
- Ejecuta una actualización y un borrado si la UI lo permite.
- Observa los logs por errores de migración o "relation does not exist".
Una vez tengas una ejecución local funcional, convierte tus notas en un README.md real con pasos copy-paste: desde dónde ejecutar comandos, el orden para iniciar servicios y qué variables de entorno son necesarias.
Transforma la exportación en un repo listo para el traspaso
Una exportación puede ejecutarse, pero aún parecer "generada" en lugar de propia. Un repo listo para el traspaso deja claro dónde viven las cosas, cómo ejecutar el proyecto y cómo mantenerlo consistente.
Comienza con un layout claro en el nivel superior. Los nombres importan menos que la consistencia.
apps/para frontends orientados a usuarios (web, móvil)services/para APIs, workers y jobsshared/para tipos y utilidades compartidasinfra/para plantillas de despliegue, scripts y ejemplos de entornodocs/para notas de arquitectura y runbooks
Luego añade un pequeño conjunto de archivos que reduzcan las adivinanzas:
README.mdcon prerrequisitos y comandos exactosCONTRIBUTING.mdcon unas reglas simples (branches, PRs, no secretos).gitignorepara mantener archivos de entorno local y outputs fuera de Git
Mantén el README práctico. Si el repo incluye varias partes (frontend React, API Go, PostgreSQL), explica el orden para arrancarlas y dónde vive la configuración (por ejemplo, "copia .env.example a .env").
Haz una comprobación en máquina limpia: clona en una carpeta nueva y sigue tu propio README. Si exportaste desde Koder.ai, trata la exportación como el primer commit de un proyecto independiente y solo entonces invita a otros.
Setup de desarrollo local que los nuevos puedan seguir
Un buen setup local responde a una pregunta rápidamente: ¿puede un nuevo desarrollador poner la app en marcha en menos de 15 minutos sin adivinar?
Elige un enfoque local por defecto y sé explícito. Las instalaciones nativas son rápidas para quienes ya tienen las herramientas correctas. Los contenedores son más consistentes entre máquinas pero añaden sobrecarga. Si soportas ambos, etiqueta uno como por defecto y el otro como opcional.
Un patrón simple que funciona bien: una página del README, un archivo de env de ejemplo y un comando bootstrap.
Un env mínimo y seguro
Commita un archivo de ejemplo con valores falsos para que la gente sepa qué rellenar sin filtrar secretos.
# .env.example (example values only)
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
En el README, explica dónde vive el archivo real (por ejemplo, "copia a .env") y qué variables son requeridas vs opcionales.
Un comando para bootstrapear
Añade un pequeño script que ejecute los pasos aburridos en el orden correcto. Manténlo legible.
#!/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
Para el plan de base de datos, documenta tres cosas: cómo crear la BD, cómo se ejecutan migraciones y cómo obtener datos semilla para una primera ejecución realista.
Finalmente, añade un chequeo de salud rápido para que la gente confirme que la app funciona antes de navegarla. Un endpoint pequeño como GET /health que devuelva "ok" (y verifique la conectividad a la base de datos) suele ser suficiente.
Secretos y configuración sin filtrar nada
Cuando exportas un proyecto, el código puede ser tuyo, pero los secretos deben permanecer privados. Asume que el repo se compartirá con nuevos compañeros.
Empieza listando lo que la app necesita para ejecutarse. No adivines. Revisa el código en busca de lecturas de configuración (variables de entorno, archivos de config) y verifica las integraciones que activaste.
Un inventario básico de secretos suele incluir credenciales de base de datos, claves de APIs de terceros, ajustes de auth (OAuth o JWT), credenciales de almacenamiento y secretos específicos de la app como claves de cifrado o firmas de webhooks.
Decide dónde vive cada secreto en cada entorno. Una regla por defecto útil es:
- Local:
.envcontrolado por el desarrollador (no commiteado) - CI: almacén de secretos del proveedor CI
- Producción: un gestor de secretos dedicado o variables de entorno del hosting
Si exportaste desde una plataforma de vibe-coding como Koder.ai, asume que cualquier cosa mostrada en chat, logs o paneles de configuración pudo haber sido copiada. Mueve los secretos fuera del repositorio inmediatamente.
Un enfoque práctico es commitar una plantilla segura (como .env.example), mantener valores reales fuera de Git (añadir .env a .gitignore) e inyectar secretos de producción en tiempo de despliegue.
Si hay alguna posibilidad de que secretos se hayan expuesto durante la exportación, rótalos. Prioriza contraseñas de base de datos, secretos de clientes OAuth y claves de firma de webhooks.
Añade un par de guardarraíles para que esto no vuelva a ocurrir: un pre-commit que busque patrones obvios de secretos, un escaneo de secretos en CI, carga de configuración estricta que falle rápido cuando falten variables requeridas y credenciales separadas por entorno.
Un breve SECRETS.md ayuda en los traspasos. Mantenlo simple: variables requeridas, dónde se almacenan por entorno y quién puede rotarlas.
Configurar CI para que el repo se mantenga sano
Una vez que tomas propiedad, CI es tu red de seguridad. Mantén la primera versión pequeña. Cada push debe demostrar que el proyecto aún se compila, las comprobaciones básicas pasan y las pruebas (si las hay) se ejecutan.
CI debería responder a una pregunta rápidamente: "¿Es seguro mergear este cambio?" Para la mayoría de repos, eso significa instalar dependencias, compilar, lint y ejecutar pruebas unitarias.
Divide jobs por parte de la app para que las fallas sean evidentes:
- Web: instalar, lint/typecheck, build, ejecutar tests
- Backend: compilar, ejecutar unit tests, linters/format checks
- Móvil opcional (Flutter): analyze, test, build
- Chequeo de BD opcional: aplicar migraciones en un entorno desechable
Usa caching, pero no dejes que oculte problemas. Cuando la caché falle, CI debe seguir funcionando, solo más lento.
Prefiere un comando único por paso (make test, npm run test, etc.) para que el mismo comando funcione localmente y en CI. Reduce confusión y mantiene los logs más cortos.
Ejemplo de forma (ajusta nombres a tu repo):
jobs:
web:
steps:
- run: npm ci
- run: npm run lint
- run: npm run build
api:
steps:
- run: go test ./...
- run: go build ./...
Después de estabilizar lo básico, añade un flujo de release sencillo: taggear releases, construir artefactos y guardarlos como artefactos de CI. Aunque hoy despliegues desde una plataforma, los artefactos repetibles facilitan mucho cambiar de host más adelante.
Errores comunes y cómo evitarlos
Exportar código es solo la mitad del trabajo. La otra mitad es asegurarte de que el proyecto se comporte igual fuera de la plataforma.
Error 1: Esperar que funcione sin configuración
Las exportaciones a menudo dependen de variables de entorno, migraciones, datos semilla y pasos de build que la plataforma manejaba por ti. Una pantalla en blanco o un error de base de datos en la primera ejecución es normal.
Haz una ejecución base antes de cambiar nada: instala deps, configura variables, aplica migraciones y arranca servicios en orden. Arregla solo lo necesario para igualar el setup esperado.
Error 2: Filtrar secretos en Git
El accidente más común es commitear claves API o contraseñas reales, normalmente por copiar un .env o por un config generado. Commita solo plantillas. Mantén valores reales en tu entorno local o en un almacén de secretos.
Error 3: Cambiar dependencias demasiado pronto
Actualizar paquetes u reorganizar carpetas de entrada hace difícil saber si los problemas vinieron de la exportación o de tus cambios.
Logra primero una ejecución funcional y luego mejora en commits pequeños y separados.
Error 4: No fijar versiones
"Funciona en mi máquina" suele venir de versiones de herramientas sin fijar (Node, Go, Flutter, incluso gestores de paquetes).
Fija versiones de runtimes en un lugar claro (un archivo o el README), conserva lockfiles (package-lock, go.sum, pubspec.lock) y verifica el setup en una segunda máquina o en un contenedor limpio.
Error 5: Omitir documentación y pagarlo después
Los traspasos fallan porque nadie recuerda el paso raro necesario para iniciar la app. Escríbelo mientras está fresco: variables de entorno requeridas, cómo ejecutar migraciones, dónde van los logs y cómo resetear el estado local.
Un ejemplo realista: de proyecto en plataforma a repo independiente
Un equipo de tres personas construye un portal de clientes en Koder.ai: una web React, una API en Go y una base PostgreSQL. Cuando llega el momento de entregarlo a un equipo externo, quieren que la exportación se sienta como un repo normal que alguien pueda ejecutar el primer día.
Día 1: exportan, crean un repo Git nuevo y ejecutan localmente. El frontend arranca, pero la API falla porque faltan variables de entorno. No adivinan. Revisan el código, identifican las claves exactas usadas y crean un .env.example con placeholders. Los valores reales quedan en un gestor de contraseñas y en .env locales.
También notan que puertos y ajustes de CORS iban bien en la plataforma pero necesitan defaults locales. Definen valores previsibles (por ejemplo, API en 8080 y web en 3000) para que máquinas nuevas se comporten igual.
Día 2: añaden migraciones y un pequeño script seed que crea un usuario demo y unas filas de ejemplo. Luego escriben un README corto que cubre prerrequisitos, comandos para ejecutar y cómo verificar que funciona (un endpoint de health para la API y un login de muestra para la UI).
Día 3: agregan un workflow CI básico que ejecuta tests, linting y builds para ambos servicios en cada pull request. Para staging, documentan un plan simple: construir contenedores, configurar secretos en el entorno, ejecutar migraciones en deploy y mantener una opción de rollback.
Un buen traspaso suele incluir un repo que funcione localmente desde un clone fresco, .env.example más notas sobre dónde viven los secretos, migraciones y datos seed, cheques de CI que fallen rápido y una nota corta de despliegue para staging y rollback.
Comprobaciones rápidas y siguientes pasos
Antes de dar por terminada la exportación, demuestra que el proyecto puede vivir fuera de la plataforma. Si otro desarrollador puede ejecutarlo sin adivinar, vas por buen camino.
Usa esta lista final:
- El repo es legible: README claro, nombres de carpetas sensatos y una forma de arrancar la app.
- Una ejecución local funciona desde cero: clonar, instalar, configurar, ejecutar y ver la app sin ediciones manuales.
- Las pruebas se ejecutan (aunque sea un smoke test o un health check es mejor que nada).
- CI corre en cada push: lint, tests y un build que falle rápido.
- Los secretos están separados: no hay claves en el repo y un archivo de ejemplo muestra variables necesarias.
- La documentación cubre lo básico: cómo ejecutar, cómo desplegar y dónde cambiar ajustes comunes.
Tras la comprobación técnica, haz la propiedad explícita. Decide quién se ocupa de actualizar dependencias, cambios de infraestructura (bases de datos, colas, DNS) y releases. Si nadie se responsabiliza, el repo se irá degradando aunque la app funcione hoy.
Planifica una ventana corta de estabilización antes de trabajo de features importantes. Dos a cinco días laborables suelen ser suficientes para arreglar las asperezas de la exportación, pulir el README y eliminar los problemas de "funciona en mi máquina".
Si usas Koder.ai (koder.ai), las exportaciones junto con funciones como snapshots y rollback facilitan iterar mientras endureces el repo. Una vez estable, mantén Git como fuente de la verdad y trata futuras exportaciones como checkpoints, no como el historial principal.
Define el siguiente hito de traspaso en lenguaje claro: "Cualquier desarrollador puede ejecutarlo en 30 minutos." Luego pruébalo pidiendo a alguien nuevo que siga el README en una máquina limpia. Sus preguntas se convertirán en tu lista final de pendientes.
Preguntas frecuentes
¿Qué significa “tomar propiedad” después de exportar el código?
Trata la propiedad como independencia: puedes compilar, ejecutar, modificar y desplegar la app desde un repositorio normal sin necesitar el proyecto original en la plataforma, ajustes especiales del UI o pasos de compilación ocultos.
Una buena prueba es: ¿puede un nuevo miembro clonar el repo y ponerlo en marcha usando solo el README?
¿Qué debo comprobar primero para saber si una exportación está completa?
Comienza con una comprobación rápida de completitud:
- Localiza la “raíz” de cada app (
package.json,go.mod,pubspec.yaml). - Confirma que hay un lockfile (
package-lock.json,yarn.lock,pnpm-lock.yaml,go.sum). - Busca migraciones de base de datos (
migrations/o similar). - Revisa si hay un flujo ejecutable (README, Makefile, scripts o
docker-compose.yml).
Si algo necesario para ejecutar solo está descrito en la interfaz o en un chat, escríbelo y muévelo al repo.
¿Cuál es la manera más segura de poner en marcha un proyecto exportado localmente?
Hazlo en pasos pequeños y verificables:
- Inicializa Git y commitea la exportación cruda (baseline).
- Configura el entorno local usando
.env.example→.env. - Arranca la base de datos.
- Aplica las migraciones.
- Inicia el backend.
- Inicia el frontend.
No refactorices de inmediato: primero demuestra que funciona tal cual, y luego mejora en commits separados.
¿Por qué una app funciona en la plataforma pero falla en mi portátil?
Porque el entorno alojado suele tener cosas que nunca dejaste explícitas:
- Variables de entorno faltantes (URL base de la API, secreto JWT, claves de almacenamiento).
- Base de datos no creada, migraciones no aplicadas o datos semilla ausentes.
- Puertos o configuraciones CORS que estaban preconfigurados en el hosting.
- Pasos de compilación implícitos ejecutados “en otro lugar”.
Soluciona esto haciendo visible la configuración: .env.example, scripts de migración y un README con comandos exactos.
¿Cómo confirmo que la parte de la base de datos realmente funciona tras la exportación?
Un servidor puede arrancar y aun así estar roto. Verifica el flujo real de datos:
- Abre una página que dependa claramente de lecturas de la base de datos.
- Crea un registro, actualiza la página y confirma que quedó guardado.
- Realiza una actualización y un borrado si es posible.
- Observa los logs por errores de migración como “relation does not exist”.
Si no puedes reproducir cambios de datos localmente, tu setup o migraciones están incompletas.
¿Cómo manejo los secretos para no filtrar claves API en Git?
Enfoque por defecto:
- Commita
.env.examplecon valores ficticios. - Añade
.enva.gitignore. - Guarda valores reales en un gestor de contraseñas o en el almacén de secretos del entorno.
Si encuentras claves reales en el repo, asúmelas comprometidas y rótalas. Prioriza credenciales de bases de datos, secretos OAuth y claves de firma de webhooks.
¿Cuál es la configuración mínima de CI que debería añadir una vez que tengo propiedad del repo?
Mantén la primera versión de CI pequeña y coherente con los comandos locales:
- Compilar y lint/typecheck la app web.
- Ejecutar
go test ./...y compilar el backend. - Opcionalmente aplicar migraciones en una base temporal.
Haz que el CI invoque los mismos scripts que esperas que usen los desarrolladores (por ejemplo make test o npm run build). Así reduces problemas de “funciona en local pero falla en CI”.
¿Realmente necesito un README y un script de bootstrap si la app ya arranca?
Sí—si quieres un traspaso predecible. Un buen conjunto mínimo es:
- Un
README.mdtop-level con comandos copy-paste. - Un
.env.exampleque describa variables requeridas y opcionales. - Un script/bootstrap que instale dependencias y prepare la BD.
La meta es que un desarrollador nuevo pueda ejecutar la app en 15–30 minutos sin adivinar.
¿Cómo debería organizar un repo exportado (web + API + BD) para que sea fácil de mantener?
Una estructura común es:
apps/para frontends (web, móvil).services/para APIs y workers.shared/para tipos y utilidades compartidas.infra/para plantillas de despliegue y ejemplos de entorno.
Los nombres importan menos que dejar claro qué se ejecuta dónde y cómo se conectan las piezas.
¿Cuáles son los siguientes pasos recomendados después de exportar desde Koder.ai?
Secuencia práctica:
- Exporta y commitea la base.
- Haz que funcione localmente con configuración explícita, migraciones y un README claro.
- Añade CI para que builds y tests no se rompan silenciosamente.
- Documenta un plan de despliegue simple (dónde poner secretos, cómo ejecutar migraciones, rollback).
Una vez estable, trata a Git como fuente de la verdad y usa futuras exportaciones de la plataforma solo como puntos de control, no como historial principal.