010 Coding Collective

010 Coding Collective

Een vibe-coded app productieklaar maken

Je bouwde in een weekend een werkende app met AI. Het veilig maken voor echte gebruikers is een ander vak. Het stappenplan om een vibe-coded MVP naar productie te brengen, security eerst.

Vibe Coding AI LLMs Cursor Lovable Security Software Architecture Software Development

Het werkt. Kun je het veilig live zetten?

Een vibe-coded MVP draait op je laptop en demot prachtig. Echte gebruikers, echte data en echte belasting zijn een andere test, en AI-gegenereerde code zakt daar vaker voor dan je zou hopen.

Productieklaar is een checklist, op volgorde

Secrets, toegangscontrole, foutafhandeling, tests, observability, deploy. Niks glamoureus, en precies het verschil tussen een demo en een product.

Snelheid houden, risico eruit

Goed aangepakt gooi je de MVP niet weg. Je maakt af wat het idee al bewees en bouwt daarop verder.

De demo werkt. Productie is een ander vak.

Je beschreef een app aan Lovable, Cursor of Bolt, en een paar uur later had je iets dat draait. Pagina’s, een login, een database, een werkende flow. Het demot prachtig. Dus je zet er echte gebruikers op, en daar begint de ellende.

De reden is saai en voorspelbaar: AI schrijft code die werkt, nog voordat het code schrijft die veilig is. Security, foutafhandeling en toegangscontrole zijn onzichtbaar in een demo, dus slaat het model ze standaard over. De tools doen precies waarvoor ze gemaakt zijn, en in een demo komt de code die echte gebruikers beschermt gewoon nooit aan bod. In Veracode’s analyse van AI-gegenereerde code uit 2025 bevatte 45% minstens één kwetsbaarheid uit de OWASP Top 10, en onafhankelijke studies leggen de kwetsbaarheidsdichtheid op ongeveer 2,7 keer die van handgeschreven code.

We schreven eerder over waarom vibe-coded projecten vastlopen in de laatste 20% van een vibe-coded project. Dit is de andere helft: wat je er concreet aan doet, in de volgorde die telt.

Begin met uitzoeken wat de AI eigenlijk gebouwd heeft

Je kunt geen code beveiligen die je niet begrijpt. Voordat je een regel aanpast, maak een eerlijke inventarisatie van wat er onder de motorkap zit, want vibe coding verbergt die keuzes voor je terwijl je bouwt.

1

De stack

Welk framework, welke database, welke hosting. De AI koos die voor je. Je moet weten wat het is voordat je kunt beoordelen of het houdbaar is.

2

Waar de secrets staan

Zoek elke API-key, database-URL en token, en controleer of ze in de frontend staan waar elke bezoeker ze kan lezen. Dit is het meest voorkomende lek in vibe-coded apps.

3

Het datamodel

Welke tabellen bestaan er, wat hangt aan wat, en vooral: wat weerhoudt de ene gebruiker ervan de rijen van een ander te lezen. Vaak is het antwoord niets.

4

Het autorisatiemodel

Wie mag wat, en of dat op de server wordt gecontroleerd of alleen in de interface is weggemoffeld. Een verborgen knop is geen recht.

Een middag lezen voordat je iets aanraakt bespaart je hetzelfde probleem drie keer oplossen.

De beveiligingsgaten eerst, en in deze volgorde

Niet elk gat is even gevaarlijk. Fix de dingen waarmee je vandaag gehackt wordt vóór de dingen die je volgende maand vertragen. Dit is de volgorde waarin wij werken.

1

Haal secrets uit de frontend

API-keys en database-gegevens in client-side JavaScript zijn leesbaar voor iedereen die de dev tools opent. Zet elke secret in server-side environment variables en vervang de sleutels die zijn blootgesteld.

2

Zet de database op slot

Zet row-level security aan op elke tabel, zodat de database zelf afdwingt wie wat ziet. Het klassieke Lovable-plus-Supabase-lek is een tabel die iedereen mag lezen: gebruiker A haalt stilletjes de data van gebruiker B op.

3

Controleer rechten op de server

Elke API-call die data wijzigt of teruggeeft moet server-side verifiëren dat deze gebruiker dit met dit record mag doen. Vertrouw dat nooit aan de frontend toe.

4

Dicht injection en XSS

Parameterized queries in plaats van aan elkaar geplakte SQL-strings, en ge-escapete output in plaats van rauwe invoer die in de pagina belandt. De oudste aanvallen die er zijn, en AI voert ze telkens opnieuw in.

5

Voeg rate limiting toe

Niets houdt iemand tegen die je login of je betaalde API duizend keer per seconde bestookt, want de AI voegt het nooit toe. Een simpele limiet per IP maakt van een dure storing een non-event.

Een demo heeft één vriendelijke gebruiker die precies doet wat je verwachtte. Productie heeft vreemden, bots en vergissingen die tegelijk op elk pad drukken. Security is de code die dat tweede geval afhandelt, precies de code die een demo nooit nodig had.

Maak het dan bestand tegen echte gebruikers

Zodra het veilig is, maak het robuust. Het happy path werkt altijd. Productie is alles wat gebeurt als de invoer fout is, het netwerk wegvalt of een dienst plat ligt.

1

Vang de ongelukkige paden af

Elke externe call kan een timeout geven en elk formulierveld kan leeg of verkeerd binnenkomen. Vang ze af, valideer invoer op de server, en geef een echte melding terug in plaats van een wit scherm of een crash.

2

Zie wat er gebeurt

Gestructureerde logging, uptime-monitoring en een error-tracker als Sentry. Zonder die drie hoor je van een storing via een boze klant in plaats van via een alert, uren te laat.

3

Maak back-ups van de data

Automatische database-back-ups, en een restore die je één keer echt hebt getest. Een back-up die je nooit hebt teruggezet is een gok, geen vangnet.

Leg een vangnet voordat je iets verandert

Vibe-coded projecten hebben bijna nooit tests, waardoor elke latere aanpassing, door jou of door de volgende AI-prompt, een gok is dat er niets anders sneuvelt. Voordat je verder bouwt, schrijf tests rond de paden die je je niet kunt veroorloven te breken: login, betalingen, alles wat data wegschrijft. Dat is wat je in staat stelt snel te blijven bewegen zonder telkens productie om te leggen.

Deploy alsof het echt is

Het gat tussen een preview-URL en een product is een handvol onglamoureuze stappen die vibe coding volledig overslaat.

1

Gescheiden omgevingen

Een staging-omgeving waar je wijzigingen test voordat ze de gebruikers raken, met een eigen database. Dus geen losse live app die je rechtstreeks in productie aanpast terwijl je duimt dat er niets sneuvelt.

2

Config en secrets per omgeving

Sleutels en instellingen die bij het deployen worden ingespoten, en nooit in de repository staan. Andere waarden voor staging en live, op één plek beheerd.

3

Een herhaalbare deploy

Eén commando of één pipeline die bouwt en uitrolt, zodat releasen geen handmatig ritueel is dat je om 23:00 uur verknalt. HTTPS aan, back-ups ingepland, restore getest.

Weet wanneer je stopt met pleisters plakken en hulp haalt

Een deel hiervan kun je zelf, met dezelfde AI-tools die de app bouwden, zolang je weet wat je moet vragen. Maar er is een punt waarop pleisters plakken niet meer helpt: als de authenticatie niet bij de architectuur past, als de database-structuur niet gaat schalen, als een betaalintegratie betekent dat je moet uitpluizen hoe de hele backend is opgezet. Dat zijn ontwerpbeslissingen, en geen enkele prompt lost een ontwerpbeslissing netjes op.

Dat is het moment waarop een review zichzelf terugverdient. Een vibe coding audit vertelt je precies welke van bovenstaande stappen je app mist en hoe diep de fixes gaan, voordat je een maand aan de verkeerde besteedt. En wil je het verstevigen en hosten liever overlaten aan een team dat dit dagelijks doet, dan is dat managed development: jij blijft tweaken in Cursor terwijl wij de productiekant overeind houden.

Conclusie: je verstevigt, je herbouwt niet

De fout die teams maken is een vibe-coded MVP behandelen als af of als waardeloos. Het is geen van beide. Het bewees het idee sneller dan welk traditioneel proces dan ook had gekund, en dat is echt waardevol. Productieklaar maken is de tweede helft van het werk, en dat is een andere helft.

🧪

De MVP bewees het idee

Daar is vibe coding briljant voor. Snel, goedkoop, goed genoeg om aan echte gebruikers te tonen en te leren of het überhaupt de moeite waard is.

🏗️

Productie is een ander vak

Security, betrouwbaarheid, tests en deploy. Werk de checklist op volgorde af en je verstevigt wat je hebt in plaats van opnieuw te beginnen.

Werk de lijst van boven naar beneden af, fix eerst de gehackt-word-je-vandaag-items, en je maakt van een veelbelovend prototype iets dat je met een gerust hart voor betalende klanten kunt zetten, zonder de snelheid te verliezen die je hier bracht.

Veelgestelde vragen

Is een vibe-coded app veilig genoeg voor productie?

Niet zonder een hardening-ronde. AI-codeertools optimaliseren voor code die werkt in een demo, en laten routineus de onderdelen weg die pas bij echte gebruikers tellen: toegangscontrole, foutafhandeling, rate limiting en het beheer van secrets. In Veracode's analyse uit 2025 bevatte 45% van de AI-gegenereerde code minstens één kwetsbaarheid uit de OWASP Top 10. Een vibe-coded app kan zeker naar productie, maar pas nadat je die gaten bewust hebt gedicht.

Hoe maak ik een Lovable- of Cursor-app productieklaar?

Werk op volgorde van gevaar. Haal eerst secrets uit de frontend en zet ze in server-side environment variables. Zet daarna de database op slot met row-level security en controleer rechten op de server voor elk verzoek. Dicht vervolgens injection- en XSS-gaten en voeg rate limiting toe. Voeg daarna foutafhandeling, logging en monitoring toe, schrijf tests rond je kritieke paden zoals login en betalingen, en zet een echte deploy op met een aparte staging-omgeving en geteste back-ups.

Wat is het grootste beveiligingsrisico in AI-gegenereerde code?

Blootgestelde secrets. AI-tools plaatsen API-keys, database-gegevens en tokens vaak direct in client-side code, waar elke bezoeker ze kan lezen door de developer tools van de browser te openen. Daar vlak achteraan zit ontbrekende toegangscontrole op de database, waarbij elke gebruiker de data van elke andere gebruiker kan lezen omdat row-level security nooit is aangezet. Beide komen veel voor in vibe-coded apps en beide zijn binnen minuten te misbruiken.

Moet ik een vibe-coded app herbouwen om naar productie te gaan?

Meestal niet. In de meeste gevallen verstevig je wat al werkt: de beveiligingsgaten dichten, de ontbrekende betrouwbaarheids- en observability-lagen toevoegen, en tests rond de kritieke paden zetten. Een volledige herbouw is alleen nodig als een kernkeuze niet kan schalen, bijvoorbeeld een authenticatiemodel of database-structuur die elke nieuwe feature tegenwerkt. Een korte audit vertelt je in welke situatie je zit voordat je aan een van beide begint.

Hoe lang duurt het om een vibe-coded MVP productieklaar te maken?

Dat hangt af van hoeveel data en hoeveel gebruikers erbij komen kijken, maar de security-ronde alleen kost voor een gemiddelde MVP meestal dagen in plaats van weken. Het eerlijke antwoord is dat een audit je een reële inschatting geeft, want de tijd wordt bepaald door hoeveel van de bovenstaande lagen ontbreken en hoe diep de fixes reiken, niet door hoe groot de app op het scherm oogt.

Niet zeker wat jouw app mist?

Wij brengen vibe-coded apps naar productie voor de kost. Een audit om precies in kaart te brengen wat er tussen jouw MVP en echte gebruikers staat, en hands-on hulp om het te fixen.

Laten we je project bespreken

Van AI-prototypes die productie-klaar moeten worden tot strategisch advies, code audits of doorlopende development support. We denken graag vrijblijvend met je mee over de beste aanpak.

010 Coding Collective gratis consult
gratis

Gratis consult

In anderhalf uur bespreken we je project, uitdagingen en doelen. Eerlijk advies van senior developers, geen verkooppraatje.

1,5 uur met senior developer(s)
Analyse van je huidige situatie
Schriftelijke samenvatting achteraf
Concrete next steps