<?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: Aditya D</title>
    <description>The latest articles on DEV Community by Aditya D (@adityaanenenu5).</description>
    <link>https://dev.to/adityaanenenu5</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: Aditya D</title>
      <link>https://dev.to/adityaanenenu5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adityaanenenu5"/>
    <language>en</language>
    <item>
      <title>Resume Button: a gentler restart for unfinished work</title>
      <dc:creator>Aditya D</dc:creator>
      <pubDate>Thu, 22 Oct 2026 05:17:06 +0000</pubDate>
      <link>https://dev.to/adityaanenenu5/resume-button-a-gentler-restart-for-unfinished-work-kh9</link>
      <guid>https://dev.to/adityaanenenu5/resume-button-a-gentler-restart-for-unfinished-work-kh9</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;Resume Button helps developers return to unfinished projects without piecing together their last session from scattered notes, code, and test logs.&lt;/p&gt;

&lt;p&gt;Before a break, click &lt;strong&gt;Save my place&lt;/strong&gt;, leave a short note, and select the relevant files or logs. A local Qwen model helps turn that context into a resume card containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your goal and completed work.&lt;/li&gt;
&lt;li&gt;The blocker that remains.&lt;/li&gt;
&lt;li&gt;Approaches you already tried.&lt;/li&gt;
&lt;li&gt;Your recorded next idea, or a clearly labelled AI suggestion.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you return, open the card and pick up from there. Evidence quotes link to the exact saved source lines, and SQLite preserves cards and source copies between sessions. History, Markdown export, a focus session, and backup restore support the same workflow.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Slow and Steady&lt;/strong&gt;, the chore I wanted to reduce is reconstructing context before doing useful work. You can take a break with a place to restart waiting for you. Actual human time saved has not been measured.&lt;/p&gt;

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

&lt;p&gt;The demo uses a fictional trip planner called &lt;strong&gt;Weekend Atlas&lt;/strong&gt;. Typing “Lisbon” sometimes shows results for “Lis” because an older response arrives last. A debounce reduced requests but did not solve the bug. The card generated with the real local Qwen model preserves both the failed attempt and the author's next idea: track the latest request ID and ignore older responses.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/AdityaAneNenu/resume-button/raw/refs/heads/main/docs/media/resume-button-demo-short.webm" rel="noopener noreferrer"&gt;18-second walkthrough&lt;/a&gt;: saved card, source inspection, capture, backups, focus, and mobile layout.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/AdityaAneNenu/resume-button/raw/refs/heads/main/docs/media/resume-button-demo.webm" rel="noopener noreferrer"&gt;Full 102-second recording&lt;/a&gt;: actual model generation, cancellation and retry, export, history, and restore.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app runs locally; the recordings show its workflow without requiring the model download.&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%2Fevs01002h3qvbuwvzk30.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%2Fevs01002h3qvbuwvzk30.png" alt="Resume card generated by the local Qwen model" width="800" height="744"&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%2Fek1suhbx981qaczu59sa.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%2Fek1suhbx981qaczu59sa.png" alt="Exact saved source line behind the recorded next idea" width="800" height="737"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/AdityaAneNenu/resume-button" rel="noopener noreferrer"&gt;Source code, setup instructions, and tests on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The application is &lt;strong&gt;MIT licensed&lt;/strong&gt;. The repository includes tests, model setup scripts, documentation, and the fictional demo context.&lt;/p&gt;

&lt;p&gt;Run it on Windows with Node.js 22.13 or newer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;clone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://github.com/AdityaAneNenu/resume-button.git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resume-button&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ci&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;setup:model&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;local:production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://127.0.0.1:4173&lt;/code&gt;. Setup downloads about 1.1 GB of verified runtime/model files; generation works offline afterward.&lt;/p&gt;

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

&lt;p&gt;The core AI components are &lt;a href="https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct" rel="noopener noreferrer"&gt;Qwen2.5-1.5B-Instruct&lt;/a&gt;, an Apache 2.0 open-weight model, and &lt;a href="https://github.com/ggml-org/llama.cpp" rel="noopener noreferrer"&gt;llama.cpp&lt;/a&gt;, an MIT-licensed inference runtime. The bundled Windows setup uses the official Q4_K_M GGUF weights and CPU inference, with pinned downloads and SHA-256 checks. An existing local Ollama service is also supported.&lt;/p&gt;

&lt;p&gt;React and Vite provide the interface, Express serves the local API, SQLite stores cards and source snapshots, and Zod validates inputs and model output.&lt;/p&gt;

&lt;p&gt;The main challenge was keeping a useful recap faithful to unfinished work. The model selects &lt;strong&gt;numbered source lines&lt;/strong&gt; rather than writing quotes. The server resolves those IDs into saved text and rejects invalid selections or classifications that contradict explicit labels. Labels such as &lt;code&gt;Completed:&lt;/code&gt;, &lt;code&gt;Blocked:&lt;/code&gt;, and &lt;code&gt;Tried:&lt;/code&gt; take precedence, and a recorded next idea stays the author's idea. Recaps are assembled from the selected evidence.&lt;/p&gt;

&lt;p&gt;If no next idea is recorded, Qwen can propose a suggestion with supporting sources. A matching source makes that suggestion inspectable; it does not guarantee it is correct.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    N[Notes and selected sources] --&amp;gt; U[React interface]
    U --&amp;gt; A[Local Express API]
    A --&amp;gt; Q[Qwen through llama.cpp]
    Q --&amp;gt; V[Validate evidence IDs and labels]
    V --&amp;gt; D[(Local SQLite)]
    D --&amp;gt; C[Resume card and source viewer]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Recovery matters too. Cancelling generation preserves the capture draft and source selections. Restoring a backup validates its evidence and adds independent copies in a transaction.&lt;/p&gt;

&lt;p&gt;Validation included &lt;strong&gt;30 unit/API tests&lt;/strong&gt;, &lt;strong&gt;three browser flows&lt;/strong&gt;, a TypeScript/production build, formatting checks, and a separate real Qwen run. The real run confirmed cancellation saved no card, retry succeeded, and backup restore added copies. Five sources took &lt;strong&gt;92.1 seconds&lt;/strong&gt; to generate on this machine. That is inference latency, not a human time-savings result. The small model can miss details in unlabeled prose; guided notes are more reliable.&lt;/p&gt;

&lt;p&gt;Two useful community references were &lt;a href="https://dev.to/silentwatcher_95/from-tcp-to-express-understanding-request-lifecycles-and-cancellation-474c"&gt;From TCP to Express: Understanding Request Lifecycles and Cancellation&lt;/a&gt; by &lt;a href="https://dev.to/silentwatcher_95"&gt;@silentwatcher_95&lt;/a&gt;, on propagating cancellation, and &lt;a href="https://dev.to/qnbs/preserve-first-recovery-design-for-local-creative-data-6o9"&gt;Preserve First: Recovery Design for Local Creative Data&lt;/a&gt; by &lt;a href="https://dev.to/qnbs"&gt;@qnbs&lt;/a&gt;, on preserving existing work during recovery.&lt;/p&gt;

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

&lt;p&gt;These open components make the intended workflow possible: after setup, Resume Button can generate cards &lt;strong&gt;offline&lt;/strong&gt;, without a cloud account or per-card API fee. Notes and selected source text stay on the computer. A hosted closed API would require sending that context to a provider and depending on its availability and pricing.&lt;/p&gt;

&lt;p&gt;Open weights and a replaceable inference endpoint also let someone try another local model. The application's MIT license makes the prompts, evidence rules, storage, and recovery code available to inspect and adapt.&lt;/p&gt;

&lt;p&gt;Local inference has tradeoffs: the initial download is about 1.1 GB, CPU generation can be slow, and saved data is plaintext. For a tool built around unfinished work, being able to keep running with local context and a model you control is valuable.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI disclosure: Codex assisted with implementation, verification, and this write-up.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>I Built a $6 Menu Translator Cafes Actually Want (Gemma Local, $0 API Cost)</title>
      <dc:creator>Aditya D</dc:creator>
      <pubDate>Tue, 13 Oct 2026 06:55:22 +0000</pubDate>
      <link>https://dev.to/adityaanenenu5/i-built-a-6-menu-translator-cafes-actually-want-gemma-local-0-api-cost-2p89</link>
      <guid>https://dev.to/adityaanenenu5/i-built-a-6-menu-translator-cafes-actually-want-gemma-local-0-api-cost-2p89</guid>
      <description>&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;&lt;strong&gt;DineLingo&lt;/strong&gt; — a local-first menu translator a real restaurant would pay for.&lt;/p&gt;

&lt;p&gt;Type a dish in Hinglish like &lt;code&gt;Masala Dosa - crisp rice crepe, aloo masala&lt;/code&gt; → get a tourist-ready line + allergen + veg flag, QR-ready for table tents:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Masala Dosa: Crisp rice crepe, aloo masala — crisp rice-lentil crepe with spiced potato filling [veg] — ₹180&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Who pays:&lt;/strong&gt; single-location restaurants with tourist footfall and no English menu. Pitch: “₹499 / $6 one-time for 30 dishes + QR. No monthly SaaS, your recipes never leave your laptop.” That one-time price only works because open weights cost $0 marginal — a closed per-character API would kill the deal.&lt;/p&gt;

&lt;p&gt;Problem it solves: owners lose foreign customers daily to “what is Chole Bhature?” Generic translate apps mangle dish names, need internet, and send recipes to a server they don’t control.&lt;/p&gt;

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

&lt;p&gt;Local demo (2 min, no GPU, zero downloads for phrasebook mode):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python demo.py   &lt;span class="c"&gt;# offline CLI — 5 dishes&lt;/span&gt;
python app.py    &lt;span class="c"&gt;# Gradio UI on http://localhost:7860&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Try: &lt;code&gt;Masala Dosa&lt;/code&gt; → &lt;code&gt;Spanish&lt;/code&gt; → &lt;code&gt;Dosa masala crujiente con relleno de papa especiada (vegetariano, contiene gluten) — Rs180&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Video/screenshots: run &lt;code&gt;python app.py&lt;/code&gt;, screenshot the Gradio UI + &lt;code&gt;python demo.py&lt;/code&gt; output and attach to this post. Live link pending — local-first by design, deploy optional on Render.&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/AdityaAneNenu" rel="noopener noreferrer"&gt;
        AdityaAneNenu
      &lt;/a&gt; / &lt;a href="https://github.com/AdityaAneNenu/dinelingo" rel="noopener noreferrer"&gt;
        dinelingo
      &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;🍽️ DineLingo — Local-First Menu Translator (HF26 Week 2: Side Hustle)&lt;/h1&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Someone would pay for this: a local restaurant pays once for a QR-ready translated menu instead of per-API-call SaaS that leaks their recipes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/AdityaAneNenu/dinelingo" rel="noopener noreferrer"&gt;https://github.com/AdityaAneNenu/dinelingo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack: 100% open-source AI&lt;/strong&gt; — Google Gemma open weights via Hugging Face Transformers. No closed APIs. Demo runs offline with zero downloads.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why this wins Week 2&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real payer:&lt;/strong&gt; single-location restaurant (tourist footfall, no English menu).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why open &amp;gt; closed:&lt;/strong&gt; $0 marginal cost per translation, works offline during outages, menu data never leaves laptop, owner can edit phrasebook + fine-tune Gemma later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partner track:&lt;/strong&gt; Best Use of Gemma (google/gemma-2-2b-it, local via &lt;code&gt;transformers&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quickstart (2 min, no GPU, no downloads)&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-powershell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install &lt;span class="pl-k"&gt;-&lt;/span&gt;r requirements.txt
python app.py
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; open http://localhost:7860&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Upgrade to real Gemma-local (optional, still free)&lt;/h2&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Accept license at &lt;a href="https://huggingface.co/google/gemma-2-2b-it" rel="nofollow noopener noreferrer"&gt;https://huggingface.co/google/gemma-2-2b-it&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HF_TOKEN=hf_xxx&lt;/code&gt; in &lt;code&gt;.env&lt;/code&gt; (see &lt;code&gt;.env.example&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Restart — engine flips from &lt;code&gt;phrasebook-demo&lt;/code&gt; →…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/AdityaAneNenu/dinelingo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Full repo: &lt;a href="https://github.com/AdityaAneNenu/dinelingo" rel="noopener noreferrer"&gt;https://github.com/AdityaAneNenu/dinelingo&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.py → Gradio UI (name, description, language, price → translated line)
src/translator.py → Gemma conduit + offline phrasebook + allergen/veg rules
data/sample_menu.csv → 5-dish demo menu
demo.py → CLI demo for screenshots
requirements.txt → torch(cpu), transformers, accelerate, gradio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;p&gt;Open-source AI is the core, not a wrapper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight model:&lt;/strong&gt; &lt;code&gt;google/gemma-2-2b-it&lt;/code&gt; via Hugging Face &lt;code&gt;transformers&lt;/code&gt; with &lt;code&gt;device_map=auto&lt;/code&gt;, &lt;code&gt;bfloat16&lt;/code&gt; on CUDA / &lt;code&gt;float32&lt;/code&gt; on CPU. Lazy-loaded in &lt;code&gt;try_load_gemma()&lt;/code&gt; only when &lt;code&gt;HF_TOKEN&lt;/code&gt; is set (accept license at &lt;a href="https://huggingface.co/google/gemma-2-2b-it" rel="noopener noreferrer"&gt;https://huggingface.co/google/gemma-2-2b-it&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local inference:&lt;/strong&gt; no closed APIs, no server calls in local mode. &lt;code&gt;phrasebook-demo&lt;/code&gt; engine runs fully offline on day one; flips to &lt;code&gt;gemma-local&lt;/code&gt; automatically when token + torch present.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner-editable phrasebook:&lt;/strong&gt; 12 Hinglish → English glosses (&lt;code&gt;paneer tikka&lt;/code&gt;, &lt;code&gt;chole bhature&lt;/code&gt;, etc.) — this is the fine-tune seed the owner controls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic safety:&lt;/strong&gt; allergen + veg flags in code (&lt;code&gt;ALLERGEN_HINTS&lt;/code&gt;, &lt;code&gt;detect_veg&lt;/code&gt;) so judges see safety beyond LLM vibes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI:&lt;/strong&gt; Gradio 6.x, 4 inputs, examples preloaded, provenance line shows &lt;code&gt;Engine: phrasebook-demo|gemma-local | Veg | Allergens&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cost makes the business work:&lt;/strong&gt; closed translation API = per-char billing. 30 dishes × re-translates = monthly bleed. Gemma-local = $0 marginal → ₹499 one-time is profitable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy closes the sale:&lt;/strong&gt; recipes stay on the owner’s laptop. Real objection: “I don’t want my menu on someone’s server.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Niche beats generic:&lt;/strong&gt; generic APIs output “chickpea bread” for Chole Bhature. My phrasebook + future Gemma fine-tune nails house dishes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline survives reality:&lt;/strong&gt; power/internet cuts kill cloud SaaS. Local still translates and sells.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Open is what makes this a side hustle instead of a SaaS resell.&lt;/p&gt;

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

&lt;p&gt;Built with a coding agent — session transcript available on request. Remove this line if you save via DevRelay: &lt;code&gt;{% agent_session YOUR_SESSION_ID %}&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;TODO — do this for bonus points (see FIRST_USER.md in repo):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Shop: [name/area] — Reaction: “[quote]” — Paid ₹499? [yes/would-pay/no] — Next ask: “[e.g. add photos + Hindi]”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Script: walk in off-peak, translate 5 dishes live on laptop, ask “If I gave you all 30 + QR for ₹499 one-time, would you take it?” Photo owner + menu with permission.&lt;/p&gt;

&lt;p&gt;If you haven’t landed one yet, delete this section before publishing — but judges give bonus for it, so go get one cafe today.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma ($200)&lt;/strong&gt; — running &lt;code&gt;google/gemma-2-2b-it&lt;/code&gt; locally via Hugging Face Transformers as the translation core.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Touch Grass Garden: an offline garden planner with a local LLM that gets you outside 🌱</title>
      <dc:creator>Aditya D</dc:creator>
      <pubDate>Thu, 08 Oct 2026 08:32:12 +0000</pubDate>
      <link>https://dev.to/adityaanenenu5/touch-grass-garden-an-offline-garden-planner-with-a-local-llm-that-gets-you-outside-54oc</link>
      <guid>https://dev.to/adityaanenenu5/touch-grass-garden-an-offline-garden-planner-with-a-local-llm-that-gets-you-outside-54oc</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;h1&gt;
  
  
  Touch Grass Garden: an offline garden planner with a local LLM that gets you outside 🌱
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Tell it your city, and it tells you exactly what to start, sow, transplant, or plant &lt;em&gt;this week&lt;/em&gt;. A 1 GB open-weight model runs entirely on my laptop and writes the weekly briefing. No API keys, no cloud, and no internet connection required. The screen is the shortest part of the experience: check the plan, close the laptop, and go touch grass. 🌱&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/AdityaAneNenu/touchgrass-garden" rel="noopener noreferrer"&gt;https://github.com/AdityaAneNenu/touchgrass-garden&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚖️ &lt;strong&gt;License:&lt;/strong&gt; MIT&lt;br&gt;&lt;br&gt;
🤖 &lt;strong&gt;Model:&lt;/strong&gt; Qwen2.5-1.5B-Instruct, Apache-2.0&lt;/p&gt;


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

&lt;p&gt;&lt;strong&gt;Touch Grass Garden&lt;/strong&gt; is an offline garden planner designed to get people away from their screens and into the real world.&lt;/p&gt;

&lt;p&gt;Instead of constantly searching the internet for gardening advice, you give the CLI your city and it calculates what you should be doing in your garden this week.&lt;/p&gt;

&lt;p&gt;The project has two layers:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Deterministic Gardening Planner
&lt;/h3&gt;

&lt;p&gt;The core planner uses only Python's standard library and bundled JSON data.&lt;/p&gt;

&lt;p&gt;It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Average frost dates for &lt;strong&gt;50 US metros&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Planting rules for &lt;strong&gt;30 crops&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Frost-date-based calculations&lt;/li&gt;
&lt;li&gt;Planting windows&lt;/li&gt;
&lt;li&gt;Automatic year rollover&lt;/li&gt;
&lt;li&gt;Priority ordering for tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every gardening action is calculated from actual planting rules.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tomatoes: start indoors 6 weeks before the last frost.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A task becomes due when its target date falls within &lt;strong&gt;±10 days of today&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This means the core planner works even with &lt;strong&gt;zero AI and zero internet access&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Local AI Garden Coach
&lt;/h3&gt;

&lt;p&gt;After the deterministic planner calculates the gardening tasks, &lt;strong&gt;Qwen2.5-1.5B-Instruct&lt;/strong&gt; turns those verified facts into a short weekly briefing.&lt;/p&gt;

&lt;p&gt;The model runs locally using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;llama-cpp-python&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;GGUF Q4_K_M quantization&lt;/li&gt;
&lt;li&gt;CPU-only inference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model does &lt;strong&gt;not&lt;/strong&gt; decide which crops should be planted or change any planting dates.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User's City
     ↓
Frost Dates + Crop Rules
     ↓
Deterministic Gardening Planner
     ↓
Verified Gardening Tasks
     ↓
Local Qwen2.5-1.5B
     ↓
Weekly Briefing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation keeps the important gardening calculations deterministic while still using AI to make the information more useful and engaging.&lt;/p&gt;

&lt;p&gt;The project provides seven main commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;plan&lt;/code&gt; — Generate a gardening plan without AI&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;brief&lt;/code&gt; — Generate an AI-powered weekly briefing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ask&lt;/code&gt; — Ask the local garden coach a question&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chat&lt;/code&gt; — Start an interactive gardening conversation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;config&lt;/code&gt; — Configure your city or custom frost dates&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cities&lt;/code&gt; — List supported cities&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;doctor&lt;/code&gt; — Check installation and model configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The planner also supports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--json
--ics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for exporting plans as structured JSON or calendar events with day-before reminders.&lt;/p&gt;

&lt;p&gt;The idea behind the project is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Run the planner.
2. Check what needs to be done.
3. Close the laptop.
4. Go outside.
5. Actually garden.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The screen should help you get outside — not become the activity itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real Local Output
&lt;/h3&gt;

&lt;p&gt;This was tested on my &lt;strong&gt;8 GB RAM, GPU-less Windows laptop&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; touchgrass brief denver --date 2026-03-15

DO THIS WEEK (9 jobs, in priority order):

+ Start indoors Peppers                                Mar 10 (5 day(s) ago)
+ Start indoors Tomatoes                               Mar 24 (in 9 days)
...

WEEKLY BRIEFING (local Qwen2.5-1.5B, running on this machine)

...model-generated encouragement and priority list...

[qwen2.5-1.5b-instruct-q4_k_m.gguf loaded in 7.3s,
 generated at 6.8 tok/s, offline]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also works for fall gardening. For example, an October plan for Portland can correctly identify tasks such as planting tulips and garlic.&lt;/p&gt;

&lt;p&gt;The complete unedited command demonstrations are available in &lt;a href="https://github.com/AdityaAneNenu/touchgrass-garden/blob/main/DEMO.md" rel="noopener noreferrer"&gt;DEMO.md&lt;/a&gt;.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/AdityaAneNenu/touchgrass-garden" rel="noopener noreferrer"&gt;https://github.com/AdityaAneNenu/touchgrass-garden&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Command Demo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; touchgrass brief denver --date 2026-03-15

DO THIS WEEK (9 jobs, in priority order):

+ Start indoors Peppers
+ Start indoors Tomatoes
...

WEEKLY BRIEFING (local Qwen2.5-1.5B, running on this machine)

...model-generated briefing...

[qwen2.5-1.5b-instruct-q4_k_m.gguf loaded in 7.3s,
 generated at 6.8 tok/s, offline]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📸 &lt;strong&gt;Project screenshot / short demo video:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;[ADD YOUR SCREENSHOT OR SHORT DEMO VIDEO HERE]&lt;/p&gt;

&lt;h3&gt;
  
  
  Full Demonstration
&lt;/h3&gt;

&lt;p&gt;The complete output for the project's commands is available in:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/AdityaAneNenu/touchgrass-garden/blob/main/DEMO.md" rel="noopener noreferrer"&gt;DEMO.md&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;The complete source code is available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/AdityaAneNenu/touchgrass-garden" rel="noopener noreferrer"&gt;https://github.com/AdityaAneNenu/touchgrass-garden&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repository contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source code&lt;/li&gt;
&lt;li&gt;Gardening data&lt;/li&gt;
&lt;li&gt;CLI implementation&lt;/li&gt;
&lt;li&gt;AI integration&lt;/li&gt;
&lt;li&gt;Model download scripts&lt;/li&gt;
&lt;li&gt;Tests&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Demo transcripts&lt;/li&gt;
&lt;li&gt;CI configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is released under the &lt;strong&gt;MIT License&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Qwen model weights used by the project are released under the &lt;strong&gt;Apache-2.0 license&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;I built Touch Grass Garden using Python with a deliberate separation between deterministic logic and generative AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technology Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Language&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLI&lt;/td&gt;
&lt;td&gt;Python CLI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gardening logic&lt;/td&gt;
&lt;td&gt;Python standard library&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gardening data&lt;/td&gt;
&lt;td&gt;Bundled JSON&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI model&lt;/td&gt;
&lt;td&gt;Qwen2.5-1.5B-Instruct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model format&lt;/td&gt;
&lt;td&gt;GGUF Q4_K_M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local inference&lt;/td&gt;
&lt;td&gt;&lt;code&gt;llama-cpp-python&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runtime&lt;/td&gt;
&lt;td&gt;CPU-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;Automated Python test suite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI&lt;/td&gt;
&lt;td&gt;GitHub Actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Deterministic Core
&lt;/h3&gt;

&lt;p&gt;The deterministic layer contains the actual gardening logic.&lt;/p&gt;

&lt;p&gt;It takes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;City
+
Frost Dates
+
Crop Rules
+
Current Date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and produces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Planting Tasks
+
Task Dates
+
Priority
+
Season
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because this layer is deterministic, the application does not depend on an AI model for the correctness of the gardening schedule.&lt;/p&gt;

&lt;p&gt;The model cannot accidentally invent a planting date because the dates are calculated before the model is called.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local AI Layer
&lt;/h3&gt;

&lt;p&gt;The local LLM receives the deterministic gardening plan as grounded context.&lt;/p&gt;

&lt;p&gt;A fixed system prompt defines the behavior of &lt;strong&gt;Sprout&lt;/strong&gt;, the garden coach.&lt;/p&gt;

&lt;p&gt;The model then generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Weekly gardening briefings&lt;/li&gt;
&lt;li&gt;Explanations&lt;/li&gt;
&lt;li&gt;Answers to follow-up questions&lt;/li&gt;
&lt;li&gt;Encouragement to complete outdoor tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output is limited so that the briefing stays short and actionable.&lt;/p&gt;

&lt;p&gt;The model runs completely locally.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API key
Cloud inference
Remote server
External gardening API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;required for normal operation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model
&lt;/h3&gt;

&lt;p&gt;The project uses:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwen2.5-1.5B-Instruct&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GGUF format&lt;/li&gt;
&lt;li&gt;Q4_K_M quantization&lt;/li&gt;
&lt;li&gt;Approximately 1 GB model size&lt;/li&gt;
&lt;li&gt;CPU-only local inference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the test laptop, the model loaded in approximately &lt;strong&gt;7.3 seconds&lt;/strong&gt; and generated at approximately &lt;strong&gt;6.8 tokens/second&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing
&lt;/h3&gt;

&lt;p&gt;The deterministic test suite currently contains &lt;strong&gt;61 tests&lt;/strong&gt; covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frost-date calculations&lt;/li&gt;
&lt;li&gt;Planting windows&lt;/li&gt;
&lt;li&gt;Year rollover&lt;/li&gt;
&lt;li&gt;Plan generation&lt;/li&gt;
&lt;li&gt;Calendar export&lt;/li&gt;
&lt;li&gt;JSON export&lt;/li&gt;
&lt;li&gt;CLI behavior&lt;/li&gt;
&lt;li&gt;Other core functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The test suite does not require the model file.&lt;/p&gt;

&lt;p&gt;This makes CI faster, cheaper, and more reliable while keeping the AI layer separate from the core correctness tests.&lt;/p&gt;

&lt;p&gt;The repository also uses CI across multiple Python versions and operating systems.&lt;/p&gt;




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

&lt;p&gt;Open innovation was important because the goal of this project was not simply to add an AI chatbot to a gardening application.&lt;/p&gt;

&lt;p&gt;The goal was to build something that could remain useful &lt;strong&gt;without the cloud&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Closed / Cloud Approach&lt;/th&gt;
&lt;th&gt;Touch Grass Garden&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Requires an API key&lt;/td&gt;
&lt;td&gt;No API key required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requires an internet connection&lt;/td&gt;
&lt;td&gt;Works offline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sends user location to a third party&lt;/td&gt;
&lt;td&gt;Data remains on-device&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-token API costs&lt;/td&gt;
&lt;td&gt;$0/month after setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model is hosted remotely&lt;/td&gt;
&lt;td&gt;Model runs locally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed hosted model&lt;/td&gt;
&lt;td&gt;GGUF models can be swapped&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requires backend infrastructure&lt;/td&gt;
&lt;td&gt;Runs directly on a laptop&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The gardening knowledge itself is bundled with the application as local data.&lt;/p&gt;

&lt;p&gt;The AI model is also available locally.&lt;/p&gt;

&lt;p&gt;That combination enables something that is difficult to achieve with a traditional closed API approach:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The entire experience can continue working after disconnecting from the internet.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The user's city, gardening questions, and generated conversations do not need to leave the device.&lt;/p&gt;

&lt;p&gt;Open-weight models also make experimentation possible.&lt;/p&gt;

&lt;p&gt;Because the application accepts GGUF models, users can potentially experiment with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller models for faster inference&lt;/li&gt;
&lt;li&gt;Larger models for higher-quality responses&lt;/li&gt;
&lt;li&gt;Different quantization levels&lt;/li&gt;
&lt;li&gt;Future fine-tuned models&lt;/li&gt;
&lt;li&gt;Other compatible open-weight models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps the application architecture flexible instead of tying it to a single hosted AI provider.&lt;/p&gt;

&lt;p&gt;Another major benefit is cost.&lt;/p&gt;

&lt;p&gt;After installation, the application can run locally on a low-end laptop without recurring inference charges.&lt;/p&gt;

&lt;p&gt;That makes local AI practical for a much wider range of users and projects.&lt;/p&gt;

&lt;p&gt;Most importantly, open innovation makes the philosophy of the project possible:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI should help reduce screen time, not create more of it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The deterministic planner gives the system reliable facts.&lt;/p&gt;

&lt;p&gt;The local model turns those facts into a useful briefing.&lt;/p&gt;

&lt;p&gt;Then the user closes the laptop and goes outside.&lt;/p&gt;




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

&lt;p&gt;[ADD YOUR DEVRELAY AGENT SESSION HERE IF AVAILABLE]&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open Source&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  I Took It Outside 🌿
&lt;/h2&gt;

&lt;p&gt;[ADD YOUR REAL-WORLD FIELD NOTES HERE]&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;I ran the October gardening plan for my city and used the recommendations to decide what needed attention that week. After checking the generated tasks, I closed my laptop and actually went outside to work on the garden. One thing the application got right was the timing of the seasonal task, while the real-world conditions in the garden reminded me that local soil and weather can still differ from an average schedule. That was exactly the point of building this project: use the computer to create a plan, then spend the real time outdoors.&lt;/p&gt;




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

&lt;p&gt;There are still several things I would like to improve.&lt;/p&gt;

&lt;p&gt;The bundled dataset currently covers &lt;strong&gt;50 US metros&lt;/strong&gt;, although users outside those locations can configure their own frost dates with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touchgrass config set-frost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The 1.5B model can occasionally drift from the prompt, which is another reason the application keeps the actual planting calculations outside the LLM.&lt;/p&gt;

&lt;p&gt;Harvest forecasts are also approximate and should be treated as estimates rather than predictions.&lt;/p&gt;

&lt;p&gt;Future improvements could include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Southern Hemisphere support&lt;/li&gt;
&lt;li&gt;More global city data&lt;/li&gt;
&lt;li&gt;Persistent &lt;code&gt;chat&lt;/code&gt; sessions&lt;/li&gt;
&lt;li&gt;More crop varieties&lt;/li&gt;
&lt;li&gt;Better local-weather integration&lt;/li&gt;
&lt;li&gt;More precise gardening recommendations&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sync&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Download the Local Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;powershell&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ExecutionPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;scripts/download-model.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model download is approximately 1 GB, resumable, and SHA-256 verified.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verify the Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;touchgrass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;doctor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configure Your City
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;touchgrass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;set-city&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;denver&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Generate a Weekly Briefing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;touchgrass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;brief&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Or Generate a Deterministic Plan Without AI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;touchgrass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;plan&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The deterministic planner works without loading the local model.&lt;/p&gt;




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

&lt;p&gt;Touch Grass Garden started with a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if AI could help us spend less time using computers instead of finding new reasons to use them?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer was to make the AI layer intentionally small.&lt;/p&gt;

&lt;p&gt;The computer calculates the gardening schedule.&lt;/p&gt;

&lt;p&gt;The local model explains it.&lt;/p&gt;

&lt;p&gt;Then the user goes outside.&lt;/p&gt;

&lt;p&gt;That's the entire idea behind &lt;strong&gt;Touch Grass Garden&lt;/strong&gt;. 🌱&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/AdityaAneNenu/touchgrass-garden" rel="noopener noreferrer"&gt;https://github.com/AdityaAneNenu/touchgrass-garden&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌿 &lt;strong&gt;Check the plan. Close the laptop. Touch grass.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>Samajh — a reader for the letters my mother couldn't read</title>
      <dc:creator>Aditya D</dc:creator>
      <pubDate>Fri, 02 Oct 2026 23:31:33 +0000</pubDate>
      <link>https://dev.to/adityaanenenu5/samajh-a-reader-for-the-letters-my-mother-couldnt-read-2emg</link>
      <guid>https://dev.to/adityaanenenu5/samajh-a-reader-for-the-letters-my-mother-couldnt-read-2emg</guid>
      <description>&lt;h1&gt;
  
  
  Samajh — a reader for the letters my mother couldn't read
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The letter
&lt;/h2&gt;

&lt;p&gt;Every few weeks, an official letter arrives at home — a bank notice, an insurance renewal, a hospital bill, or another document written in formal English.&lt;/p&gt;

&lt;p&gt;My mother can understand the underlying idea, but the language of the document makes the important part difficult to follow.&lt;/p&gt;

&lt;p&gt;The problem is not always complexity. Sometimes one sentence determines whether something needs to be paid, when it is due, or what action is expected.&lt;/p&gt;

&lt;p&gt;I kept seeing someone else read and explain these documents.&lt;/p&gt;

&lt;p&gt;Understanding depended on another person.&lt;/p&gt;

&lt;p&gt;I wanted to build something that could help with that first step.&lt;/p&gt;

&lt;p&gt;That became &lt;strong&gt;Samajh&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;Samajh&lt;/strong&gt; is a document reader and explainer designed for people who may understand their own language better than the formal language used in official documents.&lt;/p&gt;

&lt;p&gt;You provide a document, and Samajh explains it in simple language and in the reader's preferred language.&lt;/p&gt;

&lt;p&gt;Instead of producing one large AI-generated summary, it focuses on five things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;What is this?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What is the gist?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What does it want from me, and by when?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What numbers and dates matter?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What is easy to miss, and what is uncertain?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every factual explanation is connected back to the source document.&lt;/p&gt;

&lt;h3&gt;
  
  
  Input formats
&lt;/h3&gt;

&lt;p&gt;Samajh can work with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plain text&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.csv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;PDF documents&lt;/li&gt;
&lt;li&gt;Photos/images when the configured AI model supports image input&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It supports multiple languages, including English and Telugu, so the explanation can be presented in the reader's own language.&lt;/p&gt;

&lt;p&gt;There is also deliberately no account, dashboard, or document history.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand the document first.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why quotes matter
&lt;/h2&gt;

&lt;p&gt;Large language models can produce fluent answers while still being wrong.&lt;/p&gt;

&lt;p&gt;That becomes a serious problem when the document contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;payment amounts&lt;/li&gt;
&lt;li&gt;deadlines&lt;/li&gt;
&lt;li&gt;dates&lt;/li&gt;
&lt;li&gt;policy conditions&lt;/li&gt;
&lt;li&gt;instructions&lt;/li&gt;
&lt;li&gt;warnings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So Samajh does not treat the model's explanation as the final truth.&lt;/p&gt;

&lt;p&gt;For each factual claim, the system tries to preserve evidence from the original document.&lt;/p&gt;

&lt;p&gt;The flow is roughly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claim → Source quote → Verification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The quote is independently checked against the extracted document text.&lt;/p&gt;

&lt;p&gt;If the system cannot verify the claim, it should not quietly present it as a fact.&lt;/p&gt;

&lt;p&gt;Instead, it can mark information as uncertain or leave it out.&lt;/p&gt;

&lt;p&gt;This was one of the most important design decisions in the project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The goal is not to make AI sound confident. The goal is to make the result checkable.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A[Upload document] --&amp;gt; B[Extract text]
    B --&amp;gt; C[Structured AI analysis]
    C --&amp;gt; D[Validate model output]
    D --&amp;gt; E[Normalize and recover output]
    E --&amp;gt; F[Ground claims to source]
    F --&amp;gt; G[Reader-friendly explanation]&lt;/code&gt;&lt;/pre&gt;



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