diff --git a/public/__redirects b/public/__redirects
index a1d884a29fa76a..1aacdc909c0c04 100644
--- a/public/__redirects
+++ b/public/__redirects
@@ -9,6 +9,12 @@
# changelog
/changelog/rss.xml /changelog/rss/index.xml 301
+/api-shield/changelog/index.xml /changelog/rss/api-shield.xml 301
+/cache/changelog/index.xml /changelog/rss/cache.xml 301
+/dns/changelog/index.xml /changelog/rss/dns.xml 301
+/fundamentals/changelog/index.xml /changelog/rss/fundamentals.xml 301
+/logs/changelog/index.xml /changelog/rss/logs.xml 301
+/ssl/changelog/index.xml /changelog/rss/ssl.xml 301
## legacy
/changelog/index.xml /release-notes/index.xml 301
diff --git a/src/components/ProductChangelog.astro b/src/components/ProductChangelog.astro
new file mode 100644
index 00000000000000..b0ac1cbd7b2fda
--- /dev/null
+++ b/src/components/ProductChangelog.astro
@@ -0,0 +1,54 @@
+---
+import { getChangelogs, type GetChangelogsOptions } from "~/util/changelog";
+import { reference } from "astro:content";
+import { z } from "astro:schema";
+import { getCollection, render } from "astro:content";
+import { slug } from "github-slugger";
+import RSSButton from "~/components/RSSButton.astro";
+import AnchorHeading from "~/components/AnchorHeading.astro";
+import { format } from "date-fns";
+const props = z
+ .object({
+ product: reference("products"),
+ })
+ .or(
+ z.object({
+ area: z.string(),
+ }),
+ );
+const input = await props.parseAsync(Astro.props);
+let filter: GetChangelogsOptions["filter"];
+let rss: string;
+if ("product" in input) {
+ rss = `/changelog/rss/${input.product.id}.xml`;
+ filter = (e) => {
+ return !e.data.hidden && e.data.products.some(({ id }) => id === input.product.id);
+ };
+} else {
+ rss = `/changelog/rss/${slug(input.area)}.xml`;
+ const products = await getCollection("products", (e) => {
+ return e.data.product.group === input.area;
+ });
+ filter = (e) => {
+ return e.data.products.some((x) => products.some((y) => x.id === y.id));
+ };
+}
+const changelogs = await getChangelogs({ filter });
+---
+
+
+
+{
+ changelogs.map(async (entry) => {
+
+
+ const { Content } = await render(entry);
+ return (
+
+
+ {entry.data.title}
+
+
+ );
+ })
+}
\ No newline at end of file
diff --git a/src/components/index.ts b/src/components/index.ts
index 4bbaa0056cd739..87b3e91eac7126 100644
--- a/src/components/index.ts
+++ b/src/components/index.ts
@@ -42,6 +42,7 @@ export { default as PagesBuildPresetsTable } from "./PagesBuildPresetsTable.astr
export { default as PagesLanguageSupport } from "./PagesLanguageSupport.astro";
export { default as Plan } from "./Plan.astro";
export { default as PlanInfo } from "./PlanInfo.astro";
+export { default as ProductChangelog } from "./ProductChangelog.astro";
export { default as ProductReleaseNotes } from "./ProductReleaseNotes.astro";
export { default as ProductFeatures } from "./ProductFeatures.astro";
export { default as ProductsByTag } from "./ProductsByTag.astro";
diff --git a/src/content/changelog/access/2025-03-03-saml-oidc-fields-saml-transformations.mdx b/src/content/changelog/access/2025-03-03-saml-oidc-fields-saml-transformations.mdx
index 57f1541cf3d911..d83d3d8c19e089 100644
--- a/src/content/changelog/access/2025-03-03-saml-oidc-fields-saml-transformations.mdx
+++ b/src/content/changelog/access/2025-03-03-saml-oidc-fields-saml-transformations.mdx
@@ -6,7 +6,7 @@ date: 2025-03-03T6:00:00Z
[Access for SaaS applications](/cloudflare-one/applications/configure-apps/saas-apps/) now include more configuration options to support a wider array of SaaS applications.
-### SAML and OIDC Field Additions
+**SAML and OIDC Field Additions**
OIDC apps now include:
@@ -21,7 +21,7 @@ SAML apps now include improved SAML attribute mapping from an IdP.

-### SAML transformations
+**SAML transformations**
SAML identities sent to Access applications can be fully customized using JSONata expressions. This allows admins to configure the precise identity SAML statement sent to a SaaS application.
diff --git a/src/content/changelog/cache/2025-02-04-easier-onboarding-for-csam-scanning-tool.mdx b/src/content/changelog/cache/2025-02-04-easier-onboarding-for-csam-scanning-tool.mdx
index e79f63edb54f56..65540043038d76 100644
--- a/src/content/changelog/cache/2025-02-04-easier-onboarding-for-csam-scanning-tool.mdx
+++ b/src/content/changelog/cache/2025-02-04-easier-onboarding-for-csam-scanning-tool.mdx
@@ -8,14 +8,14 @@ date: 2025-02-04T12:00:00Z
You can now implement our **child safety tooling**, the **[CSAM Scanning Tool](/cache/reference/csam-scanning/)**, more easily. Instead of requiring external reporting credentials, you only need a verified email address for notifications to onboard. This change makes the tool more accessible to a wider range of customers.
-## **How It Works**
+**How It Works**
-When enabled, the tool automatically [hashes images for enabled websites as they enter the Cloudflare cache](https://blog.cloudflare.com/the-csam-scanning-tool/). These hashes are then checked against a database of **known abusive images**.
+When enabled, the tool automatically [hashes images for enabled websites as they enter the Cloudflare cache](https://blog.cloudflare.com/the-csam-scanning-tool/). These hashes are then checked against a database of **known abusive images**.
-- **Potential match detected?**
- - The **content URL is blocked**, and
- - **Cloudflare will notify you** about the found matches via the provided email address.
+- **Potential match detected?**
+ - The **content URL is blocked**, and
+ - **Cloudflare will notify you** about the found matches via the provided email address.
-## **Updated Service-Specific Terms**
+**Updated Service-Specific Terms**
We have also made updates to our **[Service-Specific Terms](https://www.cloudflare.com/service-specific-terms-application-services/#csam-scanning-tool-terms)** to reflect these changes.
diff --git a/src/content/docs/api-shield/changelog.mdx b/src/content/docs/api-shield/changelog.mdx
index afe4afe0d13374..ffaad7f9839a22 100644
--- a/src/content/docs/api-shield/changelog.mdx
+++ b/src/content/docs/api-shield/changelog.mdx
@@ -1,14 +1,84 @@
---
pcx_content_type: changelog
title: Changelog
-release_notes_file_name:
- - api-shield
sidebar:
order: 10
---
-import { ProductReleaseNotes } from "~/components";
+import { ProductChangelog } from "~/components";
-{/* */}
+{/* */}
+{/* */}
+{/* */}
+{/* */}
+{/* */}
+{/*