Afsprakenplatform en kassasysteem voor 1Kapper
1Kapper is de online agenda waarmee kapsalons en barbers hun afspraken plannen, met een kassasysteem eraan vast.
Klanten boeken zelf een tijd bij hun kapper via 1kapper.nl, de salon ziet die afspraak meteen in de agenda staan en rekent de behandeling later in dezelfde omgeving af. Op het platform worden duizenden afspraken per dag gemaakt, in de drukke uren honderden per uur.
Wat er in het platform zit
Een salon stelt zijn eigen beschikbaarheid in en klanten boeken daarbinnen op elk moment van de dag. Aan de agenda hangen de klantenkaart, het personeelsrooster, de voorraad en de rapportages. Het kassasysteem rekent de behandeling af via een PIN-koppeling met Pay.nl en schrijft het bedrag weg in diezelfde rapportages. De bevestiging en de herinnering stuurt het platform zelf naar de klant.
Overgenomen van de vorige partij
Wij hebben de doorontwikkeling overgenomen van de partij die het platform daarvoor onder handen had, inclusief de deploys en het overleg over nieuwe functionaliteit. Het platform draait op Laravel met Vue aan de voorkant. De database is PostgreSQL, gekozen omdat je daarin beter uit de voeten kunt met agenda's en met afspraken die elkaar overlappen.
Modules die een salon erbij kan zetten
Boven op de agenda en de kassa kan een salon losse modules aanzetten. Een wachtlijst stuurt de eerstvolgende klant automatisch een boekingslink zodra er een plek vrijkomt. Met een klantenstop houdt een salon nieuwe boekingen tijdelijk tegen, terwijl vaste klanten gewoon blijven boeken.
Salons met meerdere vestigingen of met stoelverhuur koppelen meerdere agenda's en kassa's aan elkaar. Werk je met behandelruimtes, dan wijs je per behandeling een ruimte toe, zodat twee klanten niet op dezelfde plek worden ingepland. Verder zijn er rapportages over de omzet en de afspraken, en een spaarpuntenprogramma dat punten bijschrijft bij een afspraak of bij de aankoop van een product.
Tegen betaling komen daar een nieuwsbriefmodule bij, een mail naar klanten die al een tijd niet zijn geweest, een verjaardagsmail met een aanbieding en urenregistratie voor het personeel. Elke module grijpt in op dezelfde agenda en dezelfde kassa, dus een uitbreiding moet passen op wat er al staat.
De securitycontrole en wat daaruit kwam
We hebben het platform nagelopen op beveiligingsrisico's. Daar kwam onder meer role escalation uit, waarbij een gebruiker rechten kon krijgen die niet bij zijn rol horen. Die hebben we opgelost, net als de andere punten uit de controle. Sindsdien houden we de CVE's bij van de packages waar het platform op leunt, zodat een bekend lek in een afhankelijkheid niet maandenlang blijft staan.
Van pollers naar een socketserver
De live weergave van de agenda werkte met pollers. Elk geopend scherm vroeg de server met vaste tussenpozen om nieuwe gegevens, ook als er niets was veranderd. Bij duizenden afspraken per dag telt dat aan de serverkant flink op. We hebben het vervangen door een socketserver, die een wijziging doorstuurt naar de openstaande schermen op het moment dat die wijziging er is.
Deploys en monitoring
Wij zetten de nieuwe versies naar live. Sentry meldt de fouten die in productie optreden. Daarnaast bewaken we of de omgeving bereikbaar is en of er CVE's openstaan voor de gebruikte packages.
Wat wij doen
Het dagelijkse beheer van 1Kapper ligt bij ons, dus 1Kapper kan het applicatiebeheer uitbesteden zonder zelf een technisch team op te bouwen. De hosting en het onderhoud horen daarbij, net als de beveiliging van applicaties en websites. Daarnaast adviseren we over technische verbeteringen, waarvan de overstap van pollers naar sockets de duidelijkste is.