FREDERIK SMAL Back to independent work
Personal project · August 2026

GymBro: training data that actually helps mid-set

A gym tracker I built for myself, designed around one rule: show me what I need to know for this exact set, not a dashboard I have to interpret while resting between sets.

Type
Personal product, self-initiated
Role
Product, design, build
Platform
Mobile app
Status
In daily use
01

The problem with most trackers

Most fitness apps ask you to log everything, then hide the number you actually need inside graphs and history screens. Mid-set, I don't want to study a chart. I want to know what I lifted last time and whether I should stay there or push a little further.

GymBro started as a personal fix for that: previous performance, progression and a suggested load, with as little friction as possible.

Decision

Show last time's numbers and one instruction, not a chart.

Why

A trend line is something you study. A single sentence (maintain, add a rep, or add weight) is something you can read in two seconds and get back to lifting.

02

How it works

Every exercise starts with what I did last time: weight, reps and when I last trained it.

Instead of another graph, GymBro gives me one clear instruction. Maintain the weight, add a few reps, or move up once the reps are consistent.

For exercises like single-arm rows, each side can be tracked separately. Sets can also be edited or removed directly from the log.

Skills this shows

Product designMobile UXInteraction designData modelingRapid prototyping
GymBro body measurements, workout completion summary, monthly insights report and exercise detail screens

Body measurements, workout completion, monthly insights and exercise history. Same deterministic data, different views for different moments.

03

How it's built

I built GymBro myself, end to end, with Claude as a collaborator throughout.

Frontend

Vanilla HTML, CSS and JavaScript. No framework or build step.

Backend

PHP and MySQL on standard shared hosting.

Data

Sessions, sets, PRs, body composition and medicine, plus an offline retry queue if the connection drops mid-set.

The simple stack was deliberate. I wanted something I could understand completely and keep running without maintaining a pile of dependencies.

Where AI helped

Claude helped scaffold screens and API endpoints from my specs, clean up my existing training data, and iterate on the UI.

It also helped during debugging, but nothing was shipped just because it looked right. I tested the actual flows, inspected requests and checked the database directly.

Trade-off

Calorie estimates are intentionally conservative: broad MET-based exercise data, not a precise per-exercise number that doesn't really exist.

Where it's headed

The numbers shown in GymBro are still calculated deterministically. AI is reserved for the part where interpretation is actually useful.

Every few weeks, I can give Claude my current training goal together with the full dataset and ask it to suggest changes to the program. I review every suggestion before anything changes.

AI as a coach reading the data, not a calculator replacing it.

04

From sketch to shipped

Before any of it was real, it was sketches and simple flows, figuring out what Insights should show first and what should happen when I tap "Add set" mid-workout.

Three of the flows worked out on paper first. Click to enlarge.

Have something worth building?

I'm interested in senior product, product design and hybrid leadership roles.

Get in touch