← All posts

Building a Fitness System Instead of Another Habit Tracker

April 2026Health · Full Stack

Fitness data is usually fragmented. Workouts live in one app. Cycling somewhere else. Sleep somewhere else. The problem is not lack of data. It is lack of coherence between training, recovery, and consistency.

SHRED started as an attempt to make those signals live in one system. Not a general purpose fitness platform. A tool shaped around how I actually train, including lifting, cycling, BJJ, sleep, and weekly progression.

The Interesting Problem Was Structure

The project was less about logging inputs and more about modeling a training system. That is why the weekly schedule is opinionated. Upper body has a checklist. Cycling days have their own expectations. Recovery metrics sit beside output metrics.

That structure made streak tracking more interesting than a basic check in counter. A productive day could be driven by any meaningful training signal, not one arbitrary action.

That last part mattered. Recovery should not be an afterthought in training software.

Small Domain Details Mattered

One part I liked building was the PR logic. It could not be one formula because different exercises behave differently. Timed holds, bodyweight reps, and weighted movements all needed different comparisons.

The same thinking showed up in the logging UI. Inputs changed based on exercise selection. Timed holds showed hold seconds. Bodyweight exercises hid load fields. Small details, but they made the system feel aware of the domain instead of generic.

React Query also ended up doing more than fetching data. Optimistic checklist updates made the dashboard feel immediate, which matters for something used daily.

What Did Not Work Well

Some parts are too rigid. The predefined workout structure makes sense for me, but customization is weaker than it should be. Adding new exercises or changing programming still leans too much on code changes.

Streak logic also has edge cases I would revisit. The dedicated streak recalculation route is stronger than some update paths, and I would unify that if I rebuilt it.

I would also add export and import support. Personal data tools should assume backups matter.

What I Learned

This project taught me that personal software can justify serious engineering. Prisma schemas, validation layers, caching strategy, domain specific business logic. Those decisions matter even in a project built for one user.

It also changed how I think about product scope. SHRED works because it is opinionated. It does not try to be every fitness app.

Good systems do not just track discipline. They reinforce it.

View all projects →