Skip to content

feeds: absolute URLs in entry content, short feed title, one feed in <head> - #87

Merged
rivassec merged 1 commit into
mainfrom
feed-best-practices
Oct 3, 2026
Merged

rivassec merged 1 commit into
mainfrom
feed-best-practices

Conversation

@rivassec

@rivassec rivassec commented Oct 3, 2026

Copy link
Copy Markdown
Owner

Applies the parts of Kevin Cox's "RSS Feed Best Practices" checklist that the live feed missed.

Changes

  • New feed_polish plugin (feed_generated signal). It resolves every relative href/src in feed entry content and summaries against the entry permalink. The live Atom feed had 21 relative links (for example /tools/iam-blast-radius/ and iam-blast-radius-architecture-problem.html) that many readers resolve wrongly. Fragments, mailto:, tel: and data: links are left alone, and site pages are not touched.
  • FEED_TITLE = 'RivasSec': feeds get a short title, and category feeds keep their - <category> suffix. SITENAME stays the page <title>. The old feed title also still listed Kubernetes.
  • One feed in <head>: only Atom is advertised. The RSS file is still built and linked in the footer, so existing RSS subscribers are unaffected.
  • The plugin imports Pelican lazily, so its helpers run under the stdlib unittest workflow. 7 new tests; 49 pass locally.

Verified

pelican content -s publishconf.py build:

  • 22 entries, 0 relative href/src left in either Atom or RSS
  • Feed titles RivasSec and RivasSec - DevSecOps
  • <head> has one feed link (Atom)
  • Page <title> unchanged

Not in this PR (Cloudflare settings)

  • Serve the feeds with application/atom+xml / application/rss+xml; they are currently application/xml.
  • Turn on HSTS.

🤖 Generated with Claude Code

https://claude.ai/code/session_01W7mZgHQBLP7AB6kHoBFk3y

…<head>

Follows the feed checklist in kevincox.ca's "RSS Feed Best Practices":

- New feed_polish plugin (feed_generated signal): resolves every relative
  href/src in feed entry content and summaries against the entry permalink.
  The live feed had 21 relative links (e.g. /tools/iam-blast-radius/,
  iam-blast-radius-architecture-problem.html) that many readers resolve
  wrongly. Fragments, mailto:, tel: and data: are left alone. Site pages are
  not touched.
- FEED_TITLE = 'RivasSec': feeds get a short title (category feeds keep the
  " - <category>" suffix); SITENAME stays the page <title>. The old feed title
  also still advertised Kubernetes.
- Only the Atom feed is advertised in <head>; the RSS file is still built and
  linked in the footer, so existing RSS subscribers are unaffected.
- Plugin imports Pelican lazily so its helpers run under the stdlib unittest
  workflow; 7 new tests (49 total pass).

Verified with a publishconf build: 22 entries, 0 relative href/src left in
Atom or RSS, titles "RivasSec" / "RivasSec - DevSecOps", one feed link in head.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W7mZgHQBLP7AB6kHoBFk3y
@rivassec
rivassec merged commit 8d10aaf into main Oct 3, 2026
19 checks passed
@rivassec
rivassec deleted the feed-best-practices branch October 3, 2026 21:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant