# I Built My Own RSS Reader in an Afternoon, With AI Doing the Typing

> Source: <https://dev.to/ajaywalia/i-built-my-own-rss-reader-in-an-afternoon-with-ai-doing-the-typing-4mi1>
> Published: 2026-11-11 22:08:53+00:00

For years my RSS setup was a compromise. I never wanted to pay for a desktop reader, so I stayed on The Old Reader: a perfectly fine service, but it felt like visiting a website, because that's what it was. What I actually wanted was simple: a native Mac app, feeds stored locally, no account, no subscription, and fast enough to triage a hundred articles from the keyboard.

So I stopped wishing and built it. **LumenAI** is a local-first RSS reader for macOS with AI summaries, taken from an empty folder to a notarizable DMG in about an hour of wall-clock time, with me as product owner and build verifier while the AI wrote the code.

My pitch to the AI was one paragraph: a local RSS reader for Mac, a premium feel, and *treat it like a real engineering project, with clear phases, and ask me questions before making decisions*. That last sentence mattered most.

Instead of a wall of code, it interviewed me: stack, what v1 includes, what it excludes, how refresh works, what "premium" means concretely. A few rounds of multiple-choice later we had a spec.

Writing down the non-goals felt ceremonial. It wasn't: every time scope tried to creep, that list ended the discussion in one line.

Every choice optimised for native feel, local data, no servers.

`.xcodeproj`.
The part I'm proudest of is the AI layer: one `SummaryProvider` protocol with six implementations (Apple Intelligence on-device, Ollama, Claude, OpenAI, Gemini, and Disabled). Swapping providers is a dropdown; keys live in the macOS Keychain.

`for` loop.`<link>` tags, one canonical model for every feed format.`j`/` k`/space/` s`/` m` keyboard navigation.
Every phase went the same way: the AI proposed decisions and asked questions, wrote the code and tests, then stopped, because its sandbox is Linux and can't build a Mac app. So I was the build machine: ⌘U, ⌘R, report back.

That constraint turned into a feature. It forced a human checkpoint between phases instead of a firehose of unverified code. Of three failures in the whole project, my builds caught two and the AI caught one re-reading its own code. Final tally: **38 Swift files, 27 tests, zero runtime crashes encountered.**

Treat it like an engineering project, not a magic trick. Phases, a non-goals list, tests, and a check-in after every phase are why this took an hour instead of unravelling over a weekend. The AI typed every line; the spec, the taste and the "no, simpler" calls were the human part, and the project needed both.

That's the whole idea behind what I write on [Curious Bit](https://curiousbit.netlify.app/): you learn a stack by shipping something real in it, not by watching a syllabus. If you'd rather learn infrastructure-side AI the same way, I've also put together [AICademy](https://ragentic.netlify.app/), built around doing the job rather than reading about it.

**Full write-up with the screenshot gallery:** [I Built My Own RSS Reader in an Afternoon](https://curiousbit.netlify.app/i-built-my-own-rss-reader-in-an-afternoon-with-ai-doing-the-typing/)

*Originally published on [Curious Bit](https://curiousbit.netlify.app/i-built-my-own-rss-reader-in-an-afternoon-with-ai-doing-the-typing/).*
