Work Chairo

Chairo

Most barbers in the Balkans still run their week from a paper book, Instagram, WhatsApp and phone calls. Chairo lets clients book themselves in three taps, so the barber can get on with the haircut. I designed and built all of it.

Product
ChairoBooking app for barbers and salons, Balkans
My role
Design and buildSolo, end to end
Timeline
Under 2 monthsTo ready for store review
Built with
Expo, React NativeSupabase, Resend, Cloudflare
Live
chairo.app
Five Chairo app screens side by side, showing the client home, the booking flow, a barber’s schedule and earnings.
3 tapsfor a client to book. Barber, service, time.
232phone screens in the design file, down to errors and empty states
< 2 monthsfrom start to ready for store review, testing with real testers included

01 · The problem

A barber’s phone never stops.

Most barbers in the Balkans don’t have a booking app. Appointments live in a paper book, or scattered across Instagram, WhatsApp, iMessage and phone calls. So they answer with a client in the chair, and they’re still replying after closing time.

There’s no privacy in it either. Everyone who has ever sat in that chair has their personal number, so work never really ends.

Someone who has never used an app like this needs to see what they’re missing: a day where the phone stays quiet and the appointments still arrive.

Fig. 1The problem in 30 seconds, from one of my launch videos. The same scripted day, side by side: without Chairo, 14 messages and no idea how many appointments. With Chairo, 0 messages and 9 appointments. It ends on the line “You cut. Chairo books.”

02 · The feeling

It had to feel like iOS.

Everyone loves how iOS feels and how smooth it is. I wanted that same feeling here, for a barber between two clients and for a client booking from the couch. So premium and seamless were requirements from the first screen.

  1. One decision per screen. Barber, then service, then time. Nothing else competes for attention.
  2. One sheet system for everything. Confirmations, pickers, dates, errors: they all rise from the bottom and behave the same way, the way they do on iOS.
  3. Quiet by default. Graphite and one soft accent, so the only thing that stands out is what you came to do.
Fig. 2One take in the real app: the salon’s day, its analytics and profile, then switching to the client side and booking a hair wash. Test data.

03 · Booking

Three taps, and the sentence writes itself.

The screen writes a sentence as you tap. Pick a barber, a service and a time, and it reads “Nermin does my fade + design, tomorrow at 9:00”, the way you’d say it to a friend.

Regulars don’t even need that. The home screen suggests their usual cut with the first free slot and one button to book again, and a small tracker shows how much their hair has grown since the last visit. Then reminders go out at 18:00 the day before and two hours before the appointment, without anyone sending a message.

Home
Client home screen suggesting a fade with the first free slot, a book again button and a hair growth tracker
1 · Barber
Choosing a barber from a swipeable card, with their next free time
2 · Service
Choosing a service on a wheel, showing length and price
3 · Time
Picking a time on a wheel, tomorrow at 9:00, under the finished sentence
Fig. 3The real app, from the client’s home screen through barber, service and time. The sentence at the top grows with every tap. Test data.

04 · The barber’s side

The whole day on one screen.

The same app switches between client and salon with one tap. On the salon side, the schedule answers the only question that matters between two haircuts: who’s next, and where the free slots are.

Clients join with a salon code or a QR on the mirror, so bookings stop going through the barber’s personal number. Behind that sits what a real shop needs:

  1. Appointments for people without the app. A walk-in or a phone client goes in as a guest, in a few taps.
  2. A limit on no-shows. After a number the salon sets, a client can’t book in the app anymore and has to call.
  3. The business at a glance. Earnings by week and by barber, team schedules and recurring clients.
Schedule
A day’s schedule with a booking, a break and free slots to book
Earnings
Weekly earnings chart with bookings and how full the week is
Clients
Connected clients by month, and how many book on their own and come back
Fig. 4The real salon side: a day’s schedule, earnings, and how clients come back. Test data, from before launch.

05 · Bringing clients back

A quiet way to bring clients back.

Clients drift away without anyone noticing, and chasing them one message at a time is the work Chairo is meant to end. So the barber gets one screen for it. Anyone who hasn’t been in for five weeks or more, and has nothing booked, appears on a list. One tap reminds that person, and another reminds everyone on the list.

  1. Only people who said yes. Reminders go to clients who turned on offers from the salon. Everyone else stays off the list.
  2. One reminder per absence. A client gets one, and the next only comes after they’ve been back and another five weeks have passed.
  3. A limit on announcements. The second tab sends a short message, such as holiday slots filling up, to all clients or the top 20 by spend. Each salon gets two of these every 30 days.
Message
Message tab: two of two messages left, choosing all clients or the top 20, with fields for a title and message
Haven’t been
List of five clients who haven’t been in for 5+ weeks, each with a remind button, and a button to remind all
Reminded
The same list with four clients left and a confirmation that the message was sent
Fig. 5The real app: a message to clients, the list of who hasn’t been in with a preview of the reminder, and the list after reminding one person. Test data.
Fig. 6Reminding one client, then everyone at once, with a confirmation first.

06 · Iteration

I kept going after the first version worked.

The design file holds 232 phone screens. A lot of them are empty states and error screens. The rest is improving what was already there, because many screens in the app had become too complex and needed simplifying.

Booking rules
Booking rules: how far ahead, latest booking, breaks, cancelling and the no-show limit
Team
List of five barbers with their schedules, and a waiting invite
One barber
One barber’s stats, permission to take bookings and their schedule
Fig. 7The depth behind it, from the real app: booking rules down to the no-show limit, the team and its invites, and one barber’s schedule and permissions. Test data.
Design · Home
Design of the client home screen with an appointment today
App · Home
The real client home screen suggesting the usual cut
Design · Time
Design of the time step with its sentence and wheel
App · Time
The real time step with its sentence and wheel
Fig. 8The main flows stayed close to the design. Design on the left of each pair with English added, the real app on the right, each in a different state and with test data.

07 · Build

From the database to the push notification.

About a month of development, then real testers and a round of optimising everything they touched. In under two months it was ready for store review, with nobody else on the project.

Under the hood

  • Expo
  • React Native
  • Supabase
  • Resend
  • Cloudflare
  • Database and server functions on Supabase, behind bookings, schedules and teams.
  • Push reminders at 18:00 the day before and two hours before each appointment, plus email through Resend.
  • Deep links on Android, so a shared salon link opens the right place in the app.
  • Separate development and production environments, so testing never touches real bookings.
  • The legal side too: privacy policy, terms of use, consent history and account deletion.

08 · Marketing

Then I had to convince barbers.

A finished app doesn’t sell itself, especially to people who’ve run their shop from a paper book for years. So I made the launch videos too. Each one starts from something a barber or a client already knows too well.

The lines work the same way: “You cut. Chairo books.”, “The work stays in the salon.” and “Remind them first.” The urgency comes from recognising your own day and realising there’s an easier way.

The messages video at the top of this page is the best of them. These two made the cut with it.

Fig. 9The two others I kept, in Bosnian. “Where’s Mirza”: a missing poster for a client who hasn’t been in for nine weeks. He’s getting his hair cut somewhere else, so the barber sends a reminder from the app and he books again. “3:07”: the phone lights up in the middle of the night, then “there’s an easier way”.

09 · The trash

Two videos I threw away.

I don’t want to put out slop, so these went in the trash. They’re some of the iterations I worked through until I got to the few good ones.

Fig. 10“Can’t right now”: a haircut keeps getting interrupted by the phone buzzing. I didn’t like it. “Day 1 to day 40”: interesting, but more focused on the client. I was testing out my design sense with this one.

10 · Where it is now

Ready for review, and early access is open.

Chairo is ready for store review, and chairo.app is collecting signups for early access. It’s early, so there are no usage numbers here yet. I’ll add real ones as barbers start using it.

Similar project?

Is your business still running on messages and calls?

Tell me where the work gets stuck, and I’ll tell you how I’d approach it.

What carries over

Three things that would work for your product too.

  1. Sell the feeling. A barber wants to give a haircut without the phone ringing. That idea shaped the screens and the videos alike.
  2. Design the bad days too. The day off, the empty list, the client who keeps not showing up. These moments decide whether a product feels premium.
  3. One person means nothing gets lost. The same person drew the screen, wrote the database function behind it and made the video that sells it, so the idea stays intact all the way through.

Contact

Let’s make something people enjoy using.

Pick a time that suits you, or just send me an email.

About: A new websitechange