<?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 Potdar</title>
    <description>The latest articles on DEV Community by Krishna Potdar (@krishnapotdar619).</description>
    <link>https://dev.to/krishnapotdar619</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Krishna Potdar</title>
      <link>https://dev.to/krishnapotdar619</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/krishnapotdar619"/>
    <language>en</language>
    <item>
      <title>Touch Grass Nudger: A Local Llama That Tells Me When to Close the Laptop</title>
      <dc:creator>Krishna Potdar</dc:creator>
      <pubDate>Tue, 06 Oct 2026 18:46:29 +0000</pubDate>
      <link>https://dev.to/krishnapotdar619/touch-grass-nudger-a-local-llama-that-tells-me-when-to-close-the-laptop-k4d</link>
      <guid>https://dev.to/krishnapotdar619/touch-grass-nudger-a-local-llama-that-tells-me-when-to-close-the-laptop-k4d</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;Touch Grass Nudger is a tiny command-line tool that answers one question: &lt;em&gt;what should I do outside right now?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You type how many minutes you have. It reads live weather for Solapur, India, and asks a local AI model for one specific outdoor activity that fits your time, the heat, the UV index and whether it is day or night. Then it prints three lines and says: &lt;strong&gt;"Now close the laptop and go!"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The screen part takes under a minute. Everything after that happens outside.&lt;/p&gt;

&lt;p&gt;It is for anyone who sits at a laptop all day and loses an hour deciding whether going out is worth it.&lt;/p&gt;

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

&lt;p&gt;Online run: live weather from Open-Meteo, suggestion from the local model.&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%2F9140p589vpv0i3e56fjn.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%2F9140p589vpv0i3e56fjn.png" alt="Online run: weather fetched, model suggests an activity" width="741" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Offline run: Wi-Fi off, cached weather, and the local model still answers.&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%2Faydapas4vpmorl4zmtnm.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%2Faydapas4vpmorl4zmtnm.png" alt="Offline run: no internet, cached weather, local model still answers" width="800" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outdoor test:&lt;/strong&gt; [WRITE YOUR REAL STORY: where you went, what the model suggested, what happened.]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screen time vs outside time:&lt;/strong&gt; [X] minutes on screen, [Y] minutes outside.&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/krisp619" rel="noopener noreferrer"&gt;
        krisp619
      &lt;/a&gt; / &lt;a href="https://github.com/krisp619/touch-grass" rel="noopener noreferrer"&gt;
        touch-grass
      &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;Touch Grass Nudger&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;A tiny CLI that tells you what to do outside right now, in under a minute.
It reads live weather (Open-Meteo, no API key) and asks a &lt;strong&gt;local open-weight
model&lt;/strong&gt; (Llama 3.2 3B via Ollama) for one outdoor activity that fits your
free minutes. Works offline using the last cached weather.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Install Ollama from &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;https://ollama.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ollama pull llama3.2:3b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;python nudge.py&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Python decides day or night from sunrise/sunset (small models are bad at this).&lt;/li&gt;
&lt;li&gt;The model only picks from a list of real local places, so it can't invent any.&lt;/li&gt;
&lt;li&gt;No internet? It uses the last cached weather. Inference is always local.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Customize&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Edit &lt;code&gt;PLACES&lt;/code&gt;, the coordinates, or &lt;code&gt;MODEL&lt;/code&gt; at the top of &lt;code&gt;nudge.py&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/krisp619/touch-grass" 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;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Llama 3.2 3B (open weights), run locally with &lt;strong&gt;Ollama&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weather:&lt;/strong&gt; Open-Meteo API (free, no API key)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; Python with just the &lt;code&gt;requests&lt;/code&gt; library, about 100 lines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The flow: fetch weather, cache it to a JSON file, summarize the 7 values that matter, build a prompt, send it to the local model, print 3 lines.&lt;/p&gt;

&lt;h3&gt;
  
  
  What went wrong (and how I fixed it)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Run 1: the model invented a place.&lt;/strong&gt; It told me to hike the "hill at Chakreshwar Temple", a place I could not find or verify near Solapur. A small 3B model will confidently make up local names.&lt;br&gt;
&lt;em&gt;Fix:&lt;/em&gt; I gave it a short list of real places (Siddheshwar Lake, Smruti Van, Bhuikot Fort, Hipparga Lake) and told it to choose only from that list. The invented names stopped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run 2: it sent me for a garden walk at midnight.&lt;/strong&gt; I ran the script at 23:54 and it said "It's dark, making it a safe activity." The model could not reliably tell if it was night.&lt;br&gt;
&lt;em&gt;Fix:&lt;/em&gt; I stopped asking the model to decide. Python now compares the clock with sunrise and sunset, and tells the model plainly: it is night, suggest a 5-minute balcony stretch and name a good time tomorrow morning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; with small open models, let code handle facts (time, daylight, place lists) and let the model handle the friendly wording.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It works with no internet.&lt;/strong&gt; The model lives on my laptop, so the nudge works on a trail with no signal (using cached weather).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My data stays with me.&lt;/strong&gt; My location and habits never go to someone else's server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; No API key, no per-request bill, no rate limit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could fix its behavior.&lt;/strong&gt; Because I control the model and the prompt, I could add a places list and day/night rules. I could swap Llama for Qwen or Gemma by changing one line (&lt;code&gt;MODEL = "llama3.2:3b"&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failures were visible.&lt;/strong&gt; When the model hallucinated, I could see why and design around it instead of guessing at a black box.&lt;/li&gt;
&lt;/ul&gt;

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