feat: add an rss feed

This commit is contained in:
Taqib
2025-07-23 15:11:10 +01:00
parent cabf860330
commit 57243bc4b4
4 changed files with 66 additions and 16 deletions
+1
View File
@@ -38,6 +38,7 @@
"dotenv": "^16.5.0",
"drizzle-orm": "^0.44.2",
"embla-carousel-react": "^8.5.1",
"feed": "^5.1.0",
"framer-motion": "^11.13.1",
"input-otp": "^1.4.1",
"lucide-react": "^0.468.0",
+18 -14
View File
@@ -1,25 +1,29 @@
import { Metadata } from "next";
const title = "OpenCut";
const description =
"A simple but powerful video editor that gets the job done. In your browser.";
const openGraphImageUrl = "https://opencut.app/open-graph/default.jpg";
const twitterImageUrl = "/open-graph/default.jpg";
export const SITE_INFO = {
title: "OpenCut",
description:
"A simple but powerful video editor that gets the job done. In your browser.",
url: "https://opencut.app",
openGraphImage: "https://opencut.app/open-graph/default.jpg",
twitterImage: "/open-graph/default.jpg",
favicon: "/favicon.ico",
};
export const baseMetaData: Metadata = {
metadataBase: new URL("https://opencut.app"),
title: title,
description: description,
title: SITE_INFO.title,
description: SITE_INFO.description,
openGraph: {
title: title,
description: description,
title: SITE_INFO.title,
description: SITE_INFO.description,
url: "https://opencut.app",
siteName: "OpenCut",
locale: "en_US",
type: "website",
images: [
{
url: openGraphImageUrl,
url: SITE_INFO.openGraphImage,
width: 1200,
height: 630,
alt: "OpenCut",
@@ -28,10 +32,10 @@ export const baseMetaData: Metadata = {
},
twitter: {
card: "summary_large_image",
title: title,
description: description,
title: SITE_INFO.title,
description: SITE_INFO.description,
creator: "@opencutapp",
images: [twitterImageUrl],
images: [SITE_INFO.twitterImage],
},
pinterest: {
richPin: false,
@@ -82,7 +86,7 @@ export const baseMetaData: Metadata = {
},
appleWebApp: {
capable: true,
title: title,
title: SITE_INFO.title,
},
manifest: "/manifest.json",
other: {
+40
View File
@@ -0,0 +1,40 @@
import { Feed } from 'feed';
import { getPosts } from '@/lib/blog-query';
import { SITE_INFO } from '../metadata';
export async function GET() {
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
}`,
});
posts.forEach((article) => {
feed.addItem({
title: article.title,
id: `${SITE_INFO.url}/blog/${article.slug}`,
link: `${SITE_INFO.url}/blog/${article.slug}`,
description: article.description,
author: article.authors.map((author) => ({
name: author.name ?? 'OpenCut',
})),
date: new Date(article.publishedAt),
image: article.coverImage,
});
});
return new Response(feed.rss2(), {
headers: {
'Content-Type': 'text/xml',
},
});
}