Projecten/Platform · 2025

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.

LaravelKoppelingenCMS
Vitesse

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
kaartverkoop op een piekmoment — overzicht van wachtrij en beschikbaarheid

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.

3 → 1systemen samengebracht tot één supportersprofiel
< 1 seclaadtijd op piekmomenten rond de kaartverkoop
0handmatige exports per campagne
redactie — pagina samenstellen
De redactie bouwt een wedstrijdverslag op uit blokken en ziet direct hoe het op mobiel valt.
supportersprofiel
Eén profiel met de gegevens uit ticketing, nieuwsbrief en webshop naast elkaar.

Vragen die hierbij vaak opkomen.

Zoiets nodig voor jouw organisatie?