Skip to content

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 25 May 16:15
· 17 commits to main since this release
0f18d4c

Highlights

Native feed detection

Kill-the-news now inspects incoming newsletters for a self-advertised Atom/RSS/JSON feed (rel=alternate links in the email HTML) and stores the discovered feeds per sender on the Feed aggregate. If a newsletter already publishes a real feed, you can subscribe to it directly — surfaced as chips on the feed detail page, a dashboard pill, and (read-only) on the REST Feed schema, with a dismissable notice.

Subscription confirmation surfacing

Confirmation emails ("click to confirm your subscription") are detected at ingestion and flagged on the feed. The admin UI surfaces the confirmation link, a badge, a dashboard pill, and an inline banner so a pending double-opt-in never gets silently stuck — all dismissable. Tightened to cut false positives via a weak-signal heuristic.

Read/write identity decoupling (privacy)

The public read id (FeedId, used in /rss/:feedId) is now fully decoupled from the inbound email address (MailboxId, noun.noun.NN). A feed's read URL never reveals its inbound alias and vice-versa — reading /rss/<noun.noun.NN> 404s.

Reader compatibility

  • JSON Feed 1.1 output (/json/:feedId)
  • OPML export of all feeds (/admin/opml)
  • Conditional GET (ETag / Last-Modified / 304) on the feed routes

Admin & API

  • Per-feed Subscribe chips for RSS/Atom/JSON with copy / open / validate actions, reused across dashboard and feed detail page
  • Email detail page links to its public entry page
  • Land on the feed's emails page right after creation
  • Optional per-feed "sender in title" toggle
  • Running version shown in the admin/status footer, /health, and /api/v1/stats

Internal & release

  • Sender display name, site URL and parsing now owned by the EmailAddress value object (DDD cleanup)
  • Release version is derived from the git tag (main carries a -develop suffix; CI strips it and guards against tagging the wrong commit)

Full Changelog: v0.2.1...v0.3.0