From e86beeeb8a13fc1cec1c8d553929fc2ed4d8eb62 Mon Sep 17 00:00:00 2001 From: Julien Herr Date: Mon, 25 May 2026 15:48:31 +0200 Subject: [PATCH] feat(feed): optional per-feed sender-in-title toggle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a per-feed senderInTitle flag (domain FeedState.senderInTitle ↔ FeedConfig.sender_in_title). When set, the feed generator prefixes each entry title with [Sender] (display name, falling back to the address). Exposed as an admin edit-form checkbox and across the REST API create/update/response schemas. Co-Authored-By: Claude Opus 4.7 --- README.md | 1 + TODO.md | 2 +- src/domain/feed-state.ts | 2 + src/domain/feed.aggregate.ts | 12 +++ src/infrastructure/feed-generator.test.ts | 31 +++++++ src/infrastructure/feed-generator.ts | 6 +- src/infrastructure/feed-mapper.ts | 2 + src/routes/admin.test.ts | 100 ++++++++++++++++++++++ src/routes/admin/feeds.tsx | 19 ++++ src/routes/api/api.test.ts | 34 ++++++++ src/routes/api/index.ts | 3 + src/routes/api/schemas.ts | 9 ++ src/styles/components.css | 13 +++ src/types/index.ts | 2 + 14 files changed, 234 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2f54faa..1d57e22 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ kill-the-news keeps the same workflow while avoiding shared domains and shared d - Cloudflare Email Workers ingestion (no third-party service) - ForwardEmail webhook ingestion with source-IP verification (optional alternative) - Optional per-feed sender allowlist (`email@domain.com` or `domain.com`) +- Optional per-feed "sender in title" toggle — renders each entry as `[Sender] Subject` for at-a-glance scanning in your reader - RSS generation on demand (`/rss/:feedId`) - Atom feed at `/atom/:feedId` - JSON Feed at `/json/:feedId` (natively consumed by NetNewsWire, Reeder, NewsBlur, Feedly) diff --git a/TODO.md b/TODO.md index 5d85d5e..64b829e 100644 --- a/TODO.md +++ b/TODO.md @@ -62,7 +62,7 @@ Gaps found by reading every open/closed issue + PR on [kill-the-newsletter](http - [ ] `P2·S` **Strip-styles / plaintext rendering option** ([#74](https://github.com/leafac/kill-the-newsletter/issues/74), [#119](https://github.com/leafac/kill-the-newsletter/issues/119)). Some readers render newsletter HTML/CSS poorly. Offer an opt-in to strip `