project-bifrost-platform/src/pages/updates/feed.xml.ts
2026-04-18 22:47:13 +02:00

41 lines
1.3 KiB
TypeScript

import type { APIRoute } from 'astro';
import { getCollection } from 'astro:content';
export const GET: APIRoute = async ({ site }) => {
const updates = await getCollection('updates');
const sorted = updates.sort(
(a, b) => new Date(b.data.date).getTime() - new Date(a.data.date).getTime()
);
const base = 'https://bifrost.fenja.ai';
const items = sorted.map((u) => {
const url = `${base}/updates/${u.slug}`;
const date = new Date(u.data.date).toUTCString();
return `
<item>
<title><![CDATA[${u.data.title}]]></title>
<description><![CDATA[${u.data.summary}]]></description>
<link>${url}</link>
<guid isPermaLink="true">${url}</guid>
<pubDate>${date}</pubDate>
<author>${u.data.author}</author>
</item>`;
});
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Project Bifrost — Updates</title>
<description>Progress notes from Fenja AI during the Bifrost pilot.</description>
<link>${base}/updates</link>
<atom:link href="${base}/updates/feed.xml" rel="self" type="application/rss+xml"/>
<language>en</language>
${items.join('')}
</channel>
</rss>`;
return new Response(xml, {
headers: { 'Content-Type': 'application/rss+xml; charset=utf-8' },
});
};