From 451632b544f494bf6411809fcac0af763fcc43dc Mon Sep 17 00:00:00 2001 From: Nicholas Kissel Date: Thu, 11 Jun 2026 00:17:35 -0700 Subject: [PATCH 01/13] [SLOP(claude-fable-5)] feat(website): cookbook template registry, JSON-LD, and header nav --- website/src/components/v2/Header.tsx | 14 +++ website/src/data/templates/shared.ts | 103 ++++++++++++++++++++- website/src/layouts/MarketingLayout.astro | 5 +- website/src/pages/cookbook/[...slug].astro | 29 ++++++ website/src/pages/cookbook/index.astro | 1 + 5 files changed, 147 insertions(+), 5 deletions(-) diff --git a/website/src/components/v2/Header.tsx b/website/src/components/v2/Header.tsx index 4e7c217715..c283139335 100644 --- a/website/src/components/v2/Header.tsx +++ b/website/src/components/v2/Header.tsx @@ -466,6 +466,14 @@ export function Header({ )} + {!isLightTheme && ( + + Cookbook + + )} {!isLightTheme && ( Documentation + + Cookbook + -
+
diff --git a/website/src/pages/cookbook/[...slug].astro b/website/src/pages/cookbook/[...slug].astro index 378973f0fc..97b7472c17 100644 --- a/website/src/pages/cookbook/[...slug].astro +++ b/website/src/pages/cookbook/[...slug].astro @@ -45,6 +45,32 @@ const slugPath = entry.id.replace(/\/index$/, ""); const canonicalUrl = `https://rivet.dev/cookbook/${slugPath}/`; const skillId = slugPath.replaceAll("/", "-"); +const breadcrumbSchema = { + "@context": "https://schema.org", + "@type": "BreadcrumbList", + "itemListElement": [ + { name: "Home", url: "https://rivet.dev/" }, + { name: "Cookbook", url: "https://rivet.dev/cookbook/" }, + { name: title, url: canonicalUrl }, + ].map((item, index) => ({ + "@type": "ListItem", + "position": index + 1, + "name": item.name, + "item": item.url, + })), +}; + +// The Organization node is defined in BaseLayout's global @graph. +const techArticleSchema = { + "@context": "https://schema.org", + "@type": "TechArticle", + "headline": title, + "description": description, + "url": canonicalUrl, + "author": { "@id": "https://rivet.dev/#organization" }, + "publisher": { "@id": "https://rivet.dev/#organization" }, +}; + function resolveTemplates(names?: string[]): Array