<?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: Abhishek gupta</title>
    <description>The latest articles on DEV Community by Abhishek gupta (@abhishek_gupta_982095928c).</description>
    <link>https://dev.to/abhishek_gupta_982095928c</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%2F4161888%2F5e31f0df-58ee-4a5a-9eb2-46268bc74d57.png</url>
      <title>DEV Community: Abhishek gupta</title>
      <link>https://dev.to/abhishek_gupta_982095928c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abhishek_gupta_982095928c"/>
    <language>en</language>
    <item>
      <title>Sloth Fridge: A Local Vision Model That Plans Dinner From One Photo</title>
      <dc:creator>Abhishek gupta</dc:creator>
      <pubDate>Tue, 20 Oct 2026 06:59:51 +0000</pubDate>
      <link>https://dev.to/abhishek_gupta_982095928c/sloth-fridge-a-local-vision-model-that-plans-dinner-from-one-photo-2pm9</link>
      <guid>https://dev.to/abhishek_gupta_982095928c/sloth-fridge-a-local-vision-model-that-plans-dinner-from-one-photo-2pm9</guid>
      <description>&lt;p&gt;&lt;em&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;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Sloth Fridge&lt;/strong&gt; turns one photo of your fridge into a grocery list and a dinner plan, so you never have to stand there with the door open again.&lt;/p&gt;

&lt;p&gt;You take a photo. It lists what's inside, asks you to fix anything it got wrong, then suggests what to buy and what to cook, including one "sloth pick": the laziest meal you can make right now.&lt;/p&gt;

&lt;p&gt;I built it for hostel life. It knows my kitchen is a kettle and an induction plate, that I'm vegetarian, and that I have a budget. [Replace this with your own real moment, for example: "Last week I stood at the mess fridge at 11 pm for five minutes and still didn't know what to cook."]&lt;/p&gt;

&lt;p&gt;Everything runs on my laptop. No cloud, no API bill, no photos leaving my machine.&lt;/p&gt;

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

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

&lt;p&gt;In the video: [one line on what it shows, for example "a real photo of my hostel fridge goes in, I fix one wrong item in the table, and the grocery list and sloth pick come out. Everything runs offline on my laptop."]&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&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/b25246-star" rel="noopener noreferrer"&gt;
        b25246-star
      &lt;/a&gt; / &lt;a href="https://github.com/b25246-star/Sloth-fridge" rel="noopener noreferrer"&gt;
        Sloth-fridge
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;🦥 Sloth Fridge&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Take one photo of your fridge. Get back what you have, what to buy, and what to cook, without standing there with the door open.&lt;/p&gt;
&lt;p&gt;Everything runs &lt;strong&gt;locally&lt;/strong&gt; on open models through &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;. No cloud, no API bills, and your fridge photos never leave your laptop. Built for the DEV Hacktoberfest "Slow and Steady" challenge.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why open models&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Private:&lt;/strong&gt; photos of your room and food stay on your machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free to run:&lt;/strong&gt; set it up once, never pay per scan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works offline:&lt;/strong&gt; no internet needed after the models are downloaded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable:&lt;/strong&gt; change the vision or text model with one environment variable and benchmark them against each other.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;photo ─► [Pass 1: vision model]  lists distinct items + freshness guess
      ─► [Pass 2: vision model]  one focused "how many X?" question per item
      ─► [You]                   fix anything wrong in an editable table
      ─► [Text&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/b25246-star/Sloth-fridge" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Ollama running &lt;code&gt;qwen2.5vl:3b&lt;/code&gt; (vision) and &lt;code&gt;llama3.2:3b&lt;/code&gt; (text), Streamlit for the UI, SQLite for memory, Pydantic for strict JSON output. All of it runs on an RTX 4050 laptop GPU with 6 GB of VRAM.&lt;/p&gt;

&lt;p&gt;The pipeline has four steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pass 1, describe.&lt;/strong&gt; The vision model lists the distinct items it can see, as schema-constrained JSON.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pass 2, count.&lt;/strong&gt; For each item, the vision model gets one focused question: "How many separate tomatoes are visible?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You correct.&lt;/strong&gt; An editable table lets you delete wrong items, add missed ones, or fix counts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan.&lt;/strong&gt; A separate text model takes the corrected list, your usual items, and your constraints, and returns a grocery list, a few meals, and the sloth pick.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Small models are decent at spotting things and weak at reasoning, so the vision model only describes and a second model plans.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What broke, and what I did about it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Empty answers.&lt;/strong&gt; My first vision model returned nothing at all. It looked like a "thinking" variant that spent its whole budget reasoning. I switched to a non-thinking model and added a clear error message for empty responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runaway loops.&lt;/strong&gt; The next model got stuck repeating items until it produced a 1,300-line JSON that was cut off mid-item. Fixes: a hard cap on output tokens, a small repeat penalty (pure greedy decoding made loops more likely), a prompt that says "mention each item once", and a salvage parser that recovers every complete item from broken output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bad counts.&lt;/strong&gt; Asking one model to list and count everything in a single JSON answer gave confident wrong numbers. Switching to coarse levels (one / few / many) was honest but too vague, so I added the second pass with one counting question per item. It's slower, but numbers are only filled in when the model gives a sensible answer. Otherwise the field stays blank rather than wrong.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It learns from corrections.&lt;/strong&gt; Every item you delete or add is logged in SQLite. Delete the same false item twice and it's filtered from future scans.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Four things mattered for this project, and a hosted API would have changed each of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy.&lt;/strong&gt; A photo of your fridge is a photo of your room and your life. Here it never leaves the laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost.&lt;/strong&gt; Set it up once and scanning is free forever. For something I'd use daily, per-scan pricing would defeat the point of being lazy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline.&lt;/strong&gt; After the models are downloaded, it needs no internet, which matters on patchy hostel Wi-Fi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control.&lt;/strong&gt; When models misbehaved, I could change the things that fixed them: swap models with one environment variable, constrain the output with a JSON schema, cap tokens, and tune sampling. Several of my fixes above came from that control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where closed models still win:&lt;/strong&gt; [Fill in after your benchmark. For example, whether a closed model counted or recognized items better, and by how much.] For this project, the trade was still worth it, because [your honest reason].&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;Item recall&lt;/th&gt;
&lt;th&gt;Precision&lt;/th&gt;
&lt;th&gt;Avg seconds / photo&lt;/th&gt;
&lt;th&gt;Offline&lt;/th&gt;
&lt;th&gt;Cost per scan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;qwen2.5vl:3b&lt;/td&gt;
&lt;td&gt;[ ]&lt;/td&gt;
&lt;td&gt;[ ]&lt;/td&gt;
&lt;td&gt;[ ]&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[second open model]&lt;/td&gt;
&lt;td&gt;[ ]&lt;/td&gt;
&lt;td&gt;[ ]&lt;/td&gt;
&lt;td&gt;[ ]&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[closed model]&lt;/td&gt;
&lt;td&gt;[ ]&lt;/td&gt;
&lt;td&gt;[ ]&lt;/td&gt;
&lt;td&gt;[ ]&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;[ ]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Measured on [N] real fridge photos on an RTX 4050 laptop GPU (6 GB).&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;[Optional: embed or link your DevRelay session here. If you didn't record one, delete this section.]&lt;/p&gt;

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

&lt;p&gt;[Only keep this if it's true. For example: "I used it on my hostel fridge for [N] days. Deciding what to cook went from about [X] minutes to about [Y]." If you haven't used it yet, delete this section.]&lt;/p&gt;

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

&lt;p&gt;[Only list a category if you actually used that partner's technology. If not, delete this section.]&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>I Built a Trek Planner That Works Where Your Phone Doesn't</title>
      <dc:creator>Abhishek gupta</dc:creator>
      <pubDate>Wed, 07 Oct 2026 06:02:38 +0000</pubDate>
      <link>https://dev.to/abhishek_gupta_982095928c/i-built-a-trek-planner-that-works-where-your-phone-doesnt-341h</link>
      <guid>https://dev.to/abhishek_gupta_982095928c/i-built-a-trek-planner-that-works-where-your-phone-doesnt-341h</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;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Trail Buddy&lt;/strong&gt; is a trekking companion for the hills around Mandi, Himachal Pradesh. You tell it where you're starting and where you want to go, and it gives you a stage-by-stage roadmap with distance, climb, elevation profile and realistic timings. A local AI model then adds short, practical tips for the trek.&lt;/p&gt;

&lt;p&gt;The problem is simple. The best trails here are exactly where mobile signal disappears. Most "smart" trip planners need a connection at the one moment you're standing at a fork with no bars. Trail Buddy does the cloud-dependent part once, at home or at the bus stand, and saves the route as a plain GPX file. After that, the roadmap, the notes and the AI chat all work with no internet.&lt;/p&gt;

&lt;p&gt;It's built for beginners and families doing day treks like Prashar Lake, and for anyone who'd rather look at the hills than at a phone.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  Code
&lt;/h2&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/b25246-star" rel="noopener noreferrer"&gt;
        b25246-star
      &lt;/a&gt; / &lt;a href="https://github.com/b25246-star/trail-buddy" rel="noopener noreferrer"&gt;
        trail-buddy
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;Trail Buddy 🥾&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;An offline-first trekking companion for the hills around Mandi, Himachal Pradesh, powered by a local open-weight LLM.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Plan a route between any two places while you have internet, save it, and reuse it later with no signal. The chat assistant runs entirely on your own machine through &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;, so nothing about your trip is sent to a cloud AI.&lt;/p&gt;
&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05" rel="nofollow"&gt;Hacktoberfest Open-Source AI Challenge, Week 1: Touch Grass&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why this exists&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The best trails are exactly where mobile signal disappears. Most trip planners need a connection at the moment you are standing at a fork with no bars. Trail Buddy does the internet-dependent part once, at home or at the bus stand, saves the route as a plain GPX file, and everything else (roadmap, notes, AI chat) keeps working offline.&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;
&lt;strong&gt;Stage-by-stage roadmap&lt;/strong&gt; with distance, climb, high point and estimated up/down times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan&lt;/strong&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/b25246-star/trail-buddy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The project is small on purpose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;trail_buddy.py&lt;/code&gt;: the command-line chat and planner&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rag.py&lt;/code&gt;: a tiny local retrieval system over my trail notes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;route.py&lt;/code&gt;: the route engine (GPX to roadmap, SVG map, HTML export)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;online.py&lt;/code&gt;: one-time online planning for any start and destination&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;webapp.py&lt;/code&gt; and &lt;code&gt;web/planner.html&lt;/code&gt;: the interactive map planner with live GPS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;data/trails/&lt;/code&gt;: plain Markdown notes and GPX files&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;The open pieces&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; runs everything locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;qwen2.5:3b&lt;/strong&gt; is the open-weight chat model. It's small enough for an ordinary laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nomic-embed-text&lt;/strong&gt; is the open embedding model for search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenStreetMap&lt;/strong&gt; supplies the walking, bike and road routing and the map tiles, and &lt;strong&gt;Open-Meteo&lt;/strong&gt; supplies elevation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leaflet&lt;/strong&gt; draws the live map, and the rest is the Python standard library.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Grounded answers instead of confident guesses.&lt;/strong&gt; A 3B model will happily invent a tea stall that doesn't exist, which is dangerous on a mountain. So the chat uses a tiny retrieval pipeline. Each trail's Markdown notes are split into sections, embedded, and searched by cosine similarity. The top three chunks go to the model with a strict system prompt: answer only from the notes, and otherwise say "I don't have that in my notes" and suggest asking a local guide. The index is cached in a JSON file and rebuilt only when the notes change, using a SHA-256 fingerprint of the notes and the embedding model name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A route engine with no dependencies.&lt;/strong&gt; &lt;code&gt;route.py&lt;/code&gt; parses GPX, smooths the elevation, snaps waypoints to the track with haversine distance, and splits the route into stages. Time estimates use a simple rule of thumb: 4 km/h on the flat, plus an extra hour for every 500 m climbed. The same data feeds an elevation profile and an inline SVG map. That map works with no internet at all, and upgrades itself to a live Leaflet map with a topographic layer when tiles can load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan once, reuse offline.&lt;/strong&gt; For a new trek, &lt;code&gt;online.py&lt;/code&gt; geocodes both places, asks the OSM foot router for a path, samples elevation along it, auto-generates checkpoints, and saves the result as a GPX file. Next time, even with no signal, &lt;code&gt;/roadmap prashar lake&lt;/code&gt; opens it straight from disk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An interactive planner.&lt;/strong&gt; Typing &lt;code&gt;/web&lt;/code&gt; serves a browser planner from localhost, which browsers treat as a secure origin, so live GPS works. You can choose walk, bike or cab, compare alternative routes, and scrub along the elevation profile to see each point light up on the map. Tracking shows distance left and warns you when you drift off the route. The "tips" button talks directly to the Ollama instance on your machine, so no data leaves your computer for the AI part.&lt;/p&gt;

&lt;p&gt;I also made the AI's job deliberately narrow. It never invents the route. Distances, climbs and times are calculated by code, and the model only turns those facts and my notes into tips.&lt;/p&gt;

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

&lt;p&gt;Because of the trail itself. A closed API needs a connection, and the whole point of this project is the place where there isn't one. With an open-weight model on my own laptop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It works where the signal doesn't.&lt;/strong&gt; The chat, retrieval and saved roadmaps all run with no internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local knowledge stays local.&lt;/strong&gt; The "knowledge base" is a folder of Markdown files that a villager or guide can read, correct and extend. I'm not sending their knowledge to someone else's server to be retrained on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I can swap the model freely.&lt;/strong&gt; One environment variable (&lt;code&gt;TB_CHAT_MODEL&lt;/code&gt;) changes the model. When a better small model appears, Trail Buddy gets better without a rewrite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing per question.&lt;/strong&gt; A family asking twenty questions on a hike shouldn't be metered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An honest limit: the AI is small, so it's only as good as the notes behind it. That is also why I think the open approach fits. When the model says "I don't have that," the fix is to add a line to a text file, not to wait for a vendor.&lt;/p&gt;

&lt;p&gt;[Add your real field-test story here: where you took it, what worked, what the model got wrong, and what you changed. This is the "touch grass" part, and judges will want it.]&lt;/p&gt;

&lt;p&gt;Thanks for reading, and go outside. 🥾&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>My friend asked for interview practice, so I built an AI interviewer that runs locally</title>
      <dc:creator>Abhishek gupta</dc:creator>
      <pubDate>Sun, 04 Oct 2026 18:07:57 +0000</pubDate>
      <link>https://dev.to/abhishek_gupta_982095928c/my-friend-asked-for-interview-practice-so-i-built-an-ai-interviewer-that-runs-locally-2obb</link>
      <guid>https://dev.to/abhishek_gupta_982095928c/my-friend-asked-for-interview-practice-so-i-built-an-ai-interviewer-that-runs-locally-2obb</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;FRIEND is in placement season and told me one thing scares them most: SPECIFIC FEAR, e.g. "I freeze when they ask about my own project." Paid mock interview tools cost money and want a full resume uploaded to someone else's server.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Mock Interview Partner&lt;/strong&gt;: upload a resume, pick a role, and it interviews you. It asks questions about your actual projects, pushes back on vague answers with follow-ups, scores each answer strictly from 1 to 5, and writes a report with weaknesses and a practice plan. It runs completely on a laptop.&lt;/p&gt;

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

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

&lt;p&gt;(Optional: a 30 to 60 second screen recording.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&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/b25246-star" rel="noopener noreferrer"&gt;
        b25246-star
      &lt;/a&gt; / &lt;a href="https://github.com/b25246-star/mock-interview-partner" rel="noopener noreferrer"&gt;
        mock-interview-partner
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
         Free, private mock interview partner for placement season. Runs fully offline on a local open-source model (Ollama).
    &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;🎤 Mock Interview Partner&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A free, private mock interviewer for placement season. Upload a resume, choose a target role, and get tailored questions, follow-ups, strict per-answer feedback and a final report. It runs entirely on your own laptop with an open-weight model, so nothing is sent to a server.&lt;/p&gt;
&lt;p&gt;Built for the Hacktoberfest Weekend Challenge: &lt;strong&gt;Build for a Friend&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/b25246-star/mock-interview-partner/docs/interface.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fb25246-star%2Fmock-interview-partner%2FHEAD%2Fdocs%2Finterface.png" alt="Interface"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why local and open-source&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;A resume contains a phone number, address, grades and email, and a mock interview records someone's honest mistakes. Neither belongs on a server you don't control. Running a local open-weight model means nothing leaves the laptop, and no internet is needed once the model is downloaded.&lt;/p&gt;
&lt;p&gt;Open source also gives you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free practice:&lt;/strong&gt; no per-token cost, so a student can do 20 sessions without worrying about a bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable models:&lt;/strong&gt; pick any model you have pulled in Ollama from the sidebar dropdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editable behaviour:&lt;/strong&gt; the interviewer's…&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/b25246-star/mock-interview-partner" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; &lt;code&gt;llama3.2:3b&lt;/code&gt; through Ollama, fully on a 6 GB RTX 4050&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python, Pydantic for validating the model's JSON, SQLite for session history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI:&lt;/strong&gt; Streamlit with a sidebar for model, persona, focus and level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice (optional):&lt;/strong&gt; faster-whisper, with filler-word counts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The flow is: resume text → structured profile → question plan → answer → score and feedback → optional follow-up → final report.&lt;/p&gt;

&lt;p&gt;Everything behavioural lives in plain text: the prompts, three interviewer personas and a &lt;code&gt;rubric.yaml&lt;/code&gt; with score anchors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What went wrong:&lt;/strong&gt; WRITE ONE REAL FAILURE. Ideas: the model gave 4 or 5 out of 5 to weak answers until I added explicit score anchors and told it to grade like a strict interviewer. Or the 7B model split between GPU and CPU on 6 GB of VRAM and was painfully slow, so I moved to the 3B model (X seconds per answer instead of Y).&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; a resume holds contact details and grades, and a mock interview records someone's honest mistakes. With a local open-weight model, none of it leaves the laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; practice only works in volume. With no per-token cost, FRIEND can do as many sessions as they want.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable models:&lt;/strong&gt; I compared MODEL A and MODEL B. INCLUDE A REAL OBSERVATION, e.g. speed and feedback quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editable behaviour:&lt;/strong&gt; the interviewer's strictness, persona and rubric are text files. I changed FRIEND's interviewer from one persona to another in seconds without touching code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline:&lt;/strong&gt; it works in a hostel with bad Wi-Fi.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What my friend said
&lt;/h2&gt;

&lt;p&gt;I ran a mock interview with FRIEND_NAME, who is preparing for placements, and asked for honest feedback afterwards.&lt;/p&gt;

&lt;p&gt;Their first reaction was a simple &lt;strong&gt;"wow."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What they found most useful was the &lt;strong&gt;improved sample answers and the review&lt;/strong&gt; after each question. When I asked what the tool showed them that they hadn't noticed, they said: &lt;em&gt;"I missed too many things, and this app pointed them out. I improved my answer."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I also asked whether any scoring felt unfair, since a strict grader is only useful if it's fair. They said no, the feedback looked fair to them.&lt;/p&gt;

&lt;p&gt;Their verdict on using it again before placements: &lt;em&gt;"Yes, it will help me a lot."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That last answer is what I built it for: a free place to practise as many times as they need, without a resume or answers going to anyone else's server.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
