<?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: Shubham Nayak</title>
    <description>The latest articles on DEV Community by Shubham Nayak (@shubham_nayak_).</description>
    <link>https://dev.to/shubham_nayak_</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%2F2471825%2F7cf6e965-3ff2-4c88-b583-d41e308ebe11.jpeg</url>
      <title>DEV Community: Shubham Nayak</title>
      <link>https://dev.to/shubham_nayak_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shubham_nayak_"/>
    <language>en</language>
    <item>
      <title>👻 Meet GhostShell — a spooky AI-powered terminal assistant!</title>
      <dc:creator>Shubham Nayak</dc:creator>
      <pubDate>Wed, 28 Oct 2026 14:41:17 +0000</pubDate>
      <link>https://dev.to/shubham_nayak_/meet-ghostshell-a-spooky-ai-powered-terminal-assistant-13bd</link>
      <guid>https://dev.to/shubham_nayak_/meet-ghostshell-a-spooky-ai-powered-terminal-assistant-13bd</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;👻 &lt;strong&gt;Meet GhostShell — a spooky AI-powered terminal assistant!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What if your terminal had a ghost living inside it?&lt;/p&gt;

&lt;p&gt;GhostShell is a Halloween-inspired project that explores how open-source AI can bring a little mystery to the developer experience. It is designed to interpret terminal commands, explain what they do, and generate eerie commentary and spooky stories through an AI-powered terminal interface.&lt;/p&gt;

&lt;p&gt;Inspired by the &lt;em&gt;Ghost in the Machine&lt;/em&gt; theme, I wanted to combine my interest in software development, local AI, and the spooky atmosphere of Halloween into one project.&lt;/p&gt;

&lt;p&gt;The goal is to make interacting with a terminal feel a little more alive — without sacrificing developer control.&lt;/p&gt;

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

&lt;p&gt;🎬 &lt;strong&gt;Live demo:&lt;/strong&gt; [Add your demo link here]&lt;/p&gt;

&lt;p&gt;A terminal recording or GIF showing GhostShell responding to a command would be a great way to experience the project.&lt;/p&gt;

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

&lt;p&gt;💻 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; [Add your repository link here]&lt;/p&gt;

&lt;p&gt;The project source code, setup instructions, and implementation details will be available in the repository.&lt;/p&gt;

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

&lt;p&gt;The planned technology stack for GhostShell includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt; — to build the terminal application and connect its components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; — to run an open-weight language model locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qwen2.5 3B&lt;/strong&gt; — a lightweight model candidate for generating responses and spooky commentary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich&lt;/strong&gt; — to create a colorful, interactive terminal experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git and GitHub&lt;/strong&gt; — for version control and open-source collaboration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The central idea is to keep AI inference local rather than depending entirely on a hosted AI API.&lt;/p&gt;

&lt;p&gt;The model choice and performance will be validated during implementation, with an emphasis on keeping the application practical for a developer's laptop.&lt;/p&gt;

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

&lt;p&gt;Open innovation is important because developers should have the freedom to understand, adapt, and control the tools they build with.&lt;/p&gt;

&lt;p&gt;For GhostShell, local inference offers several potential advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; Prompts can stay on the local machine instead of being sent to a third-party AI service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline capability:&lt;/strong&gt; Once the model is downloaded, inference can work without an internet connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility:&lt;/strong&gt; Developers can experiment with different compatible models and customize the assistant's behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility:&lt;/strong&gt; Local models can reduce dependence on paid API usage, although hardware, electricity, and setup still have costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community-driven development:&lt;/strong&gt; An open-source project gives other developers the opportunity to inspect, improve, and extend the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API can be convenient, but a local, open-weight approach gives developers more control over where inference happens and which model powers their application.&lt;/p&gt;

&lt;p&gt;That freedom is what makes open-source AI exciting to me.&lt;/p&gt;

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

&lt;p&gt;🤖 &lt;strong&gt;DevRelay session:&lt;/strong&gt; [Add your session link here, if available]&lt;/p&gt;

&lt;p&gt;I'll share the development session here to help others understand the implementation process and the decisions behind the project.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Remove this section if no session is available.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;Halloween is the perfect time to imagine something unexpected hiding inside an ordinary developer tool.&lt;/p&gt;

&lt;p&gt;With GhostShell, the terminal becomes a place where commands meet a little mystery. The ghost is fictional, the AI is real, and the code is open for others to explore.&lt;/p&gt;

&lt;p&gt;Beyond the spooky theme, this project represents something I value as a developer: the ability to experiment, learn, and build without being locked into a single platform.&lt;/p&gt;

&lt;p&gt;Sometimes, the most interesting thing in the machine is what we choose to build together. 👻💻&lt;/p&gt;

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

&lt;p&gt;I'll select the applicable partner categories after verifying the project's eligibility against the official challenge rules.&lt;/p&gt;




&lt;p&gt;Built with curiosity, open-source AI, and a little Halloween spirit. 🎃&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>SlothChef: A Local AI Vision Agent That Turns Your Fridge Into a Meal</title>
      <dc:creator>Shubham Nayak</dc:creator>
      <pubDate>Wed, 21 Oct 2026 06:03:14 +0000</pubDate>
      <link>https://dev.to/shubham_nayak_/slothchef-a-local-ai-vision-agent-that-turns-your-fridge-into-a-meal-37ag</link>
      <guid>https://dev.to/shubham_nayak_/slothchef-a-local-ai-vision-agent-that-turns-your-fridge-into-a-meal-37ag</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;SlothChef&lt;/strong&gt;, a local, zero-effort vision agent for anyone who stares blankly into their refrigerator hoping a meal will magically assemble itself.&lt;/p&gt;

&lt;p&gt;Instead of manually typing ingredients, scrolling through endless recipe pages, or standing in front of the fridge trying to decide what to cook, SlothChef does the thinking locally:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Snap &amp;amp; Forget:&lt;/strong&gt; Take a single photo of an open fridge or pantry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detect &amp;amp; Decide:&lt;/strong&gt; SlothChef identifies visible ingredients and uses a local language model to reason about them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lazy Meal:&lt;/strong&gt; It generates a quick, low-effort recipe designed around minimal cooking and minimal cleanup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use What You Have:&lt;/strong&gt; The workflow prioritizes ingredients already available instead of requiring a shopping trip.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is simple: &lt;strong&gt;reduce decision fatigue and turn "I don't know what to cook" into an actual meal.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Here is an example CLI trace of SlothChef processing a smartphone photo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[SlothChef Intake Monitor Active]

[07:15:22 PM] Image Detected: "fridge_shelf_evening.jpg"
   ↳ Analyzing via SmolVLM-Instruct...
   ↳ Detected items: Eggs (3), half a block of cheddar,
     wilted spinach, corn tortillas, jar of salsa.

   ↳ Querying Qwen2.5-Coder-3B for lazy culinary logic...

[Recipe Generated: 10-Minute Lazy Skillet Migas]

- Effort Level: Low
- Dishes Used: 1 skillet
- Ingredients: Corn tortillas, 3 eggs, spinach,
  cheddar, salsa

- Instructions:
  1. Tear tortillas into the pan with a little oil.
  2. Add the eggs and spinach, then scramble.
  3. Turn off the heat, add cheese and salsa, and eat.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;The core Python workflow connects a local vision model with a local language model through Ollama:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ollama&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;analyze_fridge_image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Identify edible ingredients visible in a fridge image.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ollama&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;smolvlm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List only the edible ingredients, produce, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;and condiments visible in this fridge photo &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;as comma-separated items.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                &lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;images&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_path&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_lazy_recipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ingredients_list&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Generate a minimal-effort recipe using local AI.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="n"&gt;system_prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    You are SlothChef.

    The user is tired and wants to cook with minimal effort
    and as few dishes as possible.

    Based on the available ingredients:
    1. Pick 3-5 compatible ingredients.
    2. Prefer one-pan or one-pot meals.
    3. Keep preparation simple.
    4. Return valid JSON only.

    Format:
    {
        &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recipe_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,
        &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prep_time_minutes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: 10,
        &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dishes_used&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: 1,
        &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: [&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;]
    }
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ollama&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen2.5:3b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Available items: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ingredients_list&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;photo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fridge_shelf_evening.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Inspecting fridge contents locally...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;detected_items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;analyze_fridge_image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Found: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;detected_items&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Designing low-effort dinner...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_lazy_recipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;detected_items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Meal: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;recipe_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;(&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;prep_time_minutes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; mins, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dishes_used&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; pan)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;SlothChef uses modular open-source AI components running locally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vision:&lt;/strong&gt; SmolVLM through Ollama for extracting ingredients from fridge/pantry images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language Model:&lt;/strong&gt; Qwen2.5-3B-Instruct for turning detected ingredients into a structured recipe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow:&lt;/strong&gt; A simple local Python interface that accepts an image, runs vision analysis, passes the detected ingredients to the language model, and prints the resulting meal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; Structured JSON containing the recipe name, preparation time, number of dishes, and cooking steps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part is that the AI pipeline does not require a cloud API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;Open-weight models make small personal AI utilities practical without requiring every interaction to go through a commercial API.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Privacy
&lt;/h3&gt;

&lt;p&gt;A fridge photo can reveal a surprising amount about someone's home and lifestyle. Local inference means the image can stay on the user's machine instead of being uploaded to a remote service.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Offline Independence
&lt;/h3&gt;

&lt;p&gt;The application can continue working without an internet connection once the required models are available locally.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. No Per-Request API Cost
&lt;/h3&gt;

&lt;p&gt;There is no per-meal API charge. Users can experiment with the workflow as often as they want using their own hardware.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Developer Control
&lt;/h3&gt;

&lt;p&gt;Running open models locally gives developers control over prompts, output formats, model selection, and inference configuration.&lt;/p&gt;

&lt;p&gt;This makes it possible to build small, focused AI agents around very specific everyday problems.&lt;/p&gt;

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

&lt;p&gt;&lt;code&gt;[DevRelay Session: slothchef-local-vlm-trace]&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;SlothChef is intentionally simple.&lt;/p&gt;

&lt;p&gt;The problem isn't that people don't know how to cook. Sometimes the problem is simply &lt;strong&gt;not wanting to decide what to cook&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One photo of the fridge can become a concrete meal suggestion without typing ingredients, searching recipe websites, or opening another delivery app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less thinking. Less scrolling. Less cleanup. More eating.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the idea behind SlothChef.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>FreelanceFlow AI: A Privacy-Friendly Business Assistant Powered by Open-Source AI</title>
      <dc:creator>Shubham Nayak</dc:creator>
      <pubDate>Thu, 15 Oct 2026 13:43:36 +0000</pubDate>
      <link>https://dev.to/shubham_nayak_/freelanceflow-ai-a-privacy-friendly-business-assistant-powered-by-open-source-ai-2f7k</link>
      <guid>https://dev.to/shubham_nayak_/freelanceflow-ai-a-privacy-friendly-business-assistant-powered-by-open-source-ai-2f7k</guid>
      <description>&lt;p&gt;title: "FreelanceFlow AI: A Privacy-Friendly Business Assistant Powered by Open-Source AI"&lt;br&gt;
published: false&lt;br&gt;
tags: devchallenge, hf26challenge, opensource, ai&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Meet &lt;strong&gt;FreelanceFlow AI&lt;/strong&gt; — an AI-powered business assistant designed to help freelancers and small business owners save time on repetitive tasks.&lt;/p&gt;

&lt;p&gt;Freelancers often spend hours writing client proposals, creating invoice descriptions, drafting professional emails, and organizing project information. These tasks may seem small, but they take valuable time away from actual work.&lt;/p&gt;

&lt;p&gt;FreelanceFlow AI aims to simplify this workflow by helping users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate professional client proposals from a short project description.&lt;/li&gt;
&lt;li&gt;Draft client emails and follow-up messages.&lt;/li&gt;
&lt;li&gt;Create clear service descriptions for invoices.&lt;/li&gt;
&lt;li&gt;Turn rough notes into organized project summaries.&lt;/li&gt;
&lt;li&gt;Customize AI-generated content for different clients and business needs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is simple: give independent professionals a practical AI assistant that helps them work smarter without depending entirely on expensive AI APIs.&lt;/p&gt;

&lt;p&gt;The potential customers are freelancers, students offering services, solo developers, and small businesses.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; [Add your deployed demo link here]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo Video:&lt;/strong&gt; [Add your demo video link here, if available]&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; [Add your public GitHub repository link here]&lt;/p&gt;

&lt;p&gt;The project source code will document the application architecture, setup instructions, and how to run the AI component.&lt;/p&gt;

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

&lt;p&gt;I am building this project using my experience with full-stack development and exploring how open-source AI can power a practical, user-focused product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Planned technology stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node.js and Express.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MongoDB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI engine:&lt;/strong&gt; An open-weight language model such as Qwen or Llama, subject to model compatibility and licensing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model runtime:&lt;/strong&gt; Ollama for local inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development workflow:&lt;/strong&gt; GitHub and DevRelay.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application will accept a user's task, prepare a structured prompt, and use the selected language model to generate useful business content.&lt;/p&gt;

&lt;p&gt;The goal is to keep the AI component replaceable, allowing the project to experiment with different open-weight models without rebuilding the entire application.&lt;/p&gt;

&lt;p&gt;Local inference will be an important option for users who prefer to process their information on their own machine. Hardware requirements and model performance will depend on the selected model.&lt;/p&gt;

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

&lt;p&gt;Open innovation is central to the idea behind FreelanceFlow AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. More control over costs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Relying entirely on paid AI APIs can make a small side project expensive as usage grows. Running a compatible open-weight model locally can reduce per-request API costs, although hardware and hosting still have costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. More control over private information&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Client proposals, business notes, and project details can contain confidential information. Local inference can help keep this information on the user's machine rather than sending it to an external AI provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Freedom to experiment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Different language models have different strengths. An open-weight approach makes it possible to compare models, customize prompts, and choose a suitable model for the task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Less vendor lock-in&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application can be designed around a replaceable AI layer rather than depending on one provider's proprietary API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. A realistic path to a side hustle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A focused tool for freelancers can start with a small feature set and grow based on real feedback. A free or low-cost local option could make it useful even for people who cannot justify another monthly subscription.&lt;/p&gt;

&lt;p&gt;Open-source AI is not automatically better at every task. The real advantage is the flexibility to choose the right model, deployment method, and cost structure for the users' needs.&lt;/p&gt;

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

&lt;p&gt;I use AI-assisted development tools to explore implementation ideas, debug code, and improve the development workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevRelay Session:&lt;/strong&gt; [Add your saved DevRelay agent session link here]&lt;/p&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;The first milestone is to get the tool into the hands of a freelancer or a small business owner and observe how they use it.&lt;/p&gt;

&lt;p&gt;I want to learn which repetitive task consumes the most time, whether the generated content is genuinely useful, and whether the user would pay for a more capable version.&lt;/p&gt;

&lt;p&gt;I will update this section with real feedback and testing results after the first user trial.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Hacktoberfest Open-Source AI Challenge — Week 2: Side Hustle&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;My next steps are to implement the core workflow, test an open-weight model, publish the code, and collect feedback from potential users.&lt;/p&gt;

&lt;p&gt;I'd love to hear from other developers: &lt;strong&gt;What repetitive task would you automate first if you could run your own AI model without depending on a paid API?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's build useful things with open-source AI! 🚀&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
    </item>
    <item>
      <title>FrostSprout: I Built a Local AI Garden Assistant That Gets You Outside, Not Staring at a Dashboard</title>
      <dc:creator>Shubham Nayak</dc:creator>
      <pubDate>Sun, 11 Oct 2026 10:59:58 +0000</pubDate>
      <link>https://dev.to/shubham_nayak_/frostsprout-i-built-a-local-ai-garden-assistant-that-gets-you-outside-not-staring-at-a-dashboard-49ac</link>
      <guid>https://dev.to/shubham_nayak_/frostsprout-i-built-a-local-ai-garden-assistant-that-gets-you-outside-not-staring-at-a-dashboard-49ac</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Your Garden Doesn't Need Another Dashboard
&lt;/h2&gt;

&lt;p&gt;Imagine waking up on a cold autumn morning. The forecast says it might freeze overnight. You have spinach, garlic, carrots, and other crops growing outside.&lt;/p&gt;

&lt;p&gt;You have three questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Will frost threaten my garden tonight?&lt;/li&gt;
&lt;li&gt;Which plants need attention first?&lt;/li&gt;
&lt;li&gt;What should I physically do when I step outside?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A weather app gives you numbers. A gardening website gives you generic advice. An AI chatbot gives you another conversation to read.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I wanted to build something different: an AI assistant that tells you what to do, then gets out of your way.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;FrostSprout&lt;/strong&gt;, an open-source, hyperlocal garden planning assistant built around one simple principle: &lt;em&gt;the screen should be the shortest part of the experience.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;FrostSprout combines local AI, tabular machine learning, live weather data, and hands-free audio to turn microclimate conditions into a practical three-step garden action plan.&lt;/p&gt;

&lt;p&gt;Instead of stopping at “There is a chance of frost,” it aims to answer: “Here is what you should check and protect before tonight.”&lt;/p&gt;

&lt;p&gt;The default location is Panipat, Haryana, India, and the application supports ten cold-hardy autumn crops, with planting-depth guidance and practical outdoor observations.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. From Weather Data to Actionable Decisions
&lt;/h3&gt;

&lt;p&gt;FrostSprout collects available environmental features, including elevation, forecast temperatures, humidity, and cloud cover. It combines them with explicitly identified defaults for unavailable soil temperature, pressure, and rolling-temperature history.&lt;/p&gt;

&lt;p&gt;The prediction layer estimates frost risk and produces inputs for the garden guide. The interface distinguishes real weather observations from hypothetical scenarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. An AI Guide You Can Listen to Outside
&lt;/h3&gt;

&lt;p&gt;The local Gemma model transforms numerical predictions into a concise, three-step task list.&lt;/p&gt;

&lt;p&gt;Using the browser's native Web Speech API, FrostSprout reads the instructions aloud. You can listen while walking around your garden, checking leaves, touching the soil, and protecting vulnerable plants.&lt;/p&gt;

&lt;p&gt;No external speech API is required.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. A Printable Garden Field Card
&lt;/h3&gt;

&lt;p&gt;Sometimes the best interface is paper.&lt;/p&gt;

&lt;p&gt;FrostSprout includes print-specific styling that formats the plan into a compact field card. Print it, take it outside, and follow the steps without repeatedly unlocking your phone.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. What-If Frost Scenarios
&lt;/h3&gt;

&lt;p&gt;Want to explore what might happen if the temperature drops to 2°C?&lt;/p&gt;

&lt;p&gt;The simulated mode lets you experiment with hypothetical conditions and observe how the application responds. It is explicitly labelled as simulated, so hypothetical weather is not confused with live observations.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. An Outdoor Activity Log
&lt;/h3&gt;

&lt;p&gt;A simple garden log records time spent outside and soil observations.&lt;/p&gt;

&lt;p&gt;The goal isn't to maximise screen time or build another engagement dashboard. It is to encourage people to observe their environment and learn from their own garden.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; A public deployment is not currently linked. Run FrostSprout locally to explore its features.&lt;/p&gt;

&lt;p&gt;The application includes live Open-Meteo weather, simulated frost scenarios, an audio walkthrough, printable field cards, and an outdoor log.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/Shubham-cyber-prog/FrostSprout" rel="noopener noreferrer"&gt;Shubham-cyber-prog/FrostSprout&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run it locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Shubham-cyber-prog/FrostSprout.git
&lt;span class="nb"&gt;cd &lt;/span&gt;FrostSprout
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python run.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:8000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To reproduce the benchmark:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python backend/benchmark.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The benchmark uses seed &lt;code&gt;42&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;FrostSprout uses a deliberately lightweight architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Vanilla HTML, CSS, and JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tabular ML:&lt;/strong&gt; TabPFN with a scikit-learn Random Forest fallback&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local language model:&lt;/strong&gt; Gemma 3 through Ollama&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weather:&lt;/strong&gt; Open-Meteo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio:&lt;/strong&gt; Browser-native Web Speech API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No API keys are required for the application's documented local workflow, although downloading model weights or obtaining model access may require additional setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Architecture
&lt;/h3&gt;

&lt;p&gt;The application follows a simple pipeline:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weather and microclimate features → Frost-risk prediction → AI-generated garden guide → Audio and printable field card → Outdoor action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each component has a defined responsibility.&lt;/p&gt;

&lt;p&gt;The prediction layer handles numerical inputs. The language model turns the resulting metrics into understandable instructions. The interface then makes those instructions usable away from the screen.&lt;/p&gt;

&lt;p&gt;This separation also makes it easier to replace individual components without redesigning the entire application.&lt;/p&gt;

&lt;h3&gt;
  
  
  TabPFN: The Prediction Layer
&lt;/h3&gt;

&lt;p&gt;I integrated Prior Labs' TabPFN through &lt;code&gt;backend/tabpfn_engine.py&lt;/code&gt; for tabular prediction tasks.&lt;/p&gt;

&lt;p&gt;When the required model weights and authentication are unavailable, the application falls back to a scikit-learn &lt;code&gt;RandomForestClassifier&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Importantly, the active model is reported rather than silently substituted. A fallback is a fallback, not a successful TabPFN run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verification status:&lt;/strong&gt; TabPFN is not verified in my environment because model access failed with &lt;code&gt;TabPFNLicenseError&lt;/code&gt;. I therefore do not claim that the TabPFN integration has been successfully benchmarked.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemma 3: Turning Predictions into Practical Advice
&lt;/h3&gt;

&lt;p&gt;The language-model integration lives in &lt;code&gt;backend/gemma_engine.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Gemma 3 runs locally through Ollama and converts numerical predictions into a three-step outdoor action guide, sensory observations, and companion-planting notes.&lt;/p&gt;

&lt;p&gt;The application identifies the response source as &lt;code&gt;gemma3 via Ollama&lt;/code&gt; when that path is used. If Ollama is unavailable, a deterministic template provides a fallback and reports &lt;code&gt;offline template&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is important because an application should not pretend that a language model generated a response when it actually used a predefined template.&lt;/p&gt;

&lt;h3&gt;
  
  
  Live Weather Without an API Key
&lt;/h3&gt;

&lt;p&gt;Open-Meteo supplies the available live weather data.&lt;/p&gt;

&lt;p&gt;However, not every feature is a live observation. Soil temperature, atmospheric pressure, and the seven-day rolling minimum currently use documented defaults.&lt;/p&gt;

&lt;p&gt;These limitations matter: &lt;strong&gt;real weather inputs do not automatically make every prediction scientifically validated.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FrostSprout is an experimental garden assistant, not a certified agricultural forecasting system. Its risk estimates should be treated as decision support rather than a guarantee that frost will or will not occur.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmark Results: What the Numbers Actually Mean
&lt;/h2&gt;

&lt;p&gt;I benchmarked the prediction models using 800 synthetic samples, with a 75/25 train-test split.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;ROC-AUC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Random Forest&lt;/td&gt;
&lt;td&gt;0.9987&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XGBoost&lt;/td&gt;
&lt;td&gt;0.9986&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TabPFN&lt;/td&gt;
&lt;td&gt;Not verified&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These numbers look impressive, but there is an important caveat.&lt;/p&gt;

&lt;p&gt;The synthetic labels are generated using the same underlying formula that creates the dataset. Consequently, the models can learn that formula and achieve near-perfect scores without demonstrating equivalent accuracy on real-world weather observations.&lt;/p&gt;

&lt;p&gt;I report these results as a reproducible synthetic-data benchmark, &lt;strong&gt;not evidence of 99.87% real-world frost prediction accuracy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The next meaningful evaluation step is testing against independently collected weather-station observations and verified frost outcomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;Open-source AI isn't just a technology choice for FrostSprout. It determines who can run it, inspect it, and adapt it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy and Local Inference
&lt;/h3&gt;

&lt;p&gt;Gemma 3 runs on the gardener's own machine through Ollama. The garden-guide generation step does not need a hosted language-model API.&lt;/p&gt;

&lt;p&gt;This reduces dependence on external AI services, avoids per-request model API charges, and allows the core language-model workflow to run locally once the model is installed.&lt;/p&gt;

&lt;p&gt;The application still retrieves weather from Open-Meteo, so the complete workflow is not fully offline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Freedom to Inspect and Replace Components
&lt;/h3&gt;

&lt;p&gt;The prediction engine, language model, prompts, crop guidance, and fallback logic can be inspected and modified.&lt;/p&gt;

&lt;p&gt;Gardeners and developers can adapt the application to local crops, replace models, and eventually train against regional weather-station data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Graceful Degradation
&lt;/h3&gt;

&lt;p&gt;Local model inference is not always available. Hardware may be limited, weights may be inaccessible, and a service may fail.&lt;/p&gt;

&lt;p&gt;FrostSprout is designed to expose these limitations and fall back to deterministic guidance rather than making unsupported claims about which model answered.&lt;/p&gt;

&lt;h3&gt;
  
  
  Transparency Over Artificial Confidence
&lt;/h3&gt;

&lt;p&gt;Open tooling also made it possible to expose a limitation that would otherwise be easy to hide: my TabPFN integration remains unverified, and my current benchmark is based on synthetic data.&lt;/p&gt;

&lt;p&gt;For a project that influences physical decisions, being clear about uncertainty is more valuable than presenting impressive numbers without context.&lt;/p&gt;

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

&lt;p&gt;Building FrostSprout reinforced three lessons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, AI is most useful when it changes an action.&lt;/strong&gt; A prediction is only the beginning. The real challenge is converting it into a decision someone can understand and carry out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second, graceful fallbacks are part of product design.&lt;/strong&gt; A local model that sometimes fails needs an honest, useful alternative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third, reproducibility and honesty belong in the same README.&lt;/strong&gt; Benchmarks should explain their dataset, assumptions, limitations, and verification status—not just display a score.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;The next steps are to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate predictions against real weather-station data.&lt;/li&gt;
&lt;li&gt;Verify TabPFN inference in a supported environment.&lt;/li&gt;
&lt;li&gt;Improve regional crop guidance and document its sources.&lt;/li&gt;
&lt;li&gt;Add more robust historical observations and uncertainty reporting.&lt;/li&gt;
&lt;li&gt;Test the complete audio-first workflow outdoors with real gardeners.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also want to test FrostSprout during an actual cold night, document what worked, and improve the field guide using those observations.&lt;/p&gt;

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

&lt;p&gt;Optional: &lt;a href="https://devrelay.com/" rel="noopener noreferrer"&gt;Add a DevRelay agent-session link here&lt;/a&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of TabPFN — Prior Labs:&lt;/strong&gt; Tabular prediction integration with an explicitly reported Random Forest fallback. TabPFN execution remains unverified.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma — Google:&lt;/strong&gt; Local Gemma 3 inference through Ollama for generating the outdoor action guide.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The best AI experience isn't necessarily the one that keeps you chatting for another ten minutes.&lt;/p&gt;

&lt;p&gt;Sometimes it is the one that checks the weather, gives you three useful instructions, reads them aloud, and lets you close your laptop.&lt;/p&gt;

&lt;p&gt;FrostSprout is my attempt to build that kind of experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less scrolling. More soil under your fingernails. More time outside.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you garden in a different climate, I'd love to hear what crops, frost conditions, or local observations you'd want FrostSprout to support.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>I Built a Local AI Gym Log for a Friend Who Always Forgot His Weights</title>
      <dc:creator>Shubham Nayak</dc:creator>
      <pubDate>Sun, 04 Oct 2026 11:28:04 +0000</pubDate>
      <link>https://dev.to/shubham_nayak_/i-built-a-local-ai-gym-log-for-a-friend-who-always-forgot-his-weights-5b14</link>
      <guid>https://dev.to/shubham_nayak_/i-built-a-local-ai-gym-log-for-a-friend-who-always-forgot-his-weights-5b14</guid>
      <description>&lt;p&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;/p&gt;

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

&lt;h2&gt;
  
  
  Gym Log Buddy — A Local AI Workout Logger Built for a Friend
&lt;/h2&gt;

&lt;p&gt;My friend goes to the gym regularly, but he has one surprisingly annoying problem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;He forgets what weight he lifted last time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;He doesn't want a complicated fitness app with endless menus and forms. During a workout, he just wants to quickly write something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bench 60kg 8 reps 3 sets, incline db 22 x 10 x 3, squat 80 5x5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;So I built &lt;strong&gt;Gym Log Buddy&lt;/strong&gt; around the way he already takes notes.&lt;/p&gt;

&lt;p&gt;Instead of forcing him to structure his workout, the app lets him write naturally. A local &lt;strong&gt;Gemma 3&lt;/strong&gt; model running through &lt;strong&gt;Ollama&lt;/strong&gt; converts the messy note into structured workout data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exercise&lt;/li&gt;
&lt;li&gt;Weight&lt;/li&gt;
&lt;li&gt;Reps&lt;/li&gt;
&lt;li&gt;Sets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before anything is saved, the extracted data is shown in a review table so my friend can verify and correct it.&lt;/p&gt;

&lt;p&gt;The confirmed workout is then stored locally in SQLite.&lt;/p&gt;

&lt;p&gt;On the next session, Gym Log Buddy can show what he did previously and suggest a target for his next workout.&lt;/p&gt;
&lt;h3&gt;
  
  
  AI where it helps. Deterministic code where it doesn't.
&lt;/h3&gt;

&lt;p&gt;I deliberately didn't use AI for everything.&lt;/p&gt;

&lt;p&gt;Gemma 3 handles the part that requires language understanding: turning messy human text into structured data.&lt;/p&gt;

&lt;p&gt;The progressive-overload calculation is plain Python:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the previous workout reached &lt;strong&gt;10+ reps&lt;/strong&gt;, increase the weight by &lt;strong&gt;2.5 kg&lt;/strong&gt; and target 8 reps.&lt;/li&gt;
&lt;li&gt;Otherwise, keep the weight and target one additional rep.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps the predictable part of the application deterministic, testable, and easy to understand.&lt;/p&gt;

&lt;p&gt;And the most important feedback?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Bahut accha hai, keep it up."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My friend said it was very good and encouraged me to keep going.&lt;/p&gt;

&lt;p&gt;That's the user requirement that mattered most.&lt;/p&gt;


&lt;h1&gt;
  
  
  Demo
&lt;/h1&gt;

&lt;p&gt;Gym Log Buddy is intentionally a &lt;strong&gt;local application&lt;/strong&gt;, not a hosted AI service.&lt;/p&gt;

&lt;p&gt;It runs on the laptop with Ollama and Gemma 3 installed.&lt;/p&gt;
&lt;h3&gt;
  
  
  🎥 Video Demo
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/R-zZfQxnwLw" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The demo shows the local Streamlit application processing workout notes and turning them into structured workout data.&lt;/p&gt;


&lt;h1&gt;
  
  
  Code
&lt;/h1&gt;

&lt;p&gt;The complete project is open source on GitHub:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Shubham-cyber-prog" rel="noopener noreferrer"&gt;
        Shubham-cyber-prog
      &lt;/a&gt; / &lt;a href="https://github.com/Shubham-cyber-prog/Gym-Log-Buddy" rel="noopener noreferrer"&gt;
        Gym-Log-Buddy
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Local-first gym log: Gemma 3 (via Ollama) turns messy workout notes into structured data.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Gym Log Buddy&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Gym Log Buddy is a local-first workout tracking application that extracts structured exercises, weights, reps, and sets from natural language workout notes
It is built for a gym buddy who wants quick, friction-free workout logging without manual forms, accounts, or subscriptions
It runs entirely on your local machine using an open-source language model (Gemma 3 via Ollama) for text extraction, deterministic Python rules for progressive overload recommendations, and SQLite for storage.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Plain English input: Type workout notes naturally (e.g. "bench 60kg 8 reps 3 sets, incline db 22 x 10 x 3, squat 80 5x5").&lt;/li&gt;
&lt;li&gt;Local open-source model: Uses Gemma 3 via Ollama. No cloud APIs, no API keys, and no paid services.&lt;/li&gt;
&lt;li&gt;Deterministic progressive overload
&lt;ul&gt;
&lt;li&gt;If last reps &amp;gt;= 10: suggest +2.5 kg and 8 reps&lt;/li&gt;
&lt;li&gt;Otherwise: suggest same weight and +1 rep&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dual interfaces
&lt;ul&gt;
&lt;li&gt;CLI (cli.py): log, last, suggest, history commands.&lt;/li&gt;
&lt;li&gt;Streamlit UI (app.py)…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Shubham-cyber-prog/Gym-Log-Buddy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gemma 3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQLite&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Streamlit&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Requests&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model name is kept as a single configuration constant, making it straightforward to experiment with other local models.&lt;/p&gt;




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

&lt;p&gt;The architecture is intentionally simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Messy workout note
        ↓
   Gemma 3 / Ollama
        ↓
 Structured JSON
        ↓
 Validation &amp;amp; safeguards
        ↓
 Review / confirmation
        ↓
      SQLite
        ↓
 Workout history
        ↓
 Progressive overload target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The entire AI inference pipeline runs locally.&lt;/p&gt;

&lt;p&gt;No workout note needs to be sent to a cloud AI provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Gemma 3?
&lt;/h2&gt;

&lt;p&gt;The core problem isn't mathematical.&lt;/p&gt;

&lt;p&gt;It's language understanding.&lt;/p&gt;

&lt;p&gt;A person can write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bench 60 8x3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;did bench today, 60kg, 8 reps x 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bench 60kg 8 reps 3 sets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A useful workout logger needs to understand that these are describing the same kind of information.&lt;/p&gt;

&lt;p&gt;Gemma 3 provides the natural-language understanding needed to turn those messy inputs into a structured representation.&lt;/p&gt;

&lt;p&gt;Python then takes over for everything deterministic.&lt;/p&gt;




&lt;h2&gt;
  
  
  I Tested the Real Model — Including Its Failures
&lt;/h2&gt;

&lt;p&gt;One of the most important parts of this project was not hiding model failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure #1 — 60 Became 27.2 kg
&lt;/h3&gt;

&lt;p&gt;Input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bench 60 8x3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gemma initially interpreted &lt;code&gt;60&lt;/code&gt; as pounds and converted it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"exercise"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bench Press"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"weight_kg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;27.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dangerous part was that the output looked completely valid.&lt;/p&gt;

&lt;p&gt;There was no exception.&lt;/p&gt;

&lt;p&gt;No malformed JSON.&lt;/p&gt;

&lt;p&gt;Just the wrong workout.&lt;/p&gt;

&lt;p&gt;I fixed this by making kilograms the explicit default and allowing conversion only when the input explicitly contains &lt;code&gt;lb&lt;/code&gt;, &lt;code&gt;lbs&lt;/code&gt;, or &lt;code&gt;pounds&lt;/code&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Failure #2 — The Model Invented an Exercise
&lt;/h3&gt;

&lt;p&gt;Input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;did legs today, felt good
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model invented a Squat with null values.&lt;/p&gt;

&lt;p&gt;The input contained no exercise.&lt;/p&gt;

&lt;p&gt;I added a prompt rule requiring an empty exercise list for non-workout commentary, along with a programmatic validation rule that removes records where weight, reps, and sets are all null.&lt;/p&gt;




&lt;h3&gt;
  
  
  Failure #3 — My Schema Couldn't Represent &lt;code&gt;8,8,6&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bb row 70 8,8,6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model repeatedly interpreted this incorrectly because my schema only supports one &lt;code&gt;reps&lt;/code&gt; value per exercise.&lt;/p&gt;

&lt;p&gt;The actual workout has different repetitions across sets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;8 reps
8 reps
6 reps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of manipulating the benchmark to make the result look better, I kept the failure and documented it as a schema limitation.&lt;/p&gt;

&lt;p&gt;This also reinforced why the application has an explicit confirmation step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI can suggest. The user confirms.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Then I Found Benchmark Leakage
&lt;/h2&gt;

&lt;p&gt;At one point, the benchmark reached:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;18/18 — 100%&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That looked great.&lt;/p&gt;

&lt;p&gt;It was also invalid.&lt;/p&gt;

&lt;p&gt;I had accidentally included exact test inputs as few-shot examples in the prompt.&lt;/p&gt;

&lt;p&gt;After removing those examples, I discovered a second leakage issue: parts of the same test inputs were still present in the prompt's rules section.&lt;/p&gt;

&lt;p&gt;I removed those as well and added an automated test that checks for test-input leakage.&lt;/p&gt;

&lt;p&gt;The final evaluation was split honestly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Held-out inputs:&lt;/strong&gt; 15/18 = &lt;strong&gt;83.3%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Original inputs:&lt;/strong&gt; 18/18, but not counted as evidence because the prompt had been developed around them&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;36 total live model inferences&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am deliberately &lt;strong&gt;not presenting 91.7% as a general AI accuracy number&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The benchmark is small and project-specific.&lt;/p&gt;

&lt;p&gt;The important result for me was that the evaluation became cleaner and more trustworthy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing Beyond the Model
&lt;/h2&gt;

&lt;p&gt;I also discovered a bug that the original test suite completely missed.&lt;/p&gt;

&lt;p&gt;The parser and database tests were passing, but the Streamlit application could crash on a fresh database with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NameError: name 'selected_chart_ex' is not defined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The problem was that my original tests never actually executed the Streamlit application.&lt;/p&gt;

&lt;p&gt;So I added Streamlit's &lt;code&gt;AppTest&lt;/code&gt; framework and created tests for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Empty database rendering&lt;/li&gt;
&lt;li&gt;Workout history rendering&lt;/li&gt;
&lt;li&gt;Chart rendering&lt;/li&gt;
&lt;li&gt;Exercise-name normalization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project now has &lt;strong&gt;20 automated pytest tests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The parser tests use a mocked model, while the actual Gemma 3 evaluation lives separately in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tests/live_check.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This distinction matters because mocked tests verify application behavior, while live tests verify the behavior of the actual local model.&lt;/p&gt;




&lt;h2&gt;
  
  
  Running Gemma 3 Without a Dedicated GPU
&lt;/h2&gt;

&lt;p&gt;I ran the project on a laptop with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intel Iris Xe integrated graphics&lt;/li&gt;
&lt;li&gt;16 GB RAM&lt;/li&gt;
&lt;li&gt;Windows 11&lt;/li&gt;
&lt;li&gt;No dedicated GPU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The final live evaluation averaged approximately:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;17.9 seconds&lt;/strong&gt; for first-run inference.&lt;/p&gt;

&lt;p&gt;Repeated runs averaged around:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9.5 seconds&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I didn't perform controlled hardware benchmarking, so these should be considered practical observations rather than formal performance claims.&lt;/p&gt;

&lt;p&gt;It's perfectly acceptable for logging a workout after training.&lt;/p&gt;

&lt;p&gt;It would not be ideal for real-time interaction between sets.&lt;/p&gt;

&lt;p&gt;And that's an important trade-off to acknowledge.&lt;/p&gt;




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

&lt;p&gt;For this project, open innovation wasn't just about using an open model because it was interesting.&lt;/p&gt;

&lt;p&gt;It changed what I could build.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔒 Privacy
&lt;/h2&gt;

&lt;p&gt;Workout history is personal data.&lt;/p&gt;

&lt;p&gt;With local inference, the workout notes stay on the user's machine instead of being sent to a third-party AI API.&lt;/p&gt;

&lt;p&gt;There is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No cloud AI endpoint&lt;/li&gt;
&lt;li&gt;No API key&lt;/li&gt;
&lt;li&gt;No per-request AI cost&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Offline Capability
&lt;/h2&gt;

&lt;p&gt;Once Gemma 3 is downloaded, the core parsing workflow can run without an internet connection.&lt;/p&gt;

&lt;p&gt;That's particularly useful for gyms where mobile connectivity can be unreliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  💰 Zero Ongoing AI Cost
&lt;/h2&gt;

&lt;p&gt;A hosted AI API would introduce usage costs and external dependencies.&lt;/p&gt;

&lt;p&gt;Running Gemma 3 locally means the model can be used without paying for every workout entry.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Model Freedom
&lt;/h2&gt;

&lt;p&gt;The application isn't locked to one proprietary AI provider.&lt;/p&gt;

&lt;p&gt;The model is configurable, so I can experiment with different open models as they improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Inspectability
&lt;/h2&gt;

&lt;p&gt;Because the inference pipeline runs locally, I can inspect the prompt, model output, validation logic, and evaluation process myself.&lt;/p&gt;

&lt;p&gt;I can test failures instead of simply trusting an API response.&lt;/p&gt;

&lt;h3&gt;
  
  
  The honest trade-off
&lt;/h3&gt;

&lt;p&gt;A larger hosted model would probably be faster and more accurate.&lt;/p&gt;

&lt;p&gt;Gemma 3 running locally on my hardware isn't.&lt;/p&gt;

&lt;p&gt;I chose:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy + offline capability + zero per-request cost&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;over:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maximum speed + maximum model accuracy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The confirmation workflow is how I make that trade-off practical.&lt;/p&gt;




&lt;h1&gt;
  
  
  One Important Privacy Caveat
&lt;/h1&gt;

&lt;p&gt;I also discovered something important while writing the project documentation.&lt;/p&gt;

&lt;p&gt;My project directory is currently inside OneDrive.&lt;/p&gt;

&lt;p&gt;That means the SQLite database can potentially be synchronized by OneDrive.&lt;/p&gt;

&lt;p&gt;So "local AI" does not automatically mean "private forever."&lt;/p&gt;

&lt;p&gt;For the database to remain truly local, the project/database should be stored outside cloud-synchronized folders.&lt;/p&gt;

&lt;p&gt;I documented this limitation rather than hiding it.&lt;/p&gt;




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

&lt;p&gt;I built Gym Log Buddy using &lt;strong&gt;Google Antigravity&lt;/strong&gt; as the coding agent.&lt;/p&gt;

&lt;p&gt;The agent helped with implementation and refactoring, while I reviewed the generated code, ran the tests, evaluated the real model, and investigated failures.&lt;/p&gt;

&lt;p&gt;A second AI assistant was also used as a reviewer.&lt;/p&gt;

&lt;p&gt;That review process helped uncover two particularly important issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Benchmark contamination / prompt leakage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Streamlit &lt;code&gt;NameError&lt;/code&gt; that the original tests couldn't detect&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal wasn't to blindly accept generated code.&lt;/p&gt;

&lt;p&gt;It was to use the agent to accelerate development while still treating testing, evaluation, and review as engineering responsibilities.&lt;/p&gt;




&lt;h1&gt;
  
  
  Prize Categories
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🏆 Best Use of Gemma
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Gemma 3&lt;/strong&gt; is the core AI component of Gym Log Buddy.&lt;/p&gt;

&lt;p&gt;It runs locally through Ollama and converts unstructured workout notes into structured workout data.&lt;/p&gt;

&lt;p&gt;The project demonstrates a practical use of an open-weight model where local inference provides meaningful benefits in &lt;strong&gt;privacy, offline capability, cost, and model flexibility&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Gym Log Buddy started with a very small problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My friend keeps forgetting his gym weights.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It ended up becoming an experiment in local AI, evaluation, prompt leakage, schema design, testing, privacy, and honest benchmarking.&lt;/p&gt;

&lt;p&gt;I didn't build a huge fitness platform.&lt;/p&gt;

&lt;p&gt;I built a small tool for one real person.&lt;/p&gt;

&lt;p&gt;And that's exactly what this challenge was about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build for a friend. Build something useful. Then test whether it actually works.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading, and happy Hacktoberfest! 🚀&lt;/p&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%2Fo4gd5zwcyw13h5771zcs.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%2Fo4gd5zwcyw13h5771zcs.png" alt=" " width="800" height="402"&gt;&lt;/a&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>"Innovating Tomorrow: How Our Hackathon Project is Powering a Smarter Future"</title>
      <dc:creator>Shubham Nayak</dc:creator>
      <pubDate>Sun, 20 Jul 2025 13:36:15 +0000</pubDate>
      <link>https://dev.to/shubham_nayak_/innovating-tomorrow-how-our-hackathon-project-is-powering-a-smarter-future-4bel</link>
      <guid>https://dev.to/shubham_nayak_/innovating-tomorrow-how-our-hackathon-project-is-powering-a-smarter-future-4bel</guid>
      <description>&lt;p&gt;🧠&lt;strong&gt;Our Project&lt;/strong&gt;: Silent SOS – A Gesture/Voice-Based Emergency Alert System&lt;br&gt;
At the heart of every hackathon lies a purpose—to innovate, solve real problems, and build something impactful in record time. For our team, that purpose took the form of Silent SOS, a safety-focused web application that uses gesture and voice triggers to silently raise emergency alerts.&lt;/p&gt;

&lt;p&gt;With growing concerns about personal safety and harassment, especially in public or isolated spaces, we wanted to create a discreet and fast emergency alert system—without needing to unlock a phone or type anything.&lt;/p&gt;

&lt;p&gt;🔧** Tech Stack + Bolt Integration**&lt;br&gt;
We built our project using:&lt;/p&gt;

&lt;p&gt;Frontend: HTML, CSS, JavaScript (Vanilla)&lt;/p&gt;

&lt;p&gt;Backend: Node.js + Express&lt;/p&gt;

&lt;p&gt;Database: MongoDB&lt;/p&gt;

&lt;p&gt;Realtime Alert System: Bolt API for sending instant alerts (notifications, webhooks, and integrations)&lt;/p&gt;

&lt;p&gt;Bolt made a huge difference by allowing us to send fast, reliable emergency alerts, integrating seamlessly with our backend using webhooks and trigger-based flows.&lt;/p&gt;

&lt;p&gt;⚙️ &lt;strong&gt;How SilentSOS Works&lt;/strong&gt;&lt;br&gt;
Voice or Gesture Recognition: Detects predefined gestures or trigger words like “Help!” using Web Speech API and Hand Detection Models.&lt;/p&gt;

&lt;p&gt;Silent Alert: Sends data to our backend with location &amp;amp; timestamp.&lt;/p&gt;

&lt;p&gt;Bolt Trigger: Instantly pushes alert via SMS/Discord/Webhook to saved contacts using Bolt.&lt;/p&gt;

&lt;p&gt;Live Dashboard: Admin panel to view active alerts and track responses.&lt;/p&gt;

&lt;p&gt;💡&lt;strong&gt;Challenges We Faced&lt;/strong&gt;&lt;br&gt;
Gesture Accuracy: Calibrating for different lighting and hand sizes.&lt;/p&gt;

&lt;p&gt;Silent Triggers: Ensuring no UI popups so the alert remains hidden.&lt;/p&gt;

&lt;p&gt;Bolt Webhook Timing: Syncing real-time data with the alert system.&lt;/p&gt;

&lt;p&gt;Breakthrough moment: When Bolt successfully triggered a live SMS and webhook alert with just a gesture in under 3 seconds.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;Favorite Bolt Features&lt;/strong&gt;&lt;br&gt;
🔔 Real-time Webhook Triggers – Lightning-fast and developer-friendly&lt;/p&gt;

&lt;p&gt;🧩 Easy to integrate – No lengthy setup, minimal code required&lt;/p&gt;

&lt;p&gt;📡 Reliable delivery – Worked every time under load&lt;/p&gt;

&lt;p&gt;👥 &lt;strong&gt;Team Members&lt;/strong&gt;&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/shubham_nayak_"&gt;@shubham_nayak_&lt;/a&gt;  (Me – Frontend &amp;amp; Integration)&lt;/p&gt;

&lt;p&gt;Submission posted by &lt;a class="mentioned-user" href="https://dev.to/shubham_nayak_"&gt;@shubham_nayak_&lt;/a&gt;  on behalf of the team.&lt;/p&gt;

&lt;p&gt;🎯 *&lt;em&gt;What We Learned *&lt;/em&gt;&lt;br&gt;
How to balance UX with urgency in safety apps&lt;/p&gt;

&lt;p&gt;Integrating Bolt APIs for real-time use cases&lt;/p&gt;

&lt;p&gt;Working collaboratively under pressure and making quick architectural decisions&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2F7qrwf1fdmblkdli54v32.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.amazonaws.com%2Fuploads%2Farticles%2F7qrwf1fdmblkdli54v32.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💬 &lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
Participating in this hackathon was more than just coding—it was about building with purpose. Bolt’s simplicity and power enabled us to create something potentially life-saving. We're excited to continue improving SilentSOS, adding more AI capabilities and mobile support.&lt;/p&gt;

&lt;p&gt;Let’s continue building for impact, with speed and safety.&lt;/p&gt;

&lt;h1&gt;
  
  
  Hackathon #BoltHackathon #DevChallenge #SilentSOS #WebDev #AI #EmergencyTech
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>wlhchallenge</category>
      <category>bolt</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
