Leer hoe je broncode uit een vibe-coding-platform exporteert en echt bezit: lokaal draaien, CI opzetten, secrets beheren en een overdrachtsklare repo voorbereiden.

Eigenaarschap van de code is meer dan het ontvangen van een zipbestand van een platform. Het betekent dat je de app kunt bouwen, draaien, wijzigen en uitrollen zonder het originele workspace, speciale knoppen of verborgen instellingen. Een project dat je echt bezit gedraagt zich als een normale repo: een nieuwe collega kan hem klonen, lokaal starten en via een standaard pipeline deployen.
De meeste lock-in zorgen komen voort uit dezelfde paar hiaten:
Een andere veelvoorkomende verrassing is dat de app op de gehoste versie prima werkt, maar lokaal faalt omdat environment-variabelen, database-setup of secrets nooit expliciet zijn gemaakt.
Een schone export van een vibe-coding-platform zou tot vier uitkomsten moeten leiden:
Dit is belangrijk, zelfs als je nooit van plan bent het platform te verlaten. Een solide houding ten aanzien van eigenaarschap is verzekering: het vermindert risico, maakt audits makkelijker en houdt onderhandelingen eenvoudiger als je een bureau inhuurt, financiering zoekt of van teams wisselt.
Als je Koder.ai hebt gebruikt, kan je export stacks bevatten zoals een React web-app, een Go backend, PostgreSQL of een Flutter mobiele app. De stack is minder belangrijk dan het principe: alles wat nodig is om te draaien moet zichtbaar zijn in de repository, niet opgesloten in een gehoste omgeving.
Stel je een oprichter voor die een app aan een aannemer overdraagt. “Hier is de repo” moet genoeg zijn. De aannemer zou geen toegang tot het originele platformproject nodig moeten hebben om de API-base-URL te vinden, het databaseschema te maken of te leren hoe de frontend te bouwen.
Na export zou je een normale repository moeten hebben die je in een editor kunt openen, lokaal kunt draaien en aan een ander team kunt overhandigen zonder het originele platform.
Bij Koder.ai-projecten mappen exports vaak naar vertrouwde structuren: een React web-app, een Go backend en (als je er een hebt gebouwd) een Flutter mobiele app. Mapnamen variëren, maar de repo moet duidelijk maken waar elk onderdeel leeft en hoe ze verbonden zijn.
Begin met het lokaliseren van de entry points en de bedoelde workflow. Je wilt het eerste bestand vinden dat elke app opstart, plus de scripts die laten zien hoe je bedoeld bent te ontwikkelen en draaien.
Typische aanwijzingen:
package.json plus een src/ folder (vaak met main.tsx of vergelijkbaar)go.mod en een cmd/ map of main.gopubspec.yaml en lib/main.dartREADME of Makefile die beschrijft hoe alles te draaiendocker-compose.yml als de export bedoeld is om als set services te draaienAfhankelijkheden moeten gepind zijn. Voor JavaScript betekent dat een lockfile (package-lock.json, yarn.lock of pnpm-lock.yaml). Voor Go betekent het go.mod en go.sum. Ontbrekende pins maken het project niet onmogelijk om te draaien, maar bemoeilijken reproduceerbare builds.
Configuratie moet gescheiden zijn van code. Zoek naar voorbeelden zoals .env.example of config.example.yaml. Je zou geen echte secrets (API-keys, productie-wachtwoorden) in de export moeten zien staan. Als je die wel ziet, behandel het als een lek en roteer ze.
Voor databasewerk, zoek een migrations-folder (migrations/, db/migrations/) of SQL-bestanden met timestamps. In een Go + PostgreSQL-app zie je mogelijk ook een kleine migration runner of een script dat migraties toepast.
Een snelle sanity-check: lokaliseer eerst de build- en run-commando’s (npm run dev, go run, make en soortgelijke). Als een script afhankelijk is van een platform-only commando, vervang het door standaard tooling voordat je de repo onafhankelijk noemt.
Behandel de export als een release-artifact. Voordat je iets draait, doe een korte "is alles hier?"-controle. Ontbrekende onderdelen zijn makkelijker te vinden nu dan nadat je begint met veranderen.
Een praktische volledigheidscheck is zoeken naar de “wortels” van elk onderdeel: een package.json voor een React web-app, een go.mod voor een Go backend en migratie/seed-bestanden voor PostgreSQL.
Maak een verse Git-repository van de geëxporteerde map en commit precies wat je hebt ontvangen voordat je iets repareert. Dat geeft je een schone baseline en maakt latere wijzigingen makkelijk te reviewen.
git init
# Optional: set default branch name
# git branch -M main
git add -A
git commit -m "Initial export"
Draai nu lokaal in kleine, verifieerbare stappen. Installeer afhankelijkheden, maak lokale configuratie, start de database eerst, dan de backend, dan de frontend. Schrijf tijdens het doen elke opdracht op die je daadwerkelijk gebruikt. Die aantekeningen worden je README.
Hier is een simpel commando-sequentie die je kunt aanpassen aan je geëxporteerde structuur:
# Frontend
cd web
npm install
npm run dev
# Backend
cd ../server
go mod download
go run ./cmd/server
Een server kan opstarten terwijl de app nog kapot is. Bevestig dat hij kan lezen en schrijven naar de database.
Kies snelle checks die bij het product passen:
Zodra je een werkende lokale run hebt, zet je je krabbelnotities om in een echte README.md met copy-paste stappen: waar je commando’s draait, de volgorde om services te starten en welke environment-variabelen vereist zijn.
Een export kan draaien, maar nog steeds "gegenereerd" aanvoelen in plaats van eigendom. Een overdrachtsklare repo maakt duidelijk waar dingen zitten, hoe het project te draaien is en hoe consistentie te behouden.
Begin met een duidelijke top-level indeling. Namen zijn minder belangrijk dan consistentie.
apps/ voor gebruiksgerichte frontends (web, mobiel)services/ voor backend-API’s, workers en jobsshared/ voor gedeelde types en utilitiesinfra/ voor deployment-templates, scripts en environment-examplesdocs/ voor architectuurnotities en runbooksVoeg daarna een klein stel bestanden toe die giswerk verminderen:
README.md met prerequisites en exacte commando’sCONTRIBUTING.md met een paar regels (branches, PRs, geen secrets).gitignore om lokale env-bestanden en build-uitvoer uit Git te houdenHoud de README praktisch. Als de repo meerdere onderdelen bevat (React frontend, Go API, PostgreSQL), beschrijf de volgorde om ze te starten en waar config leeft (bijv. "kopieer .env.example naar .env").
Doe een fresh-machine check: clone in een nieuwe map en volg je eigen README. Als je vanuit Koder.ai hebt geëxporteerd, behandel de export als de eerste commit van een nieuw onafhankelijk project en nodig pas daarna anderen uit.
Een goede lokale setup beantwoordt één vraag snel: kan een nieuwe persoon de app binnen 15 minuten zonder giswerk draaien?
Kies een standaard lokale aanpak en wees expliciet. Native installs zijn snel voor mensen met de juiste tools; containers zijn consistenter maar voegen overhead toe. Als je beide ondersteunt, markeer er één als standaard en de ander als optioneel.
Een eenvoudig patroon dat goed werkt: één README-pagina, één voorbeeld-envbestand en één bootstrap-commando.
Commit een voorbeeldbestand met fictieve waarden zodat mensen weten wat ze moeten instellen zonder secrets te lekken.
# .env.example (voorbeeldwaarden alleen)
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
Leg in de README uit waar het echte bestand hoort te staan (bijv. "kopieer naar .env") en welke variabelen verplicht versus optioneel zijn.
Voeg een klein script toe dat de saaie stappen in de juiste volgorde uitvoert. Houd het leesbaar.
#!/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
Voor het databaseplan, documenteer drie dingen: hoe de DB aan te maken is, hoe migraties draaien en hoe seed-data te krijgen voor een realistische eerste run.
Tot slot, voeg een snelle healthcheck toe zodat mensen kunnen bevestigen dat de app werkt voordat ze gaan klikken. Een klein endpoint zoals GET /health dat "ok" teruggeeft (en databaseconnectiviteit verifieert) is vaak genoeg.
Wanneer je een project exporteert, is de code misschien van jou, maar de secrets moeten privé blijven. Ga ervan uit dat de repo gedeeld wordt met nieuwe teamleden.
Begin met het inventariseren van wat de app nodig heeft om te draaien. Raak niet in veronderstellingen. Scan de code naar config-leesacties (environment-variabelen, config-bestanden) en controleer integraties die je hebt ingeschakeld.
Een basis-inventaris van secrets bevat meestal database-credentials, third-party API-keys, auth-instellingen (OAuth of JWT), opslag-credentials en app-specifieke secrets zoals encryptiesleutels of webhook-signing-secrets.
Bepaal waar elk secret woont in elke omgeving. Een goede vuistregel is:
.env (niet committed)Als je vanuit een vibe-coding-platform zoals Koder.ai hebt geëxporteerd, ga ervan uit dat alles wat in chat, logs of instellingenpanelen verscheen, gekopieerd kan zijn. Verplaats secrets onmiddellijk uit de repository.
Een praktische aanpak is het committen van een veilig sjabloon (zoals .env.example), echte waarden buiten Git houden (voeg .env toe aan .gitignore) en productie-secrets injecteren tijdens deployment.
Als er enige kans is dat secrets tijdens de export zijn gelekt, roteer ze. Prioriteer database-wachtwoorden, OAuth-clientsecrets en webhook-signing-keys.
Voeg een paar beschermingen toe zodat dit niet opnieuw gebeurt: een pre-commit check op voor de hand liggende secret-patronen, een secret-scan in CI, strikte config-lading die snel faalt als verplichte variabelen ontbreken, en aparte credentials per omgeving.
Een korte SECRETS.md helpt bij overdrachten. Houd het simpel: vereiste variabelen, waar ze per omgeving worden opgeslagen en wie ze kan roteren.
Zodra je ownership neemt, is CI je vangnet. Houd de eerste versie klein. Elke push zou moeten bewijzen dat het project nog steeds bouwt, basischecks slagen en tests (als je die hebt) draaien.
CI moet één vraag snel beantwoorden: "Is deze wijziging veilig om te mergen?" Voor de meeste repos betekent dat dependencies installeren, builden, linten en unit tests draaien.
Splits jobs per onderdeel zodat falen duidelijk is:
Gebruik caching, maar laat cache geen problemen verbergen. Als caches missen, moet CI nog steeds werken, alleen trager.
Geef de voorkeur aan één commando per stap (make test, npm run test, enz.) zodat hetzelfde commando lokaal en in CI werkt. Dat vermindert verwarring en houdt logs korter.
Voorbeeldvorm (pas namen aan naar je repo):
jobs:
web:
steps:
- run: npm ci
- run: npm run lint
- run: npm run build
api:
steps:
- run: go test ./...
- run: go build ./...
Nadat de basis stabiel is, voeg je een simpele releaseflow toe: tag releases, bouw artifacts en bewaar ze als CI-artifacts. Zelfs als je vandaag nog vanaf een platform deployed, maken reproduceerbare artifacts het veel makkelijker om later van host te wisselen.
Code exporteren is maar de helft van het werk. De andere helft is zorgen dat het project zich hetzelfde gedraagt buiten het platform.
Exports doen vaak beroep op environment-variabelen, migraties, seed-data en build-stappen die voor je werden afgehandeld. Een leeg scherm of databasefout bij de eerste run is normaal.
Voer één basis-run uit voordat je iets verandert: installeer deps, zet env-vars, run migraties en start services in de juiste volgorde. Los alleen op wat nodig is om de verwachte setup te bereiken.
De meest voorkomende vergissing is echte API-keys of wachtwoorden commiten, meestal via een gekopieerde .env of een tool-generated config.
Commit alleen sjablonen. Bewaar echte waarden in je lokale omgeving of een secret store.
Pakketten upgraden of folders reorganiseren direct na export maakt het moeilijk te bepalen of problemen van de export komen of van je wijzigingen.
Krijg eerst een werkende run, verbeter daarna in kleine, aparte commits.
"Werkt op mijn machine" komt vaak door ongepinde tool-versies (Node, Go, Flutter, zelfs package managers).
Pin runtime-versies op een duidelijke plek (een file of de README), behoud lockfiles (package-lock, go.sum, pubspec.lock) en verifieer setup op een tweede machine of een verse container.
Overdrachten mislukken omdat niemand meer het ene rare stapje weet om de app te starten. Schrijf het op terwijl het vers in je geheugen zit: vereiste env-vars, hoe migraties draaien, waar logs staan en hoe je lokale staat reset.
Een team van drie bouwt een klantportaal in Koder.ai: een React web-app, een Go API en een PostgreSQL-database. Als het tijd is om het aan een extern dev-team over te dragen, willen ze dat de export aanvoelt als een normale repo die iemand op dag één kan draaien.
Dag 1: ze exporteren, maken een verse Git-repo en draaien lokaal. De frontend start, maar de API faalt omdat environment-variabelen ontbreken. Ze gokken niet. Ze lezen de code, identificeren de exacte keys die gebruikt worden en maken een .env.example met placeholders. Echte waarden blijven in een wachtwoordmanager en lokale .env-bestanden.
Ze merken ook dat poorten en CORS-instellingen op het platform goed stonden, maar lokale defaults nodig hebben. Ze stellen voorspelbare defaults in (bijv. API op 8080 en web op 3000) zodat nieuwe machines hetzelfde gedrag tonen.
Dag 2: ze voegen migraties en een klein seed-script toe dat een demo-gebruiker en een paar rijen creëert. Daarna schrijven ze een korte README die prerequisites, commando’s om te draaien en hoe te verifiëren (een health-endpoint voor de API en een sample-login voor de UI) beschrijft.
Dag 3: ze voegen een basis CI-workflow toe die tests, linting en builds voor beide services op elke pull request draait. Voor staging documenteren ze een eenvoudig plan: bouw containers, zet secrets in de omgeving, run migraties bij deploy en houd een rollback-optie.
Een goede overdracht bevat meestal een repo die lokaal draait vanaf een verse clone, .env.example plus notities over waar secrets leven, migraties en seed-data, CI-checks die snel falen en een korte deploy-notitie voor staging en rollback.
Voordat je de export voltooid verklaart, bewijs dat het project buiten het platform kan bestaan. Als een andere ontwikkelaar het kan draaien zonder te raden, zit je goed.
Gebruik deze eindchecklist:
Na de technische check, maak eigenaarschap expliciet. Bepaal wie verantwoordelijk is voor dependency-updates, infrastructuurveranderingen (databases, queues, DNS) en releases. Als niemand dat bezit, rot de repo langzaam stuk, zelfs als de app vandaag werkt.
Plan een korte stabilisatieperiode voordat je met grote feature-werkzaamheden begint. Twee tot vijf werkdagen is vaak genoeg om export-ruwheden te verhelpen, de README aan te scherpen en "werkt op mijn machine"-problemen op te lossen.
Als je Koder.ai gebruikt (Koder.ai), maken exports plus features zoals snapshots en rollback het makkelijker om te itereren terwijl je de repo verstevigt. Zodra de repo stabiel is, houd Git als bron van waarheid en behandel toekomstige exports als checkpoints, niet als de hoofdgeschiedenis.
Definieer de volgende overdrachtsmijlpaal in eenvoudige bewoordingen: "Elke ontwikkelaar kan het in 30 minuten draaien." Test dat door iemand nieuw de README op een verse machine te laten volgen. Hun vragen worden je laatste takenlijst.
Beschouw ownership als onafhankelijkheid: je kunt de app bouwen, draaien, aanpassen en uitrollen vanuit een normale repo zonder het originele platformproject, speciale UI-instellingen of verborgen build-stappen.
Een goede test is: kan een nieuwe collega de repo klonen en aan de slag gaan met alleen de README?
Begin met een snelle compleetheidscheck:
package.json, go.mod, pubspec.yaml).package-lock.json, yarn.lock, pnpm-lock.yaml, go.sum).migrations/ of vergelijkbaar).docker-compose.yml).Als iets wat nodig is om te draaien alleen in een UI of chat beschreven staat, noteer het en verplaats het naar de repo.
Doe het in kleine, verifieerbare stappen:
.env.example → .env.Refactor niet meteen—bewijs eerst dat het zonder wijzigingen werkt en verbeter het daarna in aparte commits.
Omdat de gehoste omgeving vaak dingen bevat die niet expliciet zijn gemaakt:
Los dit op door de setup zichtbaar te maken: .env.example, migratiescripts en een README met exacte commando’s.
Een server “starten” is niet genoeg—verifieer echte datastromen:
Als je geen data veranderingen lokaal kunt reproduceren, is je setup of migraties incompleet.
Standaardaanpak:
.env.example met mock-waarden..env toe aan .gitignore.Als je echte sleutels in de repo vindt, ga ervan uit dat ze gecompromitteerd zijn en roteer ze. Prioriteer database-wachtwoorden, OAuth-clientsecrets en webhook-signing-keys.
Houd de eerste CI simpel en consistent met lokale commando’s:
go test ./... en bouw de backend.Laat CI dezelfde scripts aanroepen die ontwikkelaars lokaal gebruiken (bijv. make test of npm run build). Dat vermindert “werkt lokaal maar niet in CI”.
Ja—als je een voorspelbare overdracht wilt. Een goed uitgangspunt is:
README.md met copy-paste commando’s..env.example waarin vereiste versus optionele variabelen staan beschreven.Streef ernaar dat een nieuwe ontwikkelaar de app binnen 15–30 minuten zonder giswerk kan draaien.
Gebruikelijke structuur:
apps/ voor frontends (web, mobiel).services/ voor API’s en workers.shared/ voor gedeelde types/utilities.infra/ voor deployment-templates en environment-examples.De exacte namen zijn minder belangrijk dan dat het duidelijk is wat waar draait en hoe de onderdelen met elkaar verbinden.
Een praktisch volgordevoorstel:
Als het stabiel is, behandel Git als de bron van waarheid en beschouw toekomstige platform-exports als checkpoints, niet als de hoofdgeschiedenis.