initial commit: rocket.new export of broadcastbeat

This commit is contained in:
Ryan Salazar
2026-05-07 16:39:17 +00:00
commit 70aa1ad46e
302 changed files with 60710 additions and 0 deletions

View File

@@ -0,0 +1,105 @@
import type { Metadata } from 'next';
import { notFound } from 'next/navigation';
import ArticleDetailPage from './ArticleDetailClient';
import { sampleArticles, getRelatedArticles } from '@/lib/articles/sampleArticles';
// DO NOT OVERRIDE — article slug generation and metadata
interface PageProps {
params: Promise<{ slug: string }>;
}
export async function generateMetadata({ params }: PageProps): Promise<Metadata> {
const { slug } = await params;
const article = sampleArticles.find((a) => a.slug === slug);
if (!article) {
return {
title: 'Article Not Found',
description: 'The article you are looking for does not exist.',
};
}
return {
title: article.title,
description: article.excerpt,
alternates: {
canonical: `/articles/${article.slug}`,
},
openGraph: {
type: 'article',
title: article.title,
description: article.excerpt,
url: `/articles/${article.slug}`,
images: [
{
url: article.image,
width: 1200,
height: 630,
alt: article.alt,
type: 'image/jpeg',
},
],
authors: [article.author],
publishedTime: article.date,
tags: article.tags,
},
twitter: {
card: 'summary_large_image',
title: article.title,
description: article.excerpt,
images: [article.image],
creator: '@BroadcastBeat',
},
};
}
export async function generateStaticParams() {
return sampleArticles.map((article) => ({
slug: article.slug,
}));
}
export default async function ArticlePage({ params }: PageProps) {
const { slug } = await params;
const article = sampleArticles.find((a) => a.slug === slug);
if (!article) {
notFound();
}
const related = getRelatedArticles(slug, 3);
const articleSchema = {
'@context': 'https://schema.org',
'@type': 'Article',
headline: article.title,
description: article.excerpt,
image: article.image,
author: {
'@type': 'Person',
name: article.author,
},
publisher: {
'@type': 'Organization',
name: 'BroadcastBeat',
logo: {
'@type': 'ImageObject',
url: 'https://broadcastb5322.builtwithrocket.new/assets/images/logo.png',
},
},
datePublished: article.date,
dateModified: new Date().toISOString(),
};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(articleSchema),
}}
/>
<ArticleDetailPage article={article} relatedArticles={related} />
</>
);
}