Skip to content
Worldmade Studio
en / ro
Live projectFitness Coaching Platform · 2026
The Voinic home page in its light theme — the gold Voinic mark, the headline "Your coaching, finally in one app.", two athletes holding dumbbells and kettlebells, and four cards for Train, Plan, Eat and Progress.

My own coaching platform: programs, nutrition and check-ins for online coaches and their clients, in one app.

Overview

Voinic is my own product: a coaching platform that replaces the WhatsApp threads, spreadsheets and separate tracker apps between an online coach and their clients. Coaches build programs and meal plans; clients log workouts, food, habits and weekly check-ins; both read the same timeline. Romanian and English from day one.

Two roles with opposite needs share one product. A coach with many clients has to see at a glance who is slipping and why, while a client in the middle of a set needs logging to take seconds. And because it holds people's training, body and nutrition data, every read and write had to be provably limited to the people allowed to see it.

Challenge

Approach

One Supabase backend whose row-level security is the single source of truth, a Next.js web app that is the product, and an Expo app for Android and iPhone, in development, that reuses the web's own reads through a versioned API instead of reimplementing them. Every screen is exercised per role, on desktop and phone, by an automated soak run in which a seeded coach, their client and a solo trainee use the app against each other round after round.

The app, on a phone

Real screens from the running app, signed in as seeded demo accounts — a coach and their clients.

  • The coach dashboard on a phone: Who needs you today, with counts for active clients, check-ins to review, unread messages and clients who need a restart, and Radu Pop flagged Needs a Restart with the reason.

    Coach · who needs you today

  • A client's page for the coach: Maria Ionescu, On Track, with a fitness score of 60 broken into training load, consistency, frequency and volume, and a weekly summary.

    Coach · one client, in context

  • The program builder: Hypertrophy Upper/Lower, published to Maria Ionescu, with day Upper A and an exercise row for sets, reps, RIR, weight and rest.

    Coach · building a program

  • The client's Today screen: a weekly score of 85% On Track, with workouts, nutrition, habits and check-in progress, a day strip for the week and the fitness score.

    Client · today

  • Logging sets of a barbell deadlift: the coach's cue, the previous session's sets, a suggested weight, and inputs for kilograms, reps, RIR and rest.

    Client · logging a set

  • The client's Progress screen for 30 days: current weight, sessions logged, total volume and personal records, with written insights below.

    Client · progress

The public site, as built

The Voinic home page's two-sided section — "For you" lists logging a set in three taps, nutrition without spreadsheets, progress, streaks and recipes; "For coaches" lists client status, building once for every device and feedback in context.

Design & Development

A status for every client, with the reason spelled out
The coach's dashboard opens on who needs them today: every client carries On Track, Needs Attention or Needs a Restart, with the reason written underneath — a missed check-in, no logs for eight days — rather than a score to interpret.
Logging a set in three taps
Targets are pre-filled from the coach's program, the rest timer starts on its own, the previous session sits beside the inputs, and a personal record is flagged the moment it is beaten.
Years of history imported, not abandoned
A CSV export from Hevy, Strong, Fitbod, FitNotes or a spreadsheet moves into Voinic: exercises are matched to the library, personal records are recalculated, and importing the same file twice adds nothing.

Technical Decisions

Access rules enforced and tested in the database
Who can see what is defined once, in Postgres row-level security, and checked by pgTAP suites that CI runs against a throwaway database built from every migration — not left to each screen getting its query right.
One backend for the web and the phone
The phone app calls a versioned /api/v1 on the web app with a bearer token, and each handler runs the web's own reads under the same security rules. The API only grows: old app builds stay installed for months, so fields are added, never renamed or removed.
A demo mode removed to keep one code path
An early demo mode had grown to 168 branches across 37 files. It was removed outright, so every read and write is the one real path to the real database, with seeded test accounts in its place.

Results

Lighthouse performance, desktop

95

voinic.fit home page, Lighthouse 12.8.2 desktop preset, 9 November 2026. The mobile preset scored 76 the same day, with a 6.1 s Largest Contentful Paint under simulated throttling — reported here rather than left out.

Accessibility · Best practices · SEO

96 · 100 · 100

The same Lighthouse runs; all three scores were identical under the desktop and mobile presets.

Cumulative Layout Shift

0

Measured under both presets: nothing on the page moves after it paints.

Automated test files

295

Counted in the repository on 9 November 2026: 149 unit and component test files, 111 database (pgTAP) test files and 35 end-to-end specs.

Role
Product, Design, Full-stack Development
Stack
Next.js, React, TypeScript, Supabase, Expo, Tailwind CSS
Year
2026
Industry
Fitness Coaching Platform
Visit live project →