<?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: Vinit Shinde</title>
    <description>The latest articles on DEV Community by Vinit Shinde (@vinit_shinde_99).</description>
    <link>https://dev.to/vinit_shinde_99</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%2F4173615%2F45dbe7fb-09cb-4c37-858c-0611663b04a7.jpg</url>
      <title>DEV Community: Vinit Shinde</title>
      <link>https://dev.to/vinit_shinde_99</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vinit_shinde_99"/>
    <language>en</language>
    <item>
      <title>TouchGrass Buddy: a local AI that gives me one small reason to go outside</title>
      <dc:creator>Vinit Shinde</dc:creator>
      <pubDate>Sun, 11 Oct 2026 13:20:35 +0000</pubDate>
      <link>https://dev.to/vinit_shinde_99/touchgrass-buddy-a-local-ai-that-gives-me-one-small-reason-to-go-outside-6li</link>
      <guid>https://dev.to/vinit_shinde_99/touchgrass-buddy-a-local-ai-that-gives-me-one-small-reason-to-go-outside-6li</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 Story Behind It
&lt;/h2&gt;

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

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

&lt;p&gt;Most people spend their days staring at a screen, and “go outside more” rarely sticks. TouchGrass Buddy gives people a reason to step out. They share their time and mood, and the app checks the weather and finds a green spot nearby. Then it gives them one small mission to finish and asks for a photo to show they did it.&lt;/p&gt;

&lt;p&gt;TouchGrass Buddy is a web app that gives you one short outdoor mission. You pick a spot on a map, set your time, energy, mood, group and terrain needs, and choose interests such as birdwatching, photography, walking or sketching (or write your own). The app checks the weather, finds green spaces near your pin, and turns that into a few concrete steps, a small scavenger hunt and a photo challenge. Afterwards you upload a photo, and completed missions go into a journal with XP, a streak and badges.&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%2Fofgnc54f746e048h3niu.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%2Fofgnc54f746e048h3niu.png" alt="TouchGrass Buddy home page with a short introduction, a Plan a Mission button and a three-step guide" width="800" height="414"&gt;&lt;/a&gt;&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%2F9vy84vh39reylmwyv9sz.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%2F9vy84vh39reylmwyv9sz.jpg" alt="AI-generated illustration of a hand holding a phone with a nature app on a sunny park path" width="800" height="447"&gt;&lt;/a&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/vinit-tech-source" rel="noopener noreferrer"&gt;
        vinit-tech-source
      &lt;/a&gt; / &lt;a href="https://github.com/vinit-tech-source/touchgrass-buddy" rel="noopener noreferrer"&gt;
        touchgrass-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&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🌿 TouchGrass Buddy 3.0&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;The Local-First Outdoor Companion &amp;amp; Gamified Field Journal&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Reduce screen time, reconnect with nature, and explore the real world through AI-powered physical missions.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://python.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b9a76f48d4b74786c04188871918b504be0cc83d37bd73481a6f4756055855c0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302532422d3337373641423f7374796c653d666f722d7468652d6261646765266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465" alt="Python"&gt;&lt;/a&gt;
&lt;a href="https://fastapi.tiangolo.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f8c092c5f69139f1f77ebcd3cac4bccf291717b24337804ff83713975a904f31/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f466173744150492d302e3131302532422d3030393638383f7374796c653d666f722d7468652d6261646765266c6f676f3d66617374617069266c6f676f436f6c6f723d7768697465" alt="FastAPI"&gt;&lt;/a&gt;
&lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bff30f1ba4e8826e921799ae77c475925669a3c2da368bbea1e76c52896013f1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4f6c6c616d612d4c6f63616c2532304c4c4d2d626c61636b3f7374796c653d666f722d7468652d6261646765266c6f676f3d6f6c6c616d61266c6f676f436f6c6f723d7768697465" alt="Ollama"&gt;&lt;/a&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/18065e9660e92755e932de2a818d8857a22b3db8cf4e2da70cfbda9841ec7c7c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5057412d496e7374616c6c61626c652d3541304643383f7374796c653d666f722d7468652d6261646765266c6f676f3d707761266c6f676f436f6c6f723d7768697465" alt="PWA Ready"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vinit-tech-source/touchgrass-buddy/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7a1226d14a365d288bfe51ece915ee0c7e754a16faa51ff06436504de29b33b4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e7376673f7374796c653d666f722d7468652d6261646765" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vinit-tech-source/touchgrass-buddy" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cecb938539dbbcbed0ca510eb99699f616f4a76d1a787c4978232b1e1e84087c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f253234302e30302d5a65726f253230415049253230436f7374732d3232433535453f7374796c653d666f722d7468652d6261646765" alt="Zero Cloud Costs"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;TouchGrass Buddy&lt;/strong&gt; is a privacy-first Single-Page Application (SPA) designed to solve modern screen fatigue. Instead of just telling you to take a break, it generates &lt;strong&gt;context-aware outdoor micro-adventures&lt;/strong&gt; tailored to your exact neighborhood, current live weather, energy level, and personal interests.&lt;/p&gt;
&lt;p&gt;Every aspect of the application runs &lt;strong&gt;100% locally on your computer&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Cloud AI API Billing:&lt;/strong&gt; Driven entirely by local open-weight models via &lt;strong&gt;Ollama&lt;/strong&gt; (&lt;code&gt;llama3.2:3b&lt;/code&gt; for mission generation and &lt;code&gt;moondream&lt;/code&gt; for photo verification).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total Privacy:&lt;/strong&gt; Your GPS coordinates, health energy levels, personal journal logs, and camera photos never leave your device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern Outdoor Field Journal UI:&lt;/strong&gt; An organic, forest-night design aesthetic (AllTrails meets Duolingo) built with high-performance Vanilla JavaScript, CSS custom properties, and Leaflet maps.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Key Features&lt;/h2&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/vinit-tech-source/touchgrass-buddy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

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

&lt;p&gt;🌐 Published App: &lt;a href="https://rational-settled-theorem-description.trycloudflare.com" rel="noopener noreferrer"&gt;https://rational-settled-theorem-description.trycloudflare.com&lt;/a&gt;&lt;br&gt;
OR&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://touchgrass-buddy.onrender.com" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;touchgrass-buddy.onrender.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;The main design decision was to keep facts and writing separate. The code fetches the facts (live weather, sun times, and real places from OpenStreetMap and Wikipedia), and the model only turns them into a mission. It is told not to invent places.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mission writing:&lt;/strong&gt; Llama 3.2 (3B) running locally through Ollama. The backend asks for structured JSON, validates it, retries if the output is invalid, and falls back to a default mission if the model is unavailable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Photo check:&lt;/strong&gt; Moondream through Ollama compares the uploaded photo with the photo challenge and returns an AI check with a confidence score. It is a small model and can be wrong, so the app calls it a check, not a guarantee.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI (Python).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data:&lt;/strong&gt; Open-Meteo for weather, OpenStreetMap Overpass and Wikipedia for places and photos, and Leaflet for the interactive map.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; a single-page app in vanilla JavaScript, set up as a PWA. Progress and journal entries are stored in the browser's localStorage, on the user's own device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests:&lt;/strong&gt; 19 automated unit and integration tests, all passing when I last ran them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used an AI coding agent (Antigravity) to help write the code, and I tested and edited the result myself.&lt;/p&gt;

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

&lt;p&gt;Open models let me keep the AI on my own machine. My notes and photos are not sent to an AI provider, it costs nothing per mission, and I can swap in another model whenever I want. A closed API would have made all three harder.&lt;/p&gt;

&lt;p&gt;To be accurate: only the AI runs locally. Weather, place data and map tiles still come from online services, so the app is not fully offline.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Tested and What Went Wrong
&lt;/h2&gt;

&lt;p&gt;I took my laptop and phone outside for a 25-minute test walk around my neighborhood and the nearby public park.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The mission it generated:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Walk towards the neighborhood park, pause near the tree line for 5 deep breaths, and find a leaf with serrated or unique edges to photograph.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three real problems showed up outside that I never saw at my desk:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The location button was confusing.&lt;/strong&gt; At first it was only a crosshair icon next to the search box. Standing outside, I could not tell whether tapping it was fetching my GPS or had frozen. I replaced it with a labeled "Use My Location" button that shows its state: "Detecting GPS..." and then "Location found".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Place lookups were unreliable.&lt;/strong&gt; The public OpenStreetMap Overpass servers often timed out or returned nothing in dense or suburban areas, so someone standing on a street could get an empty list. I added fallback mirror servers and a Wikipedia GeoSearch lookup so the app can still suggest nearby landmarks when the main servers are slow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The photo check was slow.&lt;/strong&gt; Sending a full-resolution camera photo to Moondream took almost 20 seconds on my laptop, and waiting on a spinner in the sun was frustrating. I added a fallback: if the vision model takes too long or is not running, the app accepts the photo and moves on. The cost is that the photo check can be skipped, so it is a nudge and not proof.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I'd Improve Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A "Parks Only" mode:&lt;/strong&gt; a toggle that limits nearby spots to parks, nature reserves and trails, hiding cafes and urban places for people who want a quieter walk. It answers the mixed spots list I saw during testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smaller photos for the vision model:&lt;/strong&gt; compress camera photos in the browser (for example to 512x512) before sending them to Moondream. The aim is to cut the wait well below the roughly 20 seconds I saw, but I have not measured the new time yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small model comparison:&lt;/strong&gt; test Llama 3.2 3B against other compact models such as Gemma 2 2B, Phi 3.5 Mini and Qwen 2.5 3B, looking at mission quality, speed and battery use on a laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio walk mode:&lt;/strong&gt; a text-to-speech option that reads the steps aloud through earbuds, so the phone can stay in a pocket.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Render:&lt;/strong&gt; The web app (front end and FastAPI API) is deployed on Render. The hosted version cannot run Ollama, so it uses fallback missions. The Llama 3.2 and Moondream models run locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of ElevenLabs:&lt;/strong&gt; The voiceover in the demo video was generated with ElevenLabs.&lt;/p&gt;

&lt;p&gt;The best version of this app is the one you close after two minutes. 🌿&lt;/p&gt;

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