Case 04 · Product design & development, solo · personal PWA
Baki
concept to shipped, every decision mine.

374
commits in two months
344
backend tests, green
61
components on 11 primitives
89
API endpoints · 28 tables
The short version
- A strength-and-nutrition PWA with exactly one user — me — running daily on my phone.
- I designed and built all of it: product, design system, frontend, backend, the coach.
- The spine is one decision: a deterministic engine owns every health calculation, and the AI is only allowed to talk about it.
- Living inside it is what found the bugs — a form nobody could answer honestly, a field that silently voided my training, an AI that claimed it had saved something it hadn't.
01 · What it is
A private personal trainer with exactly one user, on purpose.
Strength training and nutrition in one product, built on evidence-based principles and female physiology. It installs as a PWA on my phone and runs on a local server — private by decision, not by limitation. The riskiest assumption was never market size; it was whether the thing could support a real routine without becoming noisy. The question was never "how do I monetise this?" It was "what would I build if I had to live with every product decision I made?"
02 · The product decisions that matter
Before any screen, I had to decide what the product would never do.
Health above progress
AI communicates, doesn't calculate
Maintenance or recomposition — never a deficit
Product invariants — rules the product enforces even when the user would prefer it didn't.
03 · The architecture decision, and why it was a design call
Deterministic engine + AI communication layer, not the other way around.
Option A · rejected
Let the AI decide
Fast to build, impossible to test.
Option B · chosen
Engine calculates, AI communicates
Deterministic, auditable, and the coach has no write access to it.
A product design decision that happens to have engineering consequences, not the other way around.
The day the rule proved itself
The coach said “logged”. Nothing was logged.
Caught by checking the database, not by trusting the reply
04 · Problems met on the way
Living inside your own product is brutal: every shortcut you took finds you within days.
Nobody knows how many grams of oil are in their pad thai
If honest users can’t answer the form, the form is the bug
I trained — and the app said “0 hard sets”
Detecting isn’t preventing — the gate goes where data is written
HTTPS was one command away — and the answer was no
Never promise a notification that can’t leave the building
05 · The product
Two surfaces, one engine: training and nutrition, built to work together.
Training
Multi-week challenges and single sessions. Every set logs reps and RIR; double progression picks the next weight.
Nutrition
Meal log over a food library, tracking kcal and macros, with a per-meal day navigator.
Motion proof · 26 seconds, recorded live
Not a prototype. This is the product running.
Home, nutrition, training and progress in one take of the real build. The coach opens with a check-in nudge — a card the engine raised, offered as Accept / Not now. The AI never acts on its own, and Progress reads a 7-day weight average back in plain language.

Home
Where you stand, surfaced calmly
Today's session and the day's macros in one glance. The engine has already done the reading; the screen's job is to stay quiet about it until something matters.

Nutrition
Eating enough is the success state
The day reads against protein, kcal and a fat floor, broken down per meal. Maintenance is the target: a deficit shows up as a warning, never as an achievement.

Training
The rule picks the next weight, not a guess
Multi-week challenges beside single sessions, with a search-and-filter library for breadth without noise. Behind every logged set, the double-progression rule decides what comes next.
Real UI captured from the running app · demo data only (no personal health data)
06 · The system underneath
Brand discipline, applied to product: every token is a decision, documented where it lives.
A semantic token system — colour, radius, spacing and type as CSS variables — under 11 re-themed primitives and 61 domain components. The domain layer grew from 28 to 61 components in a month of real use; the 11 primitives never changed once. The whole palette was then replaced in a one-day rebrand, which is the same fact from the other side.
07 · How it was built
Designed and built solo, with AI as the development partner, every decision directed by me.
08 · What I would validate next
Shipping solo proves judgment and execution. The next layer is evidence from people who are not me.
Test whether the coach cards feel supportive or intrusive after repeated daily use.
Validate the nutrition language with users who dislike calorie-focused tracking.
Stress-test empty states and missed-day recovery so the product supports lapses without guilt.
09 · What this proves
One person took this from first sketch to a PWA in daily use — no PM, no budget review, no stakeholder approval.
the clearest version of "resourceful self-starter, minimal oversight." The design system and iterative delivery are what made that possible at solo scale.
1
user · me, by design
2
surfaces: training + nutrition
1
engine · no AI in the calculation layer
0
stakeholders to approve it