The client books on their own in the account or in a Telegram bot, sees their visit history and bonus balance, earns bonuses for visits and referred friends, and spends them on payment
Phone call to self service
How a client books a service
How we measured: before the project, an administrator took bookings by phone and in messages; afterward, the client picks the salon, stylist, service, and time themselves, in the account or in the Telegram bot, with no staff involved
Bookings at the salons went through the administrator. A client called or wrote in, the administrator checked the availability of the stylist they wanted, listed options, and wrote it down. Every booking took a conversation, and in the evenings and on weekends, exactly when it's most convenient for a client to book, calls often went unanswered.
A loyalty program existed, but it lived on paper. Client cards, visit marks, accruals written by hand. That works as long as there is one salon and the administrator recognizes regular clients by sight. Across a chain of several locations it falls apart: the client leaves the card at home, a different salon doesn't know them, and no one, including the client, knows how much they've accumulated.
The whole point of a loyalty program is that the client knows what they've accumulated. If the balance can't be checked, it has no bearing on the decision to come back.
From this came the main issue: bonuses stopped working as bonuses. The whole point of a loyalty program is that the client knows what they've accumulated and comes back for it. If the balance can't be checked, it has no bearing on the decision to return.
Visit history was also something only the administrator knew, not the client. What color was used last time, which stylist did it, how much it cost, all of this had to be figured out again at every visit.
A client account that brings together everything that used to be scattered between the administrator, a paper card, and memory. The client logs in and sees their visit history, bonus balance, and stylists' open time slots.
The client books it themselves: choosing the salon, service, stylist, and time. This removes the conversation from the administrator's side and the wait for a reply from the client's side; a booking can be made at eleven at night, when there's no point calling the salon anyway.
A booking can be made at eleven at night, when there's no point calling the salon anyway.
Payment and prepayment are built into the same flow. The client pays for the service or makes a prepayment for the booking by card, not through a separate transfer or in person.
Notifications cover the other side: the client gets a reminder about the booking and a message about earned bonuses in Telegram. The reminder here isn't marketing, it's a way to cut down no shows, which leave a stylist with an idle hour that had been reserved for one specific person.
Besides the account on the website, we built a Telegram bot, and it offers the same thing: booking a service, checking your own bonus balance, and viewing upcoming visits. This isn't a stripped down version of the account for show, it's a second entry point into the same system.
The reason has to do with where the client is at the moment they decide to book. The website has to be remembered, opened, and logged into. Telegram is already open: a reminder about a past visit arrived there, and replying to it with a booking for the next one is one tap, not a trip to a separate app.
The website has to be remembered and opened. Telegram is already open, and booking the next visit becomes a reply to a reminder about the last one.
The bot and the account work off the same data, not two separate copies. A booking made in the bot shows up in the account, a bonus earned for a visit shows up in both places. This sounds obvious, but it's exactly where things usually break: a bot bolted on as a separate service with its own database starts showing the wrong balance, and the client stops trusting either one.
Notifications go to the same place, Telegram: a booking reminder and a message about earned bonuses arrive in the same chat the client can use to book again.
Bonuses are earned on two grounds. The ordinary one: the client comes in, pays for a service, and an accrual lands on their balance. The referral one: a client brings in a friend and gets bonuses for it.
The referral accrual is set up differently from how it's most often done elsewhere. Bonuses are paid not for the referral itself but for the referred person's first completed visit. The difference matters. Paying out for the act of referring alone turns the program into a game against the system: invitations get sent out wholesale, balances fill up with bonuses, and the salon doesn't actually gain more clients. Tying the payout to a completed visit means bonuses appear at the same time as the revenue that pays for them.
Referral bonuses are paid not for the referral itself but for the referred person's first completed visit, at the same time the revenue that pays for them appears.
Redemption happens at the time of payment: bonuses reduce the amount due, and the client sees this before confirming, not after the fact. The rules for earning and spending are exposed as settings: percentages, thresholds, and conditions are changed by the chain itself, not by the developer on request. Loyalty program terms change more often than code, and shouldn't require a release to update.
The balance is shared across the whole chain. A client who accumulates bonuses at the salon near home can spend them at the one near work: as far as the program is concerned, it's one client, not a card tied to one specific location.
There are off the shelf booking systems on the market, and the question of whether to use one or build something custom came up at the start of the project. We chose to build our own, and here's why.
A loyalty program is the set of rules by which a chain retains its clients, and those rules belong to the chain. In an off the shelf system, bonuses work the way that system's developer designed them to, and they diverge from what the chain actually wants exactly as far as the settings allow. A referral accrual tied to the referred person's first visit isn't a setting anymore, it's different logic entirely.
Visit history and accumulated balances are what a chain builds over years of work. In a system of its own, that data belongs to the chain.
Second: the client base. Visit history, contact details, preferences, and accumulated balances are what a chain builds over years of work. In a system of its own, that data belongs to the chain, and a move to a different service or a change in someone else's pricing has no bearing on it.
Third: the account, payment, notifications, and bonuses are one single flow, not four services glued together. The client picks a time, sees the bonus deduction, pays, and gets a reminder, all inside one flow where every step knows about the one before it.
Booking stopped depending on the administrator's working day. The client handles it themselves, whenever it's convenient for them, and staff can focus on the people already at the salon.
Bonuses became visible, which means they started working. The client knows how much they've accumulated and what they can pay for with it, and that knowledge affects the decision to come back, exactly what a loyalty program is meant to do.
From the client's point of view, the chain stopped being a set of separate locations: one balance, one history, any salon.
And the client base came together in one place, owned by the chain: who visits, how often, which stylists they see, and how much they spend. Previously that answer was pieced together from several administrators' notebooks, and more often than not it wasn't pieced together at all.
Finally, our clients book on their own and can see their bonuses, and our administrators have far less running around. Every step was explained to me in plain language, no jargon, so I always knew what was going on. They took every wish into account and did it fast. Thank you so much!
The first conversation commits you to nothing: we will look at your situation and tell you whether you need a project like this at all.