opt-in, operator-moderated

Reviews on your terms

Every confirmed booking gets a one-tap review prompt two hours after class. Ratings land private. You toggle each one public when you're happy with it. The aggregate average renders on your storefront from the reviews you publish.

Opposite of marketplace reviews that go live on submission. Your relationship with the client, your judgement about what reflects the studio.

A smiling studio owner and a client at the front desk after class.
how reviews flow

From prompt to published

2-hour-after-class review prompt

Booking confirmed → client marked attended → 2 hours after class end → email with a one-tap star picker. Magic-link auth, no login.

Private by default in your dashboard

Every review lands as private. You read the comment, sit with the rating, decide whether to publish. Hidden-at audit tracks every visibility change.

Publish what reflects the studio

Toggle is_public to true on the reviews that tell the real story. Aggregate average updates on the storefront. Un-publish at any time.

vs marketplace reviews

Why operator-moderated matters

Marketplace platforms (Mindbody, ClassPass, Yelp) publish every review on submission — consumers need an independent signal before booking somewhere new. The argument against it for a boutique studio on its own booking page:

  • A single off-day from an instructor can post a 2-star rating that drags the studio average down for months. The marketplace controls the surface.

  • Existing clients aren't using the review feed to decide whether to come back — they use their direct relationship. Public reviews on your booking page primarily serve new clients in discovery mode.

  • Most new clients for boutique studios come from word-of-mouth, not review-driven discovery. The marketplace case for unfiltered public reviews doesn't apply.

  • Operator moderation gives the studio the signal (unhappy client, quality issue) without the public-record damage. Address it privately, fix what happened, keep the relationship.

  • The reviews you publish reflect the studio you're actually running — not the average of every off-day captured publicly.

See why operator-moderated reviews beat marketplace ratings for the full argument.

what's in the schema

Three review surfaces, one source of truth

Per-booking rating

Each review ties to a single booking. Unique on booking_id, so a client can't submit twice for the same class. Rating 1-5; comment optional.

Per-instructor average

instructor_review_stats view averages reviews of classes that instructor taught. Available in the schema; surfaces on instructor profile pages later.

Per-service average

service_review_stats view averages reviews of classes of that service type — Reformer Flow vs Slow Flow Yoga vs Reformer Foundations. Surfaces on class detail pages later.

the things buyers ask

Questions

Are reviews public by default?

No. Reviews are private by default. Every review lands in your dashboard as private. You toggle each one public when you're happy with it. The aggregate average on your storefront updates as you publish; only published reviews count toward the visible average. Opposite of marketplace platforms where reviews go live on submission and the studio has limited recourse.

How does the review prompt actually work?

Two hours after class end, Junocal emails the booked client a one-tap link to /r/{token} — unique to that booking, expires after seven days. The page renders a 1-5 star picker and optional comment field. One tap for the rating, optional comment, submit. No login, no app. Magic-link-style auth.

Why opt-in and operator-moderated, instead of automatic public?

Because the studio relationship is the asset, not a marketplace's attention. When Mindbody publishes every review on submission, a single off-day from an instructor can post a 2-star rating that stays visible forever and pushes the studio average down. Operator moderation gives the studio the signal without the public-record damage — handle it with the client privately, publish the reviews that reflect the studio you're actually running.

What stops a studio from only publishing 5-star reviews?

Nothing technically — the studio chooses. Boutique-studio clients aren't operating on the Yelp trust model. Most studio clients trust the studio through word-of-mouth, and the booking page is a confirmation, not a discovery surface. A handful of strong 5-star reviews tells the same story Yelp would: people like this place. Marketplaces like Mindbody control the review feed precisely because consumers need that signal in discovery; Junocal isn't a marketplace, so operator moderation fits.

Can reviews be hidden after they're published?

Yes. Each review has an is_public toggle and a hidden_at audit field. Publishing flips is_public to true. Un-publishing flips it back and writes the timestamp plus operator user_id to hidden_at. Original review text isn't deleted — you can re-publish later.

Do reviews tie to instructor or service?

Both, via aggregation views. instructor_review_stats averages reviews of classes that instructor taught. service_review_stats averages reviews of classes of that service type (Reformer Flow, etc.). Queryable but not yet rendered in the operator UI — they exist for surfacing on instructor profiles and class detail pages.

What format does the storefront review block render?

Aggregate star rating at the top, then published reviews in chronological order. Each shows the rating, comment (if provided), and date. Client name renders as first name plus last initial (Sarah K.) for privacy. Per-class and per-instructor surfacing follows.

Does the review prompt fire for cancelled or no-show classes?

No. The prompt only fires for confirmed bookings where the client was marked attended on the day-of roster. Cancelled, no-showed, or studio-cancelled classes get no prompt. The scheduled-job queue only fires the email after the class end timestamp passes.