Skip to content

All projects

Services · Commerce

Klu

Spa and salon appointments: find the place, pick the service, book it.

Role
Flutter developer
Platforms
Android · iOS
Year
2025
Status
Shipped
Stack
FlutterDartREST APIFirebase

The brief

Booking a salon or a spa is a phone call that nobody wants to make. The customer does not know what is free, the shop does not know who is coming, and both find out at the same moment. The app exists to move that exchange off the telephone: what is offered, who offers it, when it is free, and what it costs, all before anyone commits.

My part

Flutter on the client against the client's REST backend, with Firebase behind sign-in and the notifications that keep an appointment from being forgotten. One codebase, both stores.

The salon directory: a search field and a filter control over a row of service tabs — All, Manicure, Hair, Spa, Massage, Facial — then the salons themselves, each a photograph of its floor beside its name, its rating out of five with the number of reviews, and the city it is in, with a bookmark to keep it.
The home screen on a dark ground: the KLU wordmark and a notification bell, a greeting, then a scrolled row of top-rated centres led by a photograph of a barbershop floor with its rating and city beneath, and under that a row of categories — hair, hair shower, manicure, facial — each drawn as a line icon.

Decisions

The treatment is the entry point, not the shop. Someone who wants a manicure does not know which salon they want, so the service tabs sit above the list and filter it. The directory is browsable by name for people who already have a favourite; it opens on the question everyone else is asking.

Photographs of the room, and a rating next to them. A salon is chosen on how it looks and on whether other people liked it. Both are on the row, so a visitor can rule a place in or out without opening it.

Two ways to be served, decided before booking. A shop can be visited or it can come to you, and which one you want changes the price and the slot. It is a choice on the shop's page rather than a surprise at checkout.

Saved places, because this is a repeat purchase. A haircut is not a one-time transaction. The bookmark on every row exists so the second booking is shorter than the first.