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.