Product engineering · Sep 11, 2026
AI news board
An interactive aggregator that never renders empty — live RSS and API sources with a checked-in fallback.
- Next.js
- RSS
- Zod
- Route Handlers
Problem
A “featured” widget that depends on third-party feeds will look broken the first time a source 404s. That is not a good first impression.
Approach
Every source is a named adapter. Fetches run with Promise.allSettled and a 30-minute revalidate. Items are normalized into one Zod schema, URLs are canonicalized, and near-duplicates from the same source are dropped. If nothing live comes back, content/news/fallback.json fills the board and a calm banner says so.
The UI is the product: search, topic and source filters, sort, shareable query params, and keyboard-accessible chips.
Outcome
The /news page is usable on a plane. Home teases the same pipeline instead of a second, uncached fetch.