An RSS reader with no algorithm
Thirteen hand-picked sources, a calm place to read them, and AI that only works on what I chose to let in.
- In use, September 2026I open it a couple of times a week, and a few friends use it too.
- Built soloProduct, design and engineering, with AI coding agents.
- December 2025 to March 2026From the first commit to the last public push.
What's in it
- Sign-in with email or Google
- Hosted on Render and Supabase
- Bring your own AI key
- Summaries and three reading lenses
- Keyboard-first triage
- Highlights and notes
- Four reading themes
- A spoken daily brief, now off
Built with
- Agents
- Cursor · Claude Code · gstack
- Stack
- React · TypeScript · Vite · Tailwind · Express · Supabase · Render
- Daily brief
- n8n · ElevenLabs
Why it exists
The pace of AI makes it hard to keep up, and the discourse makes it harder: recycled announcements and confident takes from people who haven't touched the thing they're describing. I wanted to choose what I read instead of renting an algorithm's choice, and I wanted to learn to build with AI on something I would actually use.
The decision that shaped it
The obvious move for an AI reader is to let a model rank the feed. I went the other way. Thirteen sources, picked by hand, decide what gets in, and the models only act on what is already there.
Any article can be summarized or read through one of three lenses: a 280-character reply that is not allowed to summarize, an investor memo on incentives, cost curves and margins, and what a founder should do differently if the argument holds. A ranking model would have saved me the curation. The curation was the part I wanted to keep.
Where the AI needed a human
The AI features. Zero-shot prompts gave me summaries and lenses that read like everyone else's. They only came right once I had researched what each one was for, written a clearer spec for the output, and tuned it against examples I judged by eye. The model couldn't know what I wanted until I did.
The interface. It drifted. New features arrived with their own spacing, their own buttons, their own idea of the type scale. I held it back with a design rules file I added to each time I caught a drift, and with gstack to plan and review each feature before it was built and test it after. It worked, but it was rules written after the fact.
What I'd do differently
Design system first. Foundations before features: layout, spacing, type and color, then primitives and components in a library the coding agent pulls from directly, instead of rules patched in after the drift.
No n8n. The daily brief summarized the day's articles and read them aloud in an ElevenLabs voice, and I listened to it on the commute. Building it meant jumping between n8n and my editor, with me as the glue. I built it to learn voice AI and a multi-step workflow, and switched it off in January 2026 rather than pay to host it. Next time the workflow lives in the codebase.
A test set for the AI output, so a prompt change is measured rather than eyeballed.