← Work

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

Live Product

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.

  1. A booking flow that starts from a free time: pick the time, choose Normal or Dangi Special, add details, review. Four steps, no account.
  2. 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.
  3. Messages the owner controls one by one: confirmation, two reminders at hours he chooses, and a text to the stylist who was booked.
  4. 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.