Building MUA Studio
Notes on building a booking and client-management platform for makeup artists.
For the past while we have been building MUA Studio — a business platform for independent makeup artists. It handles the unglamorous half of the job: bookings, client records, quotes, intake forms, and the little details that decide whether a 5 AM bridal call sheet goes smoothly or not.
Why build this at all
Generic booking tools treat every appointment the same way: pick a service, pick a slot, pay a deposit. A makeup artist’s work does not fit that shape. A bridal booking is really a small project — a trial weeks before the event, travel to the venue on the day, a party of six with different looks, and a quote that has to be negotiated before anything lands on the calendar.
The other thing generic tools get wrong is the client record. For an MUA, a client profile is not a name and a phone number. It is skin type, product preferences, photos of previous looks — and allergies. That last one is not a nice-to-have field; getting it wrong can put someone in the hospital.
The shape of the system
MUA Studio ended up as four pieces:
- A Go backend built on PocketBase. All domain data lives here — clients, bookings, quotes, intake responses. PocketBase gives us auth, a record API with per-collection rules, and file storage out of one small binary.
- A public booking SPA in React. This is what a client sees: the artist’s booking site, the quote page, and the intake form. It is built with esbuild into three bundles off a single design system —
booking.js,quote.js, andintake.js— and embedded straight into the Go binary withgo:embed. Deploying the whole public surface is copying one file to a server. - A native iOS app in SwiftUI. The artist’s side of the platform. Photo-heavy workflows — before/after shots, kit references, look boards — are where cross-platform frameworks are weakest, so we went native.
- A native Android app in Kotlin and Jetpack Compose, for the same reasons.
What we’d tell our past selves
- Start from the workflow, not the schema. The quote → trial → event pipeline shaped everything; the data model fell out of it, not the other way around.
- One binary is a superpower for small teams. Backend, public site, quote pages, intake forms — one artifact, one deploy, no CDN choreography.
- Name your invariants. “Filter by
mua” and “never leak allergy data” are two sentences. Because they are written as rules rather than tribal knowledge, they survive every rewrite.
There is plenty left — we will write separately about the design system behind the booking site and about shipping the same product on two native platforms without losing our minds. For now, MUA Studio is in the hands of working artists, and the 5 AM call sheets are going smoothly.
You can try it yourself — visit MUA Studio on the web, download it on the App Store, or get it on Google Play.