<?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: vimla</title>
    <description>The latest articles on DEV Community by vimla (@vimla01).</description>
    <link>https://dev.to/vimla01</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%2F4169569%2F9bb4bc2f-099f-4a02-8437-e91493269095.jpg</url>
      <title>DEV Community: vimla</title>
      <link>https://dev.to/vimla01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vimla01"/>
    <language>en</language>
    <item>
      <title>🦥 SnapSloth: For Every Screenshot You Said "Baad Mai" To</title>
      <dc:creator>vimla</dc:creator>
      <pubDate>Sun, 25 Oct 2026 23:28:12 +0000</pubDate>
      <link>https://dev.to/vimla01/snapsloth-for-every-screenshot-you-said-baad-mai-to-1im9</link>
      <guid>https://dev.to/vimla01/snapsloth-for-every-screenshot-you-said-baad-mai-to-1im9</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;&lt;strong&gt;SnapSloth 🦥: for every screenshot you said "baad mai" to.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📴 &lt;strong&gt;100% offline.&lt;/strong&gt; Runs on my laptop with Wi-Fi off. No cloud, no API key, no screenshot ever leaves the machine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I had &lt;strong&gt;367 screenshots&lt;/strong&gt; named &lt;code&gt;Screenshot from 2026-08-30 23-51-07.png&lt;/code&gt;. Fee notices, UPI&lt;br&gt;
requests, notes to myself, an Aadhaar photo. Unsearchable, forgotten, and some of them risky.&lt;/p&gt;

&lt;p&gt;SnapSloth fixes that &lt;strong&gt;while I sleep&lt;/strong&gt;. A local open-weight model reads every screenshot, then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🗂️ &lt;strong&gt;sorts and renames&lt;/strong&gt; them (&lt;code&gt;sorted/notes_or_study/2026-08-30_mqtt-vs-http-for-iot.png&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;🔎 makes them &lt;strong&gt;searchable by what's inside&lt;/strong&gt;, text &lt;em&gt;and&lt;/em&gt; picture&lt;/li&gt;
&lt;li&gt;✅ pulls out &lt;strong&gt;what I still have to do&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;flags risky ones&lt;/strong&gt; (OTPs, UPI, Aadhaar/PAN, passwords), values masked&lt;/li&gt;
&lt;li&gt;☕ leaves a &lt;strong&gt;morning report&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fttkec853s1e8kz6k975t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fttkec853s1e8kz6k975t.png" alt="SnapSloth" width="800" height="719"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🎥 &lt;strong&gt;&lt;a href="https://drive.google.com/file/d/1CJxGJh5Il-MWysdkDQXCpUQOvMOhRJoM/view?usp=sharing" rel="noopener noreferrer"&gt;Watch the demo video&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My favourite moment: at 1:22 AM I sent myself &lt;em&gt;"tomo ca and need to take concession for railway"&lt;/em&gt;&lt;br&gt;
and forgot about it. Next morning, the report said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;→ Take concession for railway tomorrow&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&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/vimla01" rel="noopener noreferrer"&gt;
        vimla01
      &lt;/a&gt; / &lt;a href="https://github.com/vimla01/snapsloth" rel="noopener noreferrer"&gt;
        snapsloth
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      For every screenshot you said “baad mai” to.
    &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;🦥 SnapSloth&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;For every screenshot you said "baad mai" to.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sorts, searches and safety-checks your screenshots with a local AI model, while you sleep.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://go.dev" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c48076c56e01974119148066eca094cadde3658540d05deb270c415b5cc80382/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476f2d312e32372d3030414444383f6c6f676f3d676f266c6f676f436f6c6f723d7768697465" alt="Go"&gt;&lt;/a&gt;
&lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5c491befbadca5caae47a90682c9e6acfa63b72d091dc9b8dfc99059f998cda4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d6f64656c2d47656d6d61253230342532307669612532304f6c6c616d612d346637613561" alt="Model"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vimla01/snapsloth#privacy" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/290442523bf675d34f147e61bc98d38acc927b29fa40915e0a63fe7f57f235bf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72756e732d3130302532352532306f66666c696e652d336636623466" alt="Offline"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vimla01/snapsloth/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/be07a68b57a673af622198c336264f89d82bf4cd5d87bc0cb3f7b6ae47cc43ea/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d6c6967687467726579" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/vimla01/snapsloth#setup-one-command" rel="noopener noreferrer"&gt;Setup&lt;/a&gt; · &lt;a href="https://github.com/vimla01/snapsloth#using-the-app" rel="noopener noreferrer"&gt;Using the app&lt;/a&gt; · &lt;a href="https://github.com/vimla01/snapsloth#lazy-mode-every-night-at-2-am-" rel="noopener noreferrer"&gt;Lazy mode&lt;/a&gt; · &lt;a href="https://github.com/vimla01/snapsloth#privacy" rel="noopener noreferrer"&gt;Privacy&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;😩 The problem&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;You take a screenshot because you'll deal with it "baad mai". A fee notice, a UPI payment, a train
ticket, an error to fix, a note to yourself. Two months later there are 367 of them, all named
&lt;code&gt;Screenshot from 2026-08-30 23-51-07.png&lt;/code&gt;, and:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You can't find anything.&lt;/strong&gt; Your file manager searches names, and every name is a timestamp.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You forget what mattered.&lt;/strong&gt; The railway concession, the money request, the hostel fee deadline
buried under memes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Some of them are a risk.&lt;/strong&gt; OTPs, UPI IDs, Aadhaar and bank details, sitting in a folder that syncs
and gets shared.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud AI isn't the fix.&lt;/strong&gt; Uploading your Aadhaar to someone's server to organise it is…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vimla01/snapsloth" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;One-line install for Linux, macOS and Windows is in the README. Then &lt;code&gt;snapsloth ui&lt;/code&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 E4B&lt;/strong&gt; (open-weight, vision) running locally through &lt;strong&gt;Ollama&lt;/strong&gt;, on a laptop with &lt;strong&gt;no GPU&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go, standard library only&lt;/strong&gt;: one binary with a CLI and a local web UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always-valid JSON&lt;/strong&gt;: Ollama's &lt;code&gt;format&lt;/code&gt; takes a JSON schema, so every answer has a category, title, key text, to-do and risk flags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crash-proof&lt;/strong&gt;: files are tracked by SHA-256 and saved after every image. Stop anytime, it resumes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety net&lt;/strong&gt;: regex with Luhn/Verhoeff checksums double-checks the model, and every sensitive value is masked &lt;em&gt;before&lt;/em&gt; it's saved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never destructive&lt;/strong&gt;: sorting only renames, never overwrites, and &lt;em&gt;Undo&lt;/em&gt; puts everything back.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Making a CPU laptop fast enough:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;trick&lt;/th&gt;
&lt;th&gt;result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;shrink screenshots to 1024 px&lt;/td&gt;
&lt;td&gt;932 → 264 image tokens per screenshot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;instructions in the system prompt&lt;/td&gt;
&lt;td&gt;cached by Ollama instead of re-read every time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ask for key words, not every word&lt;/td&gt;
&lt;td&gt;less to generate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;4+ minutes → ~1.5 minutes per screenshot.&lt;/strong&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;My data stays mine.&lt;/strong&gt; OTPs and an Aadhaar card don't belong on someone else's server. It works with Wi-Fi off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free every night.&lt;/strong&gt; No API key, no per-image bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could tune it.&lt;/strong&gt; Open weights let me measure image tokens, pick the size and compare model sizes.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;by hand&lt;/th&gt;
&lt;th&gt;SnapSloth&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sort 367 screenshots&lt;/td&gt;
&lt;td&gt;~1.5 hours&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0 min&lt;/strong&gt; (overnight)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find one screenshot&lt;/td&gt;
&lt;td&gt;minutes of scrolling&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;seconds&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;spot risky ones&lt;/td&gt;
&lt;td&gt;open all 367&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;automatic&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;remember to-dos&lt;/td&gt;
&lt;td&gt;I didn't 😅&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;in the morning report&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Slow on a CPU, but it runs at 2 AM. My part: zero minutes. 🦥&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;: Gemma 4 E4B does all the seeing and reading, locally, tuned for a CPU laptop.&lt;/p&gt;

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