Gereedschap / AVG en Nederlands recht
Je overtreedt de AVG en je weet het niet
De zes dingen die AI standaard in je app zet en die in Nederland niet mogen, met per punt de fix.
- SoortChecklist
- Tijd20 minuten
- Voor wieIedereen met een app waar een echte gebruiker een account in heeft
- Fases3
Vraag een AI-tool om een app met inloggen en je krijgt binnen twee minuten iets dat werkt. Wat je er gratis bij krijgt is een verzameling keuzes die niemand heeft gemaakt: analytics die meteen laadt, logbestanden waar e-mailadressen in staan, een database in Amerika en geen privacyverklaring. Dat is geen ramp zolang je het alleen zelf gebruikt. Het wordt een probleem op de dag dat er een vreemde inlogt.
Deze handleiding is geschreven om als werkopdracht te dienen. Neem hem in zijn geheel mee naar Cursor, Claude Code of waar je ook bouwt, en werk hem fase voor fase af.
Waar het misgaat
Fase 0Vaststellen
Laat je codebase nakijken voordat je zelf gaat zoeken. Dit vindt niet alles, maar wel de vier meest voorkomende.
Je bent een privacy-engineer die deze codebase nakijkt op AVG-risico's. Ik zit in Nederland en mijn gebruikers ook. Zoek concreet naar: 1. Analytics-, pixel- of trackingscripts die laden vóór een expliciete toestemmingsklik. Noem het bestand en de regel. 2. Logregels die een heel request, een header of een e-mailadres wegschrijven. Noem bestand en regel. 3. Aanroepen naar externe diensten waar gebruikersdata in meegaat. Maak een lijst: welke dienst, welk veld, vanuit welk bestand. 4. Of er een route of functie bestaat die een gebruikersaccount en al zijn gegevens echt verwijdert. Zo niet, zeg dat. 5. Waar de regio van de database en de hosting wordt ingesteld, en welke waarde daar staat. Geef per bevinding: het bestand, de regel, waarom het een probleem is, en de kleinst mogelijke wijziging die het oplost. Verzin niets. Vind je iets niet, zeg dan dat je het niet gevonden hebt in plaats van een aanname te doen.
Fase 1De zes punten langs
Op volgorde van hoe vaak ik ze fout aantref. Elk nee is werk dat op je lijst hoort.
- Je analytics laadt voordat iemand op accepteren heeft gekliktEen banner die alleen mededeelt dat je cookies gebruikt voldoet niet. Analytics, pixels en heatmaps mogen pas draaien na een actieve klik, en weigeren moet net zo makkelijk zijn als accepteren. In de praktijk: het script staat niet in je HTML maar wordt pas ingeladen door de accepteer-knop. Uitzondering: puur statistisch gebruik zonder cookies en zonder doorgifte, zoals een zelf gehoste teller.
- Er staan persoonsgegevens in je logbestandenEen standaard error-log schrijft het hele request weg, inclusief het e-mailadres in de body en het token in de header. Die logs gaan vaak naar een derde partij en blijven daar maanden staan. Filter voordat je wegschrijft: nooit hele request-bodies, nooit headers met een token, en van een e-mailadres alleen een hash als je het echt nodig hebt.
- Je hebt geen verwerkersovereenkomst met je leveranciersSupabase, Vercel, Railway, OpenAI, Anthropic, Resend en Brevo verwerken allemaal gegevens namens jou. Met elk van hen heb je er een nodig. Bij bijna allemaal staat die kant-en-klaar in je accountinstellingen onder DPA. Twintig minuten werk om ze op te halen en te bewaren.
- Je weet niet in welk werelddeel je database staatDe standaardregio is vaak Amerika. Doorgifte buiten de EU mag, maar dan moet die geregeld zijn, meestal via het Data Privacy Framework. Veel eenvoudiger is bij het aanmaken een EU-regio kiezen.
- Je stuurt gebruikersgegevens naar een AI-model zonder dat iemand dat weetStuurt jouw app tekst van een gebruiker door naar OpenAI of Anthropic, dan is dat een doorgifte die in je privacyverklaring hoort. Let op het verschil tussen de consumentenversie en de zakelijke API: bij de gratis chatinterfaces kan invoer voor training gebruikt worden, bij de betaalde API's is dat standaard uitgesloten. Zoek in de voorwaarden op het woord training.
- Je hebt geen manier om een account echt te verwijderenIedereen mag om verwijdering vragen en je hebt vier weken. Als verwijderen bij jou een vlaggetje is terwijl de rij blijft staan, voldoe je niet. Bouw het één keer goed: een route die de rijen echt weghaalt, inclusief de rijen in je koppelingen.
Fase 2Controleren
Bewijs voordat je zegt dat het klaar is. Vier controles die je zelf in de browser doet.
- Open je site in een privévenster en kijk in het tabblad Network vóór je iets aankliktEr mag geen verzoek naar google-analytics, facebook, hotjar of een vergelijkbare dienst staan. Staat het er wel, dan laadt je tracking te vroeg.
- Weiger de cookies en herlaadNa weigeren mag er niets van die verzoeken terugkomen. Veel banners onthouden alleen de keuze en laden het script alsnog.
- Verwijder een testaccount en kijk in de databaseDe rij moet weg zijn, en de rijen die eraan hingen ook. Blijft er iets staan, dan is je verwijderroute niet af.
- Zoek in je logs op een e-mailadres van een testgebruikerNul treffers is goed. Eén treffer betekent dat je filter niet werkt.
- Je verwerkersovereenkomsten staan op één plekEen map met de DPA van elke dienst die je gebruikt. Kun je hem niet binnen een minuut laten zien, dan heb je hem niet.
Dit is een checklist, geen juridisch advies. Verwerk je gezondheidsgegevens, biometrie of strafrechtelijke gegevens, dan gelden zwaardere eisen en is een jurist geen luxe.
Alles hierboven in één keer, inclusief de fases, de SQL en de controlestap.
Werkt dit, maar wil je het niet zelf doen?
Dit blad is gratis en blijft gratis. Wil je dat het bij jou automatisch draait in plaats van met de hand, dan bouw ik dat. Beschrijf in vijf vragen wat er vastloopt en stuur het adres van je app mee; binnen één werkdag heb je mijn antwoord op papier.
Vertel wat er vastloopt