I Automated My Morning: A 300-Line Pipeline That Killed My Tab Sprawl
Every morning used to start the same way: ten tabs open, three newsletters, two Hacker News pages, and a growing sense of missing something important. Then I built a pipeline that does the reading for me — and my mornings got about 30 minutes lighter.
The problem
Information overload isn't about too much content. It's about too much noise with no signal. Checking ten sources manually means you're paying attention tax on everything, including the 90% you don't care about.
The solution: one digest, three stages
The pipeline is ~300 lines of Python, runs on cron, and costs pennies a day. Three stages:
1. Collect (RSS aggregation)
I subscribe to the feeds that actually matter — no more browser tabs. A simple feedparser loop pulls new items from each source into a queue.
import feedparser
def collect(feeds: list[str], since: datetime) -> list[dict]:
items = []
for url in feeds:
feed = feedparser.parse(url)
for entry in feed.entries[:20]:
ts = entry.get("published_parsed")
if ts and datetime(*ts[:6]) > since:
items.append({"title": entry.title, "link": entry.link, "source": url})
return items
2. Filter (keyword prefilter)
Before any AI cost, a cheap keyword prefilter kills obvious noise. If an item doesn't match your interests, it never reaches the LLM.
KEYWORDS = {"python", "automation", "ai", "productivity", "open source"}
def prefilter(items: list[dict]) -> list[dict]:
return [i for i in items if any(k in i["title"].lower() for k in KEYWORDS)]
This cut my input from ~60 items to ~15. That's a 75% cost reduction before the expensive part.
3. Rank (LLM rerank)
The survivors get scored by an LLM against my interests. Each item gets a one-line relevance explanation — so I can trust the ranking without reading everything.
def score(item: dict) -> float:
prompt = f"Score 0-10 relevance for a developer focused on AI automation: {item['title']}"
# returns a number; items below 6 are dropped
return call_llm(prompt)
What actually happened
- Input: 60 items across 12 sources
- After prefilter: 15 items
- After LLM rerank: 5 items in the morning digest
- Time saved: roughly 30 minutes a day
The key insight: filter before you rank. Cheap rules remove 75% of noise so the LLM only spends tokens on content that might matter.
Should you build one?
If you check more than five news sources a day, yes. The whole thing fits in one script, runs on a free cron tier, and the LLM cost is a few cents per week at most.
Want the full template? It's open — comment below and I'll share the repo.
Top comments (0)