Erin ChuahGet in touchLinkedIn
← All notes
No. 9 · · Headstreams

The reading funnel

My reading app is a few weeks old now, and I’ve been having a lot of fun tinkering with it in a fairly meandering way. It’s now at a point where I’m quite happy with it, and I’ve given it a name: Headstreams, after the little streams at the source of a river, to represent its job of sorting all my newsletters into streams of information.

So I thought I would share how it works, and if anyone has fun ideas for it, I would love to hear them. At its heart it’s a six-step funnel: everything new from about 65 feeds goes in at the top, and out the bottom comes a reading list for each of the topics, or “streams”, I care about.

  1. Collect articles. Every morning, a simple RSS reader does the rounds of every feed, a bit like a postman, and brings back whatever is new.
  2. Check for content. Lots of feeds only send a headline and a teaser, so when there isn’t much text, it goes and fetches the full page. The first version judged that on length alone, until I noticed paywalled pages come back with thousands of words too, just of menus, sign-in boxes and billing questions, so now it also looks out for things like “subscribe to read” and leaves those alone.
  3. Work out what it’s about. Every article, and every stream, goes on a map of meaning where similar ideas sit close together. After some reading up and a lot of back and forth with Claude, I went with an embeddings model for this rather than an LLM, which would have been overkill and far more expensive.
  4. Decide where it belongs. Each article goes to whichever stream it fits best, as long as that stream stands clearly above the rest. That second check, the margin, came in because almost everything I read is about AI, so general AI news kept beating domain articles like actual health articles in my health stream, since a general AI piece is a little bit about everything. To work out where to set that bar, I hand-labelled 18 articles with where each one should go and used them as a small eval. My first setting was a bit too strict and was losing good pieces, the next was too loose and let a newsletter roundup slip through, and the Goldilocks one in between got all 18 right.
  5. Rank within streams. Each stream shows its top 40, ranked on fit and freshness, so the strongest new pieces come first, but a really good older one doesn’t disappear just because it’s a few weeks old. Each article also gets a one-line takeaway from Gemini on the “so what” for me, because a lot of headlines are either vague or clickbait, and one line is usually enough to tell whether it’s worth my time.
  6. Write a summary. One thing I haven’t mentioned is that I also use this to write, so when I like an article, I save it and it gets a fuller summary. That’s the most expensive bit of the whole app, which is why I only run it on the ones I save. Over time each stream builds into a collection I can come back to as I gather my thoughts and form a view on the topic.