+ );
+}
diff --git a/lib/parseRecipe.ts b/lib/parseRecipe.ts
new file mode 100644
index 0000000..e77129a
--- /dev/null
+++ b/lib/parseRecipe.ts
@@ -0,0 +1,45 @@
+export interface RecipeSection {
+ title: string;
+ content: string;
+}
+
+export function parseRecipeSections(markdownContent: string): RecipeSection[] {
+ const lines = markdownContent.split('\n');
+ const sections: RecipeSection[] = [];
+ let currentSection: RecipeSection | null = null;
+ let inFrontmatter = false;
+
+ for (let i = 0; i < lines.length; i++) {
+ const line = lines[i];
+
+ if (line.trim() === '---') {
+ inFrontmatter = !inFrontmatter;
+ continue;
+ }
+
+ if (inFrontmatter) {
+ continue;
+ }
+
+ if (line.startsWith('## ')) {
+ if (currentSection) {
+ sections.push(currentSection);
+ }
+ currentSection = {
+ title: line.replace('## ', '').trim(),
+ content: '',
+ };
+ } else if (currentSection) {
+ currentSection.content += line + '\n';
+ }
+ }
+
+ if (currentSection) {
+ sections.push(currentSection);
+ }
+
+ return sections.map(section => ({
+ ...section,
+ content: section.content.trim(),
+ }));
+}
diff --git a/public/authors.json b/public/authors.json
new file mode 100644
index 0000000..4e0c64f
--- /dev/null
+++ b/public/authors.json
@@ -0,0 +1,16 @@
+{
+ "authors": [
+ {
+ "id": "jake",
+ "name": "jake",
+ "fullName": "Paul Wilson Smith",
+ "bio": "Home cook and food enthusiast sharing tested recipes and cooking techniques.",
+ "email": "jake@runyan.dev",
+ "website": "https://jake.runyan.dev",
+ "links": {
+ "github": "https://github.com/runyanjake"
+ },
+ "joinDate": "2026-01-01"
+ }
+ ]
+}
diff --git a/public/recipes/README.md b/public/recipes/README.md
new file mode 100644
index 0000000..1bbbc30
--- /dev/null
+++ b/public/recipes/README.md
@@ -0,0 +1,216 @@
+# Recipe Content Structure
+
+This directory contains all recipe content for the cooking website.
+
+## Folder Organization
+
+```
+public/recipes/
+├── appetizers/
+├── mains/
+├── desserts/
+├── sides/
+├── beverages/
+└── breads/
+```
+
+Each recipe follows this structure:
+```
+public/recipes/category/
+└── YYYY.MM.DD-recipe-slug/
+ ├── YYYY.MM.DD-recipe-slug.mdx
+ └── assets/
+ ├── hero.jpg
+ ├── step1.jpg
+ └── ...
+```
+
+**Note:** All recipe content (MDX files and images) lives together in `public/recipes/` for better organization and readability. This keeps everything for a recipe in one place.
+
+## Recipe Format
+
+### MDX File Structure
+
+The `.mdx` file contains all recipe metadata and content in one place.
+
+#### Frontmatter (Required)
+
+All recipe metadata is stored in YAML frontmatter at the top of the MDX file:
+
+```yaml
+---
+title: "Recipe Title"
+slug: "recipe-slug"
+date: "YYYY-MM-DD"
+lastUpdated: "YYYY-MM-DD"
+category: "mains"
+tags: ["tag1", "tag2", "tag3"]
+dietary: ["vegetarian", "gluten-free"]
+cookTime: 45
+prepTime: 20
+totalTime: 65
+difficulty: "easy"
+servings: 4
+author: "Author Name"
+description: "Short description for SEO and previews"
+featured: true
+display: true
+displayPhoto: "./assets/hero.jpg"
+---
+```
+
+**Frontmatter Fields:**
+- `title` - Display title of the recipe
+- `slug` - URL-friendly identifier
+- `date` - Publication date (YYYY-MM-DD)
+- `lastUpdated` - Last modification date (YYYY-MM-DD)
+- `category` - Main category ID (references `../taxonomy.json`)
+- `tags` - Array of tag IDs (references `../taxonomy.json`)
+- `dietary` - Array of dietary tag IDs (references `../taxonomy.json`)
+- `cookTime` - Active cooking time in minutes
+- `prepTime` - Preparation time in minutes
+- `totalTime` - Total time in minutes
+- `difficulty` - Difficulty ID: easy, medium, or hard (references `../taxonomy.json`)
+- `servings` - Number of servings
+- `author` - Author ID (references `../authors.json`)
+- `description` - Brief description for SEO and cards
+- `featured` - Boolean for homepage featuring
+- `display` - Boolean to control visibility (set to false to hide recipe)
+- `displayPhoto` - Relative path to display photo (e.g., "./assets/hero.jpg")
+
+**Note:** Use IDs from the reference files (`data/authors.json` and `data/taxonomy.json`) to ensure consistency and enable validation.
+
+#### Content Sections
+
+The following `## ` (h2) sections are parsed into tabs in the UI:
+
+1. **## Photos** - Recipe images with captions
+2. **## Ingredients** - Lists of ingredients (can use h3 subsections)
+3. **## Instructions** - Step-by-step cooking instructions
+4. **## Notes** - Tips, variations, storage info (optional)
+5. **## References** - Sources, inspirations, credits (optional)
+
+#### Example MDX Structure
+
+```mdx
+---
+title: "Recipe Name"
+slug: "recipe-name"
+date: "2026-02-08"
+lastUpdated: "2026-02-08"
+category: "mains"
+tags: ["italian", "chicken"]
+dietary: ["gluten-free-option"]
+cookTime: 45
+prepTime: 20
+totalTime: 65
+difficulty: "medium"
+servings: 4
+author: "PWS"
+description: "Short description for SEO and previews"
+featured: false
+display: true
+displayPhoto: "./assets/hero.jpg"
+---
+
+# Recipe Name
+
+Introduction paragraph about the recipe.
+
+## Photos
+
+
+*Caption describing the image*
+
+
+*Another helpful image*
+
+## Ingredients
+
+### For the Main Component
+- 2 cups ingredient one
+- 1 tablespoon ingredient two
+- Salt and pepper to taste
+
+### For the Sauce
+- 1 cup sauce base
+- Seasonings
+
+## Instructions
+
+### Preparation
+1. **Step name**: Detailed instruction with technique.
+2. **Another step**: More details here.
+
+### Cooking
+3. **Heat and cook**: Continue with numbered steps.
+4. **Finish**: Final steps.
+
+## Notes
+
+### Tips for Success
+- Helpful tip one
+- Helpful tip two
+
+### Storage
+- How to store leftovers
+- Freezing instructions
+
+### Variations
+- How to adapt the recipe
+
+## References
+
+- Source credits
+- Inspiration mentions
+- Cookbook references
+```
+
+## Content Guidelines
+
+### Writing Style
+- Use clear, conversational language
+- Include helpful tips and context
+- Explain techniques for beginners
+- Add timing and temperature details
+
+### Photography
+- Include hero shot (main finished dish)
+- Add process shots for complex steps
+- Use descriptive alt text for accessibility
+- Optimize images (web-friendly sizes)
+
+### Tags
+Choose from these categories:
+- **Cuisine**: italian, mexican, asian, american, mediterranean, etc.
+- **Protein**: chicken, beef, pork, seafood, vegetarian, vegan
+- **Meal Type**: breakfast, lunch, dinner, snack, appetizer
+- **Occasion**: weeknight, holiday, party, comfort-food
+- **Dietary**: gluten-free, dairy-free, low-carb, keto, paleo
+- **Cooking Method**: baking, grilling, slow-cooker, instant-pot
+- **Speed**: quick-meals, one-pot, make-ahead, no-cook
+
+### Difficulty Levels
+- **easy**: Beginner-friendly, simple techniques, common ingredients
+- **medium**: Some cooking experience needed, multiple steps
+- **hard**: Advanced techniques, precise timing, specialty equipment
+
+## Adding New Recipes
+
+1. Create recipe folder: `public/recipes/[category]/YYYY.MM.DD-recipe-name/`
+2. Create `YYYY.MM.DD-recipe-name.mdx` with frontmatter and content
+3. Create `assets/` subfolder for images
+4. Add images to the `assets/` folder
+5. Reference images in MDX using relative paths: `./assets/image.jpg`
+6. Build locally to verify rendering
+7. Commit and push (everything is tracked in git)
+
+## Best Practices
+
+- Use consistent date formatting (YYYY.MM.DD)
+- Keep slugs URL-friendly (lowercase, hyphens)
+- Optimize images before adding (compress, resize)
+- Test recipes before publishing
+- Include metric and imperial measurements when possible
+- Credit sources and inspirations
+- Update featured flag sparingly (limit to 3-5 recipes)
diff --git a/public/recipes/example/1970.01.01-example-recipe-1/1970.01.01-example-recipe-1.mdx b/public/recipes/example/1970.01.01-example-recipe-1/1970.01.01-example-recipe-1.mdx
new file mode 100644
index 0000000..1f2427c
--- /dev/null
+++ b/public/recipes/example/1970.01.01-example-recipe-1/1970.01.01-example-recipe-1.mdx
@@ -0,0 +1,101 @@
+---
+title: "Classic Chicken Parmesan"
+slug: "chicken-parmesan"
+date: "2026-02-05"
+lastUpdated: "2026-02-05"
+category: "mains"
+tags: ["italian", "chicken", "comfort-food", "family-friendly"]
+dietary: ["gluten-free-option"]
+cookTime: 45
+prepTime: 20
+totalTime: 65
+difficulty: "medium"
+servings: 4
+author: "pws"
+description: "A classic Italian-American dish featuring crispy breaded chicken topped with marinara sauce and melted cheese."
+featured: true
+display: true
+displayPhoto: "./assets/not-found.svg"
+---
+
+# Classic Chicken Parmesan
+
+A beloved Italian-American comfort food that combines crispy breaded chicken cutlets with rich marinara sauce and gooey melted cheese. Perfect for a family dinner or special occasion.
+
+## Photos
+
+
+*Golden-brown chicken topped with bubbling cheese*
+
+
+*Perfectly crispy coating with melted mozzarella*
+
+
+*Served alongside spaghetti with fresh basil*
+
+## Ingredients
+
+### For the Chicken
+- 4 boneless, skinless chicken breasts (about 6-8 oz each)
+- 1 cup all-purpose flour
+- 2 large eggs, beaten
+- 2 cups Italian-style breadcrumbs
+- 1 cup grated Parmesan cheese (divided)
+- 1 teaspoon garlic powder
+- 1 teaspoon dried oregano
+- Salt and freshly ground black pepper to taste
+- 1/2 cup olive oil (for frying)
+
+### For the Sauce & Topping
+- 2 cups marinara sauce (homemade or quality store-bought)
+- 1 1/2 cups shredded mozzarella cheese
+- 1/4 cup fresh basil leaves, torn
+- Extra Parmesan for serving
+
+## Instructions
+
+### Prep the Chicken
+1. Place **chicken breasts** between two sheets of **plastic wrap** and pound to an even 1/2-inch thickness using a meat mallet.
+2. Season both sides generously with **salt** and **pepper**.
+
+### Set Up Breading Station
+3. Prepare three shallow dishes:
+ - Dish 1: **All-purpose flour**
+ - Dish 2: Beaten **eggs** with 1 tablespoon **water**
+ - Dish 3: **Breadcrumbs** mixed with 1/2 cup **Parmesan**, **garlic powder**, and **oregano**
+
+### Bread and Fry
+4. Dredge each breast in **flour** (shake off excess), dip in **egg** mixture, then press firmly into **breadcrumb** mixture, coating both sides thoroughly.
+5. In a large skillet, heat **olive oil** over medium-high heat until shimmering.
+6. Cook **chicken** for 4-5 minutes per side until golden brown and cooked through (internal temp 165°F). Work in batches if needed. Transfer to a paper towel-lined plate.
+
+### Assemble and Bake
+7. Preheat oven to 400°F (200°C) or turn on broiler.
+8. Place fried **chicken** in a baking dish. Spoon **marinara sauce** over each piece, then top with **mozzarella** and remaining **Parmesan**.
+9. Bake for 10-12 minutes (or broil for 3-4 minutes) until cheese is melted and bubbly.
+10. Top with fresh torn **basil** and serve immediately with **pasta** or a side salad.
+
+## Notes
+
+### Tips for Success
+- **Even thickness**: Pounding the chicken ensures even cooking
+- **Don't overcrowd**: Fry in batches to maintain oil temperature
+- **Quality ingredients**: Use good marinara sauce for best flavor
+- **Make ahead**: Bread chicken up to 4 hours ahead and refrigerate
+- **Gluten-free option**: Substitute with gluten-free flour and breadcrumbs
+
+### Storage
+- **Refrigerate**: Store leftovers in an airtight container for up to 3 days
+- **Reheat**: Warm in a 350°F oven for 15-20 minutes to maintain crispiness
+- **Freeze**: Freeze breaded (uncooked) chicken for up to 2 months
+
+### Variations
+- **Baked version**: Skip frying and bake breaded chicken at 425°F for 20-25 minutes
+- **Spicy**: Add red pepper flakes to the breadcrumb mixture
+- **Extra crispy**: Use panko breadcrumbs instead of Italian breadcrumbs
+
+## References
+
+- Adapted from traditional Italian-American recipes
+- Inspired by *The Silver Spoon* Italian cookbook
+- Breading technique from classic French *cotoletta* method
diff --git a/public/recipes/example/1970.01.01-example-recipe-1/assets/not-found.svg b/public/recipes/example/1970.01.01-example-recipe-1/assets/not-found.svg
new file mode 100644
index 0000000..4aca304
--- /dev/null
+++ b/public/recipes/example/1970.01.01-example-recipe-1/assets/not-found.svg
@@ -0,0 +1,148 @@
+
+
+
diff --git a/public/recipes/example/1970.01.01-example-recipe-2/1970.01.01-example-recipe-2.mdx b/public/recipes/example/1970.01.01-example-recipe-2/1970.01.01-example-recipe-2.mdx
new file mode 100644
index 0000000..bc38679
--- /dev/null
+++ b/public/recipes/example/1970.01.01-example-recipe-2/1970.01.01-example-recipe-2.mdx
@@ -0,0 +1,116 @@
+---
+title: "Perfect Chocolate Chip Cookies"
+slug: "chocolate-chip-cookies"
+date: "2026-02-08"
+lastUpdated: "2026-02-08"
+category: "desserts"
+tags: ["cookies", "chocolate", "baking", "dessert", "american"]
+dietary: ["vegetarian"]
+cookTime: 12
+prepTime: 15
+totalTime: 27
+difficulty: "easy"
+servings: 24
+author: "pws"
+description: "Classic chewy chocolate chip cookies with crispy edges and gooey centers, loaded with chocolate chips."
+featured: true
+display: true
+displayPhoto: "./assets/not-found.svg"
+---
+
+# Perfect Chocolate Chip Cookies
+
+The ultimate chocolate chip cookie recipe that delivers crispy edges, chewy centers, and loads of melty chocolate chips in every bite. This recipe has been tested and perfected to create bakery-style cookies at home.
+
+## Photos
+
+
+*A stack of golden-brown cookies showing the perfect texture*
+
+
+*Gooey chocolate chips and perfect chewy texture*
+
+
+*Fresh from the oven with melted chocolate*
+
+
+*The perfect cookie and milk pairing*
+
+## Ingredients
+
+### Dry Ingredients
+- 2 1/4 cups (280g) all-purpose flour
+- 1 teaspoon baking soda
+- 1 teaspoon fine sea salt
+
+### Wet Ingredients
+- 1 cup (2 sticks / 226g) unsalted butter, softened to room temperature
+- 3/4 cup (150g) granulated sugar
+- 3/4 cup (165g) packed light brown sugar
+- 2 large eggs, room temperature
+- 2 teaspoons pure vanilla extract
+
+### Mix-ins
+- 2 cups (340g) semi-sweet chocolate chips
+- 1 cup (170g) milk chocolate chips (optional, for extra chocolate)
+- Flaky sea salt for topping (optional)
+
+## Instructions
+
+### Prepare
+1. Preheat oven to 375°F (190°C). Line two baking sheets with **parchment paper**.
+2. In a medium bowl, whisk together **flour**, **baking soda**, and **salt**. Set aside.
+
+### Make the Dough
+3. In a large bowl or stand mixer, beat softened **butter** with both **sugars** on medium speed for 2-3 minutes until light and fluffy.
+4. Beat in **eggs** one at a time, then add **vanilla extract**. Mix until well combined, scraping down the sides of the bowl.
+5. With mixer on low speed, gradually add the **flour** mixture. Mix just until no flour streaks remain (don't overmix).
+6. Use a spatula or wooden spoon to fold in **chocolate chips** until evenly distributed.
+
+### Chill (Important!)
+7. Cover bowl with **plastic wrap** and refrigerate for at least 30 minutes (or up to 72 hours for even better flavor). Cold dough = thicker cookies!
+
+### Bake
+8. Use a cookie scoop or tablespoon to form balls (about 2 tablespoons each). Place 2 inches apart on prepared baking sheets.
+9. If using, sprinkle a tiny pinch of **flaky sea salt** on top of each dough ball.
+10. Bake for 10-12 minutes until edges are golden brown but centers still look slightly underdone.
+11. Let cookies cool on the baking sheet for 5 minutes (they'll continue to set), then transfer to a wire rack.
+
+### Serve
+12. Serve warm or at room temperature. Best enjoyed with cold **milk**!
+
+## Notes
+
+### Tips for Success
+- **Room temperature ingredients**: Softened butter and eggs create the best texture
+- **Don't skip chilling**: Cold dough prevents spreading and creates thicker cookies
+- **Underbake slightly**: Cookies will look underdone but will set as they cool
+- **Use parchment paper**: Prevents sticking and promotes even browning
+- **Measure flour correctly**: Spoon and level flour, don't pack it
+
+### Storage & Freezing
+- **Room temperature**: Store in an airtight container for up to 5 days
+- **Refresh**: Warm in a 300°F oven for 3-4 minutes to restore chewiness
+- **Freeze dough**: Scoop dough balls and freeze for up to 3 months. Bake from frozen, adding 1-2 minutes
+- **Freeze baked cookies**: Freeze baked cookies for up to 2 months
+
+### Variations
+- **Brown butter cookies**: Brown the butter for a nutty, caramel flavor
+- **Thick and bakery-style**: Increase flour to 2 1/2 cups and chill overnight
+- **Double chocolate**: Add 1/4 cup cocoa powder to dry ingredients
+- **Mix-ins**: Try nuts, toffee bits, or different chocolate varieties
+- **Giant cookies**: Use 1/4 cup dough per cookie, bake 14-16 minutes
+
+### Science Behind the Recipe
+- **Brown sugar**: Creates chewiness and moisture
+- **Granulated sugar**: Creates crispy edges
+- **Baking soda**: Promotes spreading and browning
+- **Chilling**: Allows flour to hydrate and flavors to develop
+- **Underbaking**: Keeps centers soft and gooey
+
+## References
+
+- Based on the classic Nestlé Toll House recipe
+- Chilling technique from *The Food Lab* by J. Kenji López-Alt
+- Brown butter variation inspired by *BraveTart* by Stella Parks
+- Tested with feedback from family and friends over multiple batches
diff --git a/public/recipes/example/1970.01.01-example-recipe-2/assets/not-found.svg b/public/recipes/example/1970.01.01-example-recipe-2/assets/not-found.svg
new file mode 100644
index 0000000..4aca304
--- /dev/null
+++ b/public/recipes/example/1970.01.01-example-recipe-2/assets/not-found.svg
@@ -0,0 +1,148 @@
+
+
+
diff --git a/public/recipes/soup/2026.02.08-chicken-noodle-soup/2026.02.08-chicken-noodle-soup.mdx b/public/recipes/soup/2026.02.08-chicken-noodle-soup/2026.02.08-chicken-noodle-soup.mdx
new file mode 100644
index 0000000..9e7e829
--- /dev/null
+++ b/public/recipes/soup/2026.02.08-chicken-noodle-soup/2026.02.08-chicken-noodle-soup.mdx
@@ -0,0 +1,73 @@
+---
+title: "Instant Pot Chicken Noodle Soup"
+slug: "chicken-noodle-soup"
+date: "2026-02-08"
+lastUpdated: "2026-02-08"
+category: "soup"
+tags: ["soup", "chicken", "comfort-food", "instant-pot", "one-pot", "sick-day", "meal-prep"]
+dietary: []
+cookTime: 20
+prepTime: 10
+totalTime: 30
+difficulty: "easy"
+servings: 8
+author: "pws"
+description: "A comforting chicken noodle soup perfect for rainy or sick days. Made easy in the Instant Pot but can be adapted for stovetop cooking."
+featured: false
+display: true
+displayPhoto: "./assets/chicken-noodle-soup.png"
+---
+
+# Instant Pot Chicken Noodle Soup
+
+A great soup for rainy or sick days. This comforting classic is made simple with the Instant Pot, though it can easily be adapted for stovetop cooking. The recipe makes enough to fuel a whole sick week!
+
+## Photos
+
+
+*Comforting homemade chicken noodle soup*
+
+## Ingredients
+
+### Main Ingredients
+- 2 tablespoons unsalted butter
+- 1 large onion, chopped
+- 2 medium carrots, chopped
+- 2 stalks celery, chopped
+- Kosher salt and fresh ground pepper to taste
+- 1 teaspoon thyme
+- 1 tablespoon parsley
+- 1 tablespoon oregano
+- 1 chicken bouillon cube or powder
+- 4 cups chicken broth
+- 2 pounds chicken (usually one Safeway or Costco chicken)
+- 4 cups water
+- 2 cups uncooked egg noodles
+
+## Instructions
+
+1. Turn your Instant Pot to the saute setting.
+2. Add the **butter** and cook until melted. Add the **onion**, **carrots**, and **celery** and saute for 3 minutes until the **onion** softens and becomes translucent.
+3. Season with **salt** and **pepper**, then add the **thyme**, **parsley**, **oregano**, and **chicken bouillon**. Stir to combine.
+4. Pour in the **chicken broth**. Add the **chicken** pieces and another 4 cups of **water**.
+5. Close the lid. Set the Instant Pot to the Soup setting and set the timer to 7 minutes on high pressure.
+6. Once the Instant Pot cycle is complete, wait until the natural release cycle is complete before opening the instant pot.
+7. Remove the **chicken** pieces from the soup and shred with two forks.
+8. Add the **noodles** to the soup and set the Instant Pot to the saute setting again. Cook for another 6 minutes uncovered, or until the **noodles** are cooked.
+9. Turn off the Instant Pot. Add the shredded **chicken** back to the pot, taste for seasoning and adjust as necessary. Garnish with additional **parsley** if preferred.
+
+## Notes
+
+### Meal Prep Tips
+- **Make it last**: This recipe can make nearly a whole week of soup. Double it if you're feeling dangerous.
+- **Noodle absorption**: If doing meal prep with lots of noodles or macaroni, they tend to soak up the broth. Double the water and broth amounts if you want it to keep in the fridge and retain liquid, versus becoming more of a soup-casserole.
+
+### Seasoning Tips
+- **Don't oversalt**: Watch the amount of salt in this recipe - it's pretty easy to over-salt if you're not careful, especially with the bouillon cube.
+
+### Stovetop Adaptation
+This recipe can be made on the stovetop by simmering the ingredients in a large pot for about 30-40 minutes until the chicken is cooked through, then following the same steps for shredding and adding noodles.
+
+## References
+
+- [Jo Cooks - Instant Pot Chicken Noodle Soup](https://www.jocooks.com/recipes/instant-pot-chicken-noodle-soup/)
diff --git a/public/recipes/soup/2026.02.08-chicken-noodle-soup/assets/chicken-noodle-soup.png b/public/recipes/soup/2026.02.08-chicken-noodle-soup/assets/chicken-noodle-soup.png
new file mode 100644
index 0000000..ee1d728
Binary files /dev/null and b/public/recipes/soup/2026.02.08-chicken-noodle-soup/assets/chicken-noodle-soup.png differ