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

86
src/app/gear/page.tsx Normal file
View File

@@ -0,0 +1,86 @@
import React from "react";
import type { Metadata } from "next";
import Link from "next/link";
import Header from "@/components/Header";
import Footer from "@/components/Footer";
import AppImage from "@/components/ui/AppImage";
import { getArticlesBySection } from "@/lib/articles/sampleArticles";
export const metadata: Metadata = {
title: "Broadcast Gear & Reviews — BroadcastBeat",
description: "In-depth reviews and coverage of broadcast cameras, audio gear, production equipment, and professional media technology.",
alternates: { canonical: "/gear" },
openGraph: {
title: "Broadcast Gear & Reviews — BroadcastBeat",
description: "In-depth reviews and coverage of broadcast cameras, audio gear, production equipment, and professional media technology.",
url: "/gear",
type: "website",
},
};
export default function GearPage() {
const articles = getArticlesBySection("gear");
return (
<div className="min-h-screen bg-background">
<Header />
{/* DO NOT OVERRIDE — Gear page hero header */}
<div className="bg-[#111] border-b border-[#222] py-8">
<div className="max-w-container mx-auto px-4">
<div className="flex items-center gap-3 mb-2">
<span className="section-label">Gear &amp; Reviews</span>
<div className="flex-1 h-px bg-[#2a2a2a]" />
</div>
<h1 className="font-heading text-white text-3xl font-bold">Broadcast Gear &amp; Reviews</h1>
<p className="text-[#777] font-body text-sm mt-2">In-depth reviews and coverage of cameras, audio, infrastructure, and production technology</p>
</div>
</div>
<main className="max-w-container mx-auto px-4 py-8">
{/* Featured gear grid */}
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-10">
{articles.map((article) => (
<Link
key={article.slug}
href={`/articles/${article.slug}`}
className="bg-[#111] border border-[#222] overflow-hidden group hover:border-[#3b82f6] transition-colors">
<div className="relative h-[200px] overflow-hidden">
<AppImage
src={article.image}
alt={article.alt}
fill
className="object-cover group-hover:scale-105 transition-transform duration-300"
sizes="(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"
/>
<div className="absolute top-2 left-2">
<span className="bg-[#3b82f6] text-white font-body text-[9px] font-bold px-2 py-0.5 tracking-wider uppercase">
{article.category}
</span>
</div>
</div>
<div className="p-4">
<div className="flex items-center gap-2 mb-2">
<span className="text-[#555] font-body text-[11px]">{article.date}</span>
<span className="text-[#444] text-[10px]">·</span>
<span className="text-[#555] font-body text-[11px]">{article.readTime}</span>
</div>
<h2 className="font-heading text-[#e0e0e0] text-sm font-bold leading-snug mb-2 group-hover:text-[#3b82f6] transition-colors line-clamp-3">
{article.title}
</h2>
<p className="text-[#666] font-body text-xs leading-relaxed line-clamp-2">{article.excerpt}</p>
<div className="mt-3 flex flex-wrap gap-1">
{article.tags.slice(0, 3).map((tag) => (
<span key={tag} className="px-1.5 py-0.5 bg-[#1a1a1a] border border-[#2a2a2a] text-[#666] text-[10px] font-body rounded-sm">
{tag}
</span>
))}
</div>
</div>
</Link>
))}
</div>
</main>
<Footer />
</div>
);
}