--- title: Salon Waitlist System date: 2024-04-16T14:00:00Z ---
En moderne løsning for timebestilling og venteliste for frisørsalonger, implementert med Kubernetes, Docker og Google Cloud Platform
Dette var inspirert av cutters når jeg så oppsettet deres og var i køen der. Hvordan fungerer egentlig dette? De har booking, venteliste og firsører som gjør noe på ipaden her? Dette må jeg prøve å lage selv!
Jeg ville se om jeg kunne bruke cutters som en mal for å lage et veldig "lightweight" verjon av deres system.
Det som også må sies er at denne løsningen er veldig "lightweight" og ikke er ment å brukes i produksjon. Den er ment å være et demonstrasjon av hvordan cutters system fungerer. I tillegg til at det er en god mulighet for meg å prøve ut og utforske moderne teknologier som Kubernetes, Docker og Google Cloud Platform.
Systemet er bygget på en microservices-arkitektur med følgende komponenter:
Kundeorientert portal hvor kunder kan registrere seg for en frisørtime. Interfacet er enkelt og intuitivt med feltene: navn, e-post og telefonnummer.
Sanntidsvisning av ventelisten med dynamisk beregning av estimert ventetid. Viser kunder i kø, påbegynte klipp og oppdateres automatisk.
Frisørenes administrasjonsgrensesnitt hvor de kan starte og avslutte klipp, samt se oversikt over dagens kunder. Oppdaterer ventelistesystemet i sanntid.
REST-API bygget med Node.js og Express som håndterer all kommunikasjon mellom frontend-applikasjonene og MongoDB-databasen. Implementert med CORS-støtte.
Som en ivrig teknologientusiast var det ekstra gøy for meg å virkelig få bryne meg på moderne teknologier som Docker, Kubernetes og GCP.
Jeg containeriserte alle komponentene med Docker, noe som ga meg mulighet til å utvikle lokalt og deploye til sky uten å måtte konfigurere alt på nytt. Det var utrolig nyttig å kunne kjente containere mellom ulike miljøer og vite at alt funker på samme måte.
API-tjenesten bygget jeg med Node.js og Express, som kommuniserer med en MongoDB-database. Frontend-applikasjonene (booking, venteliste, og admin) ble utviklet i React med fokus på enkelhet og responsivt design. Jeg implementerte sanntidsoppdateringer ved hjelp av polling mot API-et.
Det mest utfordrende var å sette opp Kubernetes-clusteret og konfigurere ingress-regler for routing til de forskjellige tjenestene, men når alt først var på plass var det utrolig tilfredsstillende å se hvordan pods automatisk ble restartet ved eventuelle krasj.
For monitorering av systemet integrerte jeg Prometheus og Grafana, som ga meg verdifull innsikt i systemytelsen og hjalp meg identifisere og fikse flaskehalser i API-et når systemet hadde høy belastning.
Jeg bygget systemet med en microservices-arkitektur kjørende i Kubernetes på Google Cloud Platform. Dataen flyter mellom tjenestene som vist i diagrammet nedenfor - fra kundens registrering til ventelistens oppdatering i sanntid.
Systemarkitektur med dataflyt gjennom komponentene
Da jeg designet brukergrensesnittene ville jeg holde dem enkle og intuitive. Min filosofi var at en kunde ikke skal trenge en bruksanvisning for å registrere seg, og en frisør skal enkelt kunne se hvem som er neste i kø. Jeg holdt derfor designet minimalistisk og fokuserte på brukervennlighet fremfor fancy animasjoner.
Enkel og intuitiv bookingportal der kunder kan registrere seg i ventelisten.
Elegant sanntidsvisning av kunder i kø med estimert ventetid.
Oversiktlig dashbord for ansatte med full kontroll over kundebehandling.
Dette prosjektet var ekstremt lærerikt, og jeg støtte på mange interessante utfordringer underveis. Det var spesielt spennende å se hvordan alt koblet seg sammen til slutt og faktisk fungerte som en helhet.
Noen av de viktigste tingene jeg lærte var:
Om jeg skulle gjort prosjektet på nytt, ville jeg nok vurdert å bruke TypeScript for å få bedre typesikkerhet, og kanskje gått for en mer event-drevet arkitektur med Kafka eller RabbitMQ for meldingsutveksling mellom tjenestene.
Ta kontakt om du ønsker å diskutere hvordan jeg kan hjelpe med lignende utfordringer i din virksomhet.