Salon Booking, CMS and App
Dangi Frisør – a salon that books itself while the owner cuts hair
A booking site, a content system and a home screen app for a Copenhagen barber and hair salon. Customers book a free time in four steps, the owner runs prices, offers, shifts and messages from his phone, and everything he writes in Danish appears in English too.
- Role
- Product Designer and Developer
- Platform
- Web · Home screen app
- Context
- Client project
- Status
- Live at dangi.dk
In brief
Customers called to book, often while the owner was cutting hair. The old site was a brochure with no booking, and it couldn't even be changed: the previous designer kept the login and the domain.
- A booking flow that starts from a free time: pick the time, choose Normal or Dangi Special, add details, review. Four steps, no account.
- A content system ordered by how often the owner needs it, with drag and drop, automatic English, and a phone layout with a tab bar.
- Messages the owner controls one by one: confirmation, two reminders at hours he chooses, and a text to the stylist who was booked.
- After launch, staff booking from the admin during a phone call, so customers who will not book online still get every SMS.
≈ 10% of bookings made online after one week
Counted against phone bookings in the first week live, up from none. Bookings staff make for callers are not included.
01 · Project Overview
Dangi Frisør cuts women's, men's and children's hair and trims beards. The owner wanted customers to book without calling, and to change prices, offers and opening times himself. I designed and built the whole product: site, booking, CMS, messages and app.
The site has to feel like the salon: warm, a little playful, real. The admin has to be faster than picking up the phone.
Responsibilities
Product Strategy
UX Research with the owner
Information Architecture
Interaction Design
Visual Design
Content Design in Danish and English
Front-end and Back-end
QA and Launch
Owner Handover
Built with
Next.js on Cloudflare Workers
Cloudflare D1
Resend email
46elks SMS
Gemini and Groq
Cloudflare Turnstile
02 · The Challenge
A salon owner has wet hands, a client in the chair and a phone in his pocket. Everything had to work in the minute between two clients, without relying on his memory.
The phone rings mid-cut
Every phone booking meant stopping work, finding a time and writing it down.
No way to change the old site
The previous designer kept the login and the domain, so prices and texts were frozen. dangi.dk started from zero.
Danes, expats and tourists
The owner writes in Danish. A large share of walk-ins read English.
A small salon budget
Hosting, email, SMS and AI had to cost close to nothing and stay on the salon's own accounts.
03 · User Journeys
Two people, one booking.
I mapped both sides of a booking before drawing a screen. The customer wants a time that fits, fast; the owner and stylist want to know, without stopping work. So the free times sit on the front page, not behind a Book button, and every message after a booking follows one set of rules.
04 · Design Language
Nordic and calm, with the salon's own character.
The palette is moss green, warm paper and ochre. Free times are numbered tickets with a perforated edge, like those pulled at a counter; booked ones turn grey with a red BOOKET stamp. Beside them sits a round stamp: Dangi Frisør since 2014, Åboulevard. Offers get a black banner, a red label and the old price struck through in red, so a Black Week price reads the same everywhere.
Real before decorative
Real photos from the chairs and the two real Google reviews.
One price everywhere
The same rule draws the price in the list, the booking and the confirmation.
Taken from the room
Moss, warm paper and ochre come from the salon's interior, not a template.
05 · Booking Flow
Start from the time, not from a form.
Tapping a ticket opens the booking with that time chosen. Treatment comes first, with Normal and Dangi Special side by side. Special adds a free consultation, a drink of choice, a wash before and after, and an extra per treatment, such as a hot towel shave or a face wax. Children get milk instead of champagne. Details come last, then one review screen, and the customer leaves with a confirmed time, not a request. From Book, without a ticket, the treatment still comes first, then time and stylist.
Booking before opening or after six costs extra, and those times are booked by calling or texting the owner, so he chooses when he works late.
06 · AI Style Suggestions
For the customer who does not know what to ask for.
Three photos, front and both sides, with a consent box that says plainly where they go. The AI suggests three styles, each with a reason and its upkeep, linked to booking. Photos go to Gemini, with Groq as a fallback, and are never stored; the screen calls the result a conversation starter. I also designed a booking assistant, and decided not to ship it.
An AI that books for you
The customer describes a wish in a sentence; the assistant finds the treatment, stylist and best free time, and books it.
A bill with no ceiling
Each conversation carries the price list, the stylists and two weeks of free times. At a busy salon, counting chats that never book, that adds up to the whole hosting fee again every month.
Bots, fake bookings and customer data
A bot could run hundreds of paid conversations an hour, or fill the calendar with fake bookings. The free tier was out: bookings hold names and phone numbers, and free usage may be used to improve the provider's models.
AI suggests, people book
Cloudflare Turnstile now guards booking and AI, so bots stop before they cost anything. AI stays where a mistake costs nothing. Customers book through the form, or a stylist books for them on the call.
07 · Designed as an App
On the home screen today, ready for the stores tomorrow.
Most customers arrive on a phone, so the site was designed as an app first: from the home screen it opens full screen with its own icon, and Book, Prices, Contact and More move into a tab bar. The admin installs the same way.
08 · The CMS
A content system built around a working day.
The admin has five places, ordered by use: Bookinger, Planlægning, Medarbejdere, Behandlinger and Salonen. Everything customers see is edited there. The owner writes in Danish; the English is translated on save or written by hand. Dragging whole cards replaced up and down arrows after testing. Each stylist has a login for their own profile, shifts and time off, and shift templates plan the week in a few drags.
09 · Messages and Confirmation
Every message is a switch.
The first design had the salon accept each booking. But a booking waiting for a yes is a customer who may go elsewhere, so confirmation is automatic by default, with two stricter modes for the owner to choose. Every message is a switch: the confirmation, two reminders at hours the owner picks, and decline and cancel notices. The booked stylist gets a text. After launch, each message gained a link to move or cancel without an account, since customers who book a few times a year forget passwords. Many regulars are pensioners who phone, so staff now book for them from the admin during the call, and they still get every SMS.
10 · Validation and Handover
Decided with the owner, then taught to him.
Every decision was checked with the owner as it was designed, and what he struggled with in demo versions on his own phone changed the design. I taught him the CMS twice, by phone and in person at the salon, through his weekly tasks: bookings, shifts, prices, the Special text, offers and messages. He keeps a 59-page booklet in Danish, with an English edition: one action per page, a real screen with a red ring on what to tap, and a contents page. In the admin, every setting is explained in a sentence.
11 · Launch and Outcome
Live on its own domain, and 1 in 10 bookings online after a week
dangi.dk went live on the salon's own domain. Launch testing with real bookings found a handful of problems, all fixed. The old one-page site is offline and points to dangi.dk.
≈ 10% of bookings online after one week. Counted against phone bookings, up from none. Bookings staff make for callers are not included.
4 bookings on launch day. Online, without a phone call, on dangi.dk's first day.
4 steps from ticket to confirmed time. Time, treatment, details, review. From Book, the treatment comes first. No account needed.
178 automated checks. Booking, messages, offers, translation and launch, run before every release.
Reordering with arrows was slow and hard to see.
Dangi Special could not be booked.
Booked times still showed as free.
Times in the offer banner skipped the treatment step.
Cancellation emails landed in junk.
Many regulars are pensioners who phone and will not book online.
There was no quick way to close for a few days.
Parts of the layout broke on some phones and browsers.
Whole cards drag, with a keyboard alternative.
Normal or Special is chosen per treatment, showing what Special includes.
Booked times turn grey with a BOOKET stamp at once.
Every way in starts at the treatment, keeping the time.
Email is sent from the salon's own domain, so it reaches the inbox.
Staff book for callers from the admin, and the customer still gets SMS confirmation and reminders.
A temporary closing removes chosen days in one step.
The layout was fixed across iPhone, Android and desktop browsers.
“I don't know how to thank you.” Owner, Dangi Frisør, at launch
One week is a first signal, not a trend. The owner expects about half of bookings online next month, as regulars are shown the site in the salon and asked to add it to their home screen. The next check is at one month.
12 · From One Salon to the Next
Built for Dangi, designed to be handed on.
Nothing about Dangi is hard-coded. Name, colours, photos, texts, treatments, prices, stylists, hours and message rules are content; the booking engine, CMS, messages, AI suggestions, translation and app shell are the product. The next salon is a setup, not a project: its own domain and accounts, and a session with the owner.
13 · Reflection
The best decisions came from watching the owner use it. Arrows became drag and drop, manual confirmation became automatic, and a settings page became a list of switches with a sentence each. Designing for one real business, with its own domain, customers and Monday morning, made every trade-off concrete, and it is the clearest test of simplicity: the owner runs it himself, from his phone, between clients.
The salon books itself. The owner stays in the chair.