<?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: Krishna Bharadwaj</title>
    <description>The latest articles on DEV Community by Krishna Bharadwaj (@krishna_bharadwaj_bd2818d).</description>
    <link>https://dev.to/krishna_bharadwaj_bd2818d</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%2F4162754%2Fa4ba84e2-c02f-42cd-bcdf-2d52edfcebb8.jpg</url>
      <title>DEV Community: Krishna Bharadwaj</title>
      <link>https://dev.to/krishna_bharadwaj_bd2818d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/krishna_bharadwaj_bd2818d"/>
    <language>en</language>
    <item>
      <title>SlothChat</title>
      <dc:creator>Krishna Bharadwaj</dc:creator>
      <pubDate>Mon, 26 Oct 2026 05:14:50 +0000</pubDate>
      <link>https://dev.to/krishna_bharadwaj_bd2818d/slothchat-576j</link>
      <guid>https://dev.to/krishna_bharadwaj_bd2818d/slothchat-576j</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;ul&gt;
&lt;li&gt;
&lt;strong&gt;SlothChat Digest (&lt;code&gt;TL;DR My Friends&lt;/code&gt;)&lt;/strong&gt; is a &lt;strong&gt;100% local, privacy-first group chat summarizer&lt;/strong&gt; built for the &lt;em&gt;"Slow and Steady"&lt;/em&gt; theme that turns 400+ chaotic overnight Discord or WhatsApp messages into a lazy morning briefing in seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Who gets to be lazier:&lt;/strong&gt; Anyone who wakes up to hundreds of unread notifications from chaotic friend groups, gaming servers, or student club chats and refuses to spend 20 minutes scrolling through 3 AM memes just to see if they missed something important.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What effort it saves:&lt;/strong&gt; Instead of manually reading a wall of text, you drop in your chat log (or test with 3 built-in chaotic 3 AM presets) and let your local Sloth AI generate:

&lt;ul&gt;
&lt;li&gt;🦥 &lt;strong&gt;2-Line Sloth Summary:&lt;/strong&gt; The entire night's chaos condensed into two punchy sentences.&lt;/li&gt;
&lt;li&gt;🔔 &lt;strong&gt;Ping Radar:&lt;/strong&gt; Detects whether anyone actually called your name or needs a response from you (spoiler: probably not).&lt;/li&gt;
&lt;li&gt;🔥 &lt;strong&gt;Drama Thermometer:&lt;/strong&gt; Rates the chat's unhinged energy on a &lt;code&gt;0%&lt;/code&gt; to &lt;code&gt;100%&lt;/code&gt; scale.&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Lazy Reply Generator:&lt;/strong&gt; One-click copy-paste responses so you can fake active participation and go right back to sleep.&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Laziness ROI:&lt;/strong&gt; Gamified metrics tracking total messages skipped, reading time saved, calories conserved, and &lt;code&gt;$0.00&lt;/code&gt; cloud cost.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Live Walkthrough (&lt;code&gt;demo.gif&lt;/code&gt;):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzitsqgu78fj73alsgvdu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzitsqgu78fj73alsgvdu.gif" alt="SlothChat Digest Live Demo Walkthrough" width="799" height="446"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The "Sloth Morning Briefing" Dashboard:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhoy0raz2yrkyaoetk08o.jpg" 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%2Fhoy0raz2yrkyaoetk08o.jpg" alt="SlothChat Digest Dashboard" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Input Zone &amp;amp; Chaotic 3 AM Presets:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo51fkr0cxueowq8ol0ww.jpg" 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%2Fo51fkr0cxueowq8ol0ww.jpg" alt="SlothChat Digest Input Screen" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Try It Zero-Setup:&lt;/strong&gt; Clone the repo and open &lt;code&gt;index.html&lt;/code&gt; directly in any browser—thanks to the built-in &lt;strong&gt;Smart Fallback Engine&lt;/strong&gt;, you can test all 3 chaotic preset logs in instant offline demo mode even before spinning up Ollama!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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/KrishnaBharadwaj67" rel="noopener noreferrer"&gt;
        KrishnaBharadwaj67
      &lt;/a&gt; / &lt;a href="https://github.com/KrishnaBharadwaj67/Slothchat" rel="noopener noreferrer"&gt;
        Slothchat
      &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&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🦥 SlothChat Digest: TL;DR My Friends&lt;/h1&gt;
&lt;/div&gt;
  &lt;p&gt;&lt;em&gt;Stop reading 400 chaotic overnight messages. Let your local Sloth AI do it.&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;
    &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/de9b6e4df90936de4de68c9ec306dc5e1171211d9a7a10b2d020e7085a130fd1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41492d3130302532355f4c6f63616c2d3130623938313f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/de9b6e4df90936de4de68c9ec306dc5e1171211d9a7a10b2d020e7085a130fd1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41492d3130302532355f4c6f63616c2d3130623938313f7374796c653d666f722d7468652d6261646765" alt="AI: 100% Local"&gt;&lt;/a&gt;
    &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/6942da72fe91957d766dac858e6a7d3e48ad0fbbe60a25842b0fa2a8e218d0de/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436c6f75645f436f73742d24302e30302d6635396530623f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/6942da72fe91957d766dac858e6a7d3e48ad0fbbe60a25842b0fa2a8e218d0de/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436c6f75645f436f73742d24302e30302d6635396530623f7374796c653d666f722d7468652d6261646765" alt="Cloud Cost: $0.00"&gt;&lt;/a&gt;
    &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/381aeb226df69a6dbb18784b9233e7e336ad5de67f812ccfdb8d967de8dd43ef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507269766163792d4d6178696d756d2d3633363666313f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/381aeb226df69a6dbb18784b9233e7e336ad5de67f812ccfdb8d967de8dd43ef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507269766163792d4d6178696d756d2d3633363666313f7374796c653d666f722d7468652d6261646765" alt="Privacy: Maximum"&gt;&lt;/a&gt;
    &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/364a9243f07967262f99c33875d49adec48f3a92b8fa03534b3e40c75f8d0c25/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d323032362d6666366233353f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/364a9243f07967262f99c33875d49adec48f3a92b8fa03534b3e40c75f8d0c25/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d323032362d6666366233353f7374796c653d666f722d7468652d6261646765" alt="Hacktoberfest 2026"&gt;&lt;/a&gt;
  &lt;/p&gt;
  &lt;br&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/KrishnaBharadwaj67/Slothchat/assets/demo.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FKrishnaBharadwaj67%2FSlothchat%2FHEAD%2Fassets%2Fdemo.gif" alt="SlothChat Digest Live Demo Walkthrough" width="850"&gt;&lt;/a&gt;
  &lt;p&gt;&lt;em&gt;Watch the lazy morning briefing in action: load presets, simulate local AI, view drama radar, and copy replies in seconds.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🎯 What Is This?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;SlothChat Digest is a &lt;strong&gt;100% local, privacy-first group chat summarizer&lt;/strong&gt; powered by open-weight models via &lt;a href="https://ollama.ai" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;. Instead of reading 400 chaotic overnight messages from your Discord server or WhatsApp group, you drop the chat log and get a lazy morning briefing in seconds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Built for the Hacktoberfest Open-Source AI Challenge&lt;/strong&gt; — Theme: &lt;em&gt;"Slow and Steady"&lt;/em&gt; — rewarding laziness with local AI.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;✨ Key Features&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;🦥 &lt;strong&gt;2-Line Sloth Summary&lt;/strong&gt; — The entire night's chaos in two punchy sentences&lt;/li&gt;
&lt;li&gt;🔔 &lt;strong&gt;Ping Radar&lt;/strong&gt; — Know if anyone actually needs you (spoiler: probably not)&lt;/li&gt;
&lt;li&gt;🔥 &lt;strong&gt;Drama Thermometer&lt;/strong&gt; — 0% to 100% Unhinged scale&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Lazy Reply Generator&lt;/strong&gt; — One-click copy-paste…&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/KrishnaBharadwaj67/Slothchat" 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;Local Open-Weight AI Core:&lt;/strong&gt; Built around &lt;strong&gt;Ollama&lt;/strong&gt; (&lt;code&gt;POST http://localhost:11434/api/generate&lt;/code&gt;), powering inference locally with open-weight models including &lt;strong&gt;Gemma 2 (&lt;code&gt;gemma2:2b&lt;/code&gt;)&lt;/strong&gt;, &lt;strong&gt;Llama 3.2 (&lt;code&gt;llama3.2:latest&lt;/code&gt;)&lt;/strong&gt;, &lt;strong&gt;Qwen 2.5 (&lt;code&gt;qwen2.5:3b&lt;/code&gt;)&lt;/strong&gt;, &lt;strong&gt;Mistral&lt;/strong&gt;, and &lt;strong&gt;Phi-3&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Processing &amp;amp; Structured Parsing Pipeline:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chat Parser &amp;amp; Sanitizer:&lt;/strong&gt; Cleans raw timestamps, multi-line noise, and formatting quirks from pasted exports or &lt;code&gt;.txt&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured Prompt Builder:&lt;/strong&gt; Instructs the local open-weight model to analyze group dynamics, extract direct mentions/tasks for the target user, score the drama level, and return strictly structured JSON.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Robust JSON Parser &amp;amp; Smart Fallback Engine:&lt;/strong&gt; Validates LLM output so small parameter models (&lt;code&gt;2B&lt;/code&gt;–&lt;code&gt;3B&lt;/code&gt;) never break the UI, and automatically routes to a deterministic offline engine if Ollama isn't running.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual Interface (Zero-Build Web + Zero-Dependency CLI):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web App (&lt;code&gt;index.html&lt;/code&gt;, &lt;code&gt;styles.css&lt;/code&gt;, &lt;code&gt;app.js&lt;/code&gt;):&lt;/strong&gt; Built with vanilla JavaScript, Tailwind CSS (CDN), Lucide Icons, and Space Grotesk + JetBrains Mono typography—requiring zero npm install or build steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal Companion (&lt;code&gt;sloth_cli.py&lt;/code&gt;):&lt;/strong&gt; Built strictly with the &lt;strong&gt;Python 3 Standard Library (&lt;code&gt;urllib&lt;/code&gt;)&lt;/strong&gt; so terminal sloths can run &lt;code&gt;python sloth_cli.py chat_export.txt --model gemma2:2b --target "@YourName"&lt;/code&gt; without installing a single pip package.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maximum Privacy for Personal Conversations:&lt;/strong&gt; Group chats are full of inside jokes, late-night rants, personal drama, and private details. Sending 400 messages from your friends' private server to a closed commercial cloud API means handing over everyone's conversations to third-party servers without their consent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What Open Weights Made Possible:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Data Leakage:&lt;/strong&gt; By running open-weight models like &lt;strong&gt;Gemma&lt;/strong&gt; and &lt;strong&gt;Llama&lt;/strong&gt; locally via &lt;strong&gt;Ollama&lt;/strong&gt;, &lt;code&gt;0 bytes&lt;/code&gt; of chat history ever leave &lt;code&gt;localhost&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.00 Forever Cost:&lt;/strong&gt; Summarizing massive text logs every single morning would rack up API token costs over time. Local open-source inference makes daily summarization completely free forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Lock-In or Black Boxes:&lt;/strong&gt; The entire codebase is auditable, dependency-free, and immune to API key expirations, rate limits, or subscription paywalls.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time &amp;amp; Effort Saved:&lt;/strong&gt; Reading and mentally filtering 400 chaotic overnight messages from an active Discord server or group chat normally takes &lt;strong&gt;15 to 20 minutes&lt;/strong&gt; of groggy morning scrolling. &lt;strong&gt;SlothChat Digest&lt;/strong&gt; cuts that down to &lt;strong&gt;10 seconds&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-World Use This Week:&lt;/strong&gt; Instead of dreading the unread badge on my Discord server (&lt;code&gt;lahans dungeon&lt;/code&gt;) and college group chats after waking up or coming back from classes, I dumped the chat logs into SlothChat Digest:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Messages Skipped:&lt;/strong&gt; ~350–400 messages per digest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actual Actionable Pings Found:&lt;/strong&gt; Usually &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Participation Effort:&lt;/strong&gt; 1 click to copy a context-aware lazy reply, paste it into chat, and get my morning back.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; SlothChat Digest supports Google's open-weight &lt;strong&gt;Gemma&lt;/strong&gt; family (&lt;code&gt;gemma2:2b&lt;/code&gt; / &lt;code&gt;gemma3&lt;/code&gt;) running locally via Ollama to perform fast, low-memory structured JSON chat summarization, ping detection, drama scoring, and reply generation on everyday consumer hardware.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>StrideCast</title>
      <dc:creator>Krishna Bharadwaj</dc:creator>
      <pubDate>Sat, 10 Oct 2026 13:58:32 +0000</pubDate>
      <link>https://dev.to/krishna_bharadwaj_bd2818d/stridecast-3nj</link>
      <guid>https://dev.to/krishna_bharadwaj_bd2818d/stridecast-3nj</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;StrideCast&lt;/strong&gt; is a mobile-first PWA that writes and narrates a podcast for your run, timed to your duration, pace, mood, and a topic you choose. Then it plays it in airplane mode while tracking your route.&lt;/p&gt;

&lt;p&gt;The idea started with a simple annoyance: the phone is the thing that pulls you out of a run. Notifications, feeds, one more scroll before you start. StrideCast makes the screen the shortest part of the experience. Setup takes about 30 seconds, and after that it's one big START button and the phone goes in your pocket.&lt;/p&gt;

&lt;p&gt;It's for everyday runners and trail joggers who want company on a run without cellular data, an account, or an app that watches where they go.&lt;/p&gt;

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

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

&lt;p&gt;The video walks through the full flow: setup, live generation progress, the "Offline-ready ✓" state, the run screen, and the saved summary with an offline route.&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/KrishnaBharadwaj67" rel="noopener noreferrer"&gt;
        KrishnaBharadwaj67
      &lt;/a&gt; / &lt;a href="https://github.com/KrishnaBharadwaj67/stridecast" rel="noopener noreferrer"&gt;
        stridecast
      &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;🏃 StrideCast&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Your run, your story, no signal needed.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/KrishnaBharadwaj67/stridecast/docs/demo.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FKrishnaBharadwaj67%2Fstridecast%2FHEAD%2Fdocs%2Fdemo.gif" alt="StrideCast End-to-End Walkthrough" width="280"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;StrideCast is a mobile-first PWA running companion that generates a personalized podcast for your run using open-source AI — then plays it offline while tracking your pace and route.&lt;/p&gt;

&lt;p&gt;Built for the &lt;a href="https://dev.to/" rel="nofollow"&gt;DEV Hacktoberfest Open-Source AI Challenge: Week 1&lt;/a&gt; (theme: "Touch Grass").&lt;/p&gt;




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

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

  &lt;tbody&gt;

&lt;tr&gt;

    &lt;td width="16.6%"&gt;
&lt;br&gt;
      &lt;a rel="noopener noreferrer" href="https://github.com/KrishnaBharadwaj67/stridecast/docs/screenshots/01-setup.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%2FKrishnaBharadwaj67%2Fstridecast%2FHEAD%2Fdocs%2Fscreenshots%2F01-setup.png" alt="StrideCast Pre-Run Setup Screen" width="180"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
      &lt;b&gt;1. Pre-Run Setup&lt;/b&gt;&lt;br&gt;Duration, pace, mood &amp;amp; topic&lt;br&gt;
    &lt;/td&gt;

    &lt;td width="16.6%"&gt;
&lt;br&gt;
      &lt;a rel="noopener noreferrer" href="https://github.com/KrishnaBharadwaj67/stridecast/docs/screenshots/02-generating.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%2FKrishnaBharadwaj67%2Fstridecast%2FHEAD%2Fdocs%2Fscreenshots%2F02-generating.png" alt="StrideCast Generation Progress" width="180"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
      &lt;b&gt;2. Live Generation&lt;/b&gt;&lt;br&gt;SSE progress stream&lt;br&gt;
    &lt;/td&gt;

    &lt;td width="16.6%"&gt;
&lt;br&gt;
      &lt;a rel="noopener noreferrer" href="https://github.com/KrishnaBharadwaj67/stridecast/docs/screenshots/03-offline-ready.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%2FKrishnaBharadwaj67%2Fstridecast%2FHEAD%2Fdocs%2Fscreenshots%2F03-offline-ready.png" alt="StrideCast Offline Ready Badge" width="180"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
      &lt;b&gt;3. Offline Ready&lt;/b&gt;&lt;br&gt;Cached to phone storage&lt;br&gt;
    &lt;/td&gt;

    &lt;td width="16.6%"&gt;
&lt;br&gt;
      &lt;a rel="noopener noreferrer" href="https://github.com/KrishnaBharadwaj67/stridecast/docs/screenshots/04-run.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%2FKrishnaBharadwaj67%2Fstridecast%2FHEAD%2Fdocs%2Fscreenshots%2F04-run.png" alt="StrideCast Active Run HUD" width="180"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
      &lt;b&gt;4. Run Screen&lt;/b&gt;&lt;br&gt;Distance, pace &amp;amp; voice coach&lt;br&gt;
    &lt;/td&gt;

    &lt;td width="16.6%"&gt;
&lt;br&gt;
      &lt;a rel="noopener noreferrer" href="https://github.com/KrishnaBharadwaj67/stridecast/docs/screenshots/05-summary.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%2FKrishnaBharadwaj67%2Fstridecast%2FHEAD%2Fdocs%2Fscreenshots%2F05-summary.png" alt="StrideCast Run Summary with Route" width="180"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
      &lt;b&gt;5. Run Summary&lt;/b&gt;&lt;br&gt;Stats &amp;amp; offline SVG route&lt;br&gt;
    &lt;/td&gt;

    &lt;td width="16.6%"&gt;
&lt;br&gt;
      &lt;a rel="noopener noreferrer" href="https://github.com/KrishnaBharadwaj67/stridecast/docs/screenshots/06-history.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%2FKrishnaBharadwaj67%2Fstridecast%2FHEAD%2Fdocs%2Fscreenshots%2F06-history.png" alt="StrideCast Past Runs History" width="180"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
      &lt;b&gt;6. Past Runs&lt;/b&gt;&lt;br&gt;Saved on-device (IndexedDB)&lt;br&gt;
    &lt;/td&gt;

  &lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;&lt;/p&gt;


&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ How It Works&lt;/h2&gt;
&lt;/div&gt;


&lt;ol&gt;

&lt;li&gt;

&lt;strong&gt;Set up&lt;/strong&gt; (~30 seconds): Pick your duration, pace, mood, voice, and podcast topic&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Generate&lt;/strong&gt;: Local AI writes a podcast script and narrates it segment by segment&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Cache&lt;/strong&gt;: Audio files download into the browser Cache API for 100% offline playback&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Run&lt;/strong&gt;: Turn on Airplane mode and head outside…&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/KrishnaBharadwaj67/stridecast" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;p&gt;Everything in the AI pipeline runs locally. There are no cloud APIs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Script writing:&lt;/strong&gt; Gemma2:2b, served by Ollama. The backend calculates the words needed for your run (about 150 per minute) and asks the model for structured, segment-based scripts of 2-3 minutes each.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice:&lt;/strong&gt; Kokoro  synthesizes each segment into audio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI with Pydantic v2, streaming progress to the app over Server-Sent Events, so you can watch the script get written and the voice get recorded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React 19, TypeScript, and Tailwind v4, packaged as a PWA with vite-plugin-pwa (Workbox). Finished audio is saved into the browser Cache API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-device data:&lt;/strong&gt; Zustand and IndexedDB hold your settings and run history. Tracking uses the Geolocation API with noise filtering, Haversine distance, and the Screen Wake Lock API. The route is drawn as an SVG, so it needs no map tiles and works offline.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It works where there's no signal.&lt;/strong&gt; A closed API needs a connection at the exact moment you want to be disconnected. Local models mean the whole run can happen on a trail with zero bars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your location stays yours.&lt;/strong&gt; GPS breadcrumbs, pace splits, and run history never leave your devices. With no server and no account, there's nothing to leak or monetize.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No per-run cost, no surprises.&lt;/strong&gt; Generating a 30-minute podcast with hosted LLM and voice APIs would charge every time, and endpoints can change or disappear. With open weights, a run costs electricity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everything is swappable.&lt;/strong&gt; The model and voice are config values, so a better small model next month is a one-line change.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma, run locally through Ollama, writes every script, and the model is swappable through one config value.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>MealBuddy</title>
      <dc:creator>Krishna Bharadwaj</dc:creator>
      <pubDate>Mon, 05 Oct 2026 04:46:41 +0000</pubDate>
      <link>https://dev.to/krishna_bharadwaj_bd2818d/mealbuddy-2087</link>
      <guid>https://dev.to/krishna_bharadwaj_bd2818d/mealbuddy-2087</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;&lt;strong&gt;Meal Buddy&lt;/strong&gt; is a local AI meal planner designed around one specific person's needs: someone with food allergies, a tight weekly budget, and a small kitchen who keeps asking "what can I cook with what's left?"&lt;/p&gt;

&lt;p&gt;I built it around a realistic persona rather than a tested user, so I haven't been able to hand it to a real person yet. That's the main thing I'd do next.&lt;/p&gt;

&lt;p&gt;What it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stores a profile (allergies, diet, budget, kitchen setup) in one editable JSON file&lt;/li&gt;
&lt;li&gt;Takes a free-text pantry list like "rice, dal, onions, tomatoes"&lt;/li&gt;
&lt;li&gt;Generates a &lt;strong&gt;3-day meal plan&lt;/strong&gt; that uses pantry items first&lt;/li&gt;
&lt;li&gt;Runs a &lt;strong&gt;hard allergy check&lt;/strong&gt; on every plan: a keyword scan plus a second AI pass, and it regenerates the plan if anything looks unsafe&lt;/li&gt;
&lt;li&gt;Produces a &lt;strong&gt;grocery list&lt;/strong&gt; of only the missing items, grouped by category, with cost estimates&lt;/li&gt;
&lt;li&gt;Has a &lt;strong&gt;"swap this meal"&lt;/strong&gt; button that regenerates one meal without touching the rest&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&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%2F9f9vf8i450ke24c0t61d.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%2F9f9vf8i450ke24c0t61d.png" alt=" " width="768" height="1376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It runs locally at &lt;code&gt;http://127.0.0.1:8000&lt;/code&gt; once Ollama and the model are set up. The setup steps are in the README.&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/KrishnaBharadwaj67" rel="noopener noreferrer"&gt;
        KrishnaBharadwaj67
      &lt;/a&gt; / &lt;a href="https://github.com/KrishnaBharadwaj67/roommate-meal-planner" rel="noopener noreferrer"&gt;
        roommate-meal-planner
      &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;🍛 Meal Buddy&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A local AI meal planner built for one specific person — my roommate.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01" rel="nofollow"&gt;DEV Hacktoberfest Weekend Challenge: "Build for a Friend"&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Meal Buddy uses &lt;strong&gt;Gemma&lt;/strong&gt; (open-weight model) via &lt;strong&gt;Ollama&lt;/strong&gt; — everything runs
on your laptop, offline, with zero paid APIs.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/KrishnaBharadwaj67/roommate-meal-planner/screenshot.jpg"&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%2FKrishnaBharadwaj67%2Froommate-meal-planner%2FHEAD%2Fscreenshot.jpg" alt="Meal Buddy screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why open-source AI?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;My roommate's allergies and food preferences are personal health data. With
Gemma running locally through Ollama, &lt;strong&gt;none of that ever leaves the laptop&lt;/strong&gt; —
no cloud, no API keys, no accounts, no cost. It works fully offline (great for
hostel Wi-Fi), and if you want a different model you swap one line of config
Open-weight means anyone can audit exactly what's running.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it does&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;📋 Stores your profile (allergies, diet, budget, kitchen setup) in an editable JSON file&lt;/li&gt;
&lt;li&gt;🧅 Takes free-text pantry input ("rice, dal, onions, tomatoes…")&lt;/li&gt;
&lt;li&gt;🤖 Generates a &lt;strong&gt;3-day meal plan&lt;/strong&gt; using Gemma, prioritising pantry ingredients&lt;/li&gt;
&lt;li&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/KrishnaBharadwaj67/roommate-meal-planner" 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; Gemma 3 running locally through Ollama&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python + FastAPI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; plain HTML/CSS/JS, no build step&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data:&lt;/strong&gt; one JSON profile file; the real one is gitignored and a sample profile ships with the repo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The part I cared about most is the allergy check. A language model can confidently suggest something unsafe, so I don't trust a single pass. Every plan goes through a keyword scan and a second model review, and the plan is regenerated if either flags a problem.&lt;/p&gt;

&lt;p&gt;During early testing with a nut allergy profile, Gemma confidently suggested an almond garnish because it treated it as an optional topping rather than an ingredient. The keyword scan immediately flagged it and triggered an automatic regeneration before the plan ever reached the UI. That single moment proved why having both layers of safety is completely necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open-Source AI Matters Here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Health data stays on the laptop.&lt;/strong&gt; Allergies and diet details are personal, and nothing is sent to a server I don't control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; No API keys, accounts, or bills.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works offline.&lt;/strong&gt; It only needs internet once, to download the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Models are swappable.&lt;/strong&gt; Changing one line (&lt;code&gt;MODEL_NAME&lt;/code&gt;) lets me try &lt;code&gt;gemma3:4b&lt;/code&gt;, Mistral, or Llama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's auditable.&lt;/strong&gt; Open weights mean anyone can inspect what's running.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Try it with a real user and collect their feedback, support weekly plans, and let people save favorite meals.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Meal Buddy is a helper, not medical or nutritional advice. Always double-check ingredients if you have severe allergies.&lt;/em&gt;&lt;/p&gt;

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