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.

Built With

Share this project:

Updates

Submission history