This site is fully automated. No one writes the digests by hand — every morning a GitHub Actions workflow runs the whole pipeline end to end, from fetching raw feed data to publishing the finished site. Here’s the full picture.
Architecture
flowchart TD
subgraph schedule[" "]
cron([⏰ GitHub Actions
daily cron · 5 AM EST])
end
subgraph aggregate["1 · Aggregate"]
feeds[(config/feeds.yaml
curated feed list)]
py[🐍 news-aggregator
fetch · filter 24h · dedupe]
seen[(reports/seen.json
dedupe memory)]
raw[/raw-YYYY-MM-DD.json/]
feeds --> py
seen <--> py
py --> raw
end
subgraph synth["2 · Synthesize"]
claude[🤖 Claude Code
read · rank · group · write]
web([🌐 WebSearch
breaking news])
post[/content/posts/
YYYY-MM-DD.md/]
raw --> claude
web --> claude
claude --> post
end
subgraph publish["3 · Publish"]
hugo[⚡ Hugo
build static site]
pages[☁️ GitHub Pages]
post --> hugo
hugo --> pages
end
cron --> py
pages --> reader([👀 You])
style cron fill:#2563eb,color:#fff
style claude fill:#d97757,color:#fff
style reader fill:#16a34a,color:#fffStep by step
1 · Aggregate
A small Python tool (news-aggregator) reads the feed list from
config/feeds.yaml, fetches every feed, and keeps only entries from
the last 24 hours. It tracks every URL it has already seen in seen.json, so
the same story never shows up twice across days. The result is a single raw JSON
file of the day’s new entries.
2 · Synthesize
Claude Code reads that raw JSON and does the editorial work: it skips marketing fluff and minor patch notes, groups articles that cover the same story, picks the day’s top story, sorts everything into themed categories, and assigns each item a relevance tier. It also runs a web search to catch breaking news the RSS feeds may have missed. The output is one Markdown post with front matter — the same format you’re reading now.
3 · Publish
Hugo builds the Markdown into this static site — archive, navigation, RSS feed, and all — and the workflow deploys it to GitHub Pages. Posts older than 60 days are pruned automatically to keep things current.
The whole thing is open source
Feed config, aggregator, Claude instructions, and site templates all live in one repo. Browse it, fork it, or suggest a feed on GitHub.