<?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: Nayeemul Islam</title>
    <description>The latest articles on DEV Community by Nayeemul Islam (@nayeemul_islam_220588ffa5).</description>
    <link>https://dev.to/nayeemul_islam_220588ffa5</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%2F4174162%2F2c894c49-4e1d-410b-a05d-2b57b0f2c024.jpg</url>
      <title>DEV Community: Nayeemul Islam</title>
      <link>https://dev.to/nayeemul_islam_220588ffa5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nayeemul_islam_220588ffa5"/>
    <language>en</language>
    <item>
      <title>Week 3 hacktoberfest challenge post</title>
      <dc:creator>Nayeemul Islam</dc:creator>
      <pubDate>Fri, 23 Oct 2026 17:08:07 +0000</pubDate>
      <link>https://dev.to/nayeemul_islam_220588ffa5/week-3-hacktoberfest-challenge-post-52l5</link>
      <guid>https://dev.to/nayeemul_islam_220588ffa5/week-3-hacktoberfest-challenge-post-52l5</guid>
      <description>&lt;h2&gt;
  
  
  Downloads Sloth 🦥: Slow, Steady, and Lazy File Sorting with Open-Weight AI
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🏆 The Challenge: Slow and Steady
&lt;/h2&gt;

&lt;p&gt;The prompt for Week 3 was to &lt;strong&gt;build something with open-source AI at its core that rewards laziness&lt;/strong&gt; . &lt;/p&gt;

&lt;p&gt;My Downloads folder is a graveyard of forgotten installers, random screenshots, and invoices named &lt;code&gt;document(1).pdf&lt;/code&gt;. Manual sorting is tedious, and giving a closed-source AI access to my personal files felt risky. &lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;Downloads Sloth&lt;/strong&gt;: a lazy, careful, open-weight file tidier. It embraces the "Slow and Steady" philosophy by waiting for downloads to finish, respecting API rate limits, and previewing moves before executing them. It rewards laziness by running silently in the background, sorting your mess, and writing a daily digest—so you never have to look at your Downloads folder again.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎥 Demo Video
&lt;/h2&gt;

&lt;p&gt;Here is a quick code-only demo showing the Sloth in action: checking API limits, running a safe dry-run, sorting files for real, and using the local dashboard.&lt;/p&gt;

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

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

&lt;p&gt;Downloads Sloth is a Python automation that watches your Downloads folder, reads new files, gives them sensible names, sorts them into categories, and logs every decision to SQLite. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it rewards laziness:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Set it and forget it:&lt;/strong&gt; Run it via Windows Task Scheduler on logon. It watches continuously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero API waste:&lt;/strong&gt; Obvious files (&lt;code&gt;.zip&lt;/code&gt;, &lt;code&gt;.exe&lt;/code&gt;, &lt;code&gt;.mp4&lt;/code&gt;) are sorted locally via extension rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy-first:&lt;/strong&gt; Files matching patterns like &lt;code&gt;passport&lt;/code&gt;, &lt;code&gt;bank&lt;/code&gt;, &lt;code&gt;tax&lt;/code&gt;, or &lt;code&gt;resume&lt;/code&gt; are &lt;em&gt;never&lt;/em&gt; sent to the AI. They are sorted locally by name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safe by default:&lt;/strong&gt; It defaults to a &lt;strong&gt;dry run&lt;/strong&gt;. It predicts where files will go without moving them. When you're ready, you sort for real.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully undoable:&lt;/strong&gt; Made a mistake? &lt;code&gt;python sloth.py undo --last 5&lt;/code&gt; puts everything back exactly where it was.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The project is intentionally lightweight and relies on open-source tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Core:&lt;/strong&gt; Python 3.11+ (using standard library &lt;code&gt;sqlite3&lt;/code&gt;, &lt;code&gt;http.server&lt;/code&gt;, and &lt;code&gt;tomllib&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Brain:&lt;/strong&gt; &lt;strong&gt;Gemma 4 31B&lt;/strong&gt; (an open-weight model under Apache 2.0) via OpenRouter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vision/Docs:&lt;/strong&gt; &lt;code&gt;Pillow&lt;/code&gt; for downscaling images, &lt;code&gt;pypdf&lt;/code&gt; and &lt;code&gt;python-docx&lt;/code&gt; for extracting text excerpts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI:&lt;/strong&gt; A zero-dependency, local-only web dashboard built with Python's standard library &lt;code&gt;http.server&lt;/code&gt; and vanilla JS. It shows the "pile" of waiting files, the "shelves" of sorted files, and a live console.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌍 Why Open Innovation Matters for this Project
&lt;/h2&gt;

&lt;p&gt;The challenge asked us to explain why open-source AI matters for what we built . For a file sorter, &lt;strong&gt;open innovation is a strict requirement for trust.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Privacy and Transparency:&lt;/strong&gt; You are asking an AI to read your financial statements, medical prescriptions, and personal resumes. With closed-source models, you are sending that text into a black box. By using an open-weight model like Gemma 4, the community can audit how the model behaves. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Vendor Lock-in:&lt;/strong&gt; Because the Sloth uses an OpenAI-compatible API endpoint, you aren't tied to one provider. If you want maximum privacy, you can change one line in &lt;code&gt;config.toml&lt;/code&gt; to point to a local &lt;strong&gt;Ollama&lt;/strong&gt; server running on your own hardware. Open-source AI gives users the freedom to own their inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Extensibility:&lt;/strong&gt; Hacktoberfest is about community. Because the sorting logic, privacy rules, and categories are exposed in a simple &lt;code&gt;config.toml&lt;/code&gt; and standard Python code, anyone can fork the repo, add new extension rules, or translate the dashboard without fighting a proprietary API.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  💻 Try It Yourself (The Lazy Way)
&lt;/h2&gt;

&lt;p&gt;Repo:&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/Krak3n909" rel="noopener noreferrer"&gt;
        Krak3n909
      &lt;/a&gt; / &lt;a href="https://github.com/Krak3n909/HacktoberFest-Week3" rel="noopener noreferrer"&gt;
        HacktoberFest-Week3
      &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;Downloads Sloth&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A lazy file tidier powered by an open-weight model (Gemma 4 31B via OpenRouter)
Drop files in Downloads. The sloth reads them, renames them, sorts them, and
leaves a short digest. It never deletes anything, and every move can be undone.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup (Windows, PowerShell)&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;pip install -r requirements.txt
setx OPENROUTER_API_KEY "sk-or-your-key"     # then close and reopen PowerShell
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Edit &lt;code&gt;config.toml&lt;/code&gt; if your folders differ (defaults: &lt;code&gt;~/Downloads&lt;/code&gt; -&amp;gt; &lt;code&gt;~/Downloads/_Sorted&lt;/code&gt;).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Use&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;python sloth.py check             # test key + show your real OpenRouter limits
python sloth.py once --limit 10   # dry run on 10 files (default mode: moves nothing)
python sloth.py once --live       # actually move files
python sloth.py run --live        # watch continuously
python sloth.py undo --last 5     # put the last 5 moves back
python sloth.py digest            # write today's summary
python sloth.py ui                # local web dashboard (needs nothing extra)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Dashboard&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;python sloth.py ui&lt;/code&gt; opens &lt;a href="http://127.0.0.1:8765" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:8765&lt;/a&gt;. It…&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/Krak3n909/HacktoberFest-Week3" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Install dependencies&lt;/span&gt;
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="c"&gt;# 2. Set your OpenRouter API key (free tier works fine!)&lt;/span&gt;
setx OPENROUTER_API_KEY &lt;span class="s2"&gt;"sk-or-your-key"&lt;/span&gt;

&lt;span class="c"&gt;# 3. Check your limits and test the model&lt;/span&gt;
python sloth.py check

&lt;span class="c"&gt;# 4. Preview what the sloth wants to do (moves nothing)&lt;/span&gt;
python sloth.py once &lt;span class="nt"&gt;--limit&lt;/span&gt; 10

&lt;span class="c"&gt;# 5. Sort for real&lt;/span&gt;
python sloth.py once &lt;span class="nt"&gt;--live&lt;/span&gt;

&lt;span class="c"&gt;# 6. Open the local web dashboard&lt;/span&gt;
python sloth.py ui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  🌱 Hacktoberfest Contribution Ideas
&lt;/h2&gt;

&lt;p&gt;Want to earn your Hacktoberfest PRs? The Sloth needs your help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add more local extension rules or privacy patterns.&lt;/li&gt;
&lt;li&gt;Improve the vanilla JS dashboard styling.&lt;/li&gt;
&lt;li&gt;Add support for local audio transcription for &lt;code&gt;.mp3&lt;/code&gt; sorting.&lt;/li&gt;
&lt;li&gt;Write unit tests for the privacy regex engine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the code &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/Krak3n909" rel="noopener noreferrer"&gt;
        Krak3n909
      &lt;/a&gt; / &lt;a href="https://github.com/Krak3n909/HacktoberFest-Week3" rel="noopener noreferrer"&gt;
        HacktoberFest-Week3
      &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;Downloads Sloth&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;A lazy file tidier powered by an open-weight model (Gemma 4 31B via OpenRouter)
Drop files in Downloads. The sloth reads them, renames them, sorts them, and
leaves a short digest. It never deletes anything, and every move can be undone.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup (Windows, PowerShell)&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;pip install -r requirements.txt
setx OPENROUTER_API_KEY "sk-or-your-key"     # then close and reopen PowerShell
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Edit &lt;code&gt;config.toml&lt;/code&gt; if your folders differ (defaults: &lt;code&gt;~/Downloads&lt;/code&gt; -&amp;gt; &lt;code&gt;~/Downloads/_Sorted&lt;/code&gt;).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Use&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;python sloth.py check             # test key + show your real OpenRouter limits
python sloth.py once --limit 10   # dry run on 10 files (default mode: moves nothing)
python sloth.py once --live       # actually move files
python sloth.py run --live        # watch continuously
python sloth.py undo --last 5     # put the last 5 moves back
python sloth.py digest            # write today's summary
python sloth.py ui                # local web dashboard (needs nothing extra)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Dashboard&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;python sloth.py ui&lt;/code&gt; opens &lt;a href="http://127.0.0.1:8765" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:8765&lt;/a&gt;. It…&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/Krak3n909/HacktoberFest-Week3" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
, drop a star, and let the Sloth tidy up your digital life! 🦥

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Week 2 hacktoberfest challenge post</title>
      <dc:creator>Nayeemul Islam</dc:creator>
      <pubDate>Mon, 12 Oct 2026 20:46:20 +0000</pubDate>
      <link>https://dev.to/nayeemul_islam_220588ffa5/week-3-hacktoberfest-challenge-post-1hfg</link>
      <guid>https://dev.to/nayeemul_islam_220588ffa5/week-3-hacktoberfest-challenge-post-1hfg</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;ReplyPal writes replies to customer reviews. You paste a review, say what your business is, pick a tone (warm, professional, or playful), and get a short reply back. It thanks the customer, answers their specific points, and if the review is negative, it apologizes and offers a fix.&lt;/p&gt;

&lt;p&gt;It's for small business owners: Etsy sellers, cafe owners, freelancers. They know replying to reviews helps, but every reply takes time, and angry reviews are hard to answer calmly. A few dollars a month is an easy decision for someone who gets dozens of reviews.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Try it live:&lt;/strong&gt; &lt;a href="https://hacktoberfest-week-3.streamlit.app/" rel="noopener noreferrer"&gt;hacktoberfest-week-3.streamlit.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's on a free tier, so it may take a few seconds to wake up, and it may hit rate limits if a lot of people use it at once.&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/Krak3n909" rel="noopener noreferrer"&gt;
        Krak3n909
      &lt;/a&gt; / &lt;a href="https://github.com/Krak3n909/HacktoberFest-Week-3" rel="noopener noreferrer"&gt;
        HacktoberFest-Week-3
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The whole app is one file, &lt;code&gt;app.py&lt;/code&gt;, about 35 lines.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;, an open-weight model, served through Groq's API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface:&lt;/strong&gt; Streamlit, with a text input for the business, a tone dropdown, and a text area for the review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logic:&lt;/strong&gt; One prompt that includes the business description, the tone, a length limit, and the review text. It makes one API call and shows the result.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Streamlit Community Cloud, with the API key stored in the app's secrets rather than in the repo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I kept it deliberately small. The whole product is one prompt and one call, so the model choice is the only real dependency. That made it easy to build in an afternoon and easy to reason about.&lt;/p&gt;

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

&lt;p&gt;Because the model is open-weight, I'm not tied to one vendor's pricing or terms. The model name is a single line of code. If Groq changes its prices or retires a model, I change that line, or I run the same weights somewhere else. For a tool that would sell for a few dollars a month, that matters: each reply costs a fraction of a cent, and no one else controls that cost.&lt;/p&gt;

&lt;p&gt;Open weights also leave the door open for things a closed API wouldn't allow, like running it locally so a shop's customer data never leaves their machine, or fine-tuning it on one owner's past replies so it sounds like them.&lt;/p&gt;

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

&lt;p&gt;I'm not entering any partner categories.&lt;/p&gt;

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