Designed, built, and shipped in three days.
Juniper: Salon Booking
A booking app for a small salon and the owner who runs it. Clients book a chair in three taps and put down a small deposit to hold it. The owner runs the whole day from a phone — the book, the money, the walk-ins, the no-shows.
Download on the App StoreA browser demo on a shared account with sample data, here to show how the app works. The finished product is a native iPhone app.
The problem.
For a salon, an empty chair is money gone — and no-shows keep taking them. Booking still happens over the phone between clients, deposits feel too awkward to ask for out loud, and the software that fixes this is built for chains: bloated, priced like it, and harder to run than the salon itself.
What we built.
A two-sided booking app. Clients pick a service, a stylist, and a real opening, then hold the chair with a small card deposit — three taps, policy in plain sight. On the owner's side: today at a glance with deposits counted, the week for every chair, client cards that remember visits and no-shows, walk-ins added in two taps, and refunds that handle themselves when someone cancels in time.
Inside the app.






Decisions along the way.
Deposits instead of cards on file.
We charge a small deposit — roughly a quarter of the service price — rather than storing full card authority. Clients accept a $15 hold without flinching; asking to keep their card on file makes them close the app. No-shows stop being free either way, so we chose the version people actually complete.
Apple Pay first, typing last.
Deposits go through Apple Pay when the phone supports it; otherwise a card form with camera scanning, so nobody types sixteen digits in a parking lot. The deposit step is where bookings die, so we removed every keystroke we could from it.
Booking is three taps, no account required.
Service, stylist, time, pay. We cut everything else — profiles, confirmation emails, "the salon will contact you." Any booking flow longer than a phone call loses to the phone call.
The calendar only shows real openings.
Free slots are computed from each stylist's actual hours and existing bookings, so a client can only ever pick a time that works. We rejected request-and-approve on purpose: it feels safer for the salon but reintroduces the phone-tag the app exists to kill.
The owner's side is designed for ten-second windows.
A salon owner checks their phone between clients, not at a desk. So: the whole day on one screen with deposits counted, walk-ins added in two taps, no-shows marked from the same list. Nothing in the owner flow assumes two free hands or a free minute.
Refunds are enforced by code, not conversations.
The cancellation window is stated at booking; cancel inside it and the deposit refunds itself against the original payment. The owner never has to be the bad guy, because the policy runs without them.