rss-feeds

Access and configure the RSS 2.0 feed generated by changelog-site.

7 stars

Best use case

rss-feeds is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Access and configure the RSS 2.0 feed generated by changelog-site.

Teams using rss-feeds should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/rss-feeds/SKILL.md --create-dirs "https://raw.githubusercontent.com/heldernoid/agentic-build-templates/main/projects/web-applications/changelog-site/skills/rss-feeds/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/rss-feeds/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How rss-feeds Compares

Feature / Agentrss-feedsStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Access and configure the RSS 2.0 feed generated by changelog-site.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# RSS Feeds Skill

## When to use

Use this skill to:
- Fetch the raw RSS 2.0 feed XML
- Verify feed structure and entry content
- Enable or disable the feed via settings
- Understand the feed format for feed reader integration

## Feed URL

```
GET /rss.xml
```

The feed is publicly accessible at `/rss.xml`. No authentication required.

```bash
curl http://localhost:3000/rss.xml
```

The response is `Content-Type: application/rss+xml; charset=utf-8`.

## Feed format

The feed follows RSS 2.0. Entry bodies use CDATA to wrap HTML safely.

```xml
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Acme App Changelog</title>
    <link>https://changelog.acmeapp.com</link>
    <description>Product updates, bug fixes, and new features.</description>
    <language>en</language>
    <lastBuildDate>Thu, 20 Mar 2026 10:00:00 +0000</lastBuildDate>
    <atom:link href="https://changelog.acmeapp.com/rss.xml"
               rel="self" type="application/rss+xml"/>

    <item>
      <title>Dark mode support across all pages</title>
      <link>https://changelog.acmeapp.com/dark-mode-support</link>
      <guid isPermaLink="true">https://changelog.acmeapp.com/dark-mode-support</guid>
      <pubDate>Thu, 20 Mar 2026 00:00:00 +0000</pubDate>
      <category>Added</category>
      <description><![CDATA[<p>We've added a full dark mode...</p>]]></description>
    </item>

  </channel>
</rss>
```

## Feed fields

| RSS field | Source |
|---|---|
| `<title>` (channel) | `settings.product_name + " Changelog"` |
| `<link>` (channel) | `settings.public_url` |
| `<description>` (channel) | `settings.description` |
| `<lastBuildDate>` | Published date of the most recent entry |
| `<title>` (item) | `entry.title` |
| `<link>` (item) | `settings.public_url + "/" + entry.slug` |
| `<guid>` | Same as item `<link>` |
| `<pubDate>` | `entry.published_at` in RFC 822 format |
| `<category>` | `entry.category` (title-cased) |
| `<description>` | `entry.body_html` wrapped in CDATA |

## Feed behavior

- The feed includes only published entries (`is_draft = false`).
- Entries are ordered by `published_at` descending (newest first).
- The feed contains up to 50 entries. Older entries are not paginated.
- Draft entries never appear in the feed even if a direct URL is guessed.
- The feed regenerates on each request from the database. No static file caching.

## Enable or disable the feed

The feed is enabled by default. To disable it:

```bash
curl -X PUT http://localhost:3000/api/settings \
  -H "Content-Type: application/json" \
  -d '{"rss_enabled": false}'
```

When disabled, `GET /rss.xml` returns `404`.

To re-enable:

```bash
curl -X PUT http://localhost:3000/api/settings \
  -H "Content-Type: application/json" \
  -d '{"rss_enabled": true}'
```

## Verify feed is valid

Use the `curl` response headers to confirm the correct content type:

```bash
curl -I http://localhost:3000/rss.xml
```

Expected:

```
HTTP/1.1 200 OK
Content-Type: application/rss+xml; charset=utf-8
```

## Autodiscovery

The public changelog page includes an autodiscovery `<link>` tag in `<head>` so feed readers can find the feed automatically:

```html
<link rel="alternate" type="application/rss+xml"
      title="Acme App Changelog"
      href="https://changelog.acmeapp.com/rss.xml">
```

## Feed reader subscription URLs

Common feed readers accept the raw feed URL directly. For direct subscription links:

| Reader | URL pattern |
|---|---|
| Feedly | `https://feedly.com/i/subscription/feed/{encoded_feed_url}` |
| Inoreader | `https://www.inoreader.com/feed/{encoded_feed_url}` |
| Generic | Paste the feed URL directly into any RSS reader |

Replace `{encoded_feed_url}` with the URL-encoded value of `https://changelog.acmeapp.com/rss.xml`.

## Troubleshooting

**Feed returns 404**

Check that `rss_enabled` is `true` in settings:

```bash
curl http://localhost:3000/api/settings | jq .rss_enabled
```

**Feed shows no items**

Verify that at least one entry is published (not draft):

```bash
curl "http://localhost:3000/api/entries?status=published&limit=1"
```

**Feed content is stale**

The feed is generated dynamically on each request. There is no cache to clear. If entries appear in the API but not the feed, check that `published_at` is set (not null) on those entries.

**Invalid XML in feed**

Entry body HTML is sanitized with DOMPurify before storage. If a feed validator reports malformed XML, the likely cause is unescaped characters in the `product_name` or `description` setting. Update those fields to remove `<`, `>`, or `&` characters.

Related Skills

Skill: Uptime Monitoring

7
from heldernoid/agentic-build-templates

## Overview

Skill: Status Page

7
from heldernoid/agentic-build-templates

## Overview

Skill: unit-conversion

7
from heldernoid/agentic-build-templates

## Overview

Skill: recipe-scaler

7
from heldernoid/agentic-build-templates

## Overview

reading-list

7
from heldernoid/agentic-build-templates

Operate the reading-list API to save, manage, tag, search, and export articles.

email-digest

7
from heldernoid/agentic-build-templates

Configure, test, and troubleshoot the reading-list daily email digest delivered via nodemailer.

websocket-realtime

7
from heldernoid/agentic-build-templates

Use the WebSocket connection in poll-builder to receive live vote updates. Use when you need to stream real-time poll results, monitor a poll for new votes, or build a live dashboard. Triggers include "live results", "real-time updates", "stream votes", "watch poll", or "WebSocket".

poll-builder

7
from heldernoid/agentic-build-templates

Self-hosted poll creation tool with real-time results. Use when you need to create a poll, check vote counts, close a poll, export results, or get the shareable link for a poll. Triggers include "create poll", "vote", "poll results", "survey", "collect votes", "share poll", or any task involving polling or voting.

Skill: personal-finance

7
from heldernoid/agentic-build-templates

## Overview

Skill: csv-import

7
from heldernoid/agentic-build-templates

## Overview

Skill: Syntax Highlighting

7
from heldernoid/agentic-build-templates

## Purpose

Skill: Pastebin Core

7
from heldernoid/agentic-build-templates

## Purpose