diff --git a/src/app/news/[slug]/page.tsx b/src/app/news/[slug]/page.tsx
index 81af3b8..506bc71 100644
--- a/src/app/news/[slug]/page.tsx
+++ b/src/app/news/[slug]/page.tsx
@@ -1,5 +1,5 @@
import type { Metadata } from "next";
-import { notFound } from "next/navigation";
+import { redirect } from "next/navigation";
import type { Article } from "@/lib/articles/types";
import {
getLegacyArticleBySlug,
@@ -70,7 +70,10 @@ export async function generateStaticParams() {
export default async function NewsArticlePage({ params }: PageProps) {
const { slug } = await params;
const { article, related } = await loadArticle(slug);
- if (!article) notFound();
+ if (!article) {
+ // Unknown slug — fall back to the news index instead of 404.
+ redirect("/news");
+ }
const articleSchema = {
"@context": "https://schema.org",
diff --git a/src/app/search/page.tsx b/src/app/search/page.tsx
new file mode 100644
index 0000000..66cd496
--- /dev/null
+++ b/src/app/search/page.tsx
@@ -0,0 +1,100 @@
+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 { searchLegacyArticles } from "@/lib/articles/legacy-source";
+
+export const revalidate = 60;
+
+export const metadata: Metadata = {
+ title: "Search — BroadcastBeat",
+ description:
+ "Search BroadcastBeat for broadcast engineering news, gear reviews, show coverage, and technology insights.",
+ alternates: { canonical: "/search" },
+};
+
+interface SearchPageProps {
+ searchParams: Promise<{ q?: string }>;
+}
+
+export default async function SearchPage({ searchParams }: SearchPageProps) {
+ const { q } = await searchParams;
+ const query = (q ?? "").trim();
+ const results = query ? await searchLegacyArticles(query, 100) : [];
+
+ return (
+
+
+
+
+
+ Search
+
+
+
+ {query ? `Results for "${query}"` : "Search BroadcastBeat"}
+
+
+ {query
+ ? `${results.length} article${results.length === 1 ? "" : "s"} found across news, gear, technology, and show coverage.`
+ : "Type in the header search box to find articles."}
+