<?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: Shubham Bawari</title>
    <description>The latest articles on DEV Community by Shubham Bawari (@hello_shubham).</description>
    <link>https://dev.to/hello_shubham</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%2F1763453%2Fce6067e5-1e84-4029-9cfd-cf3212588693.jpg</url>
      <title>DEV Community: Shubham Bawari</title>
      <link>https://dev.to/hello_shubham</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hello_shubham"/>
    <language>en</language>
    <item>
      <title>Sloth Summarizer: Read Less, Know More</title>
      <dc:creator>Shubham Bawari</dc:creator>
      <pubDate>Wed, 21 Oct 2026 13:26:55 +0000</pubDate>
      <link>https://dev.to/hello_shubham/sloth-summarizer-read-less-know-more-j6c</link>
      <guid>https://dev.to/hello_shubham/sloth-summarizer-read-less-know-more-j6c</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Sloth Summarizer is a document summarizer. Paste text or upload a PDF, click one button, and get a short summary in seconds.&lt;/p&gt;

&lt;p&gt;Long reports, study notes, and PDFs take time to read. A sloth would not read 20 pages. This tool reads them for you and gives you the main points, so students, job seekers, and busy readers can stay a little lazier.&lt;/p&gt;

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

&lt;p&gt;Live app: &lt;a href="https://ai-summarizer9.streamlit.app/" rel="noopener noreferrer"&gt;https://ai-summarizer9.streamlit.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Paste text or upload a PDF, then click Summarize&lt;/strong&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%2Fpqwzxqificilate33p6n.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%2Fpqwzxqificilate33p6n.png" alt="Input screen of Sloth Summarizer with pasted text" width="799" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Get a short summary&lt;/strong&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%2Fdhxrcktun7sobfjuihqk.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%2Fdhxrcktun7sobfjuihqk.png" alt="Summary output of Sloth Summarizer" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&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;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;GitHub repo: &lt;a href="https://github.com/shubsolos19/Document-summarizer" rel="noopener noreferrer"&gt;https://github.com/shubsolos19/Document-summarizer&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; &lt;code&gt;t5-small&lt;/code&gt; from Hugging Face. It is an open-weight model, small enough to run on a normal laptop CPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework:&lt;/strong&gt; Hugging Face Transformers with PyTorch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PDF reading:&lt;/strong&gt; PyPDF2 pulls text out of PDF files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface:&lt;/strong&gt; Streamlit web app.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ol&gt;
&lt;li&gt;Get text from the input box or the PDF.&lt;/li&gt;
&lt;li&gt;Split long text into small chunks, because t5-small can only read a limited amount at once.&lt;/li&gt;
&lt;li&gt;Summarize each chunk with the model.&lt;/li&gt;
&lt;li&gt;Join the chunk summaries into one final summary.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Summary length and chunk size are easy to change in the code (&lt;code&gt;max_length&lt;/code&gt;, &lt;code&gt;min_length&lt;/code&gt;, &lt;code&gt;max_chars&lt;/code&gt;). The whole app is about 150 lines of Python.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Works offline:&lt;/strong&gt; After the first model download, the summarizer runs with no internet. A closed API needs a connection every time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your documents stay with you:&lt;/strong&gt; Contracts, notes, and reports are summarized on your own machine. They are not sent to a server you do not control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free to run:&lt;/strong&gt; No API key, no per-request bill, no usage limit. Set it up once and use it as much as you want.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable:&lt;/strong&gt; The model is open, so I can swap &lt;code&gt;t5-small&lt;/code&gt; for another open model like BART with a small code change. With a closed API, the provider decides which model you get and when it changes.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Reading a 1000-word document can take several minutes. The app summarizes it in about 4 to 6 seconds on a normal machine. Fewer minutes reading, more time resting like a sloth.&lt;/p&gt;

&lt;p&gt;Happy Sloth Day! 🦥&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Menu Translator: A Private, Offline Menu Translation Tool Powered by Llama 3.2</title>
      <dc:creator>Shubham Bawari</dc:creator>
      <pubDate>Tue, 13 Oct 2026 06:11:27 +0000</pubDate>
      <link>https://dev.to/hello_shubham/menu-translator-a-private-offline-menu-translation-tool-powered-by-llama-32-4n90</link>
      <guid>https://dev.to/hello_shubham/menu-translator-a-private-offline-menu-translation-tool-powered-by-llama-32-4n90</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;Menu Translator is a small web app that translates restaurant menu items into another language and adds a short, customer-friendly description for each dish.&lt;/p&gt;

&lt;p&gt;The target customer is a local restaurant owner or cafe manager who serves tourists, students, or foreign guests. Generic translators often mess up food names (for example, translating "Dal Makhani" word by word). This tool keeps the original dish name, gives a translated name, and explains what the dish is in one line.&lt;/p&gt;

&lt;p&gt;There is also a "Restaurant notes" box. The owner can describe their restaurant and special items (for example, "Our Special Thali has 2 sabzi, dal, rice and 3 roti"), and the model uses this context while translating. This is the part a generic tool cannot do.&lt;/p&gt;

&lt;p&gt;Supported languages: English, Hindi, French, Spanish, German, Japanese.&lt;/p&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%2F4umgh3xo1l7wfqgzl9rk.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%2F4umgh3xo1l7wfqgzl9rk.jpg" alt="Screenshot of the Menu Translator web app showing a list of dishes, a restaurant notes box, a language dropdown, and the translated menu output" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How to use it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste dish names, one per line.&lt;/li&gt;
&lt;li&gt;Optionally add restaurant notes.&lt;/li&gt;
&lt;li&gt;Pick the target language.&lt;/li&gt;
&lt;li&gt;Click Translate and get the result in a few seconds.&lt;/li&gt;
&lt;/ol&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/shubsolos19" rel="noopener noreferrer"&gt;
        shubsolos19
      &lt;/a&gt; / &lt;a href="https://github.com/shubsolos19/Menu-Translator" rel="noopener noreferrer"&gt;
        Menu-Translator
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Translates restaurant menu dishes using a local open-source model (Llama 3.2 via Ollama). Runs offline, no API cost, menu data stays private.
    &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;Menu Translator&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/shubsolos19/Menu-Translator/banner.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%2Fshubsolos19%2FMenu-Translator%2FHEAD%2Fbanner.jpg" alt="Menu Translator Banner"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Translates restaurant menu dishes using a local open-source model (Llama 3.2 via Ollama). Runs offline, no API cost, menu data stays private.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Screenshot&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/shubsolos19/Menu-Translator/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%2Fshubsolos19%2FMenu-Translator%2FHEAD%2Fscreenshot.jpg" alt="App Screenshot"&gt;&lt;/a&gt;&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 ollama.com&lt;/li&gt;
&lt;li&gt;ollama pull llama3.2&lt;/li&gt;
&lt;li&gt;pip install -r requirements.txt&lt;/li&gt;
&lt;li&gt;python app.py&lt;/li&gt;
&lt;li&gt;Open &lt;a href="http://localhost:5000" rel="nofollow noopener noreferrer"&gt;http://localhost:5000&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&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/shubsolos19/Menu-Translator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;The whole app is a single &lt;code&gt;app.py&lt;/code&gt; file, so anyone can read it, run it, and change it in minutes.&lt;/p&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, an open-weight model from Meta&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local inference:&lt;/strong&gt; Ollama, which runs the model on my own laptop&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python and Flask, with one route that sends a prompt to Ollama's local API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; plain HTML, CSS, and JavaScript inside the same file, no build step&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Flow: the user's dish list, restaurant notes, and chosen language go into a structured prompt. The prompt asks the model to keep the original name, give the translated name, and write a short description. Flask sends it to Ollama on &lt;code&gt;localhost:11434&lt;/code&gt; and shows the response on the page.&lt;/p&gt;

&lt;p&gt;To run it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Ollama and run &lt;code&gt;ollama pull llama3.2&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 app.py&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;http://localhost:5000&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; There are no API fees and no per-request charges. A small restaurant can translate its menu as many times as needed for free, which makes this a realistic product for a tiny business.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; Everything runs on the local machine. Menus, recipes, and notes about specials never leave the owner's computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works offline:&lt;/strong&gt; After the model is downloaded, no internet is needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customizable:&lt;/strong&gt; The restaurant notes box adapts the output to each business. With an open model I can also swap in a different one by changing a single word in the code (&lt;code&gt;MODEL = "llama3.2"&lt;/code&gt;), or fine-tune for a specific cuisine later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in:&lt;/strong&gt; I am not tied to any provider's pricing, rate limits, or policy changes.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Touch Grass Planner: A Local AI That Sends You Outside</title>
      <dc:creator>Shubham Bawari</dc:creator>
      <pubDate>Wed, 07 Oct 2026 07:36:43 +0000</pubDate>
      <link>https://dev.to/hello_shubham/touch-grass-planner-a-local-ai-that-sends-you-outside-2727</link>
      <guid>https://dev.to/hello_shubham/touch-grass-planner-a-local-ai-that-sends-you-outside-2727</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 Planner is a small web app that helps you leave your screen and go outside.&lt;/p&gt;

&lt;p&gt;You type your city, how much free time you have, and your mood. A local AI model gives you a short 3 step outdoor plan, a list of things to bring, and one tip for this time of year. Then you press one button and a countdown timer starts. The app tells you to close the tab and go.&lt;/p&gt;

&lt;p&gt;The screen part is short on purpose. Plan in under a minute, then walk out the door.&lt;/p&gt;

&lt;p&gt;It is for anyone who keeps saying "I will go for a walk later" and never does. Students, developers, and anyone who sits too long in front of a laptop.&lt;/p&gt;

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

&lt;p&gt;The app runs fully on a local machine, so there is no hosted link. Here is how it looks and how to run it.&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%2F7jl10u064sm7qio9og5e.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%2F7jl10u064sm7qio9og5e.jpg" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run it yourself:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&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 app.py&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;http://localhost:5000&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&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/shubsolos19" rel="noopener noreferrer"&gt;
        shubsolos19
      &lt;/a&gt; / &lt;a href="https://github.com/shubsolos19/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 Planner&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/shubsolos19/touch-grass/cover.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%2Fshubsolos19%2Ftouch-grass%2FHEAD%2Fcover.jpg" alt="Touch Grass Planner"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Small app that makes a short outdoor plan using a local open-weight AI model.
You type your city, free time and mood. The model gives a 3 step plan.
Then a timer starts and you go outside.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why open AI&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Runs fully on your laptop with Ollama&lt;/li&gt;
&lt;li&gt;Works with no internet after setup&lt;/li&gt;
&lt;li&gt;Your city and mood stay on your machine&lt;/li&gt;
&lt;li&gt;Free to run&lt;/li&gt;
&lt;li&gt;You can swap the model with one setting&lt;/li&gt;
&lt;/ul&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: &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;https://ollama.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pull a small model:
ollama pull llama3.2:3b&lt;/li&gt;
&lt;li&gt;Install packages:
pip install -r requirements.txt&lt;/li&gt;
&lt;li&gt;Run:
python app.py&lt;/li&gt;
&lt;li&gt;Open &lt;a href="http://localhost:5000" rel="nofollow noopener noreferrer"&gt;http://localhost:5000&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Change model&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Windows PowerShell:
$env:MODEL="gemma2:2b"; python app.py&lt;/p&gt;
&lt;p&gt;Mac or Linux:
MODEL=gemma2:2b python app.py&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Stack&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Python, Flask, Ollama, open-weight Llama 3.2&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/shubsolos19/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;Open model:&lt;/strong&gt; Llama 3.2 3B, an open-weight model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local inference:&lt;/strong&gt; Ollama runs the model on my own laptop&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python and Flask. One route sends the prompt to Ollama and returns the answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Plain HTML, CSS and JavaScript. No heavy framework.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prompt tells the model to keep the answer short, follow a fixed format, and avoid made up place names. It suggests types of places like a park or a riverside instead. This keeps the plan safe and useful.&lt;/p&gt;

&lt;p&gt;The model name is one environment variable, so I can swap to another open model without changing any code.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Works offline.&lt;/strong&gt; After the model is downloaded, no internet is needed. Good for trails and parks with weak signal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private.&lt;/strong&gt; My city and mood never leave my laptop. No server I do not control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free.&lt;/strong&gt; No API key, no bill, no usage limit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable.&lt;/strong&gt; I can change the model in seconds, and use a smaller one on a slow machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API would need internet, an account and money. For an app about going outside, that felt wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Went Outside
&lt;/h2&gt;

&lt;p&gt;WRITE 2 OR 3 TRUE LINES HERE: where you went, what plan you got, how long, how it felt.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Meal Planner for a Friend: Allergy-Safe Weekly Plans with Local Gemma</title>
      <dc:creator>Shubham Bawari</dc:creator>
      <pubDate>Fri, 02 Oct 2026 06:46:44 +0000</pubDate>
      <link>https://dev.to/hello_shubham/meal-planner-for-a-friend-allergy-safe-weekly-plans-with-local-gemma-4jni</link>
      <guid>https://dev.to/hello_shubham/meal-planner-for-a-friend-allergy-safe-weekly-plans-with-local-gemma-4jni</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;I built &lt;strong&gt;Meal Planner for a Friend&lt;/strong&gt;, a small allergy-aware meal planner for my friend Shrey.&lt;/p&gt;

&lt;p&gt;You enter a name, allergies, dislikes, diet type and budget. The app gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;7 day plan:&lt;/strong&gt; breakfast, lunch and dinner for the week, plus a short grocery list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suggestions:&lt;/strong&gt; when Shrey tried it, he said we can add a suggestion box too. So there is a second tab. He types what he needs right now (for example "quick dinner under 20 minutes") and gets 3 simple options that follow his allergies and dislikes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything runs on my laptop. No cloud, no API key, no cost.&lt;/p&gt;

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

&lt;p&gt;I did not deploy it, because the point is that it runs locally. You can run it in a few minutes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma3:1b
git clone https://github.com/shubsolos19/friend-meal-planner.git
&lt;span class="nb"&gt;cd &lt;/span&gt;friend-meal-planner
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
streamlit run app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Sample input: name Shrey, allergies peanuts and milk, dislikes karela, diet Vegetarian, budget Low. Click &lt;strong&gt;Make 7 day plan&lt;/strong&gt; for the full week, or open the &lt;strong&gt;Suggestions&lt;/strong&gt; tab for quick ideas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Shrey said&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"we can add a suggestion box too bro."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That one line turned into the Suggestions tab.&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/shubsolos19" rel="noopener noreferrer"&gt;
        shubsolos19
      &lt;/a&gt; / &lt;a href="https://github.com/shubsolos19/friend-meal-planner" rel="noopener noreferrer"&gt;
        friend-meal-planner
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Allergy-aware 7 day meal planner, local Gemma via Ollama
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ac801ed262720599a1f8f21ec0302c086f3fa9f339a34fb2afc0aa0fe772cf79/68747470733a2f2f63617073756c652d72656e6465722e76657263656c2e6170702f6170693f747970653d776176696e6726636f6c6f723d303a6666396133632c3130303a666634653530266865696768743d3230302673656374696f6e3d68656164657226746578743d4d65616c253230506c616e6e6572253230666f7225323061253230467269656e6426666f6e7453697a653d343426666f6e74436f6c6f723d66666666666626616e696d6174696f6e3d66616465496e26666f6e74416c69676e593d333826646573633d416c6c657267792d73616665253230372532306461792532306d65616c253230706c616e732532302537432532303130302532352532306c6f63616c2532302537432532306f70656e2d736f7572636525323041492664657363416c69676e593d3630266465736353697a653d3136"&gt;&lt;img src="https://camo.githubusercontent.com/ac801ed262720599a1f8f21ec0302c086f3fa9f339a34fb2afc0aa0fe772cf79/68747470733a2f2f63617073756c652d72656e6465722e76657263656c2e6170702f6170693f747970653d776176696e6726636f6c6f723d303a6666396133632c3130303a666634653530266865696768743d3230302673656374696f6e3d68656164657226746578743d4d65616c253230506c616e6e6572253230666f7225323061253230467269656e6426666f6e7453697a653d343426666f6e74436f6c6f723d66666666666626616e696d6174696f6e3d66616465496e26666f6e74416c69676e593d333826646573633d416c6c657267792d73616665253230372532306461792532306d65616c253230706c616e732532302537432532303130302532352532306c6f63616c2532302537432532306f70656e2d736f7572636525323041492664657363416c69676e593d3630266465736353697a653d3136" alt="banner"&gt;&lt;/a&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🍛 Safe food for someone you care about. Zero cloud. Zero cost.&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/76a6d01cfbe3c7e47c405acd33a5577c8e686b4ea32690e49f542b7332cb0db2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f64656c2d47656d6d61253230332d3432383546343f7374796c653d666f722d7468652d6261646765266c6f676f3d676f6f676c65266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/76a6d01cfbe3c7e47c405acd33a5577c8e686b4ea32690e49f542b7332cb0db2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f64656c2d47656d6d61253230332d3432383546343f7374796c653d666f722d7468652d6261646765266c6f676f3d676f6f676c65266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/e5f8eb92cfd28f4181de1ee456965cfa3fedadcbd6d455fa9db0d4ce40adecba/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52756e74696d652d4f6c6c616d612d3030303030303f7374796c653d666f722d7468652d6261646765266c6f676f3d6f6c6c616d61266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/e5f8eb92cfd28f4181de1ee456965cfa3fedadcbd6d455fa9db0d4ce40adecba/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52756e74696d652d4f6c6c616d612d3030303030303f7374796c653d666f722d7468652d6261646765266c6f676f3d6f6c6c616d61266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/371beda3020ab6f91dcdee716758c9ed7e010d9d0973375e11b2ae881dd11929/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f55492d53747265616d6c69742d4646344234423f7374796c653d666f722d7468652d6261646765266c6f676f3d73747265616d6c6974266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/371beda3020ab6f91dcdee716758c9ed7e010d9d0973375e11b2ae881dd11929/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f55492d53747265616d6c69742d4646344234423f7374796c653d666f722d7468652d6261646765266c6f676f3d73747265616d6c6974266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/55aafcb92666e83d5bbb414f20ce02cfe284ac6ac53222199a814c41b41d4c18/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e392532422d3337373641423f7374796c653d666f722d7468652d6261646765266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/55aafcb92666e83d5bbb414f20ce02cfe284ac6ac53222199a814c41b41d4c18/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e392532422d3337373641423f7374796c653d666f722d7468652d6261646765266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/04b5044c65c2629d2b88ad5f989bdfaa4d15aa4dde39827ed3b91e5ddf62fc64/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52756e732d3130302532352532304f66666c696e652d3265613434663f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/04b5044c65c2629d2b88ad5f989bdfaa4d15aa4dde39827ed3b91e5ddf62fc64/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52756e732d3130302532352532304f66666c696e652d3265613434663f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/02a0e56b7726a7b26adb62edcaaf1fe85059a300c2daa31e5d112319e299765a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4150492532304b6579732d4e6f6e652d6f72616e67653f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/02a0e56b7726a7b26adb62edcaaf1fe85059a300c2daa31e5d112319e299765a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4150492532304b6579732d4e6f6e652d6f72616e67653f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/8240c284e6ca3ad7f26c345278288fb212d4188709d6ea7636e22936e1cc8e8b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f73742d253234302d626c756576696f6c65743f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/8240c284e6ca3ad7f26c345278288fb212d4188709d6ea7636e22936e1cc8e8b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f73742d253234302d626c756576696f6c65743f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d5bacef044d24a2b866db270ad50271a0ae4120fc2579af10f065146e67933b1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d323032362d6666366630303f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/d5bacef044d24a2b866db270ad50271a0ae4120fc2579af10f065146e67933b1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d323032362d6666366630303f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/shubsolos19/friend-meal-planner#-overview" rel="noopener noreferrer"&gt;✨ Overview&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://github.com/shubsolos19/friend-meal-planner#-why-open-source-ai" rel="noopener noreferrer"&gt;🔒 Why Open Source AI&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://github.com/shubsolos19/friend-meal-planner#-quick-start" rel="noopener noreferrer"&gt;🚀 Quick Start&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://github.com/shubsolos19/friend-meal-planner#-troubleshooting" rel="noopener noreferrer"&gt;🛠 Troubleshooting&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;


&lt;/div&gt;
&lt;br&gt;


&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Overview&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Planning weekly meals is hard when someone has &lt;strong&gt;food allergies&lt;/strong&gt;, a &lt;strong&gt;tight budget&lt;/strong&gt;, and &lt;strong&gt;foods they simply dislike&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This app takes those inputs and returns a full &lt;strong&gt;7 day Indian meal plan&lt;/strong&gt; with a &lt;strong&gt;grocery list&lt;/strong&gt;, in seconds, running entirely on your own laptop.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💛 Built for &lt;strong&gt;Shrey&lt;/strong&gt; for the &lt;strong&gt;Hacktoberfest 2026 Weekend Challenge: Build for a Friend&lt;/strong&gt; on DEV.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🧾 You enter&lt;/th&gt;
&lt;th&gt;🤖 Gemma thinks&lt;/th&gt;
&lt;th&gt;🍽 You get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Name, allergies, dislikes, diet, budget&lt;/td&gt;
&lt;td&gt;Local model, no internet needed&lt;/td&gt;
&lt;td&gt;Breakfast, lunch, dinner for 7 days + grocery list&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/div&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;&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;table&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td width="50%"&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🔐 Private&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;Allergy and health info never leaves the laptop. No server. No logs. No third party.&lt;/p&gt;


&lt;/td&gt;

&lt;td width="50%"&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;💸 Free&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;No API key, no subscription…&lt;/p&gt;


&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&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/shubsolos19/friend-meal-planner" 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;Gemma 3 (1B):&lt;/strong&gt; open-weight model from Google&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama:&lt;/strong&gt; runs the model locally and exposes a simple API on localhost&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamlit:&lt;/strong&gt; clean web form and tabs in a few lines of Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python and requests:&lt;/strong&gt; glue code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole app is one file. The form inputs go into a prompt that tells Gemma to never use the listed allergens or anything made from them, to skip dislikes, and to keep dishes simple and cheap. Ollama runs the model on my machine and Streamlit shows the result.&lt;/p&gt;

&lt;p&gt;The core of the plan prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Make a 7 day Indian meal plan (breakfast, lunch, dinner) for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.
Diet: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;diet&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. Budget: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.
NEVER use these allergens or anything made from them: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;allergies&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.
Do not include: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dislikes&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.
Keep dishes simple and cheap. Then give a short grocery list.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A prompt alone is not a safety net, so I added a second layer. After the model answers, the app scans the text for the listed allergens and related foods. For example, a milk allergy also flags paneer, curd, ghee, butter and cheese. If anything shows up, the app shows a red warning and asks you to generate again. The app also reminds you to check ingredient labels, because AI can make mistakes.&lt;/p&gt;

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

&lt;p&gt;Allergies are personal health information, so where the data goes matters.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Private:&lt;/strong&gt; with a local open model, allergy details never leave the laptop. A hosted API would send them to a server I do not control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free:&lt;/strong&gt; no API key, no per-token bill, so a plan costs nothing to generate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline:&lt;/strong&gt; after the one-time model download, it works with no internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable:&lt;/strong&gt; I used the small 1B model so it runs on an ordinary laptop. Changing one line in &lt;code&gt;app.py&lt;/code&gt; switches to a bigger Gemma, and I am not tied to one provider.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I did not benchmark this against a closed model, so I cannot claim it writes better plans. What I can say is that for a small personal tool that handles health details, running open and local fit the job.&lt;/p&gt;

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

&lt;p&gt;Building for one real person kept the scope small. Shrey's one line of feedback became a feature, and the allergen scan came from asking what happens if the small model slips. Next I want to add a download button for the plan and a cuisine option, since the prompt is currently Indian only.&lt;/p&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; the whole project runs on Gemma 3, served locally through Ollama.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>SnapNote</title>
      <dc:creator>Shubham Bawari</dc:creator>
      <pubDate>Sat, 11 Apr 2026 11:10:58 +0000</pubDate>
      <link>https://dev.to/hello_shubham/snapnote-5ge7</link>
      <guid>https://dev.to/hello_shubham/snapnote-5ge7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;SnapNote is a lightweight Chrome Extension that lets you save any ChatGPT or Claude response as a study note in one click. Instead of losing valuable AI-generated answers in an endless chat history, SnapNote injects a "Save as Note" button directly into the AI chat interface. You can tag notes by subject, search through them instantly, and access everything from a clean popup dashboard — all without leaving your browser.&lt;/p&gt;

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

&lt;p&gt;📌 Pin the SnapNote extension to your Chrome toolbar, head to ChatGPT or Claude, ask any question, and click the "Save as Note" button that appears below the response. Open the popup to browse, search, and manage all your saved notes.&lt;br&gt;
&lt;/p&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/shubsolos19" rel="noopener noreferrer"&gt;
        shubsolos19
      &lt;/a&gt; / &lt;a href="https://github.com/shubsolos19/snapnote" rel="noopener noreferrer"&gt;
        snapnote
      &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;📝 SnapNote — AI Study Notes&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Save any ChatGPT or Claude answer as a study note in one click. Search, tag, and export your notes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/shubsolos19/snapnote#" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bd8ef5daae014bbe0ceb571105f9fd72286087c21a53233a96d58cf4a8de5781/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4368726f6d652d457874656e73696f6e2d626c75652e737667" alt="Chrome Extension"&gt;&lt;/a&gt;
&lt;a href="https://github.com/shubsolos19/snapnote#" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f33f2574e51d00f5a5453bee4ce24cdd7fb6906065795a6d99f7cfb05d1d7cb3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f56657273696f6e2d312e302e302d627269676874677265656e2e737667" alt="Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/shubsolos19/snapnote#" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a815108833bf77d1c38c863c21bc305746becf1e730dc98cf1d84adb3ab35927/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d616e69666573742d56332d6f72616e67652e737667" alt="Manifest"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🤖 One-Click Save:&lt;/strong&gt; Instantly save any response from ChatGPT or Claude directly from the chat interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🏷️ Smart Tagging:&lt;/strong&gt; Categorize your notes by subject (e.g., &lt;em&gt;English&lt;/em&gt;, &lt;em&gt;Coding&lt;/em&gt;, or &lt;em&gt;Custom tags&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔍 Search &amp;amp; Filter:&lt;/strong&gt; Quickly find exactly what you're looking for through the intuitive extension popup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💾 Local Storage:&lt;/strong&gt; Notes are safely and securely saved in your browser's local storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚡ Seamless UI:&lt;/strong&gt; Clean, lightweight pop-up and minimally intrusive on-page buttons.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ Project Structure&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The project follows a standard Manifest V3 Chrome Extension architecture:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;SnapNote/
├── 📄 manifest.json   # Extension configuration
├── 📜 content.js      # Injects "Save" button into ChatGPT/Claude
├── 🎨 content.css     # Styles for the Save button and tag picker
├── 🖼️ popup.html      # Extension popup UI structure&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/shubsolos19/snapnote" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;The project is a vanilla JavaScript Chrome Extension built on Manifest V3 — no frameworks, no dependencies, just clean and minimal code.&lt;br&gt;
&lt;/p&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/shubsolos19" rel="noopener noreferrer"&gt;
        shubsolos19
      &lt;/a&gt; / &lt;a href="https://github.com/shubsolos19/snapnote" rel="noopener noreferrer"&gt;
        snapnote
      &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;📝 SnapNote — AI Study Notes&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Save any ChatGPT or Claude answer as a study note in one click. Search, tag, and export your notes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/shubsolos19/snapnote#" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bd8ef5daae014bbe0ceb571105f9fd72286087c21a53233a96d58cf4a8de5781/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4368726f6d652d457874656e73696f6e2d626c75652e737667" alt="Chrome Extension"&gt;&lt;/a&gt;
&lt;a href="https://github.com/shubsolos19/snapnote#" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f33f2574e51d00f5a5453bee4ce24cdd7fb6906065795a6d99f7cfb05d1d7cb3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f56657273696f6e2d312e302e302d627269676874677265656e2e737667" alt="Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/shubsolos19/snapnote#" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a815108833bf77d1c38c863c21bc305746becf1e730dc98cf1d84adb3ab35927/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d616e69666573742d56332d6f72616e67652e737667" alt="Manifest"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🤖 One-Click Save:&lt;/strong&gt; Instantly save any response from ChatGPT or Claude directly from the chat interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🏷️ Smart Tagging:&lt;/strong&gt; Categorize your notes by subject (e.g., &lt;em&gt;English&lt;/em&gt;, &lt;em&gt;Coding&lt;/em&gt;, or &lt;em&gt;Custom tags&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔍 Search &amp;amp; Filter:&lt;/strong&gt; Quickly find exactly what you're looking for through the intuitive extension popup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💾 Local Storage:&lt;/strong&gt; Notes are safely and securely saved in your browser's local storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚡ Seamless UI:&lt;/strong&gt; Clean, lightweight pop-up and minimally intrusive on-page buttons.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ Project Structure&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The project follows a standard Manifest V3 Chrome Extension architecture:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;SnapNote/
├── 📄 manifest.json   # Extension configuration
├── 📜 content.js      # Injects "Save" button into ChatGPT/Claude
├── 🎨 content.css     # Styles for the Save button and tag picker
├── 🖼️ popup.html      # Extension popup UI structure&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/shubsolos19/snapnote" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;SnapNote is built entirely with vanilla JavaScript, HTML, and CSS following the Chrome Extension Manifest V3 architecture. A content script (content.js) observes the DOM of ChatGPT and Claude using a MutationObserver, detects when a new AI response is rendered, and injects a Save button below it. Clicking the button captures the question and answer, attaches a user-defined tag, and stores everything using the Chrome Storage API. The popup (popup.html + popup.js) then reads from storage and renders all saved notes with live search and delete functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;Submitting for Community Favorite — SnapNote solves a real everyday problem for students, developers, and researchers who use AI tools to learn. Instead of re-asking the same questions or digging through old chats, your best AI answers are saved, tagged, and searchable forever. It's simple, it's useful, and it fits naturally into how people already use ChatGPT and Claude daily.&lt;/p&gt;

&lt;p&gt;Team Size: Individual&lt;br&gt;
DEV USERNAME: &lt;a class="mentioned-user" href="https://dev.to/hello_shubham"&gt;@hello_shubham&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
