diff --git a/app/(app)/create/layout.tsx b/app/(app)/create/layout.tsx index fddfe16..018228c 100644 --- a/app/(app)/create/layout.tsx +++ b/app/(app)/create/layout.tsx @@ -6,6 +6,7 @@ import { routeMetadata } from "../../../lib/siteMetadata"; export const metadata: Metadata = routeMetadata("/create", { title: messages.metadata.create.title, + description: messages.metadata.create.description, }); export default function CreateFlowLayout({ children }: { children: ReactNode }) { diff --git a/app/(app)/create/review-template/[slug]/layout.tsx b/app/(app)/create/review-template/[slug]/layout.tsx new file mode 100644 index 0000000..873bea2 --- /dev/null +++ b/app/(app)/create/review-template/[slug]/layout.tsx @@ -0,0 +1,36 @@ +import type { Metadata } from "next"; +import type { ReactNode } from "react"; +import messages from "../../../../../messages/en/index"; +import { routeMetadata } from "../../../../../lib/siteMetadata"; +import { getRuleTemplateBySlug } from "../../../../../lib/server/ruleTemplates"; +import { templateReviewDocument } from "../../../../../lib/templates/governanceTemplateCatalog"; + +type LayoutProps = { + children: ReactNode; + params: Promise<{ slug: string }>; +}; + +export async function generateMetadata({ + params, +}: LayoutProps): Promise { + const { slug: raw } = await params; + const slug = decodeURIComponent(raw); + const row = await getRuleTemplateBySlug(slug); + const document = templateReviewDocument(slug, row); + + const title = document?.title ?? messages.metadata.create.title; + const description = + document?.description || messages.metadata.create.description; + return routeMetadata(`/create/review-template/${encodeURIComponent(slug)}`, { + title: { + absolute: messages.metadata.titleTemplate.replace("%s", title), + }, + description, + openGraph: { title, description }, + twitter: { title, description }, + }); +} + +export default function TemplateReviewLayout({ children }: LayoutProps) { + return children; +} diff --git a/app/(app)/profile/layout.tsx b/app/(app)/profile/layout.tsx index cc647aa..0b5d20f 100644 --- a/app/(app)/profile/layout.tsx +++ b/app/(app)/profile/layout.tsx @@ -1,19 +1,18 @@ -import dynamic from "next/dynamic"; -import type { ReactNode } from "react"; +import { Suspense, type ReactNode } from "react"; +import FooterWithOrigin from "../../components/navigation/FooterWithOrigin"; /** Profile uses the public marketing footer; other `(app)` routes stay footer-free. */ -const Footer = dynamic(() => import("../../components/navigation/Footer"), { - loading: () => ( -