--- title: Salon Waitlist System date: 2024-04-16T14:00:00Z --- Martin | Salon Prosjekt
Kubernetes & Cloud

Salon Waitlist System

En moderne løsning for timebestilling og venteliste for frisørsalonger, implementert med Kubernetes, Docker og Google Cloud Platform

Ferdig november 2024 Team: Selvstendig Varighet: 2 uker

Prosjektoversikt

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.

Teknologier

Docker Kubernetes Google Cloud Platform React Node.js MongoDB JavaScript CSS HTML

Løsningsarkitektur

Systemet er bygget på en microservices-arkitektur med følgende komponenter:

Booking System

Kundeorientert portal hvor kunder kan registrere seg for en frisørtime. Interfacet er enkelt og intuitivt med feltene: navn, e-post og telefonnummer.

Venteliste Visning

Sanntidsvisning av ventelisten med dynamisk beregning av estimert ventetid. Viser kunder i kø, påbegynte klipp og oppdateres automatisk.

Admin Panel

Frisørenes administrasjonsgrensesnitt hvor de kan starte og avslutte klipp, samt se oversikt over dagens kunder. Oppdaterer ventelistesystemet i sanntid.

Backend API

REST-API bygget med Node.js og Express som håndterer all kommunikasjon mellom frontend-applikasjonene og MongoDB-databasen. Implementert med CORS-støtte.

Teknisk implementasjon

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.

Systemarkitektur

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 for Salon Waitlist

Systemarkitektur med dataflyt gjennom komponentene

Brukergrensesnitt

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.

Booking Portal

Booking Portal

Enkel og intuitiv bookingportal der kunder kan registrere seg i ventelisten.

Venteliste Display

Venteliste Display

Elegant sanntidsvisning av kunder i kø med estimert ventetid.

Admin Dashboard

Admin Dashboard

Oversiktlig dashbord for ansatte med full kontroll over kundebehandling.

Læringsutbytte og refleksjoner

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:

  • Hvordan Docker faktisk forenkler utvikling når man jobber med flere tjenester - ingen flere "men det funker på min maskin"-øyeblikk!
  • Kraften i Kubernetes for å auto-skalere tjenester og håndtere failover
  • Google Cloud Platform er mer intuitivt enn jeg forventet, men har likevel en brå læringskurve
  • Verdien av god monitorering - nå forstår jeg hvorfor Prometheus og Grafana er så populære
  • Sanntidskommunikasjon mellom mange klienter samtidig er både utfordrende og morsomt å implementere
  • Det tar tid å sette opp en fungerende CI/CD pipeline, men det sparer enormt med tid i lengden

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.

Interessert i lignende prosjekter?

Ta kontakt om du ønsker å diskutere hvordan jeg kan hjelpe med lignende utfordringer i din virksomhet.