<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ohm Anand</title>
    <description>The latest articles on DEV Community by Ohm Anand (@ohmanand7643).</description>
    <link>https://dev.to/ohmanand7643</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4159270%2F52a27cdb-50f5-4091-b076-5e55ddf4dde4.jpg</url>
      <title>DEV Community: Ohm Anand</title>
      <link>https://dev.to/ohmanand7643</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ohmanand7643"/>
    <language>en</language>
    <item>
      <title>I built a local AI workout planner for my gym-obsessed friend</title>
      <dc:creator>Ohm Anand</dc:creator>
      <pubDate>Sun, 04 Oct 2026 20:47:55 +0000</pubDate>
      <link>https://dev.to/ohmanand7643/i-built-a-local-ai-workout-planner-for-my-gym-obsessed-friend-1fac</link>
      <guid>https://dev.to/ohmanand7643/i-built-a-local-ai-workout-planner-for-my-gym-obsessed-friend-1fac</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;My friend Ritesh is a proper gym guy.&lt;/p&gt;

&lt;p&gt;He already enjoys lifting and spends a lot of time training, so motivation isn't really his problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure is.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Legs were another problem. He didn't know many leg exercises, so they were easier to neglect.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;LiftMate&lt;/strong&gt; around that problem.&lt;/p&gt;

&lt;p&gt;LiftMate asks for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Training goal&lt;/li&gt;
&lt;li&gt;Experience level&lt;/li&gt;
&lt;li&gt;Training days&lt;/li&gt;
&lt;li&gt;Session duration&lt;/li&gt;
&lt;li&gt;Available equipment&lt;/li&gt;
&lt;li&gt;Muscle priorities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It then builds a structured workout around those constraints.&lt;/p&gt;

&lt;p&gt;But I didn't want it to be just another app that generates a workout and leaves you there.&lt;/p&gt;

&lt;p&gt;The actual flow is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan → Train → Log → Progress&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can start the workout, log every set, complete the session and get a recommendation for what to do next time.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://youtu.be/8RSpDZ2O5Mw" rel="noopener noreferrer"&gt;Watch the LiftMate Demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The demo shows the complete flow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Onboarding → Personalized Workout → Local AI Personalization → Active Workout → Set Logging → Completion → Progression&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A look inside LiftMate
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyj671flmlozsjvboyf4j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyj671flmlozsjvboyf4j.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3qcint9y7bxfme2e9n8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3qcint9y7bxfme2e9n8u.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftdqxglqtoqy00tlmvlpy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftdqxglqtoqy00tlmvlpy.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flewrrh5tx0qbdgon6jwu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flewrrh5tx0qbdgon6jwu.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forgu2qt1654zuslqrgs0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forgu2qt1654zuslqrgs0.png" alt=" " width="799" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The screenshots show the onboarding flow, personalized workout, AI explanation, active workout and completed session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ohm-7643/LiftMate" rel="noopener noreferrer"&gt;https://github.com/ohm-7643/LiftMate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the complete LiftMate application, including the frontend, backend, database, workout planner, AI integration and validation logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The most important design decision I made was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;I didn't let the AI design the entire workout.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;LiftMate has a deterministic workout planner that handles the parts that should be predictable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exercise selection&lt;/li&gt;
&lt;li&gt;Equipment constraints&lt;/li&gt;
&lt;li&gt;Muscle-group priorities&lt;/li&gt;
&lt;li&gt;Sets and reps&lt;/li&gt;
&lt;li&gt;Rest periods&lt;/li&gt;
&lt;li&gt;Session duration&lt;/li&gt;
&lt;li&gt;Weekly training structure&lt;/li&gt;
&lt;li&gt;Progression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I added &lt;strong&gt;Qwen3-8B&lt;/strong&gt;, running locally through &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Qwen has a much smaller job.&lt;/p&gt;

&lt;p&gt;It personalizes the workout.&lt;/p&gt;

&lt;p&gt;The model can prioritize a couple of exercises based on the user's goals and provide a short coaching note.&lt;/p&gt;

&lt;p&gt;The AI response is then validated before it reaches the user.&lt;/p&gt;

&lt;p&gt;LiftMate checks that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The exercises are actually allowed&lt;/li&gt;
&lt;li&gt;The user's equipment supports them&lt;/li&gt;
&lt;li&gt;There are no duplicates&lt;/li&gt;
&lt;li&gt;They fit the planned focus&lt;/li&gt;
&lt;li&gt;The prescriptions stay within allowed limits&lt;/li&gt;
&lt;li&gt;The response has the expected structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the local model fails, times out or returns something invalid, LiftMate falls back to the deterministic workout.&lt;/p&gt;

&lt;p&gt;So the architecture is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Profile → Deterministic Planner → Qwen3-8B → Validation → Workout&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That separation was intentional.&lt;/p&gt;

&lt;p&gt;I wanted the model to make the experience more personal without making the whole application depend on whatever the model happens to generate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;I could have called a closed AI API and asked it to generate a workout.&lt;/p&gt;

&lt;p&gt;That would have been easier.&lt;/p&gt;

&lt;p&gt;But for LiftMate, running an open-weight model locally made more sense.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;Qwen3-8B running through Ollama&lt;/strong&gt;, 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.&lt;/p&gt;

&lt;p&gt;It also gives me control.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;More importantly, I don't have to blindly trust the model.&lt;/p&gt;

&lt;p&gt;The deterministic planner remains responsible for the actual workout structure, while the model adds personalization on top.&lt;/p&gt;

&lt;p&gt;That was probably the biggest thing I learned from this project:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Open-source AI doesn't have to mean letting the model do everything.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For LiftMate:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI personalizes.&lt;br&gt;&lt;br&gt;
Rules keep it reliable.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I didn't use DevRelay for this project, so I'm leaving this optional section out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;No partner category claimed.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>sdsdfvdvfrgbt</title>
      <dc:creator>Ohm Anand</dc:creator>
      <pubDate>Sat, 03 Oct 2026 08:56:06 +0000</pubDate>
      <link>https://dev.to/ohmanand7643/sdsdfvdvfrgbt-pd8</link>
      <guid>https://dev.to/ohmanand7643/sdsdfvdvfrgbt-pd8</guid>
      <description></description>
    </item>
  </channel>
</rss>
