Project • FitHub
A full-stack-feeling fitness app built in Java Swing
FitHub is a desktop fitness companion built for a software development course. It started as a console app and grew into a full Java Swing application with a splash screen, user profiles, workout/meal planners, and JSON persistence under the hood.
The goal was to treat it like a real product: clean flows, durable save/load logic, and enough structure that new features (stats, new plans, different users) could be plugged in without rewriting everything.
- • Java Swing UI with custom layout for each feature.
- • Workout planner + weekly diet planner with generated plans.
- • JSON-based persistence layer with full read/write coverage.
- • Built + tested as a term-long software development project.

Workout planner
Weekly split view with days across the top and per-day exercises underneath. Built for quick scanning rather than clicking through dialogs.

Meal planner
7×3 grid for breakfast, lunch, dinner. Each cell opens a details view where meals can be swapped and macros inspected.

Workout stats
Volume and frequency over the week: see which days are overloaded and how many sets each muscle group is getting.
Diet stats
Macro + calorie breakdown across the week so meal changes show up as trends instead of one-off numbers.
Create or generate weekly workout splits, track exercises per day, and save your routine so it’s always there when you reopen the app.
A 7×3 grid for breakfast, lunch, dinner. Click into any day to swap meals, view macros, and experiment with different weekly layouts.
Behind the scenes, FitHub tracks volume and meal changes over time so you can see how your routine evolves instead of losing changes in memory.
Under the hood
Every core model in FitHub implements a Writable interface that converts the object into JSON. The UI talks to this layer instead of juggling file logic directly, which keeps the Swing code focused on layout and interaction.
The result is a project that feels like a small product: a proper entry point, a splash-screen flow, a main hub, and a persistence layer that survives refactors and new features.
Persistence
All user data (profile, workouts, diet plans) is stored in JSON and rehydrated on launch.
Test coverage
Model + persistence packages are fully unit-tested to avoid silent data loss.
Flow design
Splash → profile selection → main hub → specialized planners, then save on exit.
Extensibility
New stats or planners can be added by extending model classes without rewiring the UI.
How the stats work
Stats aren't a separate database — they're computed from the same JSON that powers workout and meal plans. That keeps the data model simple while still letting the UI show progress views like "weekly volume" or "meals changed this week".
Workout metrics
Aggregate number of sessions, days trained per week, and total planned sets per muscle group.
Meal planner metrics
Track how often you change meals, which days tend to drift from plan, and which weeks are most consistent.