De uitdaging
Stel je voor: je bent verantwoordelijk voor de wedstrijdplanning van een basketbalvereniging met 17 teams. Tien thuiswedstrijden op één zaterdag, verdeeld over drie velden. Eén coach begeleidt vier teams die dus nooit tegelijk kunnen spelen. Twee teams delen spelers. Het seniorenteam levert scheidsrechters voor vier jeugdteams, dus hun speeltijd dicteert wanneer die teams aan de beurt zijn. De jongste teams spelen bij voorkeur in de ochtend. Drie teams kunnen niet op zondag. En sommige tegenstanders ook niet.
Dat is geen planning — dat is een combinatorisch probleem met meer dan vijftien onderlinge afhankelijkheden. En bij Waterdragers werd dat probleem elk weekend opnieuw opgelost door dezelfde persoon, met dezelfde spreadsheets, en dezelfde impliciete kennis die nergens anders vastlag.
Het werkte. Maar het was kwetsbaar. Eén vrijwilliger die stopt, en de hele keten valt stil.
Van probleem naar concept
Wat dit project anders maakt dan BOB of de Teamindeling App, is dat het niet om één proces gaat. Het competitieseizoen van een basketbalvereniging is een keten van onderling afhankelijke stappen: leden worden ingedeeld in teams, teams krijgen een competitieprogramma, wedstrijden moeten worden ingepland met scheidsrechters. Drie processen, drie verantwoordelijken, nul koppeling.
De inzicht was: deze processen zijn niet los van elkaar. De teamindeling bepaalt wie er coacht, en dat bepaalt welke teams niet tegelijk thuis kunnen spelen. Het competitieprogramma bepaalt wanneer er scheidsrechters nodig zijn, en dat bepaalt welke spelers zich moeten inschrijven in BOB. Elke wijziging in het ene proces heeft gevolgen voor het andere.
In plaats van de Competitie Planner als geïsoleerde tool te bouwen, is de app bewust zo ontworpen dat deze kan integreren met de twee bestaande apps. Elke app functioneert op eigen kracht, maar wanneer ze gekoppeld zijn is data uitwisselbaar — en levert elke app nog meer waarde op.
De oplossing: CompetitiePlanningSysteem
Het CompetitiePlanningSysteem is de app die de wedstrijdplanning beheert — en het sluitstuk van een drieluik. Samen met de Teamindeling App en BOB vormt het een ecosysteem van drie zelfstandige apps die elk een eigen domein bedienen. De kracht zit in het ontwerp: de apps zijn zo gebouwd dat ze onderling data kunnen uitwisselen wanneer ze samen worden ingezet.
Teamindeling → Competitie Planner — Teams, coaches en niveaus zijn uitwisselbaar. Geen overtypen, geen verouderde lijstjes. De Competitie Planner detecteert automatisch dat vier teams dezelfde coach hebben en markeert ze als conflictcluster. Wijzigt er iets in de Teamindeling? Eén synchronisatie en de Competitie Planner is bijgewerkt.
Competitie Planner → BOB — Wedstrijden met datum, tijd en veldnummer worden gesynchroniseerd naar de scheidsrechterplanner. Wordt een wedstrijd verplaatst? BOB detecteert de wijziging bij de volgende sync. Het systeem matcht op NBB-wedstrijdnummer, zodat verplaatsingen niet tot dubbelingen leiden.
BOB → Competitie Planner — Scheidsrechterinformatie vloeit terug: welke teams kunnen fluiten, hoeveel scheidsrechters zijn er beschikbaar per wedstrijddag, is het niveau toereikend? De Competitie Planner waarschuwt als er te weinig scheidsrechters zijn voor een geplande wedstrijddag.
Onder de motorkap van de Competitie Planner draait een wizard die het seizoensproces stap voor stap begeleidt. Van het importeren van teams tot het genereren van een volledige dagplanning — elke stap bouwt voort op de vorige. De app genereert automatisch voorkeurscodes voor de Basketball Bond, berekent welke weekenden er zaalruimte nodig is, en maakt planningsvoorstellen die meer dan vijftien randvoorwaarden tegelijk respecteren.
Een verplaatsingstool analyseert niet alleen de eigen planning maar ook het programma van de tegenstander. Plak het tegenstander-programma vanuit de NBB-website, en de app berekent op welke datums beide clubs beschikbaar zijn. Geen eindeloos heen-en-weer mailen meer — het voorstel klopt de eerste keer.
De filosofie erachter
Door het hele systeem loopt een bewuste keuze: belonen wat goed gaat in plaats van straffen wat misgaat. Dat klinkt als een open deur, maar in de praktijk werkt het tegenovergestelde verassend hardnekkig — zeker bij jeugdspelers.
In BOB verdienen scheidsrechters punten voor elke wedstrijd die ze fluiten, met bonuspunten voor last-minute invallen. Het systeem beloont inzet in plaats van afwezigheid te bestraffen. In de Competitie Planner krijgen de jongste teams voorrang bij de ochtendsessies — de planning is geoptimaliseerd voor de ervaring van de spelers, niet alleen voor de efficiëntie van de zaal. En in de Teamindeling houdt het indelingsvoorstel rekening met sociale dynamiek en spelersvoorkeuren, zodat de seizoensovergang een positieve ervaring is.
Het resultaat: hogere betrokkenheid, minder no-shows, en een cultuur waarin meedoen de norm is — niet omdat het moet, maar omdat het loont.
Het bouwproces
Het CompetitiePlanningSysteem is gebouwd met vibe coding: intensief samenwerken met AI om snel van concept naar werkende software te komen. Maar waar BOB en de Teamindeling elk binnen enkele dagen hun eerste versie hadden, lag bij de Competitie Planner een extra uitdaging: de app moest niet alleen zelfstandig werken, maar ook zo ontworpen zijn dat integratie met de twee bestaande apps mogelijk was.
Het koppelen van drie apps — elk met een eigen database, eigen logica en eigen gebruikers — vereiste zorgvuldige architectuur. Welke app is eigenaar van welke data? Hoe voorkom je dat een wijziging in de ene app ongemerkt de andere breekt? Hoe beveilig je cross-database koppelingen wanneer de broncode op GitHub staat?
De oplossing: elke app beheert zijn eigen data en leest read-only uit de databases van de andere apps. Credentials worden beheerd via cloud-secrets, niet in de repository. Row Level Security policies garanderen dat externe koppelingen alleen leesrechten hebben. En het matching-mechanisme werkt op NBB-wedstrijdnummers als primaire sleutel, zodat data-integriteit gewaarborgd blijft bij verplaatsingen en seizoenswisselingen.
Het resultaat
De handmatige seizoensplanning is vervangen door een begeleid proces. Een nieuwe vrijwilliger kan het systeem gebruiken zonder maanden inwerkijd — de wizard leidt door elke stap en de app waarschuwt bij conflicten. De kennis die voorheen in het hoofd van één persoon zat, is geëxternaliseerd naar de applicaties.
Concrete impact: teams worden in seconden geïmporteerd in plaats van handmatig overgetypt. Voorkeurscodes worden automatisch berekend op basis van tien parameters. Een dagplanning met vijftien randvoorwaarden wordt gegenereerd in plaats van handmatig gepuzzeld. Verplaatsingsvoorstellen houden rekening met de realiteit van beide clubs. En de scheidsrechterplanning draait zelfstandig via BOB.
Maar het belangrijkste resultaat is misschien het minst zichtbare: de overdraagbaarheid. Het systeem is niet langer afhankelijk van de persoon die het gebouwd heeft. Het is een product, geen persoonlijke dienst.
Waarom Kwalitist?
Eén app bouwen is relatief eenvoudig. Een app bouwen die ook naadloos integreert met twee bestaande systemen — dat is een andere discipline. Het CompetitiePlanningSysteem vereiste niet alleen technische kennis, maar diep begrip van hoe een basketbalseizoen in de praktijk verloopt. Welke afhankelijkheden bestaan er tussen teams? Hoe werkt het coderingssysteem van de Basketball Bond? Wanneer worden zaalreserveringen gedaan ten opzichte van het competitieprogramma?
Kwalitist brengt wat AI niet heeft: het vermogen om drie separate processen te doorgronden, de verbanden ertussen te zien, en die te vertalen naar een architectuur waarin gegevens uitwisselbaar zijn zonder dat de integriteit verloren gaat. Domeinkennis die het verschil maakt tussen drie losse experimenten en één werkend ecosysteem.
Herkenbaar?
Elke organisatie kent het: processen die op papier los van elkaar staan, maar in de praktijk voortdurend op elkaar wachten. De ene afdeling heeft informatie nodig van de andere, maar die zit in een ander spreadsheet, een ander systeem, of het hoofd van een andere collega. Het werkt — tot iemand vertrekt, de organisatie groeit, of er iets misgaat dat niemand had voorzien.
Kwalitist helpt organisaties om die losse puzzelstukjes te verbinden tot één samenhangend geheel:
- Integratie die werkt. Geen handmatig overtypen tussen systemen, maar gegevens die uitwisselbaar zijn en altijd actueel.
- Complexiteit die verdwijnt. De app denkt mee, zodat de gebruiker dat niet hoeft.
- Kennis die blijft. Niet in het hoofd van één persoon, maar in het systeem dat iedereen kan gebruiken.
Heeft uw organisatie processen die beter met elkaar verbonden zouden moeten zijn? Neem contact op en ontdek wat Kwalitist voor u kan betekenen.