One product, three depths
The same made-up app, Perch, shown at each tier of a studio w labs assessment. Each tier builds on the one before, so you can see exactly what your money buys. Jump to Snapshot, Review, or Audit.
- Product
- Perch, a booking and client app for solo service businesses, the kind of tool a massage therapist, a mobile dog groomer, or a house cleaner uses to run their week.
- What it does
- Clients book online, and the owner keeps client records, sends reminders, and takes payment, all in one place.
- The question
- "We get signups, but they don't turn into paying regulars. Should we build the AI smart-scheduling feature we have planned?"
The outside-in first pass. You get where you stand and what to fix first, with no code and no scoring. It credits toward a Review or the audit.
The short version
Perch nails the hard part and skips the part that pays. A new owner signs up and is never taught how to land the first booking or turn one client into a regular, which is the whole reason they came. Fix the first session and two specific leaks, and most of the loss stops, with no rebuild. Hold the AI feature, because it sits on top of this gap, and there is not enough booking history yet to make its suggestions any good.
What's working
- The scheduling core is fast and reliable, and owners trust it with their day. That is the part hardest to get right in a product like this, and Perch has it.
- Payments already run through Stripe, so an owner starts taking money without wiring anything up themselves.
- The client list and reminders are solid, so the raw material for turning a one-time client into a regular is already sitting in the product. Nothing in Perch uses it yet.
Where the money is leaking
Ranked by what each one is costing you.
- The first session teaches nothing. New owners never learn how to take a booking.
- The one action that grows the business is buried. Owners can't find the booking link.
- The booking page shuts some clients out. It fails a basic accessibility check.
- The promise is vague. It doesn't hold up against Square or Acuity.
- Client data has no visible guardrails. Owners hesitate to move their clients in.
Also visible from the outside
A Snapshot never opens your code, but the browser's dev tools give plenty away. Two on this app:
- A live API key ships in the page. Open the booking page's scripts in a browser and the key to a paid service is sitting right there, ready for anyone to copy and run up the bill in your name.
- Nothing stops the page from being framed. The response headers that block clickjacking are missing, so the booking page can be wrapped inside a lookalike site and used to phish an owner's clients.
What the Review adds: it goes into the product and the code, and turns each leak into what's happening, what it costs, and exactly what to change. It credits toward the audit.
The stack, and what I went into
- Stack
- Next.js front end, a Node API, Postgres, on Vercel with a managed database.
- Shape
- A monolith, which is the right call at this size. There are no microservices to chase.
- In the code
- I went into the onboarding, the booking link, and the booking page. The dashboard and settings I reviewed from the outside.
- The code itself
- Clean and readable; the gaps here are product and teaching decisions, and the engineering underneath is solid.
The leaks in detail
1The first session teaches nothing.
What's happening New owners get no first step
A new owner lands on an empty dashboard with a full menu and no first step, and most are between jobs and won't stay to explore.
The impact They leave before their first booking
The owners you paid to acquire leave before they ever take a booking.
Fix Teach with one step at a time
Lead with Add your first service, then Share your booking link, then open up. The order teaches, with no tutorial to skip.
2The one action that grows the business is buried.
What's happening The link that fills the calendar is buried
The booking link is what fills a calendar, and Perch buries it three menus deep, with nothing on the main screen pointing to it.
The impact Your most valuable feature is the hardest to find
The one feature that fills the calendar is the hardest thing in the app to find.
Fix Put it on the main screen
Make Share your booking link the primary action on the main screen until the calendar fills, then move it aside.
3The booking page shuts some clients out.
What's happening Some clients can't finish a booking
The public booking page has low-contrast slots, buttons a screen reader can't name, and a flow you can't finish from the keyboard.
The impact Lost bookings no one can see
Some of every owner's clients can't book, and no one ever sees why.
Fix Meet WCAG 2.2 AA
Fix the contrast, label every control, and make the flow work from the keyboard.
In the code today<button class="slot">{time}</button>
// low-contrast token, no name a screen reader can read, no focus style
The change<button class="slot" aria-label={`Book ${time}`}>{time}</button>
// passes AA contrast, an accessible name, and a visible focus ring
4The promise is vague, and it doesn't hold up against the big names.
What's happening Unclear why Perch and not Square
Perch says it runs your whole business, but it does scheduling well and clients and payments thinly, so an owner can't say what it does better than Square or Acuity.
The impact Competing on price doesn't win, and loses easily
A fuzzy promise is hard to choose and easy to leave, and it drags you into a price fight.
Fix Choose one customer
Pick the one owner Perch is best for, the solo pro who wants a link that fills the week, and make the product prove that one promise.
5Client data has no visible guardrails.
What's happening No word on how data is protected
Perch holds client names, numbers, and cards and says nothing about how they're kept, and the session times out mid-booking with no warning.
The impact Owners hesitate to move their clients in
An owner won't commit their whole client list to a tool that stays silent about protecting it.
Fix Say how it's held, and warn before timeout
State plainly how data is held and who can see it. Warn before the timeout with a one-tap way to stay, which WCAG's timing rule requires.
In the code todaysetTimeout(signOut, SESSION_MS)
// ends the session mid-booking, with no warning
The change// warn a minute out, and let them stay
setTimeout(promptStaySignedIn, SESSION_MS - 60_000)
What the audit adds: a maturity score for every area, the research behind each leak, and a sequenced plan to fix them in order, with a test you can run to check the work.
How it scores
Each area is rated Emerging, Developing, Established, or Optimized, from significant gaps to done well enough that others could copy it.
Overall: Emerging, on an established technical base. The hard engineering is done and it holds up. What's missing is the layer that turns a new owner into a paying regular, and that layer is cheaper to build than the AI feature on the roadmap.
The reasoning behind each leak
1The first session teaches nothing.
How people learn A brand-new owner can hold only a few unfamiliar things in mind at once, so an empty dashboard behind a full menu asks them to carry all of it and still choose what to do first. Teaching that works shows one step, does it with the learner, then hands it over. Perch skips the showing and hopes.
2The one action that grows the business is buried.
Where attention goes When everything on a screen carries the same weight, the one action that matters disappears into the list. Attention follows whatever the design makes prominent, so the action that matters most should stand out most. Perch gives its single most valuable action the least prominence it has.
3The booking page shuts some clients out.
Accessibility standards The page misses the basics of WCAG 2.2 AA: contrast that holds up, controls a screen reader can name, and a flow that finishes from the keyboard. The same fixes help everyone booking one-handed on a phone in a hurry, the curb-cut effect, so here accessibility is booking completion by another name.
4The promise is vague.
First impressions A person decides what a product is for in the first few seconds, then acts on that impression. A promise as broad as run your whole business never lets that impression settle, so Perch comes across as everything and nothing.
5Client data has no visible guardrails.
Trust and timing People hand over their data when they can see how it is held, and silence reads as risk at the moment they decide whether to trust you. The unannounced timeout makes it worse, and it is also a WCAG timing failure (success criterion 2.2.1).
The reasoning above rests on decades of established research: John Sweller, the educational psychologist behind cognitive load theory, on how much a person can hold in mind at once; Richard Mayer, known for the science of how people learn from screens, on where attention lands; and Don Norman, the cognitive scientist who wrote The Design of Everyday Things, on the snap judgments people make in the first few seconds.
Where I'd start, in order
The first session and the booking link. This is where most of the lost owners are, and neither one needs a rebuild.
The booking page's accessibility and the client-data guardrails, which widen who can book and earn the trust an owner needs to move their clients in.
Sharpen the promise against the big names, and only then revisit the AI feature. Built on today's thin data it would make confident suggestions out of almost nothing, so it is worth building only once there is enough real booking history behind it.
How you'll know it's working
The number to watch is how long a brand-new owner takes to reach their first booking. It is long today. As you fix the first session and surface the booking link, that time drops, and it is the single number that tells you the leak is closing.
Want this for your own product?
Start with a Snapshot, $500, and it credits toward whatever you do next. Bring a question to office hours (opens in a new tab), or ask one free in my Q&A.