One morning digest, built from the sources a media team already watches.

Sector
Media & publishing
Service line
Custom Build + AI Build
Delivery
Always-on scheduled service
Interface
Editor admin UI

See it live

07:00

Weekday digest in every inbox, drafted 30 minutes earlier for an editor to hold or release

0

Full articles stored or redistributed: headline, link and an original summary only

28 days

Then extracted text is purged automatically

The brief

A media client needed to keep track of coverage across a long list of publications, trade sites and feeds. Someone read them all each morning, copied out what mattered to the team, and wrote it up by hand. It was slow, it depended on one person, and the same story syndicated across five outlets kept turning up five times.

They wanted a short, trustworthy briefing in the inbox before the working day started, built only from sources they were permitted to use, with an editor still in control of what went out.

The build

A scheduled pipeline that pulls from RSS feeds, news APIs and plain listing pages, politely: robots.txt respected, per-site delays, conditional requests, and a source switched off automatically if it blocks us rather than worked around. New stories are extracted, de-duplicated by URL, content hash and near-duplicate matching, then run through keyword and boolean rules such as (Ofcom OR regulator) AND streaming NOT sport.

What survives is summarised by Claude in the client's house style, grouped into themes with a short overview, and emailed as one message per recipient with one-click unsubscribe. A draft lands 30 minutes before send so an editor can hold it. A monthly AI budget cap falls back to an offline summariser, and a dashboard shows source health, failures and delivery.

Stack

  • Python
  • FastAPI
  • HTMX
  • Claude Haiku
  • APScheduler
  • Jinja2
  • SMTP / Amazon SES
  • Docker
1 Sources RSS, APIs, listing pages 2 Extract Polite fetch, clean text 3 Dedupe URL, hash and syndicated copies 4 Filter Keyword and boolean rules 5 Summarise Claude, house style, capped 6 Send One email per recipient, 07:00 Editor holdDraft lands 30 min before send.Failing sources are flagged. 1 Sources RSS, APIs, listing pages 2 Extract Polite fetch, clean text 3 Dedupe URL, hash and syndicated copies 4 Filter Keyword and boolean rules 5 Summarise Claude, house style, capped 6 Send One email per recipient, 07:00 Editor holdDraft 30 min before send
The six steps every story passes through, from source to inbox. The dashed branch is the editor hold before sending.

What changed

  • The manual morning read-through became one scheduled digest, with no single person it depends on.
  • Syndicated copies of the same story collapse into one entry instead of appearing five times.
  • An editor sees the draft first and can hold it, so nothing goes out unreviewed.
  • Copyright-conscious by design: links and original summaries only, and sources that block access are switched off, not bypassed.

See it live

More case studies

See all case studies

Recognise your business somewhere in here?

If this sounds familiar, start with a 25-minute call: what you're running today, where the friction sits, and whether a monthly retainer is the right shape for it.