# SlothScroll: I Taught Gemma to Read Instagram So I Never Have To

> Source: <https://dev.to/452harsh/slothscroll-i-taught-gemma-to-read-instagram-so-i-never-have-to-5f9f>
> Published: 2026-10-24 08:01:27+00:00

*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)*

## 
  
  
  What I Built

Every morning I opened Instagram "just to catch up", and every morning the feed won. One quick check became another, with ads, reposts and giveaways in between.

**SlothScroll** is my lazy fix. It's a morning digest of the Instagram pages I follow. Once a day a cloud browser visits those pages for me. **Gemma**, Google's open-weight model, reads every new post and writes a one-line gist. It also sorts the post into a topic (Sports, Science, Finance, Tech…) and quietly drops ads, reposts and giveaways. What I get is **one calm page and one email**, grouped by topic, with the 1–3 posts actually worth opening.

I read it in about two minutes with my coffee, then close the tab. I never open Instagram.

Who gets to be lazier? Anyone who follows news, sports or creator pages to *stay informed*, not to scroll.

## 
  
  
  Demo

🔗 **Live:** [https://slothscroll-web-ngb7.onrender.com](https://slothscroll-web-ngb7.onrender.com)

What you'll see in the video:

- 
**Today's edition:** a greeting, the "scrolling saved" number, topic tabs, and Gemma's summary for each topic with its top picks
- 
**The archive** , an RSS feed per page, and dark mode
- 
**The morning email** , the same edition delivered to my inbox

## 
  
  
  Code

The latest code is on the [`SlothScroll` branch](https://github.com/452Harsh/SnoozeFeed/tree/SlothScroll).

## 
  
  
  How I Built It

- 
**Gemma (`gemma-4-26b-a4b-it`)** is the brain. It runs through an OpenAI-compatible client set by environment variables (`AI_BASE_URL` ,`AI_MODEL` ), so the same code can point at a hosted endpoint or, by changing one variable, a local Ollama. I use it for three jobs:  1. 
**Per post:** a one-line gist, the post's topic, and whether it's an ad, repost or giveaway. All three come back as JSON from a single call. When a caption is only emojis and hashtags, Gemma looks at the image instead.
  2. 
**Per page:** a fallback category when I don't set one.
  3. 
**Per topic:** a 2–3 line summary plus the posts worth opening.
- 
**Browserbase + Stagehand** give it a real browser. I log in once through Browserbase's live view, and a persisted context keeps that session for daily runs.
- 
**MongoDB Atlas** is the data layer. The cron job writes, the website reads, and a unique index on the post URL means a post is never processed twice.
- 
**Render** runs everything from one`render.yaml` Blueprint: a**cron job** for the daily pipeline and a**web service** for the site. Every secret is`sync: false` , so none live in the repo.
- 
**The website** is server-rendered HTML on Hono, with no frontend framework. It has light and dark mode, works on mobile, and loads quickly.
- 
**ElevenLabs** narrated the demo video.

**Slow and steady by design:** one run per day, public pages only, visited one at a time with random pauses. A page that fails is noted, and the edition still ships. If Instagram asks for a login, SlothScroll **stops and tells me** instead of trying to get around it.

### 
  
  
  What broke (and how I fixed it)

- 
**Gemma was slow for this job.** A demo run took about 4 minutes because the model reasoned before every answer. Setting`reasoning_effort: "minimal"` brought it down to**about 20 seconds** , with the same quality for one-line gists.
- 
**Everything was "News".** Topics were assigned per page, so a football page's posts and an IPO story all landed in News. Now Gemma chooses a topic**per post** in the same call, with no extra requests. On my real feed the same 16 posts went from one topic to five.
- 
**The browser died mid-run.** Browserbase sessions end after 5 minutes by default, and a full run takes longer. Asking for a 30-minute session fixed it.
- 
**Half-emoji headlines.** Shortening captions sometimes cut an emoji in half and left "�". The page now cleans those characters before showing them.

## 
  
  
  Why Does Open Innovation Matter?

What you follow says a lot about you. Your reading habits are personal, and an open-weight model means **this digest doesn't have to depend on one company's closed API**:

- 
**I choose where it runs.** Gemma is reached through a plain OpenAI-compatible endpoint, so switching providers is an environment-variable change. The client is built to switch to a local Ollama the same way, so the posts never have to leave my machine.
- 
**It's cheap enough to run every day forever.** A small open model is plenty for one-line gists and topic tags. It's a daily habit, not a premium feature.
- 
**It's inspectable and forkable.** The prompts, the pipeline and the model are all open, so anyone can adapt SlothScroll to their own pages, language or topics.

## 
  
  
  The Lazy Payoff

From a real run this week, using a deliberately conservative estimate of **8 seconds per post**:

- 
**16 posts** from my pages became**5 topics** and one page, about**2 minutes of scrolling saved** that day.
- 
**0 times** I opened Instagram.

The real win is bigger than the 8-second math. One "quick check" usually turns into twenty minutes. SlothScroll ends the session before it starts, and it scales with the pages you follow: I've since added six more (The Verge, National Geographic, CNBC, Tasty, Netflix and 9GAG).

## 
  
  
  Prize Categories

- 
**Best Use of Gemma:** Gemma writes the gists, picks the topics, filters ads and summarizes each topic.
- 
**Best Use of Render:** a Blueprint with a cron job for the agent pipeline and a web service for the front end.
- 
**Best Use of Browserbase:** Stagehand drives a real browser with a persisted login, as a repeatable daily workflow.
- 
**Best Use of MongoDB Atlas:** the database behind an app built on an open-weight model.
- 
**Best Use of ElevenLabs:** narration for the demo video.
