This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
My friend Ritesh is a proper gym guy.
He already enjoys lifting and spends a lot of time training, so motivation isn't really his problem.
Structure is.
Some days he'd train chest, another day triceps, and there wasn't always a clear structure for how his muscle groups should fit together across the week.
Legs were another problem. He didn't know many leg exercises, so they were easier to neglect.
So I built LiftMate around that problem.
LiftMate asks for:
- Training goal
- Experience level
- Training days
- Session duration
- Available equipment
- Muscle priorities
It then builds a structured workout around those constraints.
But I didn't want it to be just another app that generates a workout and leaves you there.
The actual flow is:
Plan → Train → Log → Progress
You can start the workout, log every set, complete the session and get a recommendation for what to do next time.
I showed the working version to Ritesh, and the project was built around the way he actually trains rather than around a generic fitness-app idea.
Demo
The demo shows the complete flow:
Onboarding → Personalized Workout → Local AI Personalization → Active Workout → Set Logging → Completion → Progression
A look inside LiftMate
The screenshots show the onboarding flow, personalized workout, AI explanation, active workout and completed session.
Code
GitHub: https://github.com/ohm-7643/LiftMate
The repository contains the complete LiftMate application, including the frontend, backend, database, workout planner, AI integration and validation logic.
How I Built It
The most important design decision I made was simple:
I didn't let the AI design the entire workout.
LiftMate has a deterministic workout planner that handles the parts that should be predictable:
- Exercise selection
- Equipment constraints
- Muscle-group priorities
- Sets and reps
- Rest periods
- Session duration
- Weekly training structure
- Progression
Then I added Qwen3-8B, running locally through Ollama.
Qwen has a much smaller job.
It personalizes the workout.
The model can prioritize a couple of exercises based on the user's goals and provide a short coaching note.
The AI response is then validated before it reaches the user.
LiftMate checks that:
- The exercises are actually allowed
- The user's equipment supports them
- There are no duplicates
- They fit the planned focus
- The prescriptions stay within allowed limits
- The response has the expected structure
If the local model fails, times out or returns something invalid, LiftMate falls back to the deterministic workout.
So the architecture is:
User Profile → Deterministic Planner → Qwen3-8B → Validation → Workout
That separation was intentional.
I wanted the model to make the experience more personal without making the whole application depend on whatever the model happens to generate.
Why Does Open Innovation Matter?
I could have called a closed AI API and asked it to generate a workout.
That would have been easier.
But for LiftMate, running an open-weight model locally made more sense.
With Qwen3-8B running through Ollama, the AI personalization can happen on the user's own machine. A fitness profile doesn't have to be sent to a third-party AI provider just to decide which exercises to prioritize.
It also gives me control.
I can inspect the prompts, change the rules, swap the model, or experiment with another open model without rebuilding the whole application around one provider.
More importantly, I don't have to blindly trust the model.
The deterministic planner remains responsible for the actual workout structure, while the model adds personalization on top.
That was probably the biggest thing I learned from this project:
Open-source AI doesn't have to mean letting the model do everything.
For LiftMate:
AI personalizes.
Rules keep it reliable.
My Agent Session
I didn't use DevRelay for this project, so I'm leaving this optional section out.
Prize Categories
No partner category claimed.





Top comments (0)