DEV Community

Cover image for findbox: I built a tool that quietly organizes your digital mess while you sleep โ€” 100% local, open-weight Gemma, zero cloud
Vinit Chaurasia
Vinit Chaurasia

Posted on

findbox: I built a tool that quietly organizes your digital mess while you sleep โ€” 100% local, open-weight Gemma, zero cloud

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission ๐Ÿฆฅ

๐Ÿฆฅ findbox โ€” Drop it in. Forget it. Find it by what you remember.

Built for Hacktoberfest 2026 Week 3: Slow & Steady (International Sloth Day). Open-source, 100% local, zero cloud.

๐Ÿ‘‰ GitHub: chourasiavinit9-dev/findbox

๐ŸŒ Static Demo (judges): chourasiavinit9-dev.github.io/findbox

๐Ÿณ Docker Ready: docker compose up --build


The Problem: Your Downloads Folder Is a Crime Scene

I have 847 files in my Downloads folder right now. IMG_4471.png (an Instagram recipe I'll never find), scan(3)_final_FINAL.pdf (who knows), WhatsApp Image 2026-09-14.jpg (could be anything), and buried in there somewhere โ€” an electricity bill I need to pay.

Sorting this takes hours. So nobody does it. The mess compounds. Then one day you get a late fee because the bill was buried under 200 screenshots.

findbox solves this while you sleep.


๐Ÿ“ธ The Final Web App Look

1. Homepage & The Payoff Meter

findbox homepage with payoff meter

2. Vague Memory Search (AI-Parsed Query + Instant Filter)

findbox vague search for paneer recipe

3. Action Items Deadlines & Device Scanner

findbox action items


The Build Session

I built the entire thing with Antigravity (Gemini coding agent) in one session:

Building findbox: Local AI File Organizer (Hacktoberfest 2026)
You

Build a winning submission for 'Slow and Steady: International Sloth Day'. PROJECT: findbox. Tagline: 'Drop it in. Forget it. Find it by what you remember.' A fully local tool that quietly cleans up your digital mess overnight (Downloads folder, screenshots, photos, PDFs, scans, exported chats) and then lets you find anything by describing it vaguely.

Agent

Perfect project for the Sloth Day theme! Here's the architecture I'll build: zero-config auto-scan of common device landfill folders, open-weight Gemma 3 for local inference via Ollama, SQLite FTS5 BM25 for vague-memory search, and a neobrutalism web UI at [REDACTED]:8765. Let me start building.

You

make it like it can access anything on the device โ€” zero config

Agent

Added AUTO_SCAN_DIRS to config.py โ€” automatically discovers ~/Downloads, ~/Desktop, ~/Documents, ~/Pictures/Screenshots, WhatsApp Chat exports, iCloud Drive. No path needed. User just runs: python3 sloth_box.py run --apply

You

add a button to clear text search

Agent

Added a floating โœ• clear button inside the search input. JavaScript toggleClear() shows/hides it as you type. clearSearch() wipes the input and returns to /?. Now users can search multiple items without backspacing.

You

see bug โ€” ai error html and sample data not openable, fix both

Agent

Fixed two bugs: 1) {{ai_meta_html}} was double-escaped โ€” changed to {ai_meta_html} so AI search chips render correctly. 2) Added '๐Ÿ“„ Open File โ†—' button on every document card using file:// protocol from current_path in SQLite โ€” clicking opens the actual file in its native macOS app.

You

add scan my device button and fix action items panel

Agent

Done! Added: (1) 'Scan My Device' panel showing all auto-scan folders as chips + a POST /scan button that triggers run_intake() in a background thread โ€” no terminal needed. (2) Replaced 7-day Due Soon filter with 'Action Items' showing ALL todos color-coded: red = due โ‰ค7 days, purple = future, gray = past. 18/18 tests still passing.


The Lazy Workflow

# Run this once before bed (or click 'Scan My Device' in the UI)
python3 sloth_box.py run --apply

# Wake up to everything organized. Then search:
python3 sloth_box.py serve  # http://127.0.0.1:8765
# Search: "paneer recipe september" โ†’ finds it instantly
Enter fullscreen mode Exit fullscreen mode

Your effort: 1 command. That's literally it.

findbox runs at os.nice(19) โ€” the absolute lowest CPU priority, yielding to every other process on the machine.


๐Ÿณ Zero-Install: Run With Docker

Don't have Python or local dependencies configured? Run with Docker Compose:

git clone https://github.com/chourasiavinit9-dev/findbox && cd findbox
docker compose up --build
Enter fullscreen mode Exit fullscreen mode

Or plain Docker:

docker build -t findbox .
docker run -p 8765:8765 \
  -v ~/Downloads:/inbox/Downloads \
  -v ~/Desktop:/inbox/Desktop \
  -v ~/SlothBox:/home/sloth/SlothBox \
  findbox
Enter fullscreen mode Exit fullscreen mode

Open http://localhost:8765 โ€” your files, organized, indexed, and searchable.


Why Open-Weight Models Were Non-Negotiable

Think about what's in your Downloads folder: bank statements, medical prescriptions, Aadhaar/passport scans, private WhatsApp exports, OTP screenshots.

Sending any of this to a cloud API is unacceptable. Open-weight Gemma 3 running locally via Ollama was the only viable choice:

Feature Closed Cloud APIs findbox (Gemma Local)
Privacy Files leave your device Files never leave RAM
Offline Requires internet Works on an airplane
Cost Per-token for 1000s of files Free at any scale
Language English-optimized Hindi/Bengali natively

When Ollama isn't running, findbox falls back to a deterministic heuristics engine โ€” so it never crashes.


Key Features

Zero-Config Auto-Discovery

No path configuration. It auto-finds ~/Downloads, ~/Desktop, ~/Pictures/Screenshots, ~/Documents, WhatsApp exports, and iCloud Drive. Just run it.

Meaningful Renaming

IMG_4471.png โ†’ 2026-09-04_instagram-paneer-tikka_recipe.png
scan(3)_final_FINAL.pdf โ†’ 2026-10-12_electricity-bill_WBSEDCL.pdf
WhatsApp Image 2026-09-14.jpg โ†’ 2026-09-14_rent-chat-rahul_chats.jpg
Enter fullscreen mode Exit fullscreen mode

Vague-Memory Search

Gemma parses your query into structured parameters (keywords + category + date range), then SQLite FTS5 BM25 finds the exact file. Search "paneer recipe september" โ†’ finds the Instagram screenshot from Sept 4. Includes a dedicated โœ• clear button to immediately wipe filters.

Scan from the UI

The ๐Ÿฆฅ Scan My Device Now button in the web UI triggers background scanning with live visual feedback. No terminal needed.

Action Items Panel

Deadlines extracted from every file, color-coded: ๐Ÿ”ด red = due โ‰ค7 days, ๐ŸŸฃ purple = future, โšซ gray = past.


Architecture

sloth_box/
โ”œโ”€โ”€ config.py     โ€” AUTO_SCAN_DIRS (8 device locations)
โ”œโ”€โ”€ security.py   โ€” path-traversal, XSS disarm, magic-byte quarantine
โ”œโ”€โ”€ extractor.py  โ€” PDF/DOCX/image/text + fallback heuristics
โ”œโ”€โ”€ ai.py         โ€” local Ollama/Gemma client + vague query parser
โ”œโ”€โ”€ organizer.py  โ€” multi-folder intake, collision-safe rename, undo
โ”œโ”€โ”€ db.py         โ€” SQLite WAL + FTS5 + audit log
โ””โ”€โ”€ server.py     โ€” WCAG 2.1 AA web UI (neobrutalism design)
Enter fullscreen mode Exit fullscreen mode

Safety: dry-run by default, atomic undo, no overwrites, no deletes, localhost-only server.


The Payoff Meter

$$\text{Minutes Saved} = (\text{Files Indexed} \times 1.5) + (\text{Searches Avoided} \times 5.0)$$

On sample data: 15 minutes saved, 0 minutes spent. That's the sloth way.


Why Open Innovation Matters

This project wouldn't exist as a privacy-safe tool without open-weight models. The files it processes are genuinely sensitive. Gemma running locally means:

  1. Data never moves โ€” inference in local RAM
  2. No internet required โ€” fully offline
  3. No metered cost โ€” 10,000 files, pay nothing
  4. Multilingual โ€” handles Hindi/Bengali natively (WBSEDCL, Aadhaar, kharcha all work)

Try It

git clone https://github.com/chourasiavinit9-dev/findbox && cd findbox
python3 sloth_box.py run        # dry-run
python3 sloth_box.py run --apply  # apply
python3 sloth_box.py serve      # search UI at http://127.0.0.1:8765
python3 -m pytest tests/ -v     # 18 tests, 0.04s
Enter fullscreen mode Exit fullscreen mode

๐Ÿฆฅ Hacktoberfest 2026 Week 3 โ€” Slow & Steady ยท International Sloth Day ยท Open-source ยท 100% local ยท Zero cloud

Top comments (0)