This is a submission for the Hacktoberfest Open-Source AI Challenge: Week 3
What I Built
My Downloads folder has files named final_FINAL_v3.pdf and New Document (2).docx. I know I should clean it up. I also know I never will.
So I built LazyDesk AI 🦥, a file decluttering app where a local open-weight Gemma model reads your messy files and suggests clean names and folders. It also catches exact duplicates. You review everything in an approval table, and only then do you download a tidy ZIP.
Nothing moves until you say so. Your originals are never touched.
Repo: https://github.com/jahnavist04/lazydesk-ai
Demo
I tested it with 6 deliberately messy files, including two identical copies. Here's what happened:
| Step | Result |
|---|---|
| Files uploaded | 6 |
| Duplicate detective (SHA-256) | Caught the identical pair: duplicate_copy.txt and duplicate_original.txt |
| Gemma 3 1B, local, CPU-only | All 6 files processed in 32 seconds |
| Approval table | Every row editable, every row untickable |
| Output | A ZIP with only the approved files, in the approved folders |
The ZIP came out like this:
Documents/duplicate_copy.txt Documents/duplicate_original.txt Documents/Prototype/meeting_notes_prototype.txt Documents/project_tasks.csv Documents/readme_sample.md Documents/research_summary.txt The Lazy Payoff
Upload → click one button → glance at a table → download. That's it. The "Effort saved" stat is a rough estimate (I assume ~30 seconds of manual sorting per file), but even by that math, 6 files = ~3 minutes saved in 32 seconds of waiting. For a 600-file Downloads folder, I'd happily go make tea while the sloth works.
How I Built It
- Streamlit for the UI
- Ollama + Gemma 3 (1B) running locally for the naming and folder suggestions
- pandas for the approval table (
st.data_editor) - hashlib (SHA-256) for duplicate detection
- A graceful fallback: if Ollama isn't running, the app still sorts by file extension instead of crashing
For text files, the model also sees the first 500 characters. For other types, it only sees the filename. Model output is sanitized, so a weird suggestion can't write outside the ZIP's folders.
Why Open Innovation Mattered Here
- Privacy: People's files are personal. Nothing is sent to a third-party AI service. Everything runs through Ollama on the machine hosting the app.
- Cost: No API keys, no billing, no rate limits. It cost ₹0 to build and run.
- Swappable: The model name is a box in the sidebar. Want a bigger Gemma or a different open model? Type its name and go. A closed API wouldn't let me do that.
Honest Lessons
The 1B model is cautious. Most filenames came back unchanged, and it confidently put meeting_notes.txt into a Prototype folder that nothing in the file supported. 😅
That's exactly why I built the approval table. A small local model is great at the boring 80%, and a human gets the final say on the weird 20%. Next, I'd try a larger Gemma on a laptop with more RAM, and add reading PDF contents.
Built for the Hacktoberfest Open-Source AI Challenge (Slow and Steady). Sloths approve. 🦥



