Lab Notes · Veilig & schaalbaar

Persoonlijk account of team: waarom alles in je app bij een team hoort

Door ·

Je hebt in een paar weekenden met Lovable een tool gebouwd voor je eigen bedrijf. Offertes maken, klanten bijhouden, een lijst van wat er openstaat. Hij werkt, en je gebruikt hem elke dag. Dan wil iemand van de binnendienst ook inloggen. Je zoekt in je app naar een knop Collega uitnodigen en vraagt je AI-tool er een te maken. Het antwoord is lang, want alles in je database blijkt aan jou te hangen.

Daar zit een vraag achter die eigenlijk op dag één hoort: is iets van een persoon of van een team? Voor bijna elke app die je aan bedrijven verkoopt of in je eigen bedrijf gebruikt, is het antwoord: van een team, ook als dat team voorlopig uit één persoon bestaat. Later omzetten is een verbouwing, en je AI-tool maakt die keuze stilzwijgend voor je. Vergelijk het met de bedrijfsauto. Die staat op naam van de bv, ook als jij de enige bent die erin rijdt.

Waarom je AI-tool het simpelste kiest

Vraag Claude Code, Cursor of Lovable om een app voor offertes, en je krijgt meestal twee tabellen. Eén met gebruikers, en één met offertes waarin bij elke offerte staat van welke gebruiker hij is. Dat werkt meteen, en het is precies wat je vroeg. Elk scherm toont de offertes van wie er is ingelogd, en elke controle stelt dezelfde vraag: is dit van jou?

Moet een tweede persoon dezelfde offertes zien, dan klopt die vraag nergens meer. Elke tabel krijgt een nieuw veld, elke zoekopdracht een nieuwe regel en elke rechtencontrole een andere vraag. En de gegevens die er al staan, zet je één voor één om zonder dat er iets wegvalt. Je AI-tool doet dat graag, alleen in honderd bestanden tegelijk. Jij controleert of hij er geen overslaat.

Op dit stuk loop ik zelf ook steeds vast, en pas later kom ik erachter dat ik het niet handig had gedaan. In april maakte ik bij Vercel een team aan voor een nieuw product. Toen had ik er twee: dat team, en het gratis team dat Vercel van mijn persoonlijke account had gemaakt. Ik wilde het nieuwe team op het gratis plan zetten, en daarvoor moest het oude weg. Dat kon niet, want het was mijn enige gratis team. Een catch-22 in een instellingenscherm. En de API-sleutels van een tool die we nu bouwen staan nog op mijn persoonlijke accounts. Die verhuis ik vlak voor de livegang, en dat wordt een van de grotere klussen.

Het goede nieuws voor je eigen app: de grote platforms hebben dit al uitgezocht, soms op de harde manier. Er zijn drie smaken.

Drie manieren om het te regelen

Een persoon, met organisaties ernaast

GitHub laat je kiezen. Een repository, de map met je code, hoort bij je eigen account of bij een organisatie. Dat voelt vrij tot je hem wilt verhuizen, want daar heeft GitHub een hele regeling voor. Je moet beheerder zijn, de naam mag aan de andere kant nog niet bestaan, en issues, sterren en volgers verhuizen mee. Oude links sturen door, tot iemand op de oude plek een nieuwe repository met dezelfde naam maakt. Dan zijn ze weg.

Een persoon logt in, het team bezit

Bij Cloudflare en Netlify is een persoon alleen iemand die inlogt. Alles wat je maakt hoort bij een account of een team, en je kunt lid zijn van meerdere. Netlify zegt het in één zin: elke site hoort bij een team, ook als het een team van één is. Cloudflare deed het eerst anders. Tot 2018 zaten gebruikers, accounts en wat ze bezaten aan elkaar vast, en met collega's in één account werken kon alleen met een Enterprise-abonnement. Dat hebben ze losgetrokken, en sindsdien kan iedereen collega's toevoegen.

Van het ene naar het andere

Vercel begon als GitHub en werd Netlify. In januari 2024 werd elk persoonlijk account een gratis team, zodat je bij het overstappen naar een betaald plan geen projecten meer hoefde te verhuizen. Logisch, en toch verwarrend. Op het forum van Vercel vroeg iemand dat jaar waarom met het verwijderen van een team ook het persoonlijke account was verdwenen. Het antwoord van Vercel: elk persoonlijk Hobby-account is nu een team. In maart 2026 meldde een ontwikkelaar die alleen werkt dat Vercel het project niet meer wilde bouwen, omdat Hobby-teams geen samenwerking ondersteunen. Verhuizen lukte niet, verwijderen ook niet. Mijn catch-22 was dus geen pech.

Zo doen anderen het

Zet je ze naast elkaar, dan zie je hoe vaak het team de eigenaar is, en hoe verschillend een klant of gast binnenkomt.

PlatformWie is de eigenaarEen klant of gast
GitHubeen persoon of een organisatieeen outside collaborator krijgt toegang tot één repository, zonder lid te worden
Cloudflarehet account, en je kunt lid zijn van meerderecollega's komen erbij als lid van het account, met een eigen rol
Netlifyhet team, ook als dat een team van één isde eigenaar kiest bij welke projecten een developer of reviewer kan
Vercelhet team, sinds 2024 ook je eigen Hobby-teamsamenwerken kan pas op het betaalde Pro-plan
Framerde werkruimtelinksboven staan ook de werkruimtes waar je gast bent
Webflowde workspace van de klanteen bureau werkt als gast in de workspace van de klant, en de klant blijft eigenaar

Bij bijna iedereen is het team of de werkruimte de eigenaar, en krijgt een gast een eigen ingang. Alleen GitHub laat de persoon eigenaar blijven, en heeft daarom die hele regeling voor het verhuizen.

Probeer het zelf

Kies hoe je dashboard is ingericht. Je ziet wat er linksboven staat, wie de eigenaar is van wat er gemaakt wordt, en wat er gebeurt als er een collega bij komt.

Een schets van drie manieren om een dashboard in te richten. Jansen Installatie is een voorbeeld en geen klant.

Het gangbare advies: alles hoort bij een organisatie

Wie software aan bedrijven verkoopt, krijgt overal hetzelfde advies. WorkOS, dat het inloggen voor zakelijke apps regelt, raadt aan je app rond organisaties te bouwen. Wie vertrekt, laat de gegevens achter bij de organisatie. Clerk, ook een dienst voor het inloggen, schrijft dat de meeste zakelijke apps persoonlijke accounts beter uit kunnen laten. En Makerkit en TurboStarter, twee pakketten met startcode voor een SaaS, waarschuwen dat overstappen later bestaande gegevens losscheurt, dus dat je dit kiest vóór de lancering.

Het recept is steeds hetzelfde. Een persoon kan in meerdere teams zitten, en een team heeft meerdere personen. Dat lidmaatschap is een eigen lijst, een koppeltabel, met een regel per persoon per team. En wie zich aanmeldt, krijgt meteen een eigen team: een werkruimte van één, met de naam van de persoon of het bedrijf, die je later hernoemt. Clerk heeft daar een schakelaar voor. Bij Auth0 schrijf je het zelf, met een stukje code dat na het aanmelden draait.

Doe dit voordat er echte gegevens in staan. Dan is het tekenwerk. Daarna is het verhuizen.

Wat het betekent voor je database

Vier soorten tabellen zijn genoeg.

TabelWat erin staat
userswie inlogt: een e-mailadres en een naam
teamswie iets bezit: een naam en het abonnement
membershipswie in welk team zit, met een rol
al het anderehet team dat de eigenaar is (team_id)

Een user_id mag op een offerte blijven staan, als aangemaakt door. De eigenaar is het team. De rol staat op het lidmaatschap. Zo is dezelfde persoon eigenaar in het eigen team en gewoon lid in het team van een klant. De rekening gaat naar het team, zodat een nieuwe collega geen eigen abonnement nodig heeft.

Wat het betekent voor je interface

Zet de teamwisselaar linksboven, waar Vercel, Linear en Framer hem ook hebben. Daar zie je in welk team je werkt, en daar wissel je zonder uit te loggen. Noem het eigen team daar geen Personal, want dat woord belooft een apart account dat er niet is. Toon de naam van het team, en bij een team van één gewoon je eigen naam. Zo richten we het ook in bij de tool die we nu bouwen, waarmee klanten hun site via een chat beheren. Daar staat linksboven je naam, met de sites die je voor klanten bewerkt.

Gasten en klanten: toegang tot één ding

Niet iedereen hoort in je team. Denk aan een klant die één site mag bijwerken, een opdrachtgever die in één bouwproject meekijkt of de accountant die één jaarrekening moet zien. Maak ze geen teamlid, want dan zien ze alles. Geef ze toegang tot dat ene ding, met een eigen lijst: deze persoon, dit project, deze rol.

Soms is een link genoeg. Bij Codocs, de deeldienst die we voor Hostmatters maakten, krijgt de ontvanger een deellink, met een wachtwoord en een vervaldatum als je dat wilt. In het logboek staat wanneer de link geopend is en vanaf welk adres.

Uit ons werk
Het logboek van Codocs met vier gebeurtenissen onder elkaar: bestand geüpload, deellink aangemaakt, deellink geopend vanaf een IP-adres in Chrome, en bestand gedownload.
Codocs, de deeldienst die we voor Hostmatters maakten: het logboek houdt bij wanneer een deellink is geopend en vanaf welk adres

De checklist

  • Elk ding dat iemand maakt, heeft een team als eigenaar.
  • Er is een tabel memberships, met per regel een persoon, een team en een rol.
  • Wie zich aanmeldt, krijgt meteen een eigen team, met een naam die je later wijzigt.
  • De rekening hangt aan het team.
  • Klanten en gasten krijgen toegang per ding, zonder teamlid te worden.
  • Linksboven staat de naam van het team, en nergens Personal.
  • Dit staat vast voordat er echte gegevens in je app staan.

Die bedrijfsauto rijdt intussen gewoon op naam van de bv. Komt er een collega bij, dan laat je een tweede sleutel maken. In je app heet die knop Collega uitnodigen.

Bronnen, bekeken op 17 oktober 2026: WorkOS, Modeling your app, Users and organizations en Model your B2B SaaS with organizations. Clerk, Configure organizations. Makerkit, Account modes. TurboStarter, Disable personal accounts. Auth0 Community, Having all users be part of an organization, september 2025. Cloudflare, Accounts and zones en Expanding multi-user access, mei 2018. Netlify, Team-owned sites, Team management en Manage project access. Vercel, Easier transitions between hobby and pro, januari 2024, en op het forum Don't create hobby plan, augustus 2024, en Hobby teams do not support collaboration, maart 2026. Vercel, Account Management. Framer, Workspaces. Linear, Workspaces. Webflow, Guide for clients of agencies and freelancers. GitHub, About repository transfers en Adding outside collaborators.

Lab Notes

Probeer dit

Laat je AI-codeerhulp je app nalopen, voordat je de volgende functie bouwt. Plak deze opdracht in Claude Code, Cursor of Lovable:

Loop mijn app na op hoe gebruikers en eigendom zijn ingericht, en verander nog niets. Vertel me per tabel of de eigenaar een gebruiker of een team is. Vertel of er een tabel is die gebruikers aan teams koppelt, met een rol per lidmaatschap, en of iemand bij het aanmelden meteen een eigen team krijgt. Vertel hoe een klant of gast toegang krijgt tot één ding zonder teamlid te worden. Stel daarna een plan voor waarin alles bij een team hoort: de tabellen users, teams en memberships (user_id, team_id, rol), een team_id op al het andere, een team van één bij het aanmelden en een aparte toegangslijst voor gasten. Zeg welke bestaande gegevens we moeten omzetten en hoe, en wacht op mijn akkoord.

Begin je net, zet de opdracht dan in je eerste bericht en vraag of de tool het meteen zo inricht. Lees het plan rustig door, en laat het pas uitvoeren als er een back-up van je database is.

Vragen

Moet een SaaS of webapp persoonlijke accounts of teams hebben?

Voor een app die je aan bedrijven verkoopt of in je eigen bedrijf gebruikt: teams. Een persoon logt in, en alles wat er gemaakt wordt hoort bij een team, ook als dat team uit één persoon bestaat. Zo kan er later een collega bij zonder dat je de database verbouwt. Clerk, WorkOS en Makerkit geven hetzelfde advies.

Hoe ziet een database met gebruikers, teams en lidmaatschappen eruit?

Een tabel users voor wie inlogt, een tabel teams voor wie iets bezit, en een tabel memberships met per regel een user_id, een team_id en een rol. Alle andere tabellen krijgen een team_id als eigenaar. De rol staat op het lidmaatschap, zodat dezelfde persoon in het ene team eigenaar en in het andere gewoon lid kan zijn.

Hoe geef je in een SaaS een klant toegang tot één project zonder dat die teamlid wordt?

Met een aparte toegangslijst per project: deze persoon, dit project, deze rol. Of met een deellink, eventueel met een wachtwoord en een vervaldatum. Een klant als teamlid toevoegen geeft toegang tot alles in het team, en dat wil je meestal niet.

Kun je een SaaS achteraf omzetten van persoonlijke accounts naar teams?

Ja, maar het is een verbouwing. Elke tabel krijgt een team_id, elke zoekopdracht en elke rechtencontrole verandert, en de bestaande gegevens zet je een voor een om. Makerkit en TurboStarter waarschuwen dat gegevens daarbij los kunnen raken. Kies het daarom voordat er echte gebruikers zijn.

Kiest Lovable of Claude Code zelf voor persoonlijke accounts of teams?

Meestal kiezen ze het simpelste: alles aan de ingelogde gebruiker hangen. Dat werkt voor één persoon. Vraag er dus vooraf expliciet om, met teams, lidmaatschappen en een team van één bij het aanmelden.

Verder lezen

Bekijk ook

Lab Notes

Lab Notes Vol. 1 verschijnt op dinsdag 1 december

Eens per twee maanden de nieuwe stukken in je mail, met wat niet op de site staat:

  • Wat er speelde in de studio en wat er nieuw is bij ons
  • Wat we onderweg vonden: een paar links die het lezen waard zijn
  • Eén ding om zelf te proberen, haalbaar in een uur

Antwoorden kan gewoon op de mail. Je krijgt eerst een mail met een knop. Pas na die klik sta je op de lijst. Je adres gebruiken we alleen voor Lab Notes.

De oprichter van een modemerk in haar atelier, een stapel groene sweaters in haar armen en de rekken met de collectie achter haar.

Wil je even gratis sparren over jouw digitale idee?

Waar loop jij tegenaan in je bedrijf? Wat kan beter? Wat kan sneller? En wat doet iemand nog elke week met de hand?

  • Een halfuur sparren over jouw idee, gratis
  • Ontdek welke route het beste werkt voor jouw bedrijf
  • Krijg een ruwe inschatting van de prijs en het aantal weken
Wat is jouw idee?

„Een voorraadmodel dat ziet welke maat terugkomt, zodat we die niet meer inkopen.”

Sportwebshop, Deventer

Alexander Kaan, zwart-witfoto.

Vertel me je probleem, je geniale idee of stel gewoon wat vragen!

Alexander Kaan, product designer

Of plan direct een halfuur (opent in een nieuw venster)Of stuur een WhatsApp (opent WhatsApp)

Mogen we met cookies meten hoe je deze site gebruikt? Meer over cookies