The problem
FlexTrack was the first app I built. I wanted to see what was possible and whether I could make something useful for myself from beginning to end. Workout tracking was an easy place to start because I already understood the basic need.
There are plenty of fitness apps, but many come with ads, subscriptions, account setup, and features I do not need. I wanted something I could open quickly during a workout, record what I had done, and close. It only needed to remember my routines and give me a simple view of my past sessions and progress.
What I built
I organised the app around four places: Today, Workouts, History, and Progress. Templates make regular sessions quick to start, while Quick Log handles a workout that was not planned in advance. Everything is stored locally through AsyncStorage, so there is no account, backend, or sync process to get in the way.
The guided workout flow adapts to repetition, timed, and distance exercises. It supports external weight, bodyweight, and assisted movements, surfaces the previous matching session beside each set, starts adjustable rest timers, and includes a plate calculator for barbell work. A focused summary closes each session with duration, completed sets, volume, and exercise results.
The progress views are intentionally straightforward. They show recent activity, personal records, training splits, body measurements, and how an exercise has changed over time without trying to turn every workout into a social or competitive event.
Decisions and tradeoffs
Local-first by design
Templates, logs, and profile data stay in AsyncStorage. That removes account friction and remote infrastructure while accepting the deliberate tradeoff that data does not sync across devices.
One model for every modality
Routines and logs share a typed model that handles reps, timers, and distance, plus external, bodyweight, and assisted loads. Progress can therefore choose a metric suited to each exercise.
Previous performance in context
The last matching session appears beside the set being logged instead of behind a separate history screen, turning progressive overload into part of the main workout flow.
Quick Log outside routines
Runs, walks, rides, and ad-hoc sessions can be captured without first building a template, while still feeding the same History and Progress views.
What I learned
As my first mobile app, FlexTrack taught me how much scope can disappear into features that sound small: timers, background behavior, interrupted sessions, local persistence, and exercise types that each need different inputs.
Keeping the product local and personal helped me finish it. I could focus on the workout itself and put previous performance beside the current set, which is more useful in the gym than a large analytics dashboard hidden several screens away.