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: 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, 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/).*