This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
I have a folder on Instagram called "python". Another one called "ai". Every time a reel promises to teach me something in 60 seconds, I tap save and feel like I already learned it.
I have never opened that folder to study. Saving felt like progress, so I never needed to read.
That folder is the laziest thing about me, so I built the laziest possible fix: I stopped trying to be more disciplined and made a sloth do the reading.
What I Built
SlothShelf is a local-first AI that reads the links you saved and never opened, then tells you which few are worth your time.
You paste links, drop a bookmarks file or a WhatsApp "message yourself" export. A Gemma model running on your own laptop reads every page and writes a card for it:
- Verdict: read, skim or skip, with a one-line reason
- The gist in a short paragraph
- 4 to 8 key points: tools, commands, steps, numbers
- A "worth knowing" list of the tools and concepts it mentioned one thing to try after reading
On Sunday, it builds a PDF digest: your best picks with the full detail, the rest of the shelf grouped by topic, a safe-to-skip list, and a list of everything it could not read. The idea is that the PDF is the thing you read. The 40 tabs are not.
Who gets to be lazier? Anyone who saves ten things a week and reads none of them. That is me, and probably you.
Demo
Live demo page (sample data, so you can click around without installing anything): https://hiyalukka.github.io/slothshelf/
Code
hiyalukka
/
slothshelf
Slothshelf
SlothShelf
Save fast. Read slow. Skip the rest. A local-first AI that reads the links and reels you saved, then tells you which few are worth your time.
Live demo | Built for the DEV Hacktoberfest Open-Source AI Challenge, "Slow and Steady" | Categories: MongoDB Atlas, Gemma
What it does
Paste links, drop a bookmarks file or a WhatsApp export. A local Gemma model reads each page and writes a card:
| Field | What you get |
|---|---|
| Verdict | read, skim or skip, with a one-line reason |
| Gist | A short paragraph covering the main ideas |
| Key points | 4 to 8 concrete points: tools, commands, steps, numbers |
| Worth knowing | Tools and concepts mentioned, in one line each |
| Try this | One action to take after reading |
Every week it builds a PDF digest: your top picks with full detail, the rest of your shelf grouped by topic, a safe-to-skip list and anything…
How I Built It
Links → Deduplication → Fetch & Clean → Gemma Card + Embeddings → MongoDB Atlas
↳ Goals & Taste: Personalization signals that influence the system.
The open-source AI: Gemma (gemma2:2b) writes the cards, and nomic-embed-text makes the embeddings. Both run through Ollama, so no page text ever leaves the laptop. I use Ollama's structured output: the model has to return JSON that matches a Pydantic schema (verdict, key points, terms, topic), so the app gets data it can store instead of prose it has to parse.
MongoDB Atlas is the memory, not just the storage. There are three collections:
Links: one document per link, with the card and a 768-number embedding
Memory: my goals, plus a weight per tag that moves when I react to a card (+1 read, +2 loved, -1 skipped)
Digests: one document per ISO week
Atlas Vector Search does two jobs:
- Find by meaning: I can type "that thing about evaluating RAG" and get the closest saved links, even if none of them contain those words.
- Taste retrieval: Before Gemma judges a new link, I pull the closest links I previously loved and put them in the prompt.
So the sloth does not just score links against a generic idea of "good". It scores them against what I actually kept.
It keeps score on itself. The app shows an agreement rate: of the links I acted on, how often did my choice match the sloth's verdict? A tool that tells you what to read should show you how often it is right.
Why Does Open Innovation Matter?
A saved-links folder says more about you than almost anything else you own. Mine shows which careers I am eyeing, which skills I feel behind on, which hackathons I am scared of. I did not want to hand that to an API, and with open weights I did not have to.
Three things open models made possible that a closed API would not:
Privacy by default: Gemma reads the pages on my machine. Atlas only stores the card, the embedding and my signals.
No meter running: Reading a backlog means hundreds of calls. Locally, a big pile costs time, not money, so nobody has to decide a link is "not worth the tokens".
Swappable parts: The card model is one line in .env. Any model Ollama can run works, and I can inspect or change every prompt.
The Lazy Payoff
Here are my real numbers from running it on my own saves:
Links imported: 6
Read by Gemma: 5
Verdicts: 3 read / 1 skim / 1 skip
Links I actually opened from the digest: 4
Agreement rate: 78% over 42 links
Prize Categories
Best Use of MongoDB Atlas: Atlas holds the cards, the memory loop and the weekly digests, and Atlas Vector Search powers both find-by-meaning and taste retrieval.
Best use of Gemma: Gemma writes every card, locally, with schema-constrained output


Top comments (0)