Case study / 02

Yoga Fusion

Open public site

A Kyiv studio runs through one bilingual platform: recurring payments, a daily-use admin, native apps and a subscription-aware Telegram bot.

RoleProduct, backend, admin, mobile, bot and marketing operations
TimeframeLive client platform · daily use
  • Next.js 16
  • Strapi 5
  • PostgreSQL
  • WayForPay
  • Kotlin
  • SwiftUI
  • Telegram
  • Resend

The problem

The business could not depend on a developer being on call.

Payments, schedule, clients and reception work were split between a raw CMS admin, SendPulse and an abandoned Notion. The studio needed one reliable picture of its day, in the language its team actually uses.

The platform had to reconcile recurring money honestly, keep reception fast, support clients on web and mobile, and automate access without ever removing a person whose payment was valid.

The system

Software fitted to the studio’s real habits.

The public site, seventeen-screen admin, two native apps and Telegram bot share payment and access rules instead of reproducing them in separate tools.

01

Client product

  • Bilingual storefront, recurring subscriptions, client cabinet and QR gift certificates.
  • Offline-first Android and iOS schedules, booking and geolocation QR check-in.
  • A 21-branch practice path that grows from confirmed visits.
02

Daily operations

  • Seventeen custom admin screens with three roles, nineteen permissions and a two-phase audit log.
  • Cash ledger, finance reconciliation, owner reports and a Telegram-text schedule importer.
  • Ukrainian-first interface with user-selected paper and stained-glass themes.
03

Integrity & growth

  • Nightly reconciliation of every subscription against the payment provider.
  • Payment-gated Telegram access with delayed, idempotent reconciliation rather than fragile event chains.
  • Server-side Meta conversions, typed PostHog events and one branded email system.

Production workflows

The studio’s real habits, connected end to end.

These flows show why the website, staff admin, native apps and bots are one platform rather than four adjacent products.

01Telegram text → published scheduleThe team keeps its familiar input without sacrificing structured data.
  1. Reception pastes the weekly message it already writes for Telegram.
  2. The tolerant parser identifies classes and flags ambiguous teachers or broken lines for review.
  3. A confirmed schedule reaches the website plus offline-first Android and iOS clients.
02Payment → correct accessAccess follows reconciled subscription truth, not a fragile redirect.
  1. A recurring payment updates the shared subscription state through an idempotent route.
  2. Nightly reconciliation checks that state against the payment provider and records anomalies.
  3. Web, mobile booking and the Telegram bot read the corrected result.
03Studio action → measurable growthMarketing events stay attached to the actual customer lifecycle.
  1. Staff assembles a branded campaign from reusable content blocks and audience rules.
  2. Email delivery and server-side Meta conversions use the same subscription context.
  3. Typed PostHog events make the journey inspectable without inventing a second customer model.

Interactive previews

See one platform from reception desk to member phone.

These connected flows mirror how the team imports a schedule, composes a campaign and grants a paying member access. Private business counts and money values remain illustrative.

Y1

Today dashboard

Inspect the day’s classes and switch the whole admin between warm paper and dark stained glass.

Illustrative counts · authentic UI tokensReception runs this panel daily — built in the team’s own language, with roles, an audit log and 1,241 tests behind it.

Public engineering numbers

A business platform, not a stack of disconnected apps.

The number that matters here is coverage: how much of the studio’s day runs through these screens, and how much of it is held in place by tests.

passing frontend tests
1,241
Plus Android and backend test suites
admin screens / roles / permissions
17 / 3 / 19
The screens reception uses daily
API routes
98
Including admin and mobile BFF
content types / Vercel projects
31 / 3
One repository
native apps
2 + bot
Kotlin, SwiftUI and Telegram

What this proves

The best internal tool follows the work already happening.

01

Admin software staff can own

Roles, Ukrainian microcopy and parse-then-confirm flows turn technical safeguards into ordinary daily work.

02

Payments treated as a state machine

Reconciliation and idempotency protect access when redirects, webhooks or external providers behave imperfectly.

03

Marketing that shares product truth

Campaigns, server-side conversions and Telegram access read the same subscription reality.