sTvOS v1

Multi-tenant fitness operating system for studios, trainers, and partners.

The multi-tenant fitness operating system that powers white-label fitness applications. One platform -- unlimited studios, trainers, and partners.


What is sTvOS?

sTvOS is a backend-as-a-service for fitness and wellness brands. Each client (studio, gym chain, or wellness company) gets an isolated, fully branded environment with its own content library, trainers, users, and partner access -- all powered by a single API.


Platform Capabilities

Stream on-demand fitness classes with full session tracking, progress persistence, and auto-completion. Schedule and launch live classes powered by LiveKit video rooms with real-time participant management.

  • Content discovery with search, categories, and filtering
  • Session tracking with 30-second progress heartbeats
  • Auto-completion at 90% viewed
  • Live class scheduling and participant management
  • Per-client category scoping

Generate personalised workout, nutrition, and class plans from user profiles using AI. Plans are saved to user accounts and combined into a unified daily view.

  • AI workout plan generation with exercise selection
  • AI nutrition plan generation with dietary restriction support
  • AI class plan matching users to optimal schedules
  • Combined daily plan view (workouts + meals + classes)
  • Shopping list generation for nutrition plans

A full trainer ecosystem: discovery, services, availability calendars, 1-on-1 booking, group classes, and structured programmes with subscription lifecycle management.

  • Trainer profiles with services and specialisations
  • Calendar-based availability and time slot management
  • 1-on-1 session booking with video launch via LiveKit
  • Group classes with capacity management
  • Programmes with pause/resume/cancel lifecycle

Conversational AI coaching powered by Hume's Empathic Voice Interface. The voice agent can query plans, recommend classes, check coach availability, and book sessions -- all through natural conversation.

  • Per-client and per-trainer voice configurations
  • Tool-calling support for real-time data queries
  • LiveKit token generation for voice rooms
  • Anonymous voice sessions during onboarding

Partners (gyms, corporates, resellers) manage member access through voucher codes. A dedicated portal provides member oversight, usage analytics, and billing reports.

  • Voucher generation (bulk up to 500 per request)
  • Member management with activity tracking
  • Watch time and content analytics
  • Monthly billing reports with CSV export

How It Works

---
config:
  theme: base
  themeVariables:
    primaryColor: "#dbeafe"
    primaryTextColor: "#1e3a5f"
    primaryBorderColor: "#60a5fa"
    secondaryColor: "#f0fdf4"
    secondaryTextColor: "#166534"
    secondaryBorderColor: "#86efac"
    tertiaryColor: "#f8fafc"
    tertiaryTextColor: "#475569"
    tertiaryBorderColor: "#cbd5e1"
    lineColor: "#94a3b8"
    fontFamily: "Inter, system-ui, sans-serif"
    fontSize: "13px"
---
graph TB
    subgraph platform["sTvOS Platform"]
        direction LR
        API["REST API  /api/v1"]
        AI["AI Engine"]
        LIVE["LiveKit"]
        STORE[("Content Store")]
    end

    subgraph clients["Isolated Client Tenants"]
        direction LR
        subgraph client_a[" Boutique Studio "]
            A_KEY[/"API Key"/]
            A_DATA["Users, Classes, Trainers"]
        end
        subgraph client_b[" Gym Chain "]
            B_KEY[/"API Key"/]
            B_DATA["Users, Classes, Trainers"]
        end
        subgraph client_c[" Corporate Wellness "]
            C_KEY[/"API Key"/]
            C_DATA["Users, Classes, Trainers"]
        end
    end

    platform --- clients
    API ~~~ AI
    API ~~~ LIVE
    API ~~~ STORE

Each client operates in complete isolation. A user registered under "Boutique Studio" only sees that studio's classes, trainers, and content. Partners distribute voucher codes that map new users to their client on registration.


Quick Start

Every request to sTvOS requires a Client API Key sent via the X-API-Key header. API keys are provisioned by the platform admin and scoped to a single client.

curl -H "X-API-Key: your-client-api-key" \
  https://api.studiostv.net/api/v1/health
const response = await fetch('https://api.studiostv.net/api/v1/health', {
  headers: { 'X-API-Key': 'your-client-api-key' }
});
const data = await response.json();
import requests

response = requests.get(
    'https://api.studiostv.net/api/v1/health',
    headers={'X-API-Key': 'your-client-api-key'}
)
print(response.json())

Create a user account under your client. Optionally include a voucher code for partner-managed registration.

curl -X POST https://api.studiostv.net/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your-client-api-key" \
  -d '{
    "email": "user@example.com",
    "password": "securepassword",
    "name": "Jane Doe"
  }'
const response = await fetch('https://api.studiostv.net/api/v1/auth/register', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': 'your-client-api-key'
  },
  body: JSON.stringify({
    email: 'user@example.com',
    password: 'securepassword',
    name: 'Jane Doe'
  })
});
const { data } = await response.json();
response = requests.post(
    'https://api.studiostv.net/api/v1/auth/register',
    headers={'X-API-Key': 'your-client-api-key'},
    json={'email': 'user@example.com', 'password': 'securepassword', 'name': 'Jane Doe'}
)
data = response.json()['data']

The response includes accessToken and refreshToken for authenticating subsequent requests.

Fetch the home screen content feed for your client -- featured classes, continue watching, upcoming live, and categories.

curl https://api.studiostv.net/api/v1/content/discover \
  -H "X-API-Key: your-client-api-key" \
  -H "Authorization: Bearer <access-token>"

Create a personalised workout plan and save it to the user's account.

curl -X POST https://api.studiostv.net/api/v1/users/me/workout-plan \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your-client-api-key" \
  -H "Authorization: Bearer <access-token>" \
  -d '{ "preferences": { "daysPerWeek": 4, "intensity": "medium" } }'

Explore the Docs


Built With

Component Technology Purpose
API Server Hono on Node.js High-performance REST API with TypeScript
Database PostgreSQL + Drizzle ORM Multi-tenant data store with client isolation
AI Generation Google Vertex AI Gemini Workout, nutrition, and class plan generation
Food Scanning Google Vertex AI Gemini Image-based nutritional analysis
Voice AI Hume EVI + LiveKit Empathic conversational coaching
Live Video LiveKit Real-time video rooms for live classes and 1-on-1 sessions
File Storage ImageKit Image and media CDN with on-the-fly transformations