What you are building
This tutorial builds an AI news aggregator: a pipeline that pulls articles from many RSS feeds, collapses the same story reported by different outlets into a single item, summarises each one, and delivers a personalised digest by email or web. The intelligence is in two places — using embeddings to cluster duplicates so readers see one entry per story instead of five, and using an LLM to summarise each cluster into a few tight sentences. The rest is plumbing: scheduled fetching, deduplication, ranking, and delivery.
How it works
A scheduled fetcher polls your RSS and Atom feeds, parses each entry into a common shape, and stores new items, skipping anything it has seen by URL hash and using conditional requests so it only downloads changed feeds. A clustering step embeds every new article and groups items whose vectors are highly similar — the same event from competing publishers sits close together in embedding space, so it merges into one cluster. A summarisation step runs a cheap LLM once per cluster (not per article) and caches the result by content hash. Finally a personalisation and delivery step ranks clusters against each user’s interest vector and assembles a digest sent on their chosen cadence, every cluster linking back to the original sources.
Tips and the planner below
Summarise per cluster, not per article — that one decision removes most of your LLM bill because five sources of the same story become one call. Cache summaries by content hash so re-runs cost nothing, and only summarise clusters that clear a relevance filter. Respect publishers: show a short generated summary with a prominent link back, never mirror full text, and honour feed terms. Poll at a cadence that matches each source and stagger requests to be a good citizen. The planner below estimates your daily article volume, how many clusters and summarisation calls that produces, and the resulting monthly cost from your feed count, polling cadence, and model price.