{"slug": "i-gave-my-forgotten-files-a-night-shift-without-uploading-them", "title": "I Gave My Forgotten Files a Night Shift—Without Uploading Them", "summary": "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.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady](https://dev.to/challenges/hacktoberfest-week3-2026-10-19).*\n\nThe 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.\n\n**SlothShift** is a night shift for that pile.\n\nPoint it at a folder, or start with the built-in sample vault. A locally running **Gemma** model (`gemma4:e2b` through [Ollama](https://ollama.com/)) 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.\n\nThe 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`.\n\nThe 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.\n\n**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**.\n\n**Code:** [github.com/surajns0033-collab/slothshift](https://github.com/surajns0033-collab/slothshift)\n\n**Local UI (this is what the screenshots show):**\n\n```\nnpm install\nnpm run dev\n```\n\nOpen [http://127.0.0.1:5173](http://127.0.0.1:5173).\n\n`4`.` ollama pull gemma4:e2b` if the settings page says the model is not installed.\nDesktop shell:\n\n```\nnpm start\n```\n\nI 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.\n\n**Your local AI night worker.**\n\n*Let the boring work wait less.*\n\nSlothShift 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.\n\nUnlike 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.\n\n**Built for:** people who want less repetitive digital admin without handing their documents to a hosted AI service.\n\n| **Product** | Local-first AI desktop utility | \n| **Modes** | Electron desktop app + local browser preview | \n| **Desktop shell** | Electron | \n| **Interface** | HTML, CSS, and JavaScript | \n| **Model runtime** | [Ollama](https://ollama.com/) | \n| **Default model** | gemma4:e2b | \n| **Inference endpoint** | 127.0.0.1:11434 | \n| **Primary** |  | \n\nMIT. Tests and syntax checks:\n\n```\nnpm test\nnpm run check\n```\n\n| Piece | Role | \n|---|---|\n| `electron/main.cjs` | Folder dialogs, Ollama calls, copy-only export, hashes | \n| `browser-adapter.js` | Same review loop in the browser, ZIP download | \n| `renderer.js` | Queue, review dialog, minutes estimate | \n| `electron/extractors.cjs` | Text, HTML, RTF, EML; Electron also covers PDF / DOCX / XLSX | \n| `electron/safety.cjs` | Path checks, filename sanitizing | \n\nThe product is a queue, not a chatbot.\n\n``` php\nflowchart TD\n  A[Folder or sample vault] --> B[Local file scan]\n  B --> C[Extract text]\n  C --> D[Ollama on localhost]\n  D --> E[Gemma structured JSON]\n  E --> F[Human review]\n  F -->|Approve| G[Copy originals]\n  F -->|Reject or edit| F\n  G --> H[Hash check]\n  H --> I[Manifest, notes, optional ICS]\n```\n\nTwo ways in, one model:\n\n`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.\nBoth 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.\n\nLimits 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.\n\nIf Ollama is down, the app says so. It does not invent a summary so the demo still “works.”\n\nThese 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.\n\n`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.\nLocal 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.\n\nI 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.\n\nThe dashboard’s “minutes back” number is an estimate from a slider (default: two minutes per analyzed file). It is **not** a user study.\n\nI 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.\n\nWhat I can show now: the sample vault is four files, one click, originals untouched, and a path that refuses to upload them.\n\nI am not listing partner categories I did not use. The overall prize does not require them.", "url": "https://wpnews.pro/news/i-gave-my-forgotten-files-a-night-shift-without-uploading-them", "canonical_source": "https://dev.to/suraj_srivastav/i-gave-my-forgotten-files-a-night-shift-without-uploading-them-17d6", "published_at": "2026-10-25 14:40:33+00:00", "updated_at": "2026-10-25 14:45:05.428826+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-tools", "ai-agents", "developer-tools"], "entities": ["SlothShift", "Gemma", "Ollama", "Electron", "GitHub", "surajns0033-collab"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-gave-my-forgotten-files-a-night-shift-without-uploading-them", "markdown": "https://wpnews.pro/news/i-gave-my-forgotten-files-a-night-shift-without-uploading-them.md", "text": "https://wpnews.pro/news/i-gave-my-forgotten-files-a-night-shift-without-uploading-them.txt", "jsonld": "https://wpnews.pro/news/i-gave-my-forgotten-files-a-night-shift-without-uploading-them.jsonld"}}