Hero
Predictive Analytics & ML
Recommendation Engines
Fitness & Wellness

Class and Content Recommendation Engine for a 40-Studio Yoga Chain


Let's Connect

Overview

What we built

A 40-studio yoga chain kept losing members in their first months because every one of them saw the same class schedule and the same unsorted video feed, no matter how they trained. We built a recommendation engine that treats each member differently from day one.

In plain terms: whether someone was a brand-new member or had been coming for years, they received the exact same class schedule emails and scrolled the same unsorted library of on-demand content as everyone else. New instructor formats went unnoticed because nothing pointed members toward them, and the marketing team had no way to match a suggestion to a member's level, preferred style or how often they actually showed up.

We built a recommendation engine that learns from booking history and the content itself, spanning both in-studio classes and the on-demand library. It personalises the app home screen, the weekly class emails and the messages members get right after a class, with a quiz and a member's first few bookings standing in for history when there is none yet. Members who got personalised recommendations booked 31% more classes than those who did not, and first-90-day churn dropped from 27% to 19% once it rolled out across all 40 studios.

The Problem

Generic schedules driving churn

The chain's 40 studios and its on-demand video library were, from a member's point of view, one undifferentiated stream. A first-week beginner and a long-standing regular opened the same app to the same class schedule email and the same unsorted content feed, with nothing in either distinguishing what suited a new member from what suited someone who had tried every format already.

That sameness had a cost measured in disengagement. Members disengaged within their first months at the studio, the exact window when a well-timed suggestion, an easier class, a style close to what they had already enjoyed, matters most. Instead, everyone received identical messaging regardless of level, preferred style or attendance pattern.

New instructor formats were a particular casualty of the sameness. Without any way to surface them to the members most likely to enjoy them, promising new class styles simply went undiscovered inside a schedule and a content library that treated every member as the same generic audience, no matter their history or preferences.

One schedule for everyone

Every member received the same class schedule emails regardless of level, preferred style or how often they actually attended, new or long-standing.

Unsorted content feed

The on-demand video library had no personalisation layer, so new instructor formats sat undiscovered alongside everything else in one unsorted feed.

Early disengagement window

Members disengaged within their first months at the studio, the exact period when a relevant class or content suggestion would have mattered most to keeping them booking.

No signal on preferences

Marketing had no structured way to match a suggestion to a member's level, preferred class style, or attendance pattern before recommending anything.

What it was costing them

Every month the recommendations stayed generic, new members kept disengaging within their first months, promising new instructor formats went undiscovered by the people who would have enjoyed them most, and the marketing team kept sending identical class and content suggestions to members with completely different levels, styles and attendance patterns.

The Solution

Cross-studio recommendation engine

We built a single recommendation engine spanning both sides of the member experience: in-studio class booking and the on-demand video library. Collaborative filtering on booking history identified which members behaved like which other members, while content embeddings captured what each class and video actually offered in terms of style, intensity and instructor, so the two signals could recommend across both surfaces together.

Those recommendations reach members wherever they already look: the app home screen, the weekly class schedule emails and the follow-up message after a class. For members with no booking history yet, an onboarding quiz combined with their first bookings stands in for the collaborative signal, so a brand-new member gets a personalised suggestion from their very first session rather than waiting months for enough data to accumulate.

The result treats a first-week beginner and a long-standing regular as genuinely different audiences instead of the same generic one. New instructor formats can now surface to the members whose booking and content history suggests they would actually enjoy them, rather than relying on members to stumble across them in an unsorted feed.

Key decisions

01

Combine behaviour and content

Collaborative filtering on booking history was paired with content embeddings of class style, intensity and instructor, so recommendations reflect both what members do and what classes actually are.

02

Recommend across every surface

The same engine personalises the app home screen, weekly class emails and post-class follow-ups, so members see consistent suggestions wherever they engage.

03

Solve cold start explicitly

New members get an onboarding quiz feeding the engine alongside their first bookings, so recommendations start from day one instead of waiting for booking history to build up.

04

Surface new formats deliberately

New instructor formats are matched to members whose history suggests a fit, rather than left to be discovered inside the unsorted content feed.

05

Span in-studio and on-demand

One engine covers both class booking and the on-demand library, rather than treating the two experiences as separate recommendation problems.

Measurable Impact

What changed after launch

The engine changed how members experience the chain from their very first booking. Members receiving personalised recommendations booked 31% more classes over 90 days than a hold-out control group that kept seeing the old generic schedule, and on-demand library plays per active member increased 44% within one quarter as personalised suggestions replaced the unsorted feed.

Retention moved with it too. First-90-day member churn fell from 27% to 19% after rollout across all 40 studios, and weekly class email click-through rose from 6% to 15% once the line-ups behind those emails became personal instead of identical for every member on the list.

Class recommendations

Same schedule emails sent to every member

Personalised recommendations, 31% more classes booked

Member churn

First-90-day churn holding at 27% chain-wide

First-90-day churn down to 19% chain-wide

Content discovery

Unsorted feed, new formats went undiscovered

Library plays per active member up 44%

Email engagement

Weekly email click-through sitting at 6%

Click-through risen to 15% with personalisation

Headline results

Members receiving personalised recommendations booked 31% more classes than a hold-out control group over 90 days

First-90-day member churn reduced from 27% to 19% after rollout across all 40 studios

On-demand library plays per active member increased 44% within one quarter

Weekly class email click-through rose from 6% to 15% with personalised line-ups

Tech & Tools Used

What powered the build

Every tool below earned its place in this engagement. Here is the part each one played.

Python (FastAPI) logo

Python (FastAPI)

Serves the recommendation API that the app, email system and post-class follow-ups all call to fetch a member's current personalised suggestions.

PyTorch logo

PyTorch

Trains the content embedding models that represent each class and video by style, intensity and instructor, feeding the recommendation engine's content side.

scikit-learn logo

scikit-learn

Powers the collaborative filtering models built on booking history, identifying which members behave like which other members for the behavioural side of recommendations.

PostgreSQL logo

PostgreSQL

Stores booking history, member profiles and onboarding quiz answers, the structured data both the collaborative and content-based models draw on.

Redis logo

Redis

Caches each member's current recommendation set so the app home screen, emails and follow-ups can fetch suggestions without recomputing them on every request.

Apache Airflow logo

Apache Airflow

Schedules the pipelines that refresh booking history, retrain the embedding and collaborative filtering models, and republish updated recommendations.

React Native logo

React Native

Renders the personalised app home screen where members see their class and content recommendations first, ahead of anything else in the app.

Node.js logo

Node.js

Runs the services that assemble weekly class emails and post-class follow-up messages using recommendations pulled from the engine.

Braze

Delivers the personalised weekly class emails and post-class follow-ups to members, replacing the identical line-ups everyone used to receive.

Ready to Build your Fitness & Wellness Business with Recommendation Engines

Ask Byte

Ask Byte

Typically replies instantly

just Now

Hi! I'm OrganByte's assistant. How can I help you today?

AI-generated content may be incorrect


OrganByte

Building innovative software solutions that transform businesses and drive digital success.

© 2026 YourCompany. All rights reserved.