# Cooking Site — Project Context ## What This Is A personal recipe website. Content-first, no-nonsense. The name of the third homepage illustration (`recipe_sites_suck.svg`) sums up the philosophy: no popups, no life stories, just recipes. ## Tech Stack - **Next.js 15** with App Router, TypeScript, Tailwind CSS - **MDX** for recipe content with YAML frontmatter - **next-mdx-remote/rsc + remark-gfm** for compiling MDX content server-side - **Static site generation (SSG)** — all pages are prerendered at build time - **No database** — recipes are MDX files on disk ## Project Structure ``` app/ # Next.js App Router pages page.tsx # Homepage (server component) layout.tsx # Root layout with Header/Footer recipes/ page.tsx # Recipe listing (server, passes data to RecipesClient) [category]/[slug]/ page.tsx # Recipe detail (server, compiles MDX and renders via RecipePageLayout) components/ Header.tsx / Footer.tsx # Site chrome RecipesClient.tsx # Recipe listing with filter state RecipeLayout.tsx # Sidebar layout (mobile drawer, desktop persistent) RecipesSidebar.tsx # Search + category + tag filters SelectedTags.tsx # Active tag chips TagSelector.tsx # Tag dropdown picker RecipeGridCard.tsx # Recipe grid card for listing page RecipeCard.tsx # MDX component — splits h2 children into tab sections (client) RecipePageLayout.tsx # Recipe detail page layout (server component) lib/ recipes.ts # Recipe file loader with in-memory cache; reads from public/recipes/ public/ assets/ # Site-level images (homepage SVGs) authors.json # Author metadata recipes/ # ALL recipe content lives here (MDX + images together) [category]/ recipe-slug/ recipe-slug.mdx assets/ hero.jpg ... ``` ## Design Principles - **Content first**: recipe pages are minimal — no sidebar, just the recipe - **Server components by default**: only add `'use client'` when interactivity is needed - **No taxonomy file**: categories and tags are derived directly from frontmatter across all recipes — no external registry to keep in sync - **Single content location**: MDX and images are colocated in `public/recipes/` so they can be served directly without a copy step