diff options
| author | Dominik K. <dominik@koch-bautechnik.de> | 2025-07-23 17:39:00 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-23 17:39:00 +0200 |
| commit | 41a78b4e4c128e45353a0a1a516ea3ac4b796623 (patch) | |
| tree | 6ecc3bec0212e44adaa489b99765c46d1cc6d19d /apps/web/src/app/rss.xml | |
| parent | cabf86033032f0a396569cce9165cd656be791d6 (diff) | |
| parent | f39f46788f77e56efb8e8f53983519ece993de74 (diff) | |
| download | opencut-41a78b4e4c128e45353a0a1a516ea3ac4b796623.tar.gz | |
Merge pull request #442 from taqh/feat/add-rss-feed
Added an rss feed for discovery
Diffstat (limited to 'apps/web/src/app/rss.xml')
| -rw-r--r-- | apps/web/src/app/rss.xml/route.ts | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/apps/web/src/app/rss.xml/route.ts b/apps/web/src/app/rss.xml/route.ts new file mode 100644 index 00000000..b16bd856 --- /dev/null +++ b/apps/web/src/app/rss.xml/route.ts @@ -0,0 +1,46 @@ +import { Feed } from 'feed'; +import { getPosts } from '@/lib/blog-query'; +import { SITE_INFO } from '../metadata'; + +export async function GET() { + try { + const { posts } = await getPosts(); + + const feed = new Feed({ + title: 'OpenCut Blog', + description: SITE_INFO.description, + id: `${SITE_INFO.url}`, + link: `${SITE_INFO.url}/blog/`, + language: 'en', + image: `${SITE_INFO.openGraphImage}`, + favicon: `${SITE_INFO.favicon}`, + copyright: `All rights reserved ${new Date().getFullYear()}, ${ + SITE_INFO.title + }`, + }); + + for (const post of posts) { + feed.addItem({ + title: post.title, + id: `${SITE_INFO.url}/blog/${post.slug}`, + link: `${SITE_INFO.url}/blog/${post.slug}`, + description: post.description, + author: post.authors.map((author) => ({ + name: author.name, + })), + date: new Date(post.publishedAt), + image: post.coverImage || SITE_INFO.openGraphImage, + }); + } + + return new Response(feed.rss2(), { + headers: { + 'Content-Type': 'text/xml', + 'Cache-Control': 'public, max-age=86400, stale-while-revalidate', + }, + }); + } catch (error) { + console.error('Error generating RSS feed', error); + return new Response('Internal Server Error', { status: 500 }); + } +}
\ No newline at end of file |
