01
Workout player
An animated SVG ring counts reps and seconds, a sound marks each rep, and the next exercise starts by itself. Progress is saved on the server, so a session can continue on another device.
Case study · 09 / 09
White-label personal training SaaS
Coaches build plans from an exercise library, clients train in the browser with a timer, and the platform sells packages, takes payments and issues invoices — for many studios, each on its own branded subdomain.
Samtrening
Fitness · SaaS
Web app, multi-tenant
Product engineering, end to end
The product
Trainers and dieticians prepare workouts and diets; clients follow guided sessions on their phone, track body measurements and buy packages. Every studio runs on the same instance under its own subdomain and branding.
Our part
A Laravel 7 application with Blade and jQuery, media on S3 behind signed URLs, PayU and Przelewy24 payments, and a Docker pipeline through AWS CodeBuild and ECR to Elastic Beanstalk.
Under the hood
Routing on {organisation}.domain, middleware that checks membership and maps every controller action to a policy across admin, trainer, dietician and client roles.
A snapshot of products at purchase time, passes split into services to deliver, an invoice with monthly numbering and an emptied basket — all or nothing.
PayU webhooks with signature verification add training credits and e-mail the client a link to set their password.
Exercise media through time-limited signed URLs, PDF invoices with amounts in words and bulk export to ZIP, and surveys targeted by gender and age.
The outcome
Inside the product
Demo data · click any screen to enlarge
01
An animated SVG ring counts reps and seconds, a sound marks each rep, and the next exercise starts by itself. Progress is saved on the server, so a session can continue on another device.
02
The same player at 390 px — pause and resume handled in the client.
03
Exercise library with live search, variants and media preview on the left; the plan on the right, reordered by drag and drop. Saving books a training credit and notifies the client.
04
Two independent statuses per workout — prepared by the coach, completed by the client — filtered to the studio and the signed-in role.
05
Created from orders with NNN/MM/YYYY numbering per studio, overdue detection, PDF download and ZIP export.
06
Circumference history and current measurements drawn on a body outline.
Stack
Next case