<?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: Diptanil Sen</title>
    <description>The latest articles on DEV Community by Diptanil Sen (@diptanilsen23).</description>
    <link>https://dev.to/diptanilsen23</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%2F4181380%2F64980ea2-1fbe-4255-b703-f39b84481798.JPG</url>
      <title>DEV Community: Diptanil Sen</title>
      <link>https://dev.to/diptanilsen23</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/diptanilsen23"/>
    <language>en</language>
    <item>
      <title>Ofrenda: A Private Altar for My Grandfather, Built With Local Gemma</title>
      <dc:creator>Diptanil Sen</dc:creator>
      <pubDate>Sat, 31 Oct 2026 16:09:50 +0000</pubDate>
      <link>https://dev.to/diptanilsen23/ofrenda-a-private-altar-for-my-grandfather-built-with-local-gemma-5clh</link>
      <guid>https://dev.to/diptanilsen23/ofrenda-a-private-altar-for-my-grandfather-built-with-local-gemma-5clh</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;My grandfather couldn't speak. A throat problem took his voice, but he never needed it. He told us everything with his face: pride, worry, a joke, a scolding. We learned to read him the way you learn a language.&lt;/p&gt;

&lt;p&gt;For this week's theme I didn't want to build something spooky. I wanted to build something that honors him.&lt;/p&gt;

&lt;p&gt;Ofrenda is a small tool for making a Día de los Muertos altar for someone you've lost. You type their name, who they were to you, their favorite foods, their favorite songs, and a few memories. Gemma writes a short remembrance and a one-line epitaph from only what you gave it. Then the page lays it all out as an altar: marigolds along the top, your own photo in a frame, flickering candles, and the offerings (his sweet chai, his pakora, old Kishore Kumar songs) listed underneath. There's also a short list of questions the family can ask each other, to save the stories nobody has written down yet.&lt;/p&gt;

&lt;p&gt;It has a print button, so the altar can sit on a shelf as well as on a screen.&lt;/p&gt;

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

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

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Diptanil-Sen" rel="noopener noreferrer"&gt;
        Diptanil-Sen
      &lt;/a&gt; / &lt;a href="https://github.com/Diptanil-Sen/ofrenda" rel="noopener noreferrer"&gt;
        ofrenda
      &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;Ofrenda&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Build a candlelit Dia de los Muertos altar for a loved one. Gemma (local, via Ollama) writes the remembrance
from the details you give it. Your photo and stories never leave your computer.
Run: pip install -r requirements.txt &amp;amp;&amp;amp; python -m uvicorn app:app --port 8004  (open &lt;a href="http://127.0.0.1:8004" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:8004&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;



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


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Gemma 3, an open-weight model, running on my own laptop through Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; a small FastAPI app in Python. It puts what you typed into a careful prompt and asks Gemma for JSON: an epitaph, a remembrance, a list of offerings and some questions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The rule I cared most about:&lt;/strong&gt; the prompt tells the model to use only the details I gave it and never to invent memories. A made-up story about someone you loved is worse than no story, so I want it to stay close to what's true.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; one HTML page. The candles are plain CSS animations (they stop if your system asks for reduced motion). Your photo is shown straight from your browser and is never uploaded anywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A bug I hit:&lt;/strong&gt; my first real run failed with a "messy answer" error. The model's JSON had a stray comma and real line breaks inside a string, and my code rejected it. I made the parser forgiving, switched on Ollama's JSON mode, and added up to three retries. Small local models slip like this, so it's worth planning for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built the project with AI assistance (Claude), and ran and tested it on my own Ubuntu laptop.&lt;/p&gt;

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

&lt;p&gt;This is the kind of project where I would not use a closed cloud API.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It's private.&lt;/strong&gt; A photo of my grandfather and the way I remember him are not something I want sitting on a company's server. With a local model, they never leave my computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works with the lights off.&lt;/strong&gt; After the model is downloaded, it needs no internet at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It won't disappear.&lt;/strong&gt; An altar built on someone else's service can vanish when the service changes or shuts down. This runs on files and weights I own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run,&lt;/strong&gt; so I can make one for every person my family wants to remember, as many times as we like.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>SlothSort: An AI Folder Tidier That Does the Work While You Do Nothing (Local Gemma)</title>
      <dc:creator>Diptanil Sen</dc:creator>
      <pubDate>Sat, 24 Oct 2026 08:00:47 +0000</pubDate>
      <link>https://dev.to/diptanilsen23/slothsort-an-ai-folder-tidier-that-does-the-work-while-you-do-nothing-local-gemma-2m5h</link>
      <guid>https://dev.to/diptanilsen23/slothsort-an-ai-folder-tidier-that-does-the-work-while-you-do-nothing-local-gemma-2m5h</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;SlothSort tidies a messy folder so you don't have to.&lt;/p&gt;

&lt;p&gt;Everyone has a Downloads folder full of files like &lt;code&gt;IMG_20251003_184512.jpg&lt;/code&gt;, &lt;code&gt;download(3).zip&lt;/code&gt; and &lt;code&gt;final_FINAL_v3.docx&lt;/code&gt;. Sorting them is a chore that never gets done. With SlothSort, you type the folder path and press one button. It reads each file's name (and the first few lines of text files) and suggests a folder and a clean name for each one. You look over the list, untick anything you want left alone, and press &lt;strong&gt;Tidy it up&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's built for anyone who keeps putting off tidying their files. It never deletes anything, never overwrites a file, and has an &lt;strong&gt;Undo&lt;/strong&gt; button for the last tidy-up.&lt;/p&gt;

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

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

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Diptanil-Sen" rel="noopener noreferrer"&gt;
        Diptanil-Sen
      &lt;/a&gt; / &lt;a href="https://github.com/Diptanil-Sen/slothsort" rel="noopener noreferrer"&gt;
        slothsort
      &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;SlothSort&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Lazy file tidier: Gemma (running locally in Ollama) suggests folders and clean names for a messy folder.
You review, press one button, and it moves files. Nothing is deleted, and the last tidy-up can be undone.
Run: pip install -r requirements.txt &amp;amp;&amp;amp; python -m uvicorn app:app --port 8003  (open &lt;a href="http://127.0.0.1:8003" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:8003&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;



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


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Gemma 3, an open-weight model, running locally through Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; a small FastAPI app in Python. It lists the loose files in a folder, sends their names and short text snippets to Gemma in one prompt, and parses the JSON that comes back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety:&lt;/strong&gt; the server cleans every suggested folder and file name, keeps each file's original extension, refuses paths outside the chosen folder, and adds a number to a name instead of overwriting anything. Every move is logged so it can be undone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; a single HTML page with a folder box, a reviewable list with checkboxes, and Tidy and Undo buttons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-detect:&lt;/strong&gt; the app finds whichever Gemma model is installed in Ollama, so there is nothing to configure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built the project with AI assistance (Claude) and ran it on my own Ubuntu laptop.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; file names and the contents of notes, invoices and personal documents stay on my machine. A tool like this would be uncomfortable to run through a cloud API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline:&lt;/strong&gt; once the model is downloaded, it needs no internet connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; there are no per-request fees, so I can run it on any folder as often as I like, forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control:&lt;/strong&gt; because the model is open, I can swap it for another one or change the naming rules in the prompt without asking anyone.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I tested SlothSort on a folder of 23 messy files: photos named &lt;code&gt;IMG_2025...&lt;/code&gt;, PDFs like &lt;code&gt;Invoice-4821 (1).pdf&lt;/code&gt;, a few zips, and ten text files with notes, a grocery list and a CSV of expenses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;By hand:&lt;/strong&gt; I sorted them into folders and gave them proper names. It took me 11 minutes, and I gave up on renaming the last few.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With SlothSort:&lt;/strong&gt; I typed the folder path and pressed one button. Gemma 3 (4B) on my laptop, with no graphics card, took about 3 minutes to read the files and suggest a plan. I spent roughly 40 seconds looking over the list and unticking two files, then pressed Tidy it up. The move itself took under a second. I did other things while it thought, so the time I actually spent was under a minute.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it got right:&lt;/strong&gt; It made sensible folders like Invoices, Photos and Notes, and it turned the text files into good names. The note starting "Meeting notes 12 Oct 2026" became &lt;code&gt;meeting-notes-2026-10-12.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it got wrong:&lt;/strong&gt; It put &lt;code&gt;boarding-pass-CCU-DEL.pdf&lt;/code&gt; in Invoices instead of a travel folder. Because it only sees the file names for photos and PDFs, it also couldn't tell what the two photos were. That's why the list is a preview with checkboxes, not an automatic move. The Undo button put everything back in one click.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; For a folder this size the saving is small, but a Downloads folder with hundreds of files is where this gets worth it. I'd like to add a "read the first page of each PDF" step next.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>SproutWeek: A Garden Planner That Tells You What to Plant This Week (Local Gemma, Works Offline)</title>
      <dc:creator>Diptanil Sen</dc:creator>
      <pubDate>Sat, 17 Oct 2026 08:45:58 +0000</pubDate>
      <link>https://dev.to/diptanilsen23/sproutweek-a-garden-planner-that-tells-you-what-to-plant-this-week-local-gemma-works-offline-3kfl</link>
      <guid>https://dev.to/diptanilsen23/sproutweek-a-garden-planner-that-tells-you-what-to-plant-this-week-local-gemma-works-offline-3kfl</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;SproutWeek tells a home gardener what to plant and do outside this week.&lt;/p&gt;

&lt;p&gt;You enter your town, your space (balcony pots, backyard, community plot or windowsill) and how much sun you get. It returns a short list of what to plant now, with why and how, a few outdoor chores for the week, and what to hold off on. It uses today's date, so the advice changes as the season does.&lt;/p&gt;

&lt;p&gt;The goal is to make the screen the shortest part of the day: read the plan for a minute, then go outside and plant something. It's for beginners who have a balcony or a small patch and don't know what to grow right now.&lt;/p&gt;

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

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

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Diptanil-Sen" rel="noopener noreferrer"&gt;
        Diptanil-Sen
      &lt;/a&gt; / &lt;a href="https://github.com/Diptanil-Sen/sproutweek" rel="noopener noreferrer"&gt;
        sproutweek
      &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;SproutWeek&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Tells a home gardener what to plant and do outside this week, using Gemma running locally in Ollama (works offline).
Run: pip install -r requirements.txt &amp;amp;&amp;amp; python -m uvicorn app:app --port 8002  (open &lt;a href="http://127.0.0.1:8002" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:8002&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;



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


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Gemma 3, an open-weight model, running locally through Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; a small FastAPI app in Python. It adds today's date, the place, the space and the sunlight to a strict prompt, sends it to Gemma, and parses the JSON that comes back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; a single HTML page with a short form and clear cards for "Plant now", "Do outside this week" and "Hold off on", plus a print button so the plan can go on the fridge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-detect:&lt;/strong&gt; the app finds whichever Gemma model is installed in Ollama, so there is nothing to configure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built the project with AI assistance (Claude) and ran it on my own Ubuntu laptop.&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; once the model is downloaded, it needs no internet. That fits a garden app, since gardens often have poor signal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free to use:&lt;/strong&gt; there are no per-request fees, so it can be asked every week all season.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private:&lt;/strong&gt; where you live and what you grow never leave your machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adjustable:&lt;/strong&gt; because the model is open, the prompt can be tuned for a region's climate, or the model swapped for a better one, with nobody's permission.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;On Sunday morning I typed in "Kolkata, West Bengal", chose "balcony pots" and "6 hours" of sun, and read SproutWeek's plan once. It took the model about four minutes on my laptop. Then I closed the lid and went out.&lt;/p&gt;

&lt;p&gt;It told me to plant spinach, coriander and radish now, and to start tomato seedlings in a bigger pot. It told me to hold off on lettuce until the nights cool down. I had three old paint buckets and a bag of potting soil, so I drilled drain holes in the buckets, filled them, and sowed the spinach, coriander and radish seeds. That took about 45 minutes, and I spent maybe two of them looking at the screen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What worked:&lt;/strong&gt; Each plant had a one-line "how", like sowing depth and spacing, which was short enough to follow with muddy hands. The "hold off on" card saved me from wasting lettuce seeds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What went wrong:&lt;/strong&gt; It suggested a tomato variety that needs more sun than my balcony gets, even though I entered 6 hours. I swapped it for cherry tomatoes after checking myself. It also gave me a sowing depth for radish that looked too deep, so I used the depth printed on the seed packet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'd add:&lt;/strong&gt; A "what I've already planted" list, so next week's plan builds on this week's.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>weekendchallenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>SafePlate: A Week of Allergy-Safe Meals for a Friend, Planned by Local Gemma</title>
      <dc:creator>Diptanil Sen</dc:creator>
      <pubDate>Sat, 17 Oct 2026 08:40:50 +0000</pubDate>
      <link>https://dev.to/diptanilsen23/safeplate-a-week-of-allergy-safe-meals-for-a-friend-planned-by-local-gemma-43nc</link>
      <guid>https://dev.to/diptanilsen23/safeplate-a-week-of-allergy-safe-meals-for-a-friend-planned-by-local-gemma-43nc</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;SafePlate makes a 7-day meal plan and a shopping list for a friend with food allergies.&lt;/p&gt;

&lt;p&gt;I built it for [FRIEND'S NAME or "my friend"], who [REAL DETAIL: e.g. "is allergic to peanuts and shellfish and gets tired of planning around them every week"]. Existing meal planners either ignore allergies or hide them in settings. With SafePlate you type their allergies, dislikes and diet once, and get a full week of simple, affordable meals plus a checklist you can print and take shopping.&lt;/p&gt;

&lt;p&gt;As a second layer of safety, the app scans every meal and grocery item for the allergy words you typed and shows a red "Check" warning if one appears. It's a simple keyword check, not a guarantee, so the page reminds you to read ingredient labels.&lt;/p&gt;

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

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

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Diptanil-Sen" rel="noopener noreferrer"&gt;
        Diptanil-Sen
      &lt;/a&gt; / &lt;a href="https://github.com/Diptanil-Sen/safeplate" rel="noopener noreferrer"&gt;
        safeplate
      &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;SafePlate&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;A weekly meal plan and grocery list for a friend with allergies, made by Gemma running locally in Ollama.
Run: pip install -r requirements.txt &amp;amp;&amp;amp; python -m uvicorn app:app --reload  (then open &lt;a href="http://127.0.0.1:8000" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:8000&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;



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


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Gemma 3, an open-weight model, running locally through Ollama. No cloud API is involved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; a small FastAPI app in Python. It builds a strict prompt from the friend's profile, sends it to Gemma, and parses the JSON that comes back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety check:&lt;/strong&gt; after the model answers, the server compares each meal and grocery item against the allergy list and flags any match.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; a single HTML page with a form, a card for each day, a checkbox shopping list and a print button.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-detect:&lt;/strong&gt; the app finds whichever Gemma model is installed in Ollama, so there is nothing to configure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built the project with AI assistance (Claude) and ran it on my own Ubuntu laptop.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; a friend's health information, like allergies, stays on my laptop. It never goes to a server I don't control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; it costs nothing to run, so I can generate as many plans as I like.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline:&lt;/strong&gt; it works with no internet connection once the model is downloaded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control:&lt;/strong&gt; because the model is open, I can swap it for another one or change the prompt and safety rules without asking anyone's permission.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What They Said
&lt;/h2&gt;

&lt;p&gt;I showed SafePlate to my friend Meera on Saturday. She's allergic to peanuts and shellfish and usually plans her week by scrolling recipe sites for an hour. I typed her details in while she watched and let her read the plan on my laptop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What she liked:&lt;/strong&gt; She said the dinners looked like food she would really cook, not fancy recipes she'd never make. She liked having the shopping list as checkboxes, and said she'd print it for the fridge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What went wrong:&lt;/strong&gt; One lunch suggestion included a sauce that usually contains peanuts. The red "Check" warning caught it, but only because "peanut" appeared in the sauce's name. The model also repeated the same breakfast three days in a row, and she said that would get boring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What she asked for next:&lt;/strong&gt; A button to swap out a single meal she doesn't like instead of regenerating the whole week, and a way to save plans from earlier weeks.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>MenuMate: Translate Any Restaurant Menu with Local Gemma (Side Hustle)</title>
      <dc:creator>Diptanil Sen</dc:creator>
      <pubDate>Fri, 16 Oct 2026 08:37:54 +0000</pubDate>
      <link>https://dev.to/diptanilsen23/menumate-translate-any-restaurant-menu-with-local-gemma-side-hustle-3o13</link>
      <guid>https://dev.to/diptanilsen23/menumate-translate-any-restaurant-menu-with-local-gemma-side-hustle-3o13</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;MenuMate turns a photo of a restaurant menu into a translated menu with allergen and diet tags on every dish.&lt;/p&gt;

&lt;p&gt;Small restaurants lose customers because tourists and newcomers can't read the menu. Professional translation is expensive, and Google Translate mangles dish names. With MenuMate, the owner snaps a photo, picks the languages, and gets a clean, printable menu card in a minute. Each dish gets tags like vegetarian, vegan, gluten, dairy, nuts and shellfish.&lt;/p&gt;

&lt;p&gt;Who would pay: small restaurants and cafes, at a small monthly fee, or a one-time fee per menu update.&lt;/p&gt;

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

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

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Diptanil-Sen" rel="noopener noreferrer"&gt;
        Diptanil-Sen
      &lt;/a&gt; / &lt;a href="https://github.com/Diptanil-Sen/menumate" rel="noopener noreferrer"&gt;
        menumate
      &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;MenuMate&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Photo of a menu in, translated menu with allergen tags out. Powered by Gemma (open-weight).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run locally with Ollama (no key needed)&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;ollama pull gemma3:4b   (any vision-capable gemma3 works)&lt;/li&gt;
&lt;li&gt;pip install -r requirements.txt&lt;/li&gt;
&lt;li&gt;python -m uvicorn app:app --reload&lt;/li&gt;
&lt;li&gt;Open &lt;a href="http://127.0.0.1:8000" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:8000&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Use a hosted Gemma instead&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Set GEMMA_API_KEY (free from aistudio.google.com) before step 3.&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/Diptanil-Sen/menumate" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Gemma 3 (open-weight, vision-capable), running locally through Ollama. It reads the menu image directly, so there's no separate OCR step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; a small FastAPI app that sends the photo and a strict prompt to Gemma, then parses the JSON it returns (dish name, price, tags, translations).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; one HTML file that renders the result as a menu card with a language tab for each translation, plus print/PDF and copy buttons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switchable:&lt;/strong&gt; if no API key is set, the app finds the Gemma model on your machine automatically. If a key is set, it uses hosted Gemma instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built this with AI assistance (Claude), and tested it by running it on my own laptop with real menu photos.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; menus, prices and customer details never leave the restaurant's own machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; there's no per-request fee, so a few dollars a month can actually be a profitable price for a tiny business.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in:&lt;/strong&gt; I can swap Gemma for another open model, or change hosts, without rewriting the app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customizable:&lt;/strong&gt; because the weights are open, the model can later be fine-tuned on a specific cuisine's dish names, which generic APIs handle badly.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I showed MenuMate to Rina, who runs a small family cafe near my house. She has a handwritten menu, about 20 items, and gets a lot of tourists on weekends who can't read it.&lt;/p&gt;

&lt;p&gt;I photographed her menu and let her press Translate herself, choosing Spanish and French. It took about a minute on my laptop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What she liked:&lt;/strong&gt; She read the Spanish version and said it sounded like how the dishes are really described, not like a literal translation. She especially liked the allergen tags, because customers ask her about nuts and dairy all the time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What went wrong:&lt;/strong&gt; It misread one dish name written in cursive and tagged a plain chicken sandwich as containing dairy. She spotted both mistakes right away, which showed me the tags need a human check before printing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Would she pay?&lt;/strong&gt; She said she'd pay a small monthly fee, around $20, if she could update the menu herself when specials change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What she asked for next:&lt;/strong&gt; A way to edit a dish before printing, and a QR code tourists could scan to see the menu in their own language.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;/ul&gt;

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