Files
community-rule/app/(marketing-case-study)/use-cases/[slug]/rule/page.tsx
T
adilalloandCursor b2b272d2cc Give each route its own title and canonical, and add robots.txt plus a sitemap.
The root layout was stamping the homepage title and production root onto every page. Routes now supply a page segment through one em-dash template, canonicals follow the request path, and non-production hosts disallow crawlers.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-09 16:45:19 -06:00

68 lines
1.8 KiB
TypeScript

/**
* Figma: Completed CR — use case community rule demos
* (21995:39476, 21995:40092, 22015:42413)
*/
import type { Metadata } from "next";
import { notFound } from "next/navigation";
import messages from "../../../../../messages/en/index";
import { resolveUseCaseCompletedRule } from "../../../../../lib/useCaseCompletedRule";
import { routeMetadata } from "../../../../../lib/siteMetadata";
import {
USE_CASE_DETAIL_SLUGS,
useCaseContentKeyForSlug,
} from "../../../../../lib/useCaseSyntheticPost";
import { UseCaseCompletedRule } from "./_components/UseCaseCompletedRule.container";
type PageProps = {
params: Promise<{ slug: string }>;
};
export function generateStaticParams() {
return USE_CASE_DETAIL_SLUGS.map((slug) => ({ slug }));
}
export async function generateMetadata({ params }: PageProps): Promise<Metadata> {
const { slug } = await params;
const resolved = resolveUseCaseCompletedRule(
slug,
messages.pages.useCasesCompletedRules,
);
if (!resolved) {
return {};
}
const contentKey = useCaseContentKeyForSlug(resolved.slug);
const meta = messages.metadata.useCasesCompletedRule[contentKey];
return routeMetadata(`/use-cases/${resolved.slug}/rule`, {
title: meta.title,
description: meta.description,
keywords: meta.keywords,
openGraph: {
title: meta.title,
description: meta.description,
type: "website",
siteName: messages.metadata.siteName,
},
});
}
export default async function UseCaseCompletedRulePage({ params }: PageProps) {
const { slug } = await params;
const resolved = resolveUseCaseCompletedRule(
slug,
messages.pages.useCasesCompletedRules,
);
if (!resolved) {
notFound();
}
return (
<UseCaseCompletedRule
slug={resolved.slug}
fixture={resolved.fixture}
sections={resolved.sections}
/>
);
}