Vitesse
De club had content, kaartverkoop en supportersdata in losse systemen staan. Elke campagne kostte handwerk en niemand had een compleet beeld van een supporter.

01Drie systemen die elk dachten dat ze gelijk hadden over dezelfde supporter.
De website draaide op een verouderd CMS, de kaartverkoop liep via een extern platform en de nieuwsbrief had een eigen ledenbestand. Wilde de club een campagne voeren richting seizoenkaarthouders, dan werden er lijsten geëxporteerd, in een spreadsheet vergeleken en met de hand ontdubbeld.
Dat kostte niet alleen tijd, het maakte ook fouten mogelijk op momenten dat het ertoe deed. Rond een uitverkochte wedstrijd kreeg een deel van de supporters een aanbieding voor kaarten die er niet meer waren.
02Wat er gebouwd is
Eén profiel per supporter
De eerste stap was de data samenbrengen. Ticketing, nieuwsbrief en webshop hielden elk hun eigen versie van dezelfde persoon bij, met verschillende schrijfwijzen en soms verouderde adressen.
Er staat nu een centraal profiel waar die bronnen op aansluiten, met vastgelegde regels voor welk systeem leidend is bij tegenstrijdigheden. Een AVG-verzoek is daardoor één handeling in plaats van een rondgang langs drie leveranciers.
- Koppeling met het ticketingsysteem
- Ontdubbelen op e-mail en klantnummer
- Voorkeuren per kanaal
- AVG-verzoeken in één handeling
Redactie zonder omwegen
De redactie publiceert wedstrijdverslagen, spelerspagina's en campagnes nu zelf. Het datamodel volgt de structuur van de club: seizoenen, selecties, wedstrijden en spelers zijn eigen begrippen in plaats van losse pagina's.
Een nieuw seizoen of een gewijzigde selectie is daarmee een invulhandeling geworden. De redactie kan bovendien vooruit plannen en per apparaat controleren hoe een publicatie eruitziet.
- Blokkengebaseerde pagina's
- Seizoenen en selecties als model
- Geplande publicatie
- Voorvertoning per apparaat
Piekbelasting rond wedstrijden
Het verkeer komt in korte, hevige pieken: bij het openen van de kaartverkoop en direct na een wedstrijd. Een gemiddelde belasting zegt hier niets, het gaat om de paar minuten waarin alles tegelijk gebeurt.
Zwaar leeswerk gaat daarom via een cachelaag, terwijl de kaartverkoop rechtstreeks loopt. Valt een extern systeem uit, dan blijft de rest van de site werken en ziet de bezoeker waar het aan ligt.
- Caching per pagina-onderdeel
- Wachtrij bij drukte
- Nette foutmeldingen met logboek
- Monitoring en alerts
03Technische keuzes
Laravel
Groot ecosysteem en een voorspelbare structuur, zodat een andere developer het project zonder inwerkperiode kan overnemen.
Eigen CMS-laag
Een standaardpakket zou het clubmodel niet dekken. De redactie werkt nu met begrippen die ze herkent in plaats van generieke pagina's.
Cache per onderdeel
Niet de hele pagina cachen maar per blok, zodat de kaartverkoop actueel blijft terwijl de rest uit cache komt.
04De redactie werkt zelfstandig en supportersdata staat op één plek, ook tijdens de drukste kaartverkoop.
Campagnes worden nu binnen de omgeving zelf opgezet, zonder exports of handmatige ontdubbeling. De redactie publiceert dagelijks zonder tussenkomst van een developer, en de piek rond de kaartverkoop verloopt zonder storing.
De omgeving is in beheer. Ik werk mee aan doorontwikkeling per seizoen en houd updates en monitoring bij.
