Skip to content

Changelog page inside the docs, and RSS autodiscovery on every page - #1142

Merged
Iamfle4ka merged 3 commits into
mainfrom
docs/changelog-page-and-rss
Oct 8, 2026
Merged

Iamfle4ka merged 3 commits into
mainfrom
docs/changelog-page-and-rss

Conversation

@Iamfle4ka

Copy link
Copy Markdown
Collaborator

Item 1.2 of the Claude/Stripe docs audit: both keep release notes inside the docs; ours lived only on changelog.keboola.com, linked once from the home page.

What this adds

  • /changelog/ — the 15 newest entries from the Ghost feed at changelog.keboola.com, newest first: date, linked title, the feed's one-line description. Full history and subscription are one click away at the top of the page.
  • RSS autodiscovery on every page: <link rel="alternate" type="application/rss+xml"> pointing at Ghost's feed, so a reader's RSS client can subscribe from anywhere in the docs.
  • The home page's Release notes link now points at /changelog/ instead of leaving the site.

How

src/pages/changelog.astro is a real Astro page inside <StarlightPage>, on the same footing as 404.astro: it needs data fetched at build time, which a Markdown page cannot do, and keeps the sidebar and chrome. src/lib/changelog-feed.mjs fetches and parses the feed.

Choices worth a glance:

  • No new dependency for the XML. Ghost's feed is flat and well-formed; the parser is ~30 lines. The only XML parser already in node_modules (sax) is transitive and would disappear on an unrelated bump.
  • Only the short description is rendered, not content:encoded. That body is Ghost markup styled for Ghost; the entry's own page is the right place to read it.
  • Failure never fails the build. Unreachable host, timeout or a non-200 all return ok:false, and the page renders the link plus a one-line notice instead of the list. Exercised against an unreachable host (25 ms) and a 404.
  • Build-time only, so the list is as fresh as the last deploy — days behind the source at worst, with the source linked at the top.
  • hideMeta: true for the same reason as on the 404: the page-head chrome includes "View as Markdown", which points at <slug>/index.md, and that file is only emitted for collection pages.

Deliberately not done — your call

  • No sidebar entry. Where a Changelog belongs in the navigation is an IA decision, not one I should make from a build script: bottom of the sidebar next to External Integrations, under Home, or nowhere and only from the home page. Say where and I'll add it to _data/navigation.yml.
  • Not in llms.txt. page-markdown.mjs indexes collection pages; this one is dynamic, and the canonical source for an agent is the Ghost feed itself.
  • src/content/docs/index.md changed by one link. No prose changed, so the fact-checker pass was not run.

Verified

  • Build clean, 368 pages. dist/changelog/index.html has 15 <time> entries; first is Sep 22, 2026 — Google Ads Update.
  • Parser run against the live feed: 15 items, titles and descriptions decode cleanly (& in "August 15 & 22" is decoded, not raw).
  • RSS <link> present in the <head> of an unrelated page (/storage/); home page links /changelog/; page is in the sitemap.
  • Renders in light desktop (1280) and dark mobile (375). Only console 404 is /api/chat — the Kai backend, absent in a static preview.
  • Fallback exercised: unreachable host → ok:false in 25 ms; 404 → ok:false, HTTP 404.

🤖 Generated with Claude Code

…todiscovery

The changelog lives on Ghost at changelog.keboola.com and the docs only linked to it from the home page. Both Stripe and Claude keep release notes inside the docs, and the audit listed this as a gap.

/changelog/ is a real Astro page inside <StarlightPage>, on the same footing as 404.astro: it fetches Ghost's RSS feed at build time, which a Markdown page cannot do, and keeps the sidebar and site chrome. Fifteen newest entries, each as date, linked title and the feed's short description; the full HTML body is not rendered because it is Ghost markup styled for Ghost and the entry is one click away.

The feed is parsed without a dependency: it is flat and well-formed, and the only XML parser in node_modules (sax) is transitive and would vanish on an unrelated bump. A failed or slow fetch returns ok:false and the page falls back to the plain link — a docs build must not fail because a marketing site was down.

Every page now carries <link rel="alternate" type="application/rss+xml"> pointing at the Ghost feed, so an RSS client can subscribe from anywhere in the docs. The home page's Release notes link points at /changelog/.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
connection-docs Ready Ready Preview Oct 8, 2026 2:10pm UTC

Request Review

@Iamfle4ka Iamfle4ka added the site-tooling Touches build config, CI, scripts or runtime code — the reviewer bot always routes these to a human label Sep 23, 2026

@keboola-pr-reviewer-bot keboola-pr-reviewer-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: needs_human (risk 4/5) · profile connection-docs

Needs a human — this adds runtime code (a new Astro page, a component edit, and a build-time RSS fetcher), not content-bucket docs.

Concerns:

  • src/pages/changelog.astro: New Astro page runs a build-time network fetch; outside content bucket.
  • src/lib/changelog-feed.mjs: Hand-rolled RSS/XML parser instead of a dependency; needs code review.
  • src/components/Head.astro: Component edit adds site-wide RSS link tag; tooling change per policy.

Suggested reviewers: @keboola/docs

* @param {{ url?: string, limit?: number, timeoutMs?: number }} [opts]
* @returns {Promise<{ ok: true, items: Array<{title:string,link:string,date:Date,description:string}> } | { ok: false, error: string }>}
*/
export async function fetchChangelog({ url = CHANGELOG_RSS_URL, limit = 15, timeoutMs = 8000 } = {}) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why only 15? and in the future can we make it prettier like cards Title, date on the right and desc below

@eruveo

eruveo commented Oct 8, 2026

Copy link
Copy Markdown
Collaborator

also where does the user get to this page?

Nikita and others added 2 commits October 8, 2026 16:05
Michal asked where a reader finds /changelog/ (only the home page linked
it) and for cards instead of a plain list. The sidebar now ends with
Changelog; navigation.yml gets a `link:` field for pages outside the docs
collection, since Starlight cannot resolve a slug for src/pages/*.astro.
Each entry is a card in the prev/next card frame: title left, date right,
description below, the whole card a link; the date stacks under the
title on phones.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Iamfle4ka

Copy link
Copy Markdown
Collaborator Author

@eruveo Added Changelog to the bottom of the sidebar, so it's reachable from every page. The entries are cards now, with the title on the left, the date on the right and the description below.

As for 15: that's all Ghost's RSS feed returns, and it has no second page. The full history is linked at the top of the page.

@Iamfle4ka
Iamfle4ka merged commit 040b915 into main Oct 8, 2026
3 checks passed
@Iamfle4ka
Iamfle4ka deleted the docs/changelog-page-and-rss branch October 8, 2026 15:05

This branch was successfully deployed

1 active deployment
Preview — c4b46b44 Deployed Oct 8, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent-needs-human agent-profile:connection-docs site-tooling Touches build config, CI, scripts or runtime code — the reviewer bot always routes these to a human

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants