Inspiration
Most feed readers either bury items in per-source columns or replace chronology with an algorithmic timeline, and many of them require a cloud account. NightRiver revives the classic River of News: items from many independent RSS and Atom feeds, merged into one reverse-chronological river, generated entirely on your own machine.
What it does
- Subscribe to any number of RSS 2.0 or Atom 1.0 feeds.
- Refresh all feeds with one command and cache items on disk.
- Generate today’s briefing as Markdown and HTML, either as one chronological river or grouped by source.
- Work fully offline once feeds are cached, including an offline demo that uses three bundled fixture feeds.
- Print a clear error, never a silent failure, when a feed cannot be read.
- Wrap long local file paths in the terminal so subscription lists stay readable.
How we built it
NightRiver was created with Kiro CLI (kiro-cli chat, version 3.2.1) during the Kiroween 2026 submission window, starting from an empty directory. Specs, a PostFileSave validation hook, and a briefing-tone steering file live in .kiro/ and are part of the public repository (they are not gitignored). The required write-up is in HOW_YOU_USED_KIRO.md. The only third-party Python dependency is feedparser. Judge testing steps are in TESTING.md.
Challenges we ran into
Keeping the public tree honest: only Kiro surfaces that were actually used are described, and the demo video stays under the official 3-minute limit. Long file:// fixture paths wrapped badly in a narrow terminal; that was fixed with tests first, then a hanging-indent formatter.
Accomplishments that we're proud of
A complete local-first briefing path that a judge can run offline with add-fixtures, refresh, and brief. The .kiro specs, hook, and steering file are in the repo as required. The 1-minute-45-second demo has English burned-in subtitles, no music, and the presenter does not appear on camera.
What we learned
A small, truthful CLI with a clear fixture path is easier for a judge to verify than a cloud-hosted reader. Kiro CLI was effective for creating the first working tree; later polish (list wrapping, tests, copy) was done without spending more Kiro credits.
What's next for NightRiver
No paid plan is planned. After formal Submit, possible follow-ups are more feed formats and a slightly richer HTML river — only if they stay local-first and offline-friendly.
Try it out
See TESTING.md and the Quick start in the README: python -m nightriver add-fixtures, then refresh, then brief. Python 3.13+ and feedparser are required. There is no hosted demo and no login.