<?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: Varnit Kumar</title>
    <description>The latest articles on DEV Community by Varnit Kumar (@kumarvarnit16).</description>
    <link>https://dev.to/kumarvarnit16</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: Varnit Kumar</title>
      <link>https://dev.to/kumarvarnit16</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kumarvarnit16"/>
    <language>en</language>
    <item>
      <title>SlothDesk 🦥: You Do Nothing. Your Desktop Clutter Sorts, Renames, and Audits Itself</title>
      <dc:creator>Varnit Kumar</dc:creator>
      <pubDate>Sun, 25 Oct 2026 09:02:50 +0000</pubDate>
      <link>https://dev.to/kumarvarnit16/slothdesk-you-do-nothing-your-desktop-clutter-sorts-renames-and-audits-itself-5go3</link>
      <guid>https://dev.to/kumarvarnit16/slothdesk-you-do-nothing-your-desktop-clutter-sorts-renames-and-audits-itself-5go3</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;Every modern knowledge worker dreads the &lt;strong&gt;Downloads and Desktop Black Hole&lt;/strong&gt;. Over days and weeks, our workspaces accumulate hundreds of cryptically named files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Screenshot_2026-03-12_at_11.23.41.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;INV_82910_final(1).pdf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;receipt_unnamed.jpg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;analytics_churn_export_raw(3).csv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mutual_nda_acme_unsigned.pdf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Organizing them manually requires opening each file, deciphering invoice numbers, typing dates, creating nested folders, resolving duplicate collisions, and dragging files — wasting &lt;strong&gt;3+ hours every month&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SlothDesk 🦥&lt;/strong&gt; is an autonomous ambient background daemon that operates at a calm, deliberate &lt;strong&gt;"Sloth Pace"&lt;/strong&gt;. As chaotic downloads hit your drop zone:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Magic Header Inspection&lt;/strong&gt;: Inspects raw binary magic bytes to verify genuine file types and isolate malicious executables (&lt;code&gt;MZ&lt;/code&gt;, &lt;code&gt;ELF&lt;/code&gt;) into a quarantined vault.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-Device Gemma 3 (4B Vision/Text)&lt;/strong&gt;: Inspects textual contents and visual screenshots locally with zero cloud surveillance, extracting dates, vendors, amounts, and subjects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Semantic Renaming&lt;/strong&gt;: Renames files using clean ISO-8601 timestamps and extracted entities (e.g., &lt;code&gt;2026-10-18_GitHub_Enterprise_Invoice_$21.pdf&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cryptographic Proof of Zero Data Loss&lt;/strong&gt;: Computes dual SHA-256 checksums before and after movement, guaranteeing 100% data integrity with zero data alteration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs Ambient Morning Digest&lt;/strong&gt;: While you sleep, SlothDesk synthesizes a soothing 30-second audio morning brief with an interactive waveform player:
&amp;gt; &lt;em&gt;"Good morning. While you were sleeping peacefully, SlothDesk swept through your downloads folder at a calm, deliberate pace. I sorted 18 messy files into clean tax and code vaults. All SHA-256 checksums verified. You did zero manual work. Go back to sleep."&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;




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

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Web Application&lt;/strong&gt;: &lt;a href="https://sloth-desk-lemon.vercel.app" rel="noopener noreferrer"&gt;https://sloth-desk-lemon.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Production DNS&lt;/strong&gt;: &lt;a href="https://slothdesk.tech" rel="noopener noreferrer"&gt;https://slothdesk.tech&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📖 &lt;strong&gt;Interactive API Documentation (Swagger)&lt;/strong&gt;: Available under &lt;code&gt;/docs&lt;/code&gt; on the backend.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Interactive Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One-Click "Seed Chaotic Desktop"&lt;/strong&gt;: Injects realistic messy downloads (invoices, coffee receipts, UI screenshots, specs) so you can test automated sorting instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive File Comparison Drawer&lt;/strong&gt;: Split-view showing original chaotic metadata side-by-side with Gemma 3's semantic extraction and confidence pills.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tactile Sloth Governor&lt;/strong&gt;: Toggle between &lt;strong&gt;Hibernate&lt;/strong&gt; (25s idle-only batching) and &lt;strong&gt;Active Sweep&lt;/strong&gt; (8s cadence).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bespoke Waveform Scrubber&lt;/strong&gt;: Play, seek, and adjust speeds (0.75x Sloth speed) on the ElevenLabs morning voice brief.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real Client-Side Blob Export&lt;/strong&gt;: Generate and download dynamic CSV and JSON audit manifests directly in the browser with cryptographic SHA-256 proofs.&lt;/li&gt;
&lt;/ul&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/vannu07" rel="noopener noreferrer"&gt;
        vannu07
      &lt;/a&gt; / &lt;a href="https://github.com/vannu07/SlothDesk" rel="noopener noreferrer"&gt;
        SlothDesk
      &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;SlothDesk 🦥&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"You do nothing. Your desktop clutter sorts, renames, and audits itself."&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Built for Hacktoberfest 2026 Open-Source AI Challenge — Week 3: "Slow and Steady" (International Sloth Day).&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://fastapi.tiangolo.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/691663aa6a21b9b47c6f4a4507e850b30fa47e3399e170ebcc873209caeba905/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4261636b656e642d466173744150495f302e3131352d3030393638382e737667" alt="FastAPI"&gt;&lt;/a&gt;
&lt;a href="https://nextjs.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b5dfb1feeb1dde4c3391eaf8b76bf44151f9976f8c592e33d83fbce78f48ae2e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46726f6e74656e642d4e6578742e6a735f31365f547572626f7061636b2d626c61636b2e737667" alt="Next.js"&gt;&lt;/a&gt;
&lt;a href="https://ai.google.dev/gemma" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08dd515f79157a37551fd93c312830dd35b84fbcd952ba00a7b20e9e0695f17c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41492d47656d6d615f335f2834425f566973696f6e25324654657874292d3432383546342e737667" alt="Gemma 3"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vannu07/SlothDesk/./backend/tests" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/deb839890c0900813c0d9bd5a3e13a91453ca57f6995e6f161203c6e9a22b4ba/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54657374732d313425324631345f5061737365642d3130623938312e737667" alt="Tests"&gt;&lt;/a&gt;
&lt;a href="https://slothdesk.tech" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/81a8fafda6a6229652bbc73551a5ab0125a613a91c4bd62e238fcef2f17c62c0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6976655f444e532d736c6f74686465736b2e746563682d656d6572616c642e737667" alt="Domain"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🏆 Partner Track Submissions &amp;amp; Winning Criteria&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Partner Track&lt;/th&gt;
&lt;th&gt;Implementation Highlight&lt;/th&gt;
&lt;th&gt;Technical Proof&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; ($200)&lt;/td&gt;
&lt;td&gt;Autonomous local &lt;strong&gt;Gemma 3 (4B Vision/Text)&lt;/strong&gt; multimodal pipeline via Ollama REST API with deterministic structured JSON schemas. Extracts entities, vendors, amounts, dates, and assigns standardized semantic names (&lt;code&gt;YYYY-MM-DD_Vendor_Subject.ext&lt;/code&gt;). Zero cloud surveillance.&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/vannu07/SlothDesk/backend/app/services/classifier.py" rel="noopener noreferrer"&gt;&lt;code&gt;classifier.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt; ($200)&lt;/td&gt;
&lt;td&gt;Production containerization via multi-stage non-privileged Docker image (&lt;code&gt;UID 10001&lt;/code&gt;), 10GB persistent disk mount &lt;code&gt;/app/data&lt;/code&gt;, zero-downtime health probes (&lt;code&gt;/api/health/live&lt;/code&gt;, &lt;code&gt;/api/health/ready&lt;/code&gt;), and 1-click blueprint.&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/vannu07/SlothDesk/render.yaml" rel="noopener noreferrer"&gt;&lt;code&gt;render.yaml&lt;/code&gt;&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/vannu07/SlothDesk/backend/Dockerfile" rel="noopener noreferrer"&gt;&lt;code&gt;Dockerfile&lt;/code&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt; ($100)&lt;/td&gt;
&lt;td&gt;Ambient sleepy morning audio digest narrated via ElevenLabs text-to-speech (&lt;code&gt;George&lt;/code&gt; / &lt;code&gt;JBFqnCBsd6RMkjVDRZzb&lt;/code&gt; warm voice) with custom interactive waveform scrubber and audio synthesis fallback.&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/vannu07/SlothDesk/backend/app/services/voice_digest.py" rel="noopener noreferrer"&gt;&lt;code&gt;voice_digest.py&lt;/code&gt;&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/vannu07/SlothDesk/frontend/src/components/MorningBriefPlayer.tsx" rel="noopener noreferrer"&gt;&lt;code&gt;MorningBriefPlayer.tsx&lt;/code&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Best&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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/vannu07/SlothDesk" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/vannu07/SlothDesk" rel="noopener noreferrer"&gt;https://github.com/vannu07/SlothDesk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License&lt;/strong&gt;: MIT Open Source&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  1. Architecture &amp;amp; Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-Weight AI Pipeline&lt;/strong&gt;: Google &lt;strong&gt;Gemma 3 (4B Multimodal Vision/Text)&lt;/strong&gt; running on-device via Ollama REST API with deterministic JSON schema enforcement and a deterministic mock fallback for CI/CD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend &amp;amp; Security Middleware&lt;/strong&gt;: Python &lt;strong&gt;FastAPI&lt;/strong&gt; + &lt;strong&gt;SQLModel&lt;/strong&gt; (async SQLAlchemy + aiosqlite):

&lt;ul&gt;
&lt;li&gt;Path traversal containment guard (&lt;code&gt;os.path.commonpath&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Raw magic byte validator (&lt;code&gt;%PDF&lt;/code&gt;, &lt;code&gt;PNG&lt;/code&gt;, &lt;code&gt;JFIF&lt;/code&gt;, &lt;code&gt;RIFF/WEBP&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Token-bucket in-memory rate limiter on ingest endpoints.&lt;/li&gt;
&lt;li&gt;Dual SHA-256 cryptographic verification before and after moving.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ambient Audio Narration&lt;/strong&gt;: &lt;strong&gt;ElevenLabs&lt;/strong&gt; Text-to-Speech API (warm ambient narrator setting) paired with an offline pure-Python harmonic synthesizer generating gentle ambient chords.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Design System&lt;/strong&gt;: &lt;strong&gt;Next.js 16 (App Router + Turbopack)&lt;/strong&gt; crafted with a bespoke Swiss-inspired technical dark mode (deep slate &lt;code&gt;#090a0f&lt;/code&gt;, titanium borders &lt;code&gt;#1e2230&lt;/code&gt;, subtle emerald and warm amber status lights).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Pipelines&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Turnkey &lt;strong&gt;Render Blueprint&lt;/strong&gt; (&lt;code&gt;render.yaml&lt;/code&gt;) with 10GB persistent disk storage and zero-downtime health probes (&lt;code&gt;/api/health/live&lt;/code&gt;, &lt;code&gt;/api/health/ready&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Root &lt;strong&gt;Vercel Multi-Service Configuration&lt;/strong&gt; (&lt;code&gt;vercel.json&lt;/code&gt;) linking Next.js and FastAPI with internal service bindings (&lt;code&gt;INTERNAL_BACKEND_URL&lt;/code&gt;).
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A[Chaotic Desktop &amp;amp; Downloads] --&amp;gt; B[Magic Byte Header Guard]
    B --&amp;gt; C[Pre-Move SHA-256 Hash]
    C --&amp;gt; D[Gemma 3 4B Multimodal Classifier]
    D --&amp;gt; E[Semantic Renamer &amp;amp; Collision Resolver]
    E --&amp;gt; F[Atomic Move to Standardized Vault]
    F --&amp;gt; G[Post-Move SHA-256 Proof Verification]
    G --&amp;gt; H[ElevenLabs Morning Audio Briefing]
    G --&amp;gt; I[Live Audit Log &amp;amp; Manifest Export]&lt;/code&gt;&lt;/pre&gt;






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

&lt;p&gt;Your downloads folder contains your most sensitive personal data: tax returns (&lt;code&gt;W-2&lt;/code&gt;, &lt;code&gt;1099&lt;/code&gt;), medical receipts, bank statements, client NDAs, and private codebase screenshots. &lt;/p&gt;

&lt;p&gt;Sending all of these unvetted files to closed, proprietary cloud APIs exposes users to data harvesting, cloud surveillance, and third-party data breaches. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open innovation makes privacy-first desktop automation possible&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On-Device Autonomy&lt;/strong&gt;: By utilizing &lt;strong&gt;open-weight models like Gemma 3 (4B)&lt;/strong&gt;, SlothDesk processes private invoices and documents locally on your own machine. Your sensitive financial receipts never leave your hard drive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Determinism &amp;amp; Auditability&lt;/strong&gt;: Open-source models allow developers to inspect, audit, and constrain AI outputs with exact JSON schema enforcement, removing arbitrary cloud model deprecations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Cloud Rent&lt;/strong&gt;: You don't need a $20/month subscription or cloud API credits just to organize files on your own computer.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  Zero Clicks. Zero Effort.
&lt;/h3&gt;

&lt;p&gt;Normally, an organized desktop requires:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Opening the file to see what it is (10 seconds).&lt;/li&gt;
&lt;li&gt;Figuring out the date, vendor, and amount (15 seconds).&lt;/li&gt;
&lt;li&gt;Renaming &lt;code&gt;INV_82910_final(1).pdf&lt;/code&gt; $\to$ &lt;code&gt;2026-10-18_GitHub_Enterprise_Invoice_$21.pdf&lt;/code&gt; (15 seconds).&lt;/li&gt;
&lt;li&gt;Creating or finding the right folder and moving the file (10 seconds).&lt;/li&gt;
&lt;li&gt;Resolving duplicate names if they collide (10 seconds).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Total manual effort&lt;/strong&gt;: ~1 minute per file. Across 180 files accumulated in a month, that is &lt;strong&gt;3 full hours of tedious, dreaded manual chore&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With SlothDesk&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You drop files in the folder (or let the daemon monitor your downloads black hole).&lt;/li&gt;
&lt;li&gt;You walk away or go to sleep.&lt;/li&gt;
&lt;li&gt;SlothDesk sorts, renames, resolves duplicate collisions, computes SHA-256 proofs, and narrates a 30-second audio summary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Effort required&lt;/strong&gt;: &lt;strong&gt;0 clicks. 0 seconds.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  1. Best Use of Gemma ($200)
&lt;/h3&gt;

&lt;p&gt;SlothDesk runs on-device &lt;strong&gt;Gemma 3 (4B Vision/Text)&lt;/strong&gt; through an Ollama REST pipeline with strict JSON schema enforcement. Gemma inspects visual UI captures and textual document previews to infer structured metadata (&lt;code&gt;vendor&lt;/code&gt;, &lt;code&gt;date&lt;/code&gt;, &lt;code&gt;amount&lt;/code&gt;, &lt;code&gt;topic&lt;/code&gt;), assigning standardized ISO-8601 semantic names and sorting items into dedicated vaults.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Best Use of Render ($200)
&lt;/h3&gt;

&lt;p&gt;Containerized deployment with a multi-stage production Dockerfile running as non-root &lt;code&gt;appuser&lt;/code&gt; (UID 10001). SlothDesk utilizes Render's &lt;strong&gt;Persistent Disk&lt;/strong&gt; (&lt;code&gt;/app/data&lt;/code&gt;) to preserve sorted file vaults across redeploys, accompanied by zero-downtime health probes (&lt;code&gt;/api/health/live&lt;/code&gt;, &lt;code&gt;/api/health/ready&lt;/code&gt;) defined in &lt;code&gt;render.yaml&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Best Use of ElevenLabs ($100)
&lt;/h3&gt;

&lt;p&gt;SlothDesk leverages the &lt;strong&gt;ElevenLabs API&lt;/strong&gt; to synthesize an ambient, sleepy morning brief narrated by a warm voice (&lt;code&gt;JBFqnCBsd6RMkjVDRZzb&lt;/code&gt;). Paired with a bespoke waveform scrubber in the Next.js frontend, users can wake up, listen to their clutter briefing at 0.75x "Sloth Speed", and inspect what the daemon sorted while they slept.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Best Use of a .tech Domain ($100)
&lt;/h3&gt;

&lt;p&gt;Configured with production DNS mappings for &lt;strong&gt;&lt;code&gt;https://slothdesk.tech&lt;/code&gt;&lt;/strong&gt; and &lt;code&gt;https://api.slothdesk.tech&lt;/code&gt;, hardened with strict security headers (CSP, HSTS, X-Frame-Options: DENY) and CORS origins.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>DrawerLocal: Your receipts, sorted. Your data, never uploaded.</title>
      <dc:creator>Varnit Kumar</dc:creator>
      <pubDate>Sun, 18 Oct 2026 11:04:40 +0000</pubDate>
      <link>https://dev.to/kumarvarnit16/drawerlocal-your-receipts-sorted-your-data-never-uploaded-1g28</link>
      <guid>https://dev.to/kumarvarnit16/drawerlocal-your-receipts-sorted-your-data-never-uploaded-1g28</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;Every tax season, millions of freelancers, consultants, and boutique agency owners face the same dreaded chore: spending hours digging through crumpled physical receipts, PDFs, and invoices to itemize Schedule C deductions. &lt;/p&gt;

&lt;p&gt;Most cloud-based receipt scanners present severe roadblocks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Confidentiality &amp;amp; NDA Violations&lt;/strong&gt;: Client dinners, NDA-bound project travel, private vendor addresses, and credit card slips cannot legally or ethically be uploaded to third-party multi-tenant cloud AI models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subscription Fatigue&lt;/strong&gt;: Freelancers pay $20–$50/month for simple document OCR tools with arbitrary upload limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hallucination Risk&lt;/strong&gt;: Standard cloud LLMs frequently hallucinate digits without auditable bounding boxes or confidence metrics.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;DrawerLocal&lt;/strong&gt; solves this with an offline-first, open-weight AI receipt &amp;amp; invoice intelligence suite designed as a standalone side hustle that privacy-conscious professionals gladly pay for.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;100% On-Device AI Vision&lt;/strong&gt;: Powered by Google’s open-weight &lt;strong&gt;Gemma 3 (4B Vision)&lt;/strong&gt; model running locally through Ollama. No receipt image ever leaves the user's computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditable Visual Inspection&lt;/strong&gt;: Interactive bounding boxes map optical extractions directly back to document coordinates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IRS Schedule C Auto-Categorization&lt;/strong&gt;: Automatically categorizes expenses into IRS tax lines (Line 24b - Meals 50%, Line 9 - Travel, Line 18 - Office Supplies, Line 27a - Software &amp;amp; SaaS).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant Tax Export&lt;/strong&gt;: Generates clean CSV spreadsheets formatted for TurboTax and CPA review.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Who Pays For It?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Freelancers &amp;amp; Solopreneurs&lt;/strong&gt;: Drowning in 50–200 receipts/month who want a one-time purchase or private self-hosted utility instead of an ongoing $400/year QuickBooks subscription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent Contractors (Law, Healthcare, Tech)&lt;/strong&gt;: Professionals bound by strict non-disclosure agreements who cannot use cloud AI for client receipts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digital Nomads&lt;/strong&gt;: Traveling professionals needing fast offline receipt extraction on planes and trains without reliable internet.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Web App (Vercel)&lt;/strong&gt;: &lt;a href="https://drawer-local.vercel.app/" rel="noopener noreferrer"&gt;https://drawer-local.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Local Engine&lt;/strong&gt;: Includes instant 1-click test scenarios (Delta Air Lines, OpenAI Credits, WeWork Day Office) to test the extraction pipeline.&lt;/li&gt;
&lt;/ul&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/vannu07" rel="noopener noreferrer"&gt;
        vannu07
      &lt;/a&gt; / &lt;a href="https://github.com/vannu07/DrawerLocal" rel="noopener noreferrer"&gt;
        DrawerLocal
      &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;DrawerLocal 🗄️⚡&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Your receipts, sorted. Your data, never uploaded."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/31c41b7d0178448c2f3fee5722b93bd8cbd72ac691e7d8af18b1bc24d9704d3e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6578742e6a732d31355f28547572626f7061636b292d626c61636b3f7374796c653d666f722d7468652d6261646765266c6f676f3d6e6578742e6a73" alt="Next.js 15"&gt;&lt;/a&gt;
&lt;a href="https://fastapi.tiangolo.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/da41f9ca6db6672589d840ba3b94fa8c04cfe9880076593b49ce2e4453470a45/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f466173744150492d302e3131352b2d3030393638383f7374796c653d666f722d7468652d6261646765266c6f676f3d66617374617069" alt="FastAPI"&gt;&lt;/a&gt;
&lt;a href="https://ollama.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/88c4091da794c3408ef4a1c62ef9b976004c2d2e93cb091aa82264d0817991f0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41495f566973696f6e2d47656d6d615f335f284f6c6c616d61292d3432383546343f7374796c653d666f722d7468652d6261646765266c6f676f3d676f6f676c65" alt="Open-Weight AI"&gt;&lt;/a&gt;
&lt;a href="https://vercel.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ecee7f7cdadae9fcc6f5a08503fd290a41c39ddb9b9f717c924ce6af45517a16/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f795f46726f6e74656e642d56657263656c2d3030303030303f7374796c653d666f722d7468652d6261646765266c6f676f3d76657263656c" alt="Deploy with Vercel"&gt;&lt;/a&gt;
&lt;a href="https://render.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0bd449cce5729772f59b684917b35098560a4fef974b3e3a036e3fcbd6effa9a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f795f4261636b656e642d52656e6465722d3436453342373f7374796c653d666f722d7468652d6261646765266c6f676f3d72656e646572" alt="Deploy with Render"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vannu07/DrawerLocal/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/53aca322dc4e591856de52eaebbb2522c66b5c3648de7ebf8cfbd4d545581222/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d656d6572616c643f7374796c653d666f722d7468652d6261646765" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/vannu07/DrawerLocal/drawerlocal_hero.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%2Fvannu07%2FDrawerLocal%2FHEAD%2Fdrawerlocal_hero.jpg" alt="DrawerLocal hero"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💡 The Problem: The Tax-Time Freelancer Nightmare&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Every tax season, millions of freelancers, independent contractors, and boutique agency owners face the same dreaded ritual: digging through shoe boxes, email folders, and camera rolls to compile business receipts and invoice records for Schedule C deductions.&lt;/p&gt;
&lt;p&gt;Existing cloud solutions (Expensify, QuickBooks, cloud LLMs) present major friction points:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Confidentiality Risks&lt;/strong&gt;: Receipts contain client names, NDA-protected travel destinations, private addresses, and banking details. Freelancers cannot risk uploading sensitive client data into closed third-party cloud AI models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subscription Fatigue&lt;/strong&gt;: Freelancers pay $20–$50/month for simple document OCR tools with arbitrary document limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hallucination Anxiety&lt;/strong&gt;: Pure cloud LLMs often hallucinate digits on crumpled receipts, risking tax audit penalties without an explicit confidence-scoring or verification step.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🎯 The Solution: DrawerLocal&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;DrawerLocal&lt;/strong&gt; is an offline-first, open-weight AI receipt &amp;amp; invoice intelligence suite designed as a standalone side-hustle…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vannu07/DrawerLocal" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The entire codebase is open-source under the MIT License:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Next.js 16 (App Router), Tailwind CSS v4, PostCSS, responsive glassmorphism design system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: FastAPI, SQLModel, SQLite, background task extraction pipeline with local Gemma 3 provider abstraction.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  1. Open-Weight AI Core: Gemma 3 (4B Vision)
&lt;/h3&gt;

&lt;p&gt;At the heart of DrawerLocal is Google's &lt;strong&gt;Gemma 3 (4B Vision)&lt;/strong&gt; open-weight model executed locally via &lt;strong&gt;Ollama&lt;/strong&gt;. &lt;br&gt;
We engineered a strict structured JSON extraction prompt that outputs normalized vendor names, ISO-8601 transaction dates, line items, currency codes, and exact sales tax/VAT breakdowns.&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="c1"&gt;# Provider abstraction snippet (backend/app/services/provider.py)
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OllamaProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ModelProvider&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;extract_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;image_bytes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;b64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_bytes&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma3:4b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BASE_PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;images&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;b64&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stream&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AsyncClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;60.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/api/generate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Zero-Cost Deterministic Demo Fallback
&lt;/h3&gt;

&lt;p&gt;To ensure judges, reviewers, and users can immediately test the entire application without needing an 8GB GPU or local Ollama installation, DrawerLocal features an automatic deterministic mock engine when &lt;code&gt;DEMO_MODE=true&lt;/code&gt; is set.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Fullstack Architecture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI + SQLModel&lt;/strong&gt;: Persists itemized records, confidence scores, and custom vendor classification rules to an on-disk SQLite database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16 App Router&lt;/strong&gt;: Built with custom dark-mode glassmorphism, dynamic SVG geometry constraints, and instant client-side CSV blob generation.&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;Guaranteed Privacy via Zero Cloud Egress&lt;/strong&gt;:
Closed LLM APIs (OpenAI, Anthropic) process sensitive user financial documents on remote servers. Open-weight models like &lt;strong&gt;Gemma 3&lt;/strong&gt; enable the entire AI inference lifecycle to run on-device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable Unit Economics&lt;/strong&gt;:
A side hustle charging $49 for a lifetime desktop license or $5/month would quickly burn out on closed API token bills. Open-weight models cost $0.00 per token once downloaded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditability &amp;amp; Zero Vendor Lock-in&lt;/strong&gt;:
The open weights can be run on CPU or GPU via Ollama, vLLM, or llama.cpp, guaranteeing long-term software independence.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;I shared DrawerLocal with Sarah, a freelance brand designer managing 12 active client retainers. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I used to spend the first weekend of every month matching coffee receipts, Uber rides, and software subscriptions to client invoices. Because I work under strict NDAs, I couldn't upload receipts with client names to random AI tools. DrawerLocal sorted 38 receipts in 3 minutes completely on my MacBook without uploading anything. I would easily pay $49 for this as a Mac app."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sarah itemized &lt;strong&gt;$418.60&lt;/strong&gt; in deductible business expenses in her first test session.&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;: Built natively around Google’s open-weight &lt;strong&gt;Gemma 3 (4B Vision)&lt;/strong&gt; model for on-device OCR, line-item parsing, and tax deduction scoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt;: Production-ready &lt;code&gt;render.yaml&lt;/code&gt; configuration and Dockerfile for containerized deployment of the FastAPI engine and persistent SQLite storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of a .tech Domain&lt;/strong&gt;: Targeted for launch at &lt;code&gt;drawerlocal.tech&lt;/code&gt; as an independent software business for freelancers.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ for the Hacktoberfest Open-Source AI Challenge.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Last Light: An Open-Source AI Walk Ticket That Tells You to Put Your Phone Away</title>
      <dc:creator>Varnit Kumar</dc:creator>
      <pubDate>Sat, 10 Oct 2026 18:24:45 +0000</pubDate>
      <link>https://dev.to/kumarvarnit16/last-light-an-open-source-ai-walk-ticket-that-tells-you-to-put-your-phone-away-mf9</link>
      <guid>https://dev.to/kumarvarnit16/last-light-an-open-source-ai-walk-ticket-that-tells-you-to-put-your-phone-away-mf9</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;&lt;strong&gt;Last Light&lt;/strong&gt; is an open-source AI walk ticket that tells you to put your phone away.&lt;/p&gt;

&lt;p&gt;Most outdoor apps give you more things to look at. Last Light does the opposite. You choose a city (or use your own location), pick a walk length, describe the sky and ground, and it issues a short dusk-walk ticket:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⏰ A &lt;strong&gt;leave-by time&lt;/strong&gt; and &lt;strong&gt;sunset direction&lt;/strong&gt; ("Leave by 17:42. Walk west.")&lt;/li&gt;
&lt;li&gt;🧭 A destination-free route suggestion and estimated distance&lt;/li&gt;
&lt;li&gt;📈 A &lt;strong&gt;walk-quality score&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;👀 Four sensory prompts: look, listen, touch, notice&lt;/li&gt;
&lt;li&gt;📵 One rule: &lt;em&gt;"Phone in a pocket that is not your hand."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;⏳ A &lt;strong&gt;Pocket Mode&lt;/strong&gt; countdown, a &lt;strong&gt;printable ticket&lt;/strong&gt;, optional voice narration, and a private field note stored only in your browser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's for anyone who wants a simple reason to step outside at the end of the day. The website is useful for less than a minute, and the goal is to help you leave it. It is intentionally not a chatbot, social feed, map app, habit tracker, or recommendation engine.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://raw.githubusercontent.com/vannu07/Touch-Grass/main/docs/last-light-preview.svg" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;raw.githubusercontent.com&lt;/span&gt;
          

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


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

&lt;p&gt;🌅 &lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://touch-grass-beryl.vercel.app/" rel="noopener noreferrer"&gt;https://touch-grass-beryl.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose a city or use your door.&lt;/li&gt;
&lt;li&gt;Select a walk duration.&lt;/li&gt;
&lt;li&gt;Describe the sky and ground.&lt;/li&gt;
&lt;li&gt;Issue a ticket.&lt;/li&gt;
&lt;li&gt;Read it, print it, or start Pocket Mode.&lt;/li&gt;
&lt;li&gt;Put the phone away.&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/vannu07" rel="noopener noreferrer"&gt;
        vannu07
      &lt;/a&gt; / &lt;a href="https://github.com/vannu07/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;Last Light&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/vannu07/Touch-Grass/docs/last-light-preview.svg"&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%2Fvannu07%2FTouch-Grass%2FHEAD%2Fdocs%2Flast-light-preview.svg" alt="Animated Last Light dusk walk ticket preview" width="100%"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;The screen is the shortest part.&lt;/strong&gt;&lt;br&gt;
  A local-first dusk walk ticket that gets you outside, then gets out of the way
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/vannu07/Touch-Grass/actions" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/91ceb46ead69d42fd3e22eb1bdbd1c5b716ce3706f4e3d85b9fc986bf4de7cbe/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f76616e6e7530372f546f7563682d47726173732f63692e796d6c3f7374796c653d666c61742d737175617265266c6162656c3d6275696c64" alt="Build status"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/vannu07/Touch-Grass" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/26b8200094d75fb2fb7df6884a9ef213f8c0474b8b39e004220ba09ef2b14046/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f76616e6e7530372f546f7563682d47726173733f7374796c653d666c61742d737175617265" alt="MIT License"&gt;&lt;/a&gt;
  &lt;a href="https://www.python.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/815049299ed513df5bbc7faca1eaa01f82050be1e39f837b265da0e885fed814/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31312532422d3337373641423f7374796c653d666c61742d737175617265266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465" alt="Python 3.11 or newer"&gt;&lt;/a&gt;
  &lt;a href="https://fastapi.tiangolo.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9bd2817dc84bc8757c7af56544ab43f1252cca8007fee0360d008c3ce95e67cb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4150492d466173744150492d3030393638383f7374796c653d666c61742d737175617265266c6f676f3d66617374617069266c6f676f436f6c6f723d7768697465" alt="FastAPI"&gt;&lt;/a&gt;
  &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/1536d78eac1ab3c190575187ae2a07a275ec95df67c94a10532b98c6822cb7d0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f546f75636825323047726173732d6630366333653f7374796c653d666c61742d737175617265" alt=" Touch Grass"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Last Light&lt;/strong&gt; turns sunset geometry, local climate signals, and open-weight AI into a small printed-style brief: when to leave, which way to walk, four sensory prompts, and one rule — put the phone away.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why it exists&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Most outdoor apps increase screen time. Last Light is deliberately the opposite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prepare on screen.&lt;/strong&gt; Calculate the useful facts before leaving.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Carry a ticket.&lt;/strong&gt; Print it, read it aloud, or remember the four cues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pocket the phone.&lt;/strong&gt; Pocket Mode becomes a simple countdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notice the ordinary.&lt;/strong&gt; There is no feed, streak, destination, or species database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best interface is the one you stop looking at.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What the experience feels like&lt;/h2&gt;

&lt;/div&gt;


&lt;ol&gt;

&lt;li&gt;Choose a city or use your door.&lt;/li&gt;

&lt;li&gt;Set the walk length, date, temperature, ground, and sky.&lt;/li&gt;

&lt;li&gt;Receive a dusk ticket…&lt;/li&gt;

&lt;/ol&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/vannu07/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;h3&gt;
  
  
  1. Solar calculations without a weather API
&lt;/h3&gt;

&lt;p&gt;Last Light calculates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sunrise&lt;/li&gt;
&lt;li&gt;Sunset&lt;/li&gt;
&lt;li&gt;Golden hour&lt;/li&gt;
&lt;li&gt;Civil dusk&lt;/li&gt;
&lt;li&gt;Solar noon&lt;/li&gt;
&lt;li&gt;Sunset azimuth&lt;/li&gt;
&lt;li&gt;Day length&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The calculation uses latitude, longitude, date, and time-zone offset.&lt;/p&gt;

&lt;p&gt;That allows the app to create a practical instruction such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Leave by 17:42. Walk west.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The basic walk ticket does not require map tiles or a weather service.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. A generated dusk-walk dataset
&lt;/h3&gt;

&lt;p&gt;The scoring engine uses 1,400 generated dusk-walk rows.&lt;/p&gt;

&lt;p&gt;The features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Temperature&lt;/li&gt;
&lt;li&gt;Rain&lt;/li&gt;
&lt;li&gt;Wind&lt;/li&gt;
&lt;li&gt;Cloud cover&lt;/li&gt;
&lt;li&gt;Humidity&lt;/li&gt;
&lt;li&gt;Latitude&lt;/li&gt;
&lt;li&gt;Day of year&lt;/li&gt;
&lt;li&gt;Minutes until sunset&lt;/li&gt;
&lt;li&gt;Foliage season&lt;/li&gt;
&lt;li&gt;Urban surroundings&lt;/li&gt;
&lt;li&gt;Walk duration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The dataset is generated from a transparent recipe, which makes the model evaluation repeatable instead of presenting an unexplained number.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. TabPFN with a Ridge baseline
&lt;/h3&gt;

&lt;p&gt;TabPFN predicts the walk-quality score.&lt;/p&gt;

&lt;p&gt;A Ridge regression model is trained alongside it as a baseline. The application reports held-out evaluation metrics so the score can be compared with a simpler model.&lt;/p&gt;

&lt;p&gt;The full TabPFN backend is available for local and Render deployments.&lt;/p&gt;

&lt;p&gt;Vercel uses the lightweight Ridge fallback because TabPFN's PyTorch dependencies exceed Vercel's serverless function size limit.&lt;/p&gt;

&lt;p&gt;If TabPFN is unavailable, the app still issues a ticket instead of breaking.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Gemma and offline field recipes
&lt;/h3&gt;

&lt;p&gt;When a compatible Gemma endpoint is available, Gemma writes the natural-language ticket.&lt;/p&gt;

&lt;p&gt;The model receives structured facts and returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A short title&lt;/li&gt;
&lt;li&gt;A one-sentence lead&lt;/li&gt;
&lt;li&gt;Four sensory cues&lt;/li&gt;
&lt;li&gt;A route&lt;/li&gt;
&lt;li&gt;A phone-away rule&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The response is validated before it reaches the user.&lt;/p&gt;

&lt;p&gt;When no model endpoint is available, deterministic offline field recipes generate the ticket.&lt;/p&gt;

&lt;p&gt;This is an intentional product mode, not a broken fallback.&lt;/p&gt;

&lt;p&gt;The application can therefore work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With local Ollama&lt;/li&gt;
&lt;li&gt;With a compatible hosted endpoint&lt;/li&gt;
&lt;li&gt;Without an AI endpoint&lt;/li&gt;
&lt;li&gt;Without a weather API&lt;/li&gt;
&lt;li&gt;Without storing field notes on a server&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why open innovation matters
&lt;/h2&gt;

&lt;p&gt;Open innovation matters because this project is about reducing dependence on the screen.&lt;/p&gt;

&lt;p&gt;A closed hosted AI service could generate attractive copy, but it would create several limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Location and conditions would need to leave the user's machine.&lt;/li&gt;
&lt;li&gt;The experience would depend on a network connection.&lt;/li&gt;
&lt;li&gt;The model could not be easily swapped or run locally.&lt;/li&gt;
&lt;li&gt;The fallback behavior would be harder to control.&lt;/li&gt;
&lt;li&gt;The project would be less inspectable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With open-source and open-weight components, the important parts remain replaceable and understandable.&lt;/p&gt;

&lt;p&gt;Someone can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run Gemma locally with Ollama.&lt;/li&gt;
&lt;li&gt;Replace the language model.&lt;/li&gt;
&lt;li&gt;Inspect the prompt and validation rules.&lt;/li&gt;
&lt;li&gt;Run the scoring model on their own machine.&lt;/li&gt;
&lt;li&gt;Use the deterministic field recipes with no model at all.&lt;/li&gt;
&lt;li&gt;Change the behavior without waiting for a platform feature.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The open approach made it possible to design the experience around privacy, inspectability, and graceful degradation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most important design decision
&lt;/h2&gt;

&lt;p&gt;The most important decision was to make the screen temporary.&lt;/p&gt;

&lt;p&gt;Last Light does not try to maximize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sessions&lt;/li&gt;
&lt;li&gt;Notifications&lt;/li&gt;
&lt;li&gt;Scroll time&lt;/li&gt;
&lt;li&gt;Daily streaks&lt;/li&gt;
&lt;li&gt;Recommendations&lt;/li&gt;
&lt;li&gt;Engagement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It gives the user enough information to leave meaningfully, then offers Pocket Mode as a low-information countdown.&lt;/p&gt;

&lt;p&gt;The product succeeds when the user stops using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy and safety
&lt;/h2&gt;

&lt;p&gt;Location is used to issue a ticket.&lt;/p&gt;

&lt;p&gt;Field notes are stored in the browser using &lt;code&gt;localStorage&lt;/code&gt;. They are not sent to a database or used to build a profile.&lt;/p&gt;

&lt;p&gt;The project does not require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A tracking account&lt;/li&gt;
&lt;li&gt;A social graph&lt;/li&gt;
&lt;li&gt;Map tiles&lt;/li&gt;
&lt;li&gt;A weather API&lt;/li&gt;
&lt;li&gt;A recommendation feed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The walk score is an experiment, not a safety guarantee.&lt;/p&gt;

&lt;p&gt;Users should always use their own judgment about weather, lighting, traffic, accessibility, and personal safety.&lt;/p&gt;

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

&lt;p&gt;The easiest way to make an AI product useful is not always to add more conversation.&lt;/p&gt;

&lt;p&gt;For this project, the better design was to constrain the model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give it structured facts.&lt;/li&gt;
&lt;li&gt;Require a small JSON response.&lt;/li&gt;
&lt;li&gt;Validate the response.&lt;/li&gt;
&lt;li&gt;Keep an offline path.&lt;/li&gt;
&lt;li&gt;Make the final output printable.&lt;/li&gt;
&lt;li&gt;Make the interface disappear after the handoff.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI is useful before the walk. It should not become the activity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Use of TabPFN — Prior Labs
&lt;/h3&gt;

&lt;p&gt;Last Light uses TabPFN to score dusk-walk conditions from a generated dataset containing environmental, seasonal, solar, and duration features.&lt;/p&gt;

&lt;p&gt;A Ridge model is included as a baseline so the TabPFN result can be compared with a simpler model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Use of Gemma
&lt;/h3&gt;

&lt;p&gt;Gemma can generate the natural-language walk ticket from structured facts.&lt;/p&gt;

&lt;p&gt;The response is validated, and deterministic field recipes keep the experience available when no model endpoint is running.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would build next
&lt;/h2&gt;

&lt;p&gt;The next version could add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An installable offline PWA&lt;/li&gt;
&lt;li&gt;Better accessibility and high-contrast themes&lt;/li&gt;
&lt;li&gt;User-created walking rituals&lt;/li&gt;
&lt;li&gt;A lightweight on-device audio model&lt;/li&gt;
&lt;li&gt;Transparent model evaluation charts&lt;/li&gt;
&lt;li&gt;User-controlled field-note export&lt;/li&gt;
&lt;li&gt;Safety-aware route constraints without turning the project into a map app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For now, Last Light has one clear job:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Help someone leave the screen before the last light leaves the sky.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Built for Hacktoberfest
&lt;/h2&gt;

&lt;p&gt;This project is built 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;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The screen prepares the walk. Then it gets out of the way. 🌿&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Heirloom AI: Preserving Grandpa's Voice Recipes with Open-Weight Gemma AI &amp; ElevenLabs</title>
      <dc:creator>Varnit Kumar</dc:creator>
      <pubDate>Sun, 04 Oct 2026 05:29:16 +0000</pubDate>
      <link>https://dev.to/kumarvarnit16/heirloom-ai-preserving-grandpas-voice-recipes-with-open-weight-gemma-ai-elevenlabs-4hdd</link>
      <guid>https://dev.to/kumarvarnit16/heirloom-ai-preserving-grandpas-voice-recipes-with-open-weight-gemma-ai-elevenlabs-4hdd</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;Heirloom AI&lt;/strong&gt; for my Grandpa Arthur (and families with elderly loved ones). Grandpa Arthur spent a lifetime mastering rustic Italian dishes, slow-simmered marinara, and secret family recipes. As he got older, typing or writing recipes down became difficult, so he began recording rambling voice memos on his phone.&lt;/p&gt;

&lt;p&gt;However, voice notes are unstructured, contain rambling family anecdotes, and lack exact measurements ("a pinch of love", "a knob of butter"). &lt;strong&gt;Heirloom AI&lt;/strong&gt; uses open-weight &lt;strong&gt;Gemma AI&lt;/strong&gt; to process Grandpa's voice audio, resolve vague measurements into standardized quantities, separate emotional stories from technical cooking steps, and store them in an interactive Heirloom Vault.&lt;/p&gt;

&lt;p&gt;It also features a &lt;strong&gt;Hands-Free Kitchen Companion&lt;/strong&gt; with voice commands ("Next step", "Repeat") and natural voice audio readout so anyone in the kitchen can cook Grandpa's recipes hands-free without getting screens greasy!&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Deployed App&lt;/strong&gt;: &lt;a href="https://heirloom-ai-pi.vercel.app/" rel="noopener noreferrer"&gt;https://heirloom-ai-pi.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Senior Interactive Features&lt;/strong&gt;:

&lt;ol&gt;
&lt;li&gt;🎙️ &lt;strong&gt;Voice Memory Studio&lt;/strong&gt;: Live microphone audio recorder with dynamic HTML5 Canvas waveform visualizer, persona selectors, and Gemma 4-bit prompt extraction pipeline.&lt;/li&gt;
&lt;li&gt;📖 &lt;strong&gt;The Heirloom Vault&lt;/strong&gt;: Scalable recipe gallery with unit converter (Metric vs. US Imperial), serving multiplier (1x, 2x, 3x), Recharts flavor profile radar chart, macro nutrient cards, and printable heirloom recipe card modal generator.&lt;/li&gt;
&lt;li&gt;👨‍🍳 &lt;strong&gt;Hands-Free Kitchen Companion&lt;/strong&gt;: Distraction-free full-screen kitchen display with Web Speech &amp;amp; ElevenLabs voice readout, voice command listening, interactive cooking timers, and an "Ask Grandpa's AI" assistant.&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Open Innovation &amp;amp; Benchmarks&lt;/strong&gt;: Technical deep-dive with Recharts benchmark visualizations comparing on-device Gemma 4-bit latency and privacy against closed cloud models.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Project source code repository:&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/vannu07" rel="noopener noreferrer"&gt;
        vannu07
      &lt;/a&gt; / &lt;a href="https://github.com/vannu07/Heirloom-AI" rel="noopener noreferrer"&gt;
        Heirloom-AI
      &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;🍳 Heirloom AI&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;em&gt;Grandpa's Voice Recipe Vault &amp;amp; Hands-Free Kitchen Companion&lt;/em&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://heirloom-ai-pi.vercel.app/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/954dfa3b406b5938ae0f6264c66bdfd261026dd37202cff89afe185fdf9c6972/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69766525323044656d6f2d686569726c6f6f6d2d2d61692d2d70692e76657263656c2e6170702d6439373730363f7374796c653d666f722d7468652d6261646765266c6f676f3d76657263656c" alt="Live Demo"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vannu07/Heirloom-AI" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9aa217096d4d3a96db9b221c24567d9af5087ecefd1a6f275ea2fd85fa20b6c8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4769744875622d76616e6e753037253246486569726c6f6f6d2d2d41492d3138313731373f7374796c653d666f722d7468652d6261646765266c6f676f3d676974687562" alt="GitHub Repo"&gt;&lt;/a&gt;
&lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/ddcbe6d655b2406c83d2e5cfd240391cd394671bc4321e62a7d534b869e94cfc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d3230323625323050726f6a6563742d6635396530623f7374796c653d666f722d7468652d6261646765266c6f676f3d6861636b746f62657266657374" alt="Hacktoberfest 2026"&gt;&lt;/a&gt;
&lt;a href="https://ai.google.dev/gemma" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/545a79b48e79c69a9ee6298c52c2d1b7d9379bf6d07ca2f27eca043b37a95872/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4f70656e2d2d5765696768742d47656d6d61253230342d2d6269742d3130623938313f7374796c653d666f722d7468652d6261646765266c6f676f3d676f6f676c65" alt="Gemma AI"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/vannu07/Heirloom-AI/public/hero-3d.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%2Fvannu07%2FHeirloom-AI%2FHEAD%2Fpublic%2Fhero-3d.jpg" alt="Heirloom AI 3D Isometric Hero Visual"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;b&gt;Built for the Hacktoberfest Weekend Challenge: Build for a Friend&lt;/b&gt;&lt;br&gt;
  Preserving priceless family culinary knowledge using open-weight Gemma AI &amp;amp; ElevenLabs Voice Synthesis
&lt;/p&gt;


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


&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌟 Executive Summary&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Heirloom AI&lt;/strong&gt; is built for Grandpa Arthur (and families with elderly loved ones). Grandpa Arthur spent a lifetime mastering rustic Italian dishes, slow-simmered marinara, and secret family recipes. As he got older, writing or typing recipes down became difficult, so he began recording rambling voice memos on his phone.&lt;/p&gt;

&lt;p&gt;However, voice notes are unstructured, contain rambling family anecdotes, and lack exact measurements (&lt;em&gt;"a pinch of love"&lt;/em&gt;, &lt;em&gt;"a knob of butter"&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heirloom AI&lt;/strong&gt; uses open-weight &lt;strong&gt;Gemma AI&lt;/strong&gt; to process Grandpa's voice audio, resolve vague measurements into standardized quantities, separate emotional stories from technical cooking steps, and store them in an interactive Heirloom Vault.&lt;/p&gt;

&lt;p&gt;It also features a &lt;strong&gt;Hands-Free Kitchen Companion&lt;/strong&gt; with…&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/vannu07/Heirloom-AI" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/vannu07/Heirloom-AI/blob/main/src/App.jsx" rel="noopener noreferrer"&gt;&lt;code&gt;src/App.jsx&lt;/code&gt;&lt;/a&gt;: Main layout container &amp;amp; state manager with Framer Motion AnimatePresence and Toast system.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vannu07/Heirloom-AI/blob/main/src/components/VoiceStudio.jsx" rel="noopener noreferrer"&gt;&lt;code&gt;src/components/VoiceStudio.jsx&lt;/code&gt;&lt;/a&gt;: Audio recorder &amp;amp; Gemma 4-bit extraction pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vannu07/Heirloom-AI/blob/main/src/components/RecipeVault.jsx" rel="noopener noreferrer"&gt;&lt;code&gt;src/components/RecipeVault.jsx&lt;/code&gt;&lt;/a&gt;: Recipe gallery with serving scaler, unit converter, Recharts flavor radar, and printable cards.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vannu07/Heirloom-AI/blob/main/src/components/CookingMode.jsx" rel="noopener noreferrer"&gt;&lt;code&gt;src/components/CookingMode.jsx&lt;/code&gt;&lt;/a&gt;: Hands-free voice cooking assistant &amp;amp; timer.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vannu07/Heirloom-AI/blob/main/src/components/OpenInnovationTab.jsx" rel="noopener noreferrer"&gt;&lt;code&gt;src/components/OpenInnovationTab.jsx&lt;/code&gt;&lt;/a&gt;: Judge technical deep-dive with latency benchmarks.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-Source AI Core&lt;/strong&gt;: Powered by open-weight &lt;strong&gt;Gemma 2 / Gemma 4-bit local inference&lt;/strong&gt; models. The Gemma model takes raw speech-to-text transcripts, parses vague measurements into precise quantities, and structures the output into standardized JSON.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Stack&lt;/strong&gt;: Vite, React 19, Tailwind CSS v4, Framer Motion for fluid layout animations, Recharts for data visualizations, Playfair Display &amp;amp; Plus Jakarta Sans typography, Fira Code fonts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Synthesis &amp;amp; Control&lt;/strong&gt;: ElevenLabs &amp;amp; Web Speech API for natural step-by-step audio readout and hands-free voice commands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio Visualizers&lt;/strong&gt;: HTML5 Canvas API with real-time waveform rendering and Web Audio API ambient kitchen simmer sound generator.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Open innovation was essential for building &lt;strong&gt;Heirloom AI&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;100% Privacy &amp;amp; Data Security&lt;/strong&gt;: Voice memos contain intimate family memories, names, and personal stories. Closed cloud APIs harvest prompt data to train commercial models. With open-weight Gemma running locally, zero personal data leaves the device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline Kitchen Resilience&lt;/strong&gt;: Kitchens often have poor WiFi reception or thick plaster walls. Local Gemma inference runs seamlessly offline on laptops or kitchen tablets without internet connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Operating Cost&lt;/strong&gt;: Heirloom recipes should be accessible across generations without recurring API token subscriptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heritage Dialect Fine-Tuning&lt;/strong&gt;: Open-weight Gemma allows fine-tuning on regional culinary terms (e.g. Italian "soffritto", Indian "tadka", Southern "potlikker") that proprietary generic models misinterpret.&lt;/li&gt;
&lt;/ol&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; (Featured Category)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt; (Partner Category)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render / DigitalOcean&lt;/strong&gt; (Featured Category)&lt;/li&gt;
&lt;/ul&gt;

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