cd /news/artificial-intelligence/i-gave-my-forgotten-files-a-night-sh… · home › topics › artificial-intelligence › article
[ARTICLE · art-157292] src=dev.to ↗ pub= topic=artificial-intelligence verified=true sentiment=↑ positive

I Gave My Forgotten Files a Night Shift—Without Uploading Them

A developer built SlothShift, a local-first desktop assistant that scans a chosen folder, uses a locally running Gemma model (gemma4:e2b via Ollama) to draft summaries, filenames, categories, dates and next steps, and requires the user to review and approve each result before exporting organized copies, Markdown handoff notes, a JSON manifest with source hashes, and calendar reminders for explicit YYYY-MM-DD dates. The app deliberately has no hosted demo so document content never leaves the machine, sending inference only to Ollama at 127.0.0.1:11434, and ships a synthetic sample vault so first-time users can try the review loop without exposing real files. It is an Electron app with a browser preview, MIT-licensed, with tests and syntax checks via npm test and npm run check.

by read5 min views3 publishedOct 25, 2026

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady.

The files that drain me are not the hard ones. They are the invoice with a date near the bottom, the meeting note with two follow-ups, and the email I reopen because I cannot remember what I promised. Each one is a minute. The pile grows because every file asks for one more decision.

SlothShift is a night shift for that pile.

Point it at a folder, or start with the built-in sample vault. A locally running Gemma model (gemma4:e2b through Ollama) reads supported documents and drafts a short summary, a filename, a category, possible dates, and next steps. You inspect the evidence, edit what you want, then approve or reject. Nothing is “handled” just because a model wrote text.

The export is meant for the next morning, not for a chat window: organized copies of approved originals, Markdown handoff notes, a JSON manifest with source hashes, optional drafts, and calendar reminders only when a date is an explicit YYYY-MM-DD.

The sample vault is synthetic on purpose — an invoice, a meeting follow-up, an expense register, and an email — so a first-time user (or a judge) can try the loop without handing over a real folder. Those files still go through the real local model. The app does not substitute canned AI answers.

There is no hosted deploy URL. That is on purpose. SlothShift is local-first: a public cloud demo would mean sending the folder to someone else's GPU. The public links judges need are the GitHub repo and the screenshots. Clone it, run npm run dev, click Try a sample vault.

Code: github.com/surajns0033-collab/slothshift

Local UI (this is what the screenshots show):

npm install
npm run dev

Open http://127.0.0.1:5173.

4. ollama pull gemma4:e2b if the settings page says the model is not installed. Desktop shell:

npm start

I am not embedding a model-run recording here. The screenshots are the real UI. A complete Gemma pass needs Ollama running on the machine that records it. If I add a 60–90 second clip later, it will show a live gemma4:e2b run, one review, and the opened export — not a mock.

Your local AI night worker.

Let the boring work wait less.

SlothShift is a local-first desktop assistant for the files you keep meaning to organize. It scans a folder you choose, asks a locally installed Gemma model to prepare summaries and next-step suggestions, lets you review and approve the results, and exports a tidy collection of copies and useful follow-ups.

Unlike a cloud-first assistant, SlothShift sends document content to Ollama on your own machine. Your original files stay where they are; SlothShift works from a review queue and exports approved copies to a separate destination.

Built for: people who want less repetitive digital admin without handing their documents to a hosted AI service.

| Product | Local-first AI desktop utility | | Modes | Electron desktop app + local browser preview | | Desktop shell | Electron | | Interface | HTML, CSS, and JavaScript | | Model runtime | Ollama | | Default model | gemma4:e2b | | Inference endpoint | 127.0.0.1:11434 | | Primary | |

MIT. Tests and syntax checks:

npm test
npm run check
Piece Role
electron/main.cjs Folder dialogs, Ollama calls, copy-only export, hashes
browser-adapter.js Same review loop in the browser, ZIP download
renderer.js Queue, review dialog, minutes estimate
electron/extractors.cjs Text, HTML, RTF, EML; Electron also covers PDF / DOCX / XLSX
electron/safety.cjs Path checks, filename sanitizing

The product is a queue, not a chatbot.

flowchart TD
  A[Folder or sample vault] --> B[Local file scan]
  B --> C[Extract text]
  C --> D[Ollama on localhost]
  D --> E[Gemma structured JSON]
  E --> F[Human review]
  F -->|Approve| G[Copy originals]
  F -->|Reject or edit| F
  G --> H[Hash check]
  H --> I[Manifest, notes, optional ICS]

Two ways in, one model:

127.0.0.1:5173, /ollama proxied to 127.0.0.1:11434. Common text, HTML, RTF, EML. Export is a ZIP in this tab. Both send analysis to the local Ollama API, not a hosted LLM. The model returns structured JSON. SlothShift treats the document as untrusted input, checks that the evidence excerpt actually appears in the extracted text, validates export names and paths, copies instead of moving, and compares SHA-256 hashes before export.

Limits are intentional: 300 files per scan, 10 MB per file, 20,000 extracted characters to the model. Scanned-PDF OCR and image understanding are not included. Unsupported files are reported, not guessed.

If Ollama is down, the app says so. It does not invent a summary so the demo still “works.”

These files can be rent, a client invoice, or a work email. Sending the pile to a hosted summarizer just to get a first pass is the wrong trade.

gemma4:e2b. Another installed Ollama tag can be selected. A closed API would lock the product to one vendor’s pricing and one vendor’s refusal to run offline. Local is not infallible. Gemma can miss a date or write a plausible wrong summary. That is why approval is explicit and originals stay where they are.

I built and wrote this with an AI assistant in Cursor. I am not embedding a DevRelay session id I do not have. The repo and the screenshots are the paper trail.

The dashboard’s “minutes back” number is an estimate from a slider (default: two minutes per analyzed file). It is not a user study.

I will not invent a percentage. The intended payoff is one review sitting instead of reopening the same four files tomorrow. A measured number needs a real Gemma run: files processed, files approved, minutes spent reviewing, and the manual baseline for the same folder. I do not have that recording yet, so I am not padding this section with fake savings.

What I can show now: the sample vault is four files, one click, originals untouched, and a path that refuses to upload them.

I am not listing partner categories I did not use. The overall prize does not require them.

── more in #artificial-intelligence 4 stories · sorted by recency
── more on @slothshift 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-gave-my-forgotten-…] indexed:0 read:5min 2026-10-25 · —