Building a Fitness System Instead of Another Habit Tracker
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.
- Workout checklists tracked compliance against a real weekly split
- Strength logging included automatic PR detection based on exercise type
- Recovery metrics like sleep and resting heart rate lived beside performance data
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.