projects

Daybreak

I wanted a morning reading habit that gave me the context behind the headlines and a reason to stop scrolling.

I built a private daily brief that collects news and groups related coverage. A separate reading feed turns books into short ideas with examples and caveats.

Daybreak daily edition with source-backed news stories and a reading sidebar
fig. 1The Oct 19, 2026 daily edition with its lead story open, built from sample feeds.

how it works

  1. RSS and institutional feeds feed a Python pipeline that extracts articles, removes duplicates, and clusters related reporting.
  2. The Next.js app serves the daily edition alongside full-screen news and book feeds, with reading progress and saved items.
  3. SQLite stores briefs and reading state. Systemd timers handle collection, retries, and weekly recaps.

decision

Every generated brief has to pass checks written in code before it is published: quotes must appear word for word in the source, links must point to articles the pipeline collected, and numbers must match the reporting. A model reviewer runs after those checks.

what went wrong

With no holdings entered, the first live brief still included a market note about a fund I do not own. That note is now written by code whenever the holdings list is empty.

outcome

It runs on my homelab: the morning pipeline on the X1 and the reading app on Nexus. News and books share a searchable archive and saved reading history.

Next.js, TypeScript, Python, SQLite / FTS5, Drizzle, Claude, Docker, systemd

Set in Newsreader and IBM Plex Mono. Toronto, ON, Canada.

© 2026 Prahlad Ranjit