← All projects

Case study / Automation / News delivery

News Aggregator

A daily email briefing that brings AI headlines and an optional stock watchlist into one digest.

PythonRSS / AtomGitHub ActionsResend

01 / Context

The problem

Keeping up with AI news and stock-watchlist headlines means checking multiple searches throughout the day. I wanted a scheduled briefing that collects recent stories and delivers them directly to an inbox.

02 / Ownership

My contribution

  • Built the RSS and Atom pipeline with publication-window filtering, exact-link deduplication and newest-first ordering.
  • Created HTML and plain-text email templates and connected delivery to the Resend API.
  • Added daily GitHub Actions scheduling, local preview controls, transient-error retries and partial-feed warnings.

03 / System design

Architecture

Architecture / workflow overview
  1. 01Collect

    A scheduled GitHub Actions job or local CLI loads configuration and fetches AI and optional stock-watchlist RSS feeds.

  2. 02Filter

    Parse RSS and Atom, normalize dates to UTC, keep recent stories, remove duplicate links and apply the story limit.

  3. 03Render

    Build HTML and plain-text digests with escaped feed content, validated links and partial-coverage notices.

  4. 04Deliver

    Send through Resend with request timeouts, transient-error retries and a payload-based idempotency key.

04 / Evidence

Results

Scheduled cloud workflow
Daily
Email formats
HTML + plain text
Third-party Python dependencies
0

The implemented pipeline collects, filters and delivers RSS headlines using Python's standard library. Dry-run mode previews the digest without sending email. Partial feed failures are shown in the digest, while a total feed outage stops delivery. The project does not report measured delivery reliability or readership results.

05 / Boundaries

Limitations

  • Headlines and excerpts come from publisher RSS entries. The application does not generate summaries or use an LLM.
  • Deduplication applies within each run; there is no persistent delivery history. Rolling publication windows can overlap or leave gaps when runs are delayed.
  • Coverage depends on the available feeds, and GitHub Actions schedules can be delayed or missed. Resend API acceptance does not establish final inbox delivery.

06 / Explore the code

Run locally

Use Python 3.12 or newer; no package installation is required. Run python news_digest.py --dry-run --output preview.html to preview live feeds locally. Sending requires a Resend API key, an authorized sender and configured recipients. The repository also documents daily scheduling through GitHub Actions.

Setup instructions

07 / References

Sources

  • News Aggregator repository

    Implementation, features, architecture, setup and documented reliability limits. The repository calls the application AI News Digest.