{"slug": "sloth-digest-i-taught-gemma-to-read-my-group-chats-so-i-dont-have-to", "title": "Sloth Digest: I Taught Gemma to Read My Group Chats So I Don’t Have To", "summary": "A developer built Sloth Digest, a small Node and Express web app that uses Google's open-weight Gemma model to condense noisy group chats from WhatsApp, Slack, Telegram or email into summaries, with a rough \"minutes saved\" estimate based on a 200-words-per-minute reading speed. The app runs Gemma either locally through Ollama or via a hosted Gemini API, switchable with a single AI_PROVIDER environment variable, so the local mode keeps private chat text entirely on the user's machine. The developer acknowledged the hosted demo is not private like local mode, and capped input at 12,000 characters with rate limiting on the server.", "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\nSloth Digest is a small web app that reads your group chats so you don't have to.\n\nYou paste in a noisy chat from WhatsApp, Slack, Telegram or email. A few seconds later you get three things:\n\nIt also shows a rough \"minutes saved\" figure. It divides the words you skipped by an average reading speed of 200 words per minute, so treat it as an estimate.\n\nAnyone who has come back to 200 unread messages and had to scroll for the one line that said \"pay by Saturday\" gets to be a little lazier. That was the goal.\n\nLive demo: [https://sloth-digest.onrender.com](https://sloth-digest.onrender.com)\n\nThere is a **Try a sample chat** button, so you can see a full result without pasting anything private. The sample is a made-up chat about a trip and a deadline.\n\n[https://github.com/ypunit757-prog/Sloth-Digest](https://github.com/ypunit757-prog/Sloth-Digest)\n\nThe stack is deliberately small: a Node + Express server and a plain JavaScript frontend, with no framework and no build step.\n\nThe open-source AI piece is **Gemma**, Google's open-weight model. The server has one switch, `AI_PROVIDER`, that decides how Gemma is run:\n\n`gemma3:4b`). Inference is fully local.\nThe route handler is the same either way. Only the model call changes:\n\n``` js\nconst text = PROVIDER === \"gemini\"\n  ? await askGemini(model, buildPrompt(chat))\n  : await askOllama(model, buildPrompt(chat));\nconst digest = extractJson(text);\n```\n\nA few things I learned along the way:\n\n`/api/*`, so the Gemini key lives in a Render environment variable. The server also rate-limits requests and caps input at 12,000 characters.\nGroup chats are some of the most private text we have. They hold family plans, money, health news and gossip. Pasting that into a closed API means trusting a company with it.\n\nBecause Gemma has open weights, I could build the same app so it runs **entirely on my own machine**. With Ollama it works offline, costs nothing per run, and sends nothing anywhere. A closed API wouldn't let me make that promise.\n\nOpen weights also gave me **freedom to move**. The same model family runs locally and on a hosted API, and I switched between them with one environment variable. If a model improves or a price changes, I can swap it without rewriting the app.\n\nI'll be honest about the trade-off: my hosted demo calls Gemma through an API, so the demo is not private the way local mode is. The local mode is the privacy-first version, and the hosted one is there so you can try it quickly.\n\nThe app's own estimate for the sample chat (about 120 words) is roughly half a minute of reading saved. That's small for one chat, but it adds up over a busy week of active group chats.\n\n[\n\n`render.yaml` blueprint, so the whole deploy is one click plus an API key.", "url": "https://wpnews.pro/news/sloth-digest-i-taught-gemma-to-read-my-group-chats-so-i-dont-have-to", "canonical_source": "https://dev.to/akyadav/sloth-digest-i-taught-gemma-to-read-my-group-chats-so-i-dont-have-to-1fe9", "published_at": "2026-10-25 09:36:03+00:00", "updated_at": "2026-10-25 09:42:45.898465+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "generative-ai", "ai-tools", "ai-products"], "entities": ["Gemma", "Google", "Ollama", "Gemini", "Sloth Digest", "Node.js", "Express", "Render"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/sloth-digest-i-taught-gemma-to-read-my-group-chats-so-i-dont-have-to", "markdown": "https://wpnews.pro/news/sloth-digest-i-taught-gemma-to-read-my-group-chats-so-i-dont-have-to.md", "text": "https://wpnews.pro/news/sloth-digest-i-taught-gemma-to-read-my-group-chats-so-i-dont-have-to.txt", "jsonld": "https://wpnews.pro/news/sloth-digest-i-taught-gemma-to-read-my-group-chats-so-i-dont-have-to.jsonld"}}