update recipe format

This commit is contained in:
Jake Runyan 2026-02-13 12:14:16 -08:00
parent b95f5c1aeb
commit 27a1afe6d3
47 changed files with 44 additions and 553 deletions

View File

@ -21,7 +21,7 @@ app/ # Next.js App Router pages
recipes/
page.tsx # Recipe listing (server, passes data to RecipesClient)
[category]/[slug]/
page.tsx # Recipe detail (server, passes data to RecipePageClient)
page.tsx # Recipe detail (server, compiles MDX and renders via RecipePageLayout)
components/
Header.tsx / Footer.tsx # Site chrome
@ -31,8 +31,8 @@ components/
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
RecipePageClient.tsx # Recipe detail page wrapper (server component)
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/

View File

@ -28,6 +28,7 @@ Content after frontmatter is compiled as MDX using `next-mdx-remote/rsc`. The `<
- Markdown **before** `<RecipeCard>` renders as intro prose above the recipe card
- Markdown **after** `</RecipeCard>` renders as outro prose below the recipe card
- **Important**: a blank line after `<RecipeCard>` is required for MDX to parse the content inside as markdown
- Blank lines after `## ` headings and before `</RecipeCard>` are optional — the compact form (no extra blank lines) is preferred
### `<RecipeCard>` Sections
@ -70,7 +71,6 @@ This recipe uses brown lentils (whole Masoor Dal)...
## References
- Reference Recipe **[HERE](https://example.com)**
</RecipeCard>
```

View File

@ -17,7 +17,13 @@
"Bash(powershell.exe -Command \"Test-Path ''c:\\\\Users\\\\runya\\\\Documents\\\\repositories\\\\cooking\\\\.next\\\\standalone\\\\server.js''\")",
"Bash(powershell.exe -Command:*)",
"Bash(node migrate-mdx.mjs:*)",
"Bash(node migrate-mdx.js:*)"
"Bash(node migrate-mdx.js:*)",
"Bash(curl:*)",
"Bash(node -e:*)",
"Bash(npm ls:*)",
"Bash(npm uninstall:*)",
"Bash(node:*)",
"Bash(del \"c:\\\\Users\\\\runya\\\\Documents\\\\repositories\\\\cooking\\\\compact-cards.js\")"
]
}
}

View File

@ -24,16 +24,4 @@ body {
.text-balance {
text-wrap: balance;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
}

View File

@ -4,7 +4,7 @@ import { compileMDX } from 'next-mdx-remote/rsc';
import remarkGfm from 'remark-gfm';
import { getRecipeByCategoryAndSlug, getAllRecipePaths } from '@/lib/recipes';
import RecipeCard from '@/components/RecipeCard';
import RecipePageClient from '@/components/RecipePageClient';
import RecipePageLayout from '@/components/RecipePageLayout';
interface RecipePageProps {
params: Promise<{
@ -91,8 +91,8 @@ export default async function RecipePage({ params }: RecipePageProps) {
});
return (
<RecipePageClient recipe={recipe}>
<RecipePageLayout recipe={recipe}>
{content}
</RecipePageClient>
</RecipePageLayout>
);
}

View File

@ -1,99 +0,0 @@
import Link from 'next/link';
import type { Recipe } from '@/lib/recipes';
interface RecipePageClientProps {
recipe: Recipe;
children: React.ReactNode;
}
export default function RecipePageClient({ recipe, children }: RecipePageClientProps) {
return (
<div>
<article className="max-w-4xl mx-auto">
{/* Back navigation */}
<nav aria-label="Breadcrumb">
<Link
href="/recipes"
className="inline-flex items-center gap-2 mb-6 text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors"
aria-label="Back to recipes list"
>
<span aria-hidden="true"></span>
<span>Back to Recipes</span>
</Link>
</nav>
<header className="mb-8 space-y-4">
<div className="flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400">
<Link
href={`/recipes?category=${encodeURIComponent(recipe.category)}`}
className="capitalize hover:text-gray-900 dark:hover:text-white transition-colors"
>
{recipe.category}
</Link>
<span></span>
<time dateTime={recipe.date}>
Published {new Date(recipe.date).toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric',
})}
</time>
{recipe.lastUpdated !== recipe.date && (
<>
<span></span>
<time dateTime={recipe.lastUpdated}>
Updated {new Date(recipe.lastUpdated).toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric',
})}
</time>
</>
)}
</div>
<h1 className="text-4xl md:text-5xl font-bold text-gray-900 dark:text-white">
{recipe.title}
</h1>
<p className="text-xl text-gray-600 dark:text-gray-400">
{recipe.description}
</p>
<div className="flex flex-wrap gap-4 text-sm text-gray-600 dark:text-gray-400" role="list" aria-label="Recipe timing and details">
<div className="flex items-center gap-2" role="listitem">
<span className="font-medium">Prep:</span>
<span>{recipe.prepTime} min</span>
</div>
<div className="flex items-center gap-2" role="listitem">
<span className="font-medium">Cook:</span>
<span>{recipe.cookTime} min</span>
</div>
<div className="flex items-center gap-2" role="listitem">
<span className="font-medium">Servings:</span>
<span>{recipe.servings}</span>
</div>
</div>
<div className="flex flex-wrap gap-2" role="list" aria-label="Recipe tags">
{recipe.tags.map((tag) => (
<Link
key={tag}
href={`/recipes?tags=${encodeURIComponent(tag)}`}
role="listitem"
className="px-3 py-1 text-sm bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 rounded-full hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors"
>
{tag}
</Link>
))}
</div>
</header>
{/* MDX content: intro prose + RecipeCard + outro prose */}
<div className="prose prose-lg dark:prose-invert max-w-none prose-p:text-gray-700 dark:prose-p:text-gray-300">
{children}
</div>
</article>
</div>
);
}

View File

@ -81,21 +81,6 @@ export function getAllRecipes(): Recipe[] {
return getOrPopulateRecipes();
}
export function getRecipesByCategory(category: string): Recipe[] {
const allRecipes = getOrPopulateRecipes();
return allRecipes.filter((recipe) => recipe.category === category);
}
export function getRecipesByTag(tag: string): Recipe[] {
const allRecipes = getOrPopulateRecipes();
return allRecipes.filter((recipe) => recipe.tags.includes(tag));
}
export function getFeaturedRecipes(): Recipe[] {
const allRecipes = getOrPopulateRecipes();
return allRecipes.filter((recipe) => recipe.featured);
}
export function getAllCategories(): string[] {
const allRecipes = getOrPopulateRecipes();
const categories = new Set(allRecipes.map((recipe) => recipe.category));
@ -108,29 +93,11 @@ export function getAllTags(): string[] {
return Array.from(tags).sort();
}
export function getRecipeBySlug(slug: string): Recipe | undefined {
const allRecipes = getOrPopulateRecipes();
return allRecipes.find((recipe) => recipe.slug === slug);
}
export function getRecipeByCategoryAndSlug(category: string, slug: string): Recipe | undefined {
const allRecipes = getOrPopulateRecipes();
return allRecipes.find((recipe) => recipe.category === category && recipe.slug === slug);
}
export function searchRecipes(query: string): Recipe[] {
const allRecipes = getOrPopulateRecipes();
const lowerQuery = query.toLowerCase();
return allRecipes.filter((recipe) => {
return (
recipe.title.toLowerCase().includes(lowerQuery) ||
recipe.description.toLowerCase().includes(lowerQuery) ||
recipe.tags.some((tag) => tag.toLowerCase().includes(lowerQuery))
);
});
}
export function getAllRecipePaths(): Array<{ category: string; slug: string }> {
const allRecipes = getOrPopulateRecipes();
return allRecipes.map((recipe) => ({

View File

@ -1,18 +1,8 @@
import type { NextConfig } from "next";
import createMDX from '@next/mdx';
const nextConfig: NextConfig = {
output: 'standalone',
reactStrictMode: true,
pageExtensions: ['js', 'jsx', 'md', 'mdx', 'ts', 'tsx'],
};
const withMDX = createMDX({
extension: /\.mdx?$/,
options: {
remarkPlugins: [],
rehypePlugins: [],
},
});
export default withMDX(nextConfig);
export default nextConfig;

184
package-lock.json generated
View File

@ -8,16 +8,12 @@
"name": "cooking",
"version": "0.1.0",
"dependencies": {
"@mdx-js/loader": "^3.1.1",
"@mdx-js/react": "^3.1.1",
"@next/mdx": "^16.1.6",
"@types/mdx": "^2.0.13",
"@tailwindcss/typography": "^0.5.19",
"gray-matter": "^4.0.3",
"next": "^15.1.6",
"next-mdx-remote": "^6.0.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-markdown": "^10.1.0",
"remark-gfm": "^4.0.1"
},
"devDependencies": {
@ -36,7 +32,6 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
@ -672,7 +667,6 @@
"version": "0.3.13",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0",
@ -683,7 +677,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
@ -693,43 +686,18 @@
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.31",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
"integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@mdx-js/loader": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-3.1.1.tgz",
"integrity": "sha512-0TTacJyZ9mDmY+VefuthVshaNIyCGZHJG2fMnGaDttCt8HmjUF7SizlHJpaCDoGnN635nK1wpzfpx/Xx5S4WnQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@mdx-js/mdx": "^3.0.0",
"source-map": "^0.7.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
},
"peerDependencies": {
"webpack": ">=5"
},
"peerDependenciesMeta": {
"webpack": {
"optional": true
}
}
},
"node_modules/@mdx-js/mdx": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz",
@ -772,7 +740,6 @@
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz",
"integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/mdx": "^2.0.0"
},
@ -814,27 +781,6 @@
"fast-glob": "3.3.1"
}
},
"node_modules/@next/mdx": {
"version": "16.1.6",
"resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-16.1.6.tgz",
"integrity": "sha512-PT5JR4WPPYOls7WD6xEqUVVI9HDY8kY7XLQsNYB2lSZk5eJSXWu3ECtIYmfR0hZpx8Sg7BKZYKi2+u5OTSEx0w==",
"license": "MIT",
"dependencies": {
"source-map": "^0.7.0"
},
"peerDependencies": {
"@mdx-js/loader": ">=0.15.0",
"@mdx-js/react": ">=0.15.0"
},
"peerDependenciesMeta": {
"@mdx-js/loader": {
"optional": true
},
"@mdx-js/react": {
"optional": true
}
}
},
"node_modules/@next/swc-darwin-arm64": {
"version": "15.5.12",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.12.tgz",
@ -967,7 +913,6 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
@ -981,7 +926,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 8"
@ -991,7 +935,6 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
@ -1034,6 +977,31 @@
"tslib": "^2.8.0"
}
},
"node_modules/@tailwindcss/typography": {
"version": "0.5.19",
"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz",
"integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==",
"license": "MIT",
"dependencies": {
"postcss-selector-parser": "6.0.10"
},
"peerDependencies": {
"tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
}
},
"node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
"version": "6.0.10",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
"integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
},
"engines": {
"node": ">=4"
}
},
"node_modules/@tybys/wasm-util": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
@ -1756,14 +1724,12 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
"dev": true,
"license": "MIT"
},
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
@ -1777,7 +1743,6 @@
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
"dev": true,
"license": "MIT"
},
"node_modules/argparse": {
@ -2087,7 +2052,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@ -2111,7 +2075,6 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
@ -2219,7 +2182,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
@ -2316,7 +2278,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
"license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
@ -2341,7 +2302,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
@ -2400,7 +2360,6 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
@ -2432,7 +2391,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"dev": true,
"license": "MIT",
"bin": {
"cssesc": "bin/cssesc"
@ -2617,14 +2575,12 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
"dev": true,
"license": "MIT"
},
"node_modules/doctrine": {
@ -3528,7 +3484,6 @@
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
"integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
"dev": true,
"license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
@ -3551,7 +3506,6 @@
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
@ -3640,7 +3594,6 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
@ -3655,7 +3608,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@ -3798,7 +3750,6 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
@ -3982,7 +3933,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@ -4059,16 +4009,6 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/html-url-attributes": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz",
"integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==",
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@ -4228,7 +4168,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
@ -4281,7 +4220,6 @@
"version": "2.16.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
"integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"dev": true,
"license": "MIT",
"dependencies": {
"hasown": "^2.0.2"
@ -4351,7 +4289,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@ -4397,7 +4334,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
@ -4446,7 +4382,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
@ -4672,7 +4607,6 @@
"version": "1.21.7",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
@ -4805,7 +4739,6 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
"integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14"
@ -4818,7 +4751,6 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true,
"license": "MIT"
},
"node_modules/locate-path": {
@ -5202,7 +5134,6 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 8"
@ -5929,7 +5860,6 @@
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
"license": "MIT",
"dependencies": {
"braces": "^3.0.3",
@ -5972,7 +5902,6 @@
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"any-promise": "^1.0.0",
@ -6134,7 +6063,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@ -6144,7 +6072,6 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@ -6154,7 +6081,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
@ -6423,7 +6349,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true,
"license": "MIT"
},
"node_modules/picocolors": {
@ -6436,7 +6361,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.6"
@ -6449,7 +6373,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@ -6459,7 +6382,6 @@
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
"integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
@ -6479,7 +6401,6 @@
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dev": true,
"funding": [
{
"type": "opencollective",
@ -6509,7 +6430,6 @@
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.0.0",
@ -6527,7 +6447,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
"integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
"dev": true,
"funding": [
{
"type": "opencollective",
@ -6553,7 +6472,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
"integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
"dev": true,
"funding": [
{
"type": "opencollective",
@ -6596,7 +6514,6 @@
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
"dev": true,
"funding": [
{
"type": "opencollective",
@ -6622,7 +6539,6 @@
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
"dev": true,
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
@ -6636,7 +6552,6 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
"dev": true,
"license": "MIT"
},
"node_modules/prelude-ls": {
@ -6685,7 +6600,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true,
"funding": [
{
"type": "github",
@ -6732,38 +6646,10 @@
"dev": true,
"license": "MIT"
},
"node_modules/react-markdown": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz",
"integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==",
"license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/mdast": "^4.0.0",
"devlop": "^1.0.0",
"hast-util-to-jsx-runtime": "^2.0.0",
"html-url-attributes": "^3.0.0",
"mdast-util-to-hast": "^13.0.0",
"remark-parse": "^11.0.0",
"remark-rehype": "^11.0.0",
"unified": "^11.0.0",
"unist-util-visit": "^5.0.0",
"vfile": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
},
"peerDependencies": {
"@types/react": ">=18",
"react": ">=18"
}
},
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
"dev": true,
"license": "MIT",
"dependencies": {
"pify": "^2.3.0"
@ -6773,7 +6659,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
@ -6992,7 +6877,6 @@
"version": "1.22.11",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
"integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-core-module": "^2.16.1",
@ -7033,7 +6917,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
"integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
"dev": true,
"license": "MIT",
"engines": {
"iojs": ">=1.0.0",
@ -7061,7 +6944,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
"funding": [
{
"type": "github",
@ -7633,7 +7515,6 @@
"version": "3.35.1",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
"integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.2",
@ -7669,7 +7550,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@ -7682,8 +7562,8 @@
"version": "3.4.19",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz",
"integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
@ -7720,7 +7600,6 @@
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
"integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
@ -7737,7 +7616,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
@ -7757,7 +7635,6 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
"dev": true,
"license": "MIT",
"dependencies": {
"any-promise": "^1.0.0"
@ -7767,7 +7644,6 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
"dev": true,
"license": "MIT",
"dependencies": {
"thenify": ">= 3.1.0 < 4"
@ -7780,7 +7656,6 @@
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
"integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"fdir": "^6.5.0",
@ -7797,7 +7672,6 @@
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12.0.0"
@ -7815,7 +7689,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
@ -7829,7 +7702,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
@ -7875,7 +7747,6 @@
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/tsconfig-paths": {
@ -8237,7 +8108,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true,
"license": "MIT"
},
"node_modules/vfile": {

View File

@ -9,16 +9,12 @@
"lint": "next lint"
},
"dependencies": {
"@mdx-js/loader": "^3.1.1",
"@mdx-js/react": "^3.1.1",
"@next/mdx": "^16.1.6",
"@types/mdx": "^2.0.13",
"@tailwindcss/typography": "^0.5.19",
"gray-matter": "^4.0.3",
"next": "^15.1.6",
"next-mdx-remote": "^6.0.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-markdown": "^10.1.0",
"remark-gfm": "^4.0.1"
},
"devDependencies": {

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
### Egg Wash
- 1 large egg, beaten with 1 tablespoon milk
### Apple Pie
@ -38,7 +36,6 @@ displayPhoto: ""
- Coarse sugar for sprinkling on crust (optional)
## Instructions
1. Prep **pie crust** if making from scrath. Keep prepared or store-bought pie crust chilled untill using.
2. Stir the **apple slices**, **sugar**, **flour**, **lemon juice**, **cinnamon**, **allspice**, and **nutmeg** together until thoroughly combined.
3. (Optional) Pre-cook the apples by pouring into a very large skillet/dutch oven, and place over medium-low heat. Stir and cook for 5 minutes until the apples begin to soften. Remove from heat and set aside.
@ -54,7 +51,6 @@ displayPhoto: ""
13. Cover and store leftover pie at room temperature for up to 1 day or in the refrigerator for up to 5 days.
## Notes
### Hat on a Hat
- A frozen pie shell stacked on top will melt into a good covering if you don't want to make a nice top for the pie.
@ -62,7 +58,5 @@ displayPhoto: ""
- Don't forget the egg wash!
## References
- Reference Recipe **[HERE](https://sallysbakingaddiction.com/apple-pie-recipe/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 1 cup all-purpose flour
- 1 cup vegetable oil (plus 1 tablespoon)
- 3 ribs celery, diced small
@ -44,7 +42,6 @@ displayPhoto: ""
- cooked white rice, sliced green onion, and hot sauce for serving
## Instructions
1. In a large dutch oven, heat **vegetable oil** over low heat. Add **flour** and stir essentially constantly until the roux becomes dark brown. This can take between 30-60 mins depending on the stove.
2. Place the dutch oven with the finished roux over medium heat and add **celery**, **onion**, and **bell pepper**. Cook for 8 to 10 minutes, stirring frequently, until the vegetables have softened and the **onions** are translucent.
3. Add the **garlic** and **creole seasoning** and cook for about 1 minute or until the **garlic** is fragrant.
@ -59,7 +56,6 @@ If bits get stuck to the bottom, they will burn and the roux will be ruined; you
The roux should be a dark brown color and have a nutty aroma.
## Notes
### About the Roux
- A dark roux adds deep flavor but can burn easily. Stir constantly over low heat.
@ -71,7 +67,5 @@ The roux should be a dark brown color and have a nutty aroma.
The roux should be a dark brown color and have a nutty aroma.
## References
- Reference Recipe **[HERE](https://southernbite.com/chicken-sausage-and-shrimp-gumbo/)**
</RecipeCard>

View File

@ -20,12 +20,10 @@ lasdfkjlkejflwkejflwkejflk
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
### Marinade
- Kosher salt and freshly ground pepper
- 1/2 teaspoon granulated sugar
@ -40,7 +38,6 @@ lasdfkjlkejflwkejflwkejflk
- 5 tablespoons water
## Instructions
1. Chop the **beef** into thin, long, bite-sized strips. Place in a bowl that can hold the beef and the rest of the marinade.
2. Add a pinch of **salt**, **sugar**, **vegetable oil**, **sodium bicarbonate**, **corn starch**, **rice wine**, and **ginger** to the bowl with the beef.
3. Give the marinade a good mix and leave in the fridge for at least 60 minutes.
@ -54,7 +51,6 @@ lasdfkjlkejflwkejflwkejflk
11. Mix the **cornflour slurry ingredients** and add it to the wok. Gradually turn the heat back to medium as you stir fry. Continue until the sauce thickens and becomes translucent.
## Notes
### Substitute
- Replace rice wine with dry sherry if not available.
@ -62,7 +58,5 @@ lasdfkjlkejflwkejflwkejflk
- Use more broccoli than you think you need!
## References
- Reference Recipe **[HERE](https://www.youtube.com/watch?v=fSO83XlKcPI)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 4 cups chicken stock
- 1/2 teaspoon sesame oil
- 3/4 teaspoon salt
@ -38,7 +36,6 @@ displayPhoto: ""
- 1/2 teaspoon turmeric (optional)
## Instructions
1. Bring the **chicken stock** to a simmer in a pot.
2. Stir in **sesame oil**, **salt**, **sugar**, **white pepper**. Adjust to taste at this point.
3. If using, also stir in the **msg**, **cooking wine**, and **turmeric**.
@ -51,7 +48,6 @@ Stir SLOWLY when adding in the egg for the best results. Stirring quickly yields
Also give the cooking wine addition a try (thanks, mom)
## Notes
### Eyeball It
- It's pretty good regardless of the exact ratios. Also I'm a fan of excess pepper when sick.
@ -60,7 +56,5 @@ Also give the cooking wine addition a try (thanks, mom)
Also give the cooking wine addition a try (thanks, mom)
## References
- Reference Recipe [HERE](https://thewoksoflife.com/egg-drop-soup/)
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 1 package bean thread noodles
- 1 lb ground pork
- 2 tbsp dark soy sauce
@ -38,7 +36,6 @@ displayPhoto: ""
- Oil for frying
## Instructions
1. Soak the **bean thread noodles** in hot water until soft, then chop into small pieces.
2. In a large mixing bowl, combine the **ground pork**, **noodles**, **soy sauce**, **green onion**, **wood ear mushroom**, **fish sauce**, **carrot**, **ginger**, **garlic**, and **egg**.
3. Mix thoroughly until well combined.
@ -55,7 +52,6 @@ Instead of frying, boil in water or broth for 3-4 minutes until the wrapper beco
These make excellent additions to soup!
## Notes
### Wrapper Options
- Lumpia wrappers are thinner than traditional eggroll wrappers, but either will work. For wontons, use wonton wrappers instead.
@ -70,7 +66,5 @@ These make excellent additions to soup!
These make excellent additions to soup!
## References
- Thanks to my sister for providing the recipe!
</RecipeCard>

View File

@ -18,19 +18,16 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 1 cup peaches (about 2 medium), fresh or frozen, chopped
- 1 cup sugar (unrefined cane, granulated, or brown)
- 1 cup water
- 1/2 tsp vanilla extract (optional)
## Instructions
1. Wash and chop the **peaches** into small pieces. There's no need to peel them.
2. In a medium saucepan, combine the chopped **peaches**, **sugar**, and **water**.
3. Bring the mixture to a simmer over medium heat, stirring until the **sugar** is fully dissolved.
@ -42,7 +39,6 @@ displayPhoto: ""
This peach syrup is perfect for cocktails (like a Peach Mojito or Bellini), mocktails, sweetening iced tea or lemonade, drizzling over pancakes, or adding to sparkling water for a refreshing peach soda.
## Notes
### Sugar Choice
- Unrefined cane sugar is a great choice, but regular granulated white sugar or even brown sugar will also work well. Brown sugar will result in a slightly darker syrup with a hint of caramel flavor.
@ -50,7 +46,5 @@ This peach syrup is perfect for cocktails (like a Peach Mojito or Bellini), mock
- This peach syrup is perfect for cocktails (like a Peach Mojito or Bellini), mocktails, sweetening iced tea or lemonade, drizzling over pancakes, or adding to sparkling water for a refreshing peach soda.
## References
- Reference Recipe **[HERE](https://www.alphafoodie.com/how-to-make-peach-simple-syrup/)**
</RecipeCard>

View File

@ -20,7 +20,6 @@ A beloved Italian-American comfort food that combines crispy breaded chicken cut
<RecipeCard>
## Photos
![Finished chicken parmesan on a white plate](./assets/not-found.svg)
*Golden-brown chicken topped with bubbling cheese*
@ -31,7 +30,6 @@ A beloved Italian-American comfort food that combines crispy breaded chicken cut
*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
@ -50,7 +48,6 @@ A beloved Italian-American comfort food that combines crispy breaded chicken cut
- 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**.
@ -73,7 +70,6 @@ A beloved Italian-American comfort food that combines crispy breaded chicken cut
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
@ -92,9 +88,7 @@ A beloved Italian-American comfort food that combines crispy breaded chicken cut
- **Extra crispy**: Use panko breadcrumbs instead of Italian breadcrumbs
## References
- Adapted from traditional Italian-American recipes
- Inspired by *The Silver Spoon* Italian cookbook
- Reference Recipe **[HERE](https://www.example.com)**
</RecipeCard>

View File

@ -20,7 +20,6 @@ The ultimate chocolate chip cookie recipe that delivers crispy edges, chewy cent
<RecipeCard>
## Photos
![Stack of chocolate chip cookies](./assets/not-found.svg)
*A stack of golden-brown cookies showing the perfect texture*
@ -34,7 +33,6 @@ The ultimate chocolate chip cookie recipe that delivers crispy edges, chewy cent
*The perfect cookie and milk pairing*
## Ingredients
### Dry Ingredients
- 2 1/4 cups (280g) all-purpose flour
- 1 teaspoon baking soda
@ -53,7 +51,6 @@ The ultimate chocolate chip cookie recipe that delivers crispy edges, chewy cent
- 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.
@ -77,7 +74,6 @@ The ultimate chocolate chip cookie recipe that delivers crispy edges, chewy cent
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
@ -106,8 +102,6 @@ The ultimate chocolate chip cookie recipe that delivers crispy edges, chewy cent
- **Underbaking**: Keeps centers soft and gooey
## References
- Based on the classic Nestlé Toll House recipe
- Reference Recipe **[HERE](https://www.example.com)**
</RecipeCard>

View File

@ -22,12 +22,10 @@ The whole dal retain their consistency, and the hulled and split dal thicken the
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
### Brown & Red Lentils
- 1 cup whole masoor dal (brown lentils)
- 1 cup split masoor dal (hulled and split brown lentils aka red lentils)
@ -51,7 +49,6 @@ The whole dal retain their consistency, and the hulled and split dal thicken the
- 1 tbsp dried fenugreek leaves (kasuri methi)
## Instructions
**Lentil Preparation**
1. Add each type of **lentil** individually to a large bowl and rinse well at least 3x.
2. Add to a pot with 4 cups **water** if using both types of lentils, 3 cups if not using split lentils.
@ -70,12 +67,9 @@ The whole dal retain their consistency, and the hulled and split dal thicken the
10. Stir in **amchur powder** and **fenugreek leaves**.
## Notes
### Mix & Match
- Try with all types of lentils!
## References
- Reference Recipe **[HERE](https://www.indianhealthyrecipes.com/brown-lentils/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
### Chana
- 1 cup dry chana (raw chickpeas) or 3 cups soaked/2 15 oz cans
- 1 1/2 cups water, more for gravy
@ -48,7 +46,6 @@ displayPhoto: ""
- 2 tbsp finely chopped coriander leaves/cilantro
## Instructions
**Chana Preparation**
1. Rinse dried **chickpeas** at least 3 times to remove loose skin. Soak in 3 1/2 to 4 cups water overnight for at least 8 hours. Additionally you can add a small amount of baking soda to loosen the chana skins.
2. Drain water and rinse well. Optionally seperate skins from chana (but keep them later to thicken sauce). Pour the recipe water in and pressure cook for 5 to 6 minutes on a stovetop or 18 minutes on high pressure in an instant pot.
@ -72,7 +69,6 @@ displayPhoto: ""
- Serve with kasuri methi and amchur.
## Notes
### Don't Eyeball It
- Match the chana amount correctly, or the gravy gets very thin.
@ -80,7 +76,5 @@ displayPhoto: ""
- Recipe usually heavy on the chana, adjust how you like it.
## References
- Reference Recipe **[HERE](https://www.indianhealthyrecipes.com/chana-masala/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: "./assets/chicken-tikka-masala.jpg"
<RecipeCard>
## Photos
![Chicken Tikka Masala](./assets/chicken-tikka-masala.jpg)
*Chicken Tikka Masala*
## Ingredients
### Chicken Marinade
- 28 oz (800g) boneless and skinless chicken thighs (cut into bite-sized pieces)
- 1 cup plain yogurt
@ -54,7 +52,6 @@ displayPhoto: "./assets/chicken-tikka-masala.jpg"
- 4 tablespoons fresh cilantro or coriander to garnish
## Instructions
1. In a bowl, combine **chicken** with all of the ingredients for the **chicken marinade**; let marinate for 10 minutes to an hour (or overnight if time allows).
2. Heat **oil** in a large skillet or pot over medium-high heat. When sizzling, add **marinated chicken pieces** in batches of two or three, making sure not to crowd the pan. Fry until browned for only 3 minutes on each side. Set aside and keep warm. (You will finish cooking the chicken in the sauce.)
3. Melt the **butter** in the same pan. Fry the **onions** until soft (about 3 minutes) while scraping up any browned bits stuck on the bottom of the pan.
@ -64,7 +61,6 @@ displayPhoto: "./assets/chicken-tikka-masala.jpg"
7. Garnish with cilantro (coriander) and serve.
## Notes
### Diet
- Switch cream for low fat milk to make this a bit healthier.
@ -72,7 +68,5 @@ displayPhoto: "./assets/chicken-tikka-masala.jpg"
- Let chicken marinate for overnight if possible.
## References
- Reference Recipe **[HERE](https://cafedelites.com/chicken-tikka-masala/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: "./assets/palak-paneer.jpg"
<RecipeCard>
## Photos
![Palak Paneer](./assets/palak-paneer.jpg)
*Palak Paneer*
## Ingredients
- 1 1/4 cups paneer
- 4 cups palak/spinach
- 2 tbsp oil (can use half oil half butter)
@ -44,7 +42,6 @@ displayPhoto: "./assets/palak-paneer.jpg"
- 2 cloves (optional)
## Instructions
**Palak/Spinach Preparation**
1. For best results separate stems as they may leave a bitter taste, or use baby spinach.
2. Rinse and drain **spinach**. Leave as little water as possible as spinach will be cooked in oil.
@ -62,7 +59,6 @@ displayPhoto: "./assets/palak-paneer.jpg"
9. Add **paneer** and mix well. Optionally garnish with cream.
## Notes
### Meal Prep
- If using canned tomatoes, you'll typically have enough to double the recipe which is a good amount to have some leftovers.
@ -70,7 +66,5 @@ displayPhoto: "./assets/palak-paneer.jpg"
- It really doesn't need it, but you can add heavy whipping cream to thicken the gravy. However it should be relatively thick as is.
## References
- Reference Recipe **[HERE](https://www.indianhealthyrecipes.com/palak-paneer-recipe-easy-paneer-recipes-step-by-step-pics/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
### Chicken & Breading
- 6 boneless skinless chicken breasts
- 1 cup flour
@ -41,7 +39,6 @@ displayPhoto: ""
- Remaining ¼ cup minced flat leaf parsley (for garnish)
## Instructions
**Preparation**
1. Pre-heat oven to **350°F**.
2. Place one **chicken breast** inside a gallon size ziplock bag. Using a kitchen mallet, pound the chicken breast to an even size, approximately **½ inch** thick. Repeat for the remaining breasts.
@ -63,7 +60,6 @@ displayPhoto: ""
6. Serve immediately.
## Notes
### Chicken Substitute
- Chicken thigh is an appropriate substitution for chicken breast in my experience.
@ -71,7 +67,5 @@ displayPhoto: ""
- It's difficult to sub cheese in this recipe but using a low fat mozzarella cheese makes it a slight bit healthier.
## References
- Reference Recipe **[HERE](https://www.homemadeitaliancooking.com/chicken-parmesan/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- ¼ cup olive oil
- ½ shallot, finely chopped
- 1 small garlic clove, finely grated
@ -38,7 +36,6 @@ displayPhoto: ""
- ¼ cup chopped fresh basil"
## Instructions
1. Heat **oil** in a large skillet over medium.
2. Add **shallot** and **garlic** and cook, stirring occasionally, until softened, about 5 minutes.
3. Begin cooking **pasta** in salted water until al dente. This can be done while working on the next few steps for the pasta in parallel.
@ -52,7 +49,6 @@ displayPhoto: ""
11. Season with salt and pepper and add 1 oz. **Parmesan**, tossing to coat. Divide pasta among bowls, then top with basil and more Parmesan.
## Notes
### Family Sized
- Recipe makes about a pound of pasta, in my experience that ends up being about 8 large servings.
@ -60,7 +56,5 @@ displayPhoto: ""
- Lasts quite a while, but reheat quality is not super presentable because of the heavy cream.
## References
- Reference Recipe **[HERE](https://www.bonappetit.com/recipe/fusilli-alla-vodka-basil-parmesan)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 1 cup warm water (temperature depends on type of yeast, usually 100-110 degrees Fahrenheit)
- 2 ¼ teaspoons dry active yeast (1 normal sized packet)
- ½ teaspoon granulated sugar
@ -32,14 +30,12 @@ displayPhoto: ""
- 3 cups all-purpose flour (approximate)
## Instructions
1. Measure **warm water** (between 100°-110°F) in a measuring cup, then add the **yeast** and **sugar**. Stir gently, then let sit around 5 minutes until its active and foamy. This will happen within 5 minutes. Use a thermometer to measure water temp.
2. Stir **salt**, **oil**, and 2 cups **flour** in a large mixing bowl, stirring in the yeast mixture as you go, using a wooden spoon.
3. Add the third cup of **flour** and then stir until you cant anymore. Remove the spoon and then use your hands to work the dough into a ball that is slightly sticky.
4. Spray a second large bowl with nonstick cooking spray, add your pizza dough ball, then spray the top lightly with cooking spray and cover tightly with plastic wrap. Place in a warm area of the kitchen and let rise until doubled in size, about 1-2 hours.
## Notes
### Family Sized
- Recipe makes about 4 medium sized pizza doughs. Each would cover most of a pizza spatula as a thinner crust.
@ -47,7 +43,5 @@ displayPhoto: ""
- Good yeast is the secret here. From a packet is better than keeping bulk usually. Either way, the more bubbles the better.
## References
- Reference Recipe **[HERE](https://www.crazyforcrust.com/the-ultimate-pizza-crust-recipe/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 15 oz tomato sauce
- OR cut 6 oz tomato paste with water
- 1-2 tablespoons dried oregano to taste
@ -35,13 +33,11 @@ displayPhoto: ""
- 1 teaspoon sugar
## Instructions
1. Mix **tomato paste** and **sauce** together in a medium size bowl until smooth.
2. Add the rest of the ingredients **oregano**, **Italian seasoning**, **garlic powder**, **onion powder**, **garlic salt**, **pepper** and **sugar** and stir until evenly distributed throughout the sauce.
3. Taste and adjust seasonings to your liking.
## Notes
### Low Sodium
- Avoid excess salt as this doesn't really need it.
@ -49,7 +45,5 @@ displayPhoto: ""
- If you're adding meat a sweet sauce usually breaks up all the salt you'll be adding.
## References
- Reference Recipe **[HERE](https://joyfoodsunshine.com/easy-homemade-pizza-sauce-recipe/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- Eggs
- 2 tablespoons white vinegar
- ¼ cup soy sauce
@ -31,7 +29,6 @@ displayPhoto: ""
- 1 teaspoon brown sugar
## Instructions
1. Bring a pot of enough water to cover the eggs to a boil once added.
2. Place saucepan over high heat and add **vinegar** to help with peeling. Bring to a boil.
3. Prick a hole in the wide end of each egg (helps with shape and peeling).
@ -43,7 +40,6 @@ displayPhoto: ""
9. When serving, remove from marinade and cut in half.
## Notes
### Tight Fit
- Make sure to find a bowl that can just barely fit all the eggs together, the sauce has to cover all of them.
@ -51,7 +47,5 @@ displayPhoto: ""
- Depending on how long you age these, they'll get really salty. A few days is a good middle ground, after that you can take the eggs out and store seperately.
## References
- Reference Recipe **[HERE](https://www.aspicyperspective.com/easy-ramen-egg-recipe-ajitsuke-tamago/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 2 lbs beef (chuck or brisket), cut into bite-sized pieces
- 4 cups water, 1 additional as needed
- 1 large onion, chopped
@ -33,7 +31,6 @@ displayPhoto: ""
- 1 carton S&B Golden Curry Mix
## Instructions
1. In a large saucepan, heat **vegetable oil** over medium heat. Add **beef** and cook until browned. Remove and set aside.
2. Add **onion**, **carrots**, and **potatoes**. Stir-fry until fragrant.
3. Add **water**, **beef**, and **S&B Golden Curry Mix**.
@ -43,7 +40,6 @@ If the sauce is too thick, make a slurry with water and cornstarch. Note this wi
Macaroni salad goes great alongside the rice and curry stew.
## Notes
### Let me elaborate on bite sized
- Cut it smaller than you think necessary and against grain.
@ -54,7 +50,5 @@ Macaroni salad goes great alongside the rice and curry stew.
- Macaroni salad goes great alongside the rice and curry stew.
## References
- Reference Recipe **[HERE](https://www.waiyeehong.com/food-ingredients/sauces-oils/curry-sauces-and-pastes/golden-curry-mild)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 2 lbs chicken thigh fillets, cut into bite-sized pieces
- 4 cups chicken stock, 1 additional as needed, or water
- 1 large onion, chopped
@ -35,7 +33,6 @@ displayPhoto: ""
- 1 carton S&B Golden Curry Mix
## Instructions
1. In a large saucepan, heat **vegetable oil** over medium heat. Add **chicken** and cook until browned.
2. Add **onion**, **carrots**, **bell pepper**, and **potatoes**. Stir-fry for about 5 minutes until fragrant.
3. Add **chicken stock** and the **golden curry mix**. Bring to a boil.
@ -45,7 +42,6 @@ displayPhoto: ""
The coconut cream settles to the bottom of the can, make sure to re-mix it before using.
## Notes
### A different take on Golden Curry
- The sweetness of the coconut cream makes this a very different dish than the normal way we make Curry Stew.
@ -53,7 +49,5 @@ The coconut cream settles to the bottom of the can, make sure to re-mix it befor
- The coconut cream settles to the bottom of the can, make sure to re-mix it before using.
## References
- Reference Recipe **[HERE](https://www.recipetineats.com/golden-coconut-chicken-curry/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 2 pounds beef chuck, cut into 1-inch cubes
- 1 bottle (750 ml) red wine (preferably Burgundy)
- 2 cups beef stock
@ -41,7 +39,6 @@ displayPhoto: ""
- Fresh parsley for garnish
## Instructions
1. Preheat the oven to 325°F (160°C).
2. In a large Dutch oven, cook the **bacon** over medium heat until crispy. Optionally add a small bit of water while cooking to ensure a better crisp. Remove and set aside, leaving the fat in the pot.
3. Season the **beef** with **salt** and **pepper**, then dust with **flour**. In the same pot, brown the **beef** in batches until browned on all sides. Remove and set aside.
@ -54,7 +51,6 @@ displayPhoto: ""
Serve with crusty bread or over mashed potatoes for a hearty meal.
## Notes
### Wine Selection
- Use a good quality red wine for the best flavor. Burgundy is traditional, but any full-bodied red will work.
@ -62,7 +58,5 @@ Serve with crusty bread or over mashed potatoes for a hearty meal.
- Serve with crusty bread or over mashed potatoes for a hearty meal.
## References
- Reference Recipe **[HERE](https://cafedelites.com/beef-bourguignon/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
### Herb Butter
- 4 ounces unsalted butter
- 1 teaspoon chopped fresh thyme leaves
@ -38,7 +36,6 @@ displayPhoto: ""
- 1/2 cup olive oil
## Instructions
1. Preheat oven to 425°F. Lower oven shelf to the lowest part of your oven.
2. Combine the **Herb Butter ingredients** in a bowl and mix well. Reserve half of the herb butter in the refrigerator for later.
3. Line a large roasting pan with foil or parchment paper. Arrange the 4 halves of **garlic** cut-side down on the bottom of the pan with 4 sprigs each of **thyme** and **rosemary**, half of the **olive oil** and 1 slice of **lemon**.
@ -54,7 +51,6 @@ displayPhoto: ""
13. Remove 2 1/2 cups of the liquid from the **pan juices** (top up with stock if you need too), strain and reserve for your gravy (see below).
## Notes
### Scaling!
- The recipe suggests using a 12 lb turkey, I have tried it with a 16 lb turkey with slightly scaled up measurements.
@ -62,7 +58,5 @@ displayPhoto: ""
- It's hard to get perfect cuts on the garlic. I found success by lightly sawing with a sharpened knife. When squeezing the garlic out try not to burn yourself.
## References
- Reference Recipe **[HERE](https://cafedelites.com/roast-turkey/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 1 Salmon fillet
- 2 tbsp mayonnaise
- 1 tbsp lemon pepper seasoning (to taste)
@ -31,7 +29,6 @@ displayPhoto: ""
- 1 lemon (to taste)
## Instructions
1. Find a metal grill tray, or grill basket.
2. Place salmon skin-side down in the grill tray/basket.
3. Mix **mayonnaise** and **lemon pepper seasoning** in a bowl to taste.
@ -40,12 +37,9 @@ displayPhoto: ""
6. Serve with rice, and top with pepper and the juice of a lemon for best results.
## Notes
### More Lemon Pepper
- Use a good amount of lemon pepper, but be careful of making it too lemony. Extra pepper is usually fine.
## References
- Idk talk to my mom...
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 1 medium onion, coarsely chopped
- 3 medium scallions, chopped
- 2 Scotch bonnet chiles, chopped
@ -39,7 +37,6 @@ displayPhoto: ""
- 2 (3 1/2 to 4-pound) chickens, quartered
## Instructions
1. In a food processor, combine the **onion**, **scallions**, **chiles**, **garlic**, **five-spice powder**, **allspice**, **pepper**, **thyme**, **nutmeg**, and **salt**; process to a coarse paste.
2. With the machine on, add the **soy sauce** and **oil** in a steady stream.
3. Pour the marinade into a large, shallow dish, add the **chicken**, and turn to coat.
@ -49,9 +46,6 @@ displayPhoto: ""
7. Transfer the chicken to a platter and serve.
## Notes
## References
- Reference Recipe **[HERE](https://www.foodandwine.com/recipes/jamaican-jerk-chicken)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
### Ribs
- 1 rack baby back ribs or spare ribs (about 1 1/2 to 2 pounds)
- 1 cup water
@ -41,7 +39,6 @@ displayPhoto: ""
- 1/4 teaspoon cayenne pepper
## Instructions
1. Rinse the ribs and pat them dry. If your ribs still have the thin, shiny membrane on the back, remove it.
2. In a small bowl, stir together the **brown sugar**, **paprika**, **black pepper**, **salt**, **chili powder**, **garlic powder**, **onion powder**, and **cayenne**.
3. Rub it all over the ribs, generously coating all of the sides.
@ -54,12 +51,9 @@ displayPhoto: ""
10. Place under the broiler just until the sauce begins to caramelize, about 2 minutes.
## Notes
### Homemade is Best
- Always worth it to make your own barbecue sauce & rub!
## References
- Reference Recipe **[HERE](https://www.wellplated.com/instant-pot-ribs/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 2 1/4 - 2 1/2 cups pan juices (top up with chicken stock if needed)
- 1/4 cup butter
- 1/4 cup flour
@ -31,18 +29,14 @@ displayPhoto: ""
- Kosher salt and freshly ground pepper (if needed)
## Instructions
1. Melt the **butter** in a small pot over low-medium heat. Whisk in the **flour** and allow to cook for about a minute or two, while whisking.
2. Pour in 1/2 cup of the **pan juices** and whisk until it forms a paste. Add remaining liquid in 1/2 cup increments, whisking in between, until the gravy is smooth.
3. Allow to simmer over medium heat until thickened. Take off heat, stir in **worcestershire sauce** and season with **salt** and **pepper** (if needed). The gravy will continue to thicken as it cools.
## Notes
### Use it All
- Make sure to scoop up both drippings and fat when gathering the pan juices. All are important!
## References
- Reference Recipe **[HERE](https://cafedelites.com/turkey-gravy/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
### Meat Prep
- 4 to 5 pounds pork, cut into large chunks (Can substitute beef or lamb)
- ½ tablespoon kosher salt
@ -47,7 +45,6 @@ displayPhoto: ""
- ½ teaspoon ground cloves
## Instructions
1. Season the meat with **salt** and **pepper**. Heat **olive oil** in a large pot over medium-high heat and sear the meat on all sides until browned.
2. In a separate pot, combine **guajillo**, **ancho**, and **árbol chiles**, **tomatoes**, **onion**, **cinnamon stick**, **bay leaves**, and **peppercorns**. Cover with water and boil for 10 minutes.
3. Transfer the softened ingredients to a blender, add 1 cup of the cooking water, **beef broth**, **vinegar**, **garlic**, **cumin**, **oregano**, and **cloves**. Blend until smooth.
@ -56,7 +53,6 @@ displayPhoto: ""
Straining after blending is important for a smooth texture in the consumé. However, leaving it lightly chunky is not a bad thing.
## Notes
### Ingredient Sourcing
- My local produce store carries bags of dried chilies - whole dried are the best. Purchasing online is a decent alternative for high quality chilies.
- Also, finding a decently fatty chuck roast is key for a quality consumé.
@ -65,7 +61,5 @@ Straining after blending is important for a smooth texture in the consumé. Howe
- Straining after blending is important for a smooth texture in the consumé. However, leaving it lightly chunky is not a bad thing.
## References
- Reference Recipe **[HERE](https://www.isabeleats.com/authentic-birria/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 6-8 medium ears of corn, husks removed
- 1/2 cup mayonnaise
- 1/2 cup Mexican crema or sour cream
@ -34,7 +32,6 @@ displayPhoto: ""
- 1 lime, cut into wedges
## Instructions
1. Preheat a grill to medium-high heat.
2. While the grill heats, prepare the sauce. In a medium bowl, combine the **mayonnaise**, **crema** (or sour cream), 1/2 cup of **cotija cheese**, minced **cilantro**, **garlic**, and 1/2 teaspoon of **chili powder**. Mix well until combined.
3. Grill the **corn**, turning occasionally, until it's cooked through and charred in spots, which should take about 10 minutes.
@ -44,7 +41,6 @@ displayPhoto: ""
You can achieve a similar result by broiling the corn in your oven or carefully charring it over a gas stove flame. Be sure to turn it frequently for even cooking and char.
## Notes
### Cheese Selection
- Cotija is a salty, crumbly Mexican cheese. If you can't find it, a dry feta or even grated Parmesan can be used as a substitute, though the flavor will be slightly different.
@ -52,7 +48,5 @@ You can achieve a similar result by broiling the corn in your oven or carefully
- You can achieve a similar result by broiling the corn in your oven or carefully charring it over a gas stove flame. Be sure to turn it frequently for even cooking and char.
## References
- Reference Recipe **[HERE](https://www.seriouseats.com/mexican-street-corn-elotes-recipe)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 1 cup uncooked white rice
- 2 cinnamon sticks
- 12 oz can evaporated milk
@ -34,7 +32,6 @@ displayPhoto: ""
- 1/2 teaspoon vanilla extract (optional)
## Instructions
1. Rinse the **rice** under cold water. In a bowl, combine **rice**, **cinnamon sticks**, and 4 cups of **warm water**. Cover and refrigerate at least 4 hours or overnight.
2. Remove most of the **cinnamon sticks**, leaving a few small pieces.
3. Blend the soaked mixture in two batches until very smooth, about 34 minutes per batch.
@ -44,7 +41,6 @@ displayPhoto: ""
Heed the instructions and blend in batches. Water easily escapes from the blender or food processor and this stuff gets everywhere.
## Notes
### Soaking
- It is worth the time to soak the cinnamon and rice, helping you pull out more flavor and end with a product that is less lightly flavored water and more of a thicker drink.
@ -52,7 +48,5 @@ Heed the instructions and blend in batches. Water easily escapes from the blende
- Heed the instructions and blend in batches. Water easily escapes from the blender or food processor and this stuff gets everywhere.
## References
- Reference Recipe **[HERE](https://www.muydelish.com/traditional-mexican-horchata/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 2 tablespoons vegetable oil
- 1 cup uncooked long-grain white rice
- 1 (8 ounce) can tomato sauce
@ -34,7 +32,6 @@ displayPhoto: ""
- 1/4 teaspoon chili powder
## Instructions
1. Heat the **vegetable oil** in a large saucepan or skillet with a lid over medium heat.
2. Add the **rice** and cook, stirring constantly, until the grains are lightly golden brown. This toasting step is key for flavor and texture.
3. Carefully stir in the **tomato sauce**, **chicken broth**, **salt**, **cumin**, **garlic powder**, and **chili powder**.
@ -44,7 +41,6 @@ displayPhoto: ""
This rice is the perfect accompaniment to tacos, burritos, enchiladas, or any grilled meat. Garnish with fresh cilantro for extra flavor and color.
## Notes
### Vegetarian Option
- For a vegetarian version, simply substitute the chicken broth with vegetable broth. The result will be just as delicious.
@ -52,7 +48,5 @@ This rice is the perfect accompaniment to tacos, burritos, enchiladas, or any gr
- This rice is the perfect accompaniment to tacos, burritos, enchiladas, or any grilled meat. Garnish with fresh cilantro for extra flavor and color.
## References
- Reference Recipe **[HERE](https://www.allrecipes.com/recipe/27072/mexican-rice-ii/)**
</RecipeCard>

View File

@ -15,17 +15,13 @@ display: true
displayPhoto: ""
---
Pinto beans that are great in a burrito on on their own.
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 2 cups uncooked pinto beans
- 8 cups water
- 1 small yellow onion, diced
@ -34,26 +30,14 @@ Pinto beans that are great in a burrito on on their own.
- 1 bay leaf (optional)
## Instructions
1. Rinse the **pinto beans**.
2. Add the rinsed **pinto beans**, **water**, diced **onions**, **salt**, **pepper**, and **bay leaf** to an instant pot.
3. Set the instant pot to **Beans/Stew** setting, and cook for 32 minutes on high pressure. If cooking conventually simmer on a medium-low heat until the beans are the desired consistency.
## Notes
### Ratios
- In general, 1 cup of beans needs 4 cups of water to avoid the cooked beans drying out.
## References
- Reference Recipe **[HERE](https://www.rachelcooks.com/instant-pot-pinto-beans/)**
</RecipeCard>
Stuff after recipe RecipeCard
# Another H1
is this renered
## another h2
is this h2 rendered
![Image asdf Soon](./assets/not-found.svg)
*Image Comasdfing Soon*asdf

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 2 small garlic cloves, minced
- 1 tsp anchovy paste or 2 fillets
- 1 tsp dijon mustard
@ -34,13 +32,11 @@ displayPhoto: ""
- 1/4 tsp freshly ground black pepper
## Instructions
1. In a medium bowl, whisk together the **garlic**, **anchovies**, **lemon juice**, **dijon mustard**, and **worcestershire sauce**.
2. Add the **mayonnaise**, **parmigiano-reggiano**, **salt**, and **pepper**, and whisk until well combined.
3. Taste and adjust to your liking.
## Notes
### Anchovy Prep
- If using anchovy fillets, it's a good idea to smear them into a paste using the side of a knife to break down any bones.
@ -48,7 +44,5 @@ displayPhoto: ""
- Using less mayonnaise makes for a thinner dressing, and in my opinion less mayo flavor is better.
## References
- Reference Recipe **[HERE](https://www.onceuponachef.com/recipes/caesar-salad-dressing.html)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 1 large head cauliflower, cut into florets (about 2 to 2.5 lb)
- 2 tablespoons unsalted butter (or olive oil)
- 2 cloves garlic, minced (or 1 teaspoon garlic powder)
@ -34,7 +32,6 @@ displayPhoto: ""
- Chives or parsley, finely chopped (optional, for garnish)
## Instructions
1. Trim and cut the **cauliflower** into medium florets.
2. Cook until very tender: steam 1012 minutes (preferred) or boil 810 minutes. The florets should crush easily with tongs.
3. Drain thoroughly in a colander and let steamdry 35 minutes. For extra dryness, return to the empty pot over low heat for 12 minutes, stirring.
@ -44,7 +41,6 @@ displayPhoto: ""
7. Transfer to a bowl, garnish with **chives/parsley**, and serve hot.
## Notes
### Drain Well
- Waterlogged cauliflower makes a loose mash. After cooking, let the florets steamdry and drive off moisture for a fluffier, creamier texture.
@ -52,7 +48,5 @@ displayPhoto: ""
- For ultrasmooth mash, strain through a fine sieve. For dairyfree, use olive oil and unsweetened almond milk. Addins: roasted garlic, horseradish, or a spoon of sour cream for tang.
## References
- Reference Recipe **[HERE](https://www.seriouseats.com/cauliflower-puree-recipe)**
</RecipeCard>

View File

@ -20,12 +20,10 @@ These are a great topping for ramen, sandwiches, charcuterie, salads, or anythin
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 1 large red onion, peeled and very thinly sliced
- 3/4 cup apple cider vinegar
- 1/4 cup water
@ -33,14 +31,12 @@ These are a great topping for ramen, sandwiches, charcuterie, salads, or anythin
- 1-2 tablespoons sweetener (maple syrup, honey, or sugar)
## Instructions
1. Mix the **vinegar**, **water**, **salt**, and **sweetener** in a heated saucepan. Cook over medium-high heat until simmering. Microwave works as well.
2. Stuff thinly-sliced **onions** into a jar or container with a lid. You can get way more in there than you think if you really stuff them.
3. Pour the hot vinegar mixture over the onions and seal. Shake briefly to ensure full coverage. You can additionally shake periodically if you want.
4. Marinate for as little as 30 minutes and up to 2 weeks before consuming. You can press onions down with a spoon to submerge after a while if they stick out of the liquid.
## Notes
### As Thin as Possible
- The onions will pack a lot better, and ferment more if they are sliced super thin. Use a mandoline if one is available.
@ -51,7 +47,5 @@ These are a great topping for ramen, sandwiches, charcuterie, salads, or anythin
- Mix additionally after bottling to ensure proper coverage.
## References
- Reference Recipe **[HERE](https://www.gimmesomeoven.com/quick-pickled-red-onions/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
- 1 lbs Yukon Gold potatoes (enough cubed to fill 2/3 of a gallon ziploc bag)
- 2 tbsp / 1/2 oz unsalted butter
- 1/4 cup cream cheese (alternate: sour cream)
@ -33,7 +31,6 @@ displayPhoto: ""
- salt and pepper to taste
## Instructions
1. Cube the **potatoes**, optionally leaving the skin on. Optionally soak in water to get the starch out.
2. Load the potatoes into a sous vide bag. Fill it up no more than 3/4 of the way full, ideally closer to 1/2.
3. Add the **butter**, **cream cheese**/**sour cream**, **garlic powder**, **salt**, **pepper**, **rosemary**, and **milk** to the bag.
@ -45,7 +42,6 @@ displayPhoto: ""
9. Pour/plate into bowl. Sprinkle with garnish if available.
## Notes
### No Pressure!
- Adjust to what you know you like! Measurements can be adjusted after cooking if needed.
@ -53,7 +49,5 @@ displayPhoto: ""
- The only way to mess up is to create a hole in the bag. This happens when the rosemary branches poke the bag. Make sure to chop up the rosemary before putting in the bag.
## References
- Reference Recipe **[HERE](https://www.youtube.com/watch?app=desktop&v=WRrtw9NwcIU&t=72s)**
</RecipeCard>

View File

@ -20,12 +20,10 @@ A comforting chicken noodle soup perfect for rainy or sick days. Made easy in th
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
### Main Ingredients
- 2 tablespoons unsalted butter
- 1 large onion, chopped
@ -42,7 +40,6 @@ A comforting chicken noodle soup perfect for rainy or sick days. Made easy in th
- 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.
@ -54,7 +51,6 @@ A comforting chicken noodle soup perfect for rainy or sick days. Made easy in th
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.
@ -66,7 +62,5 @@ A comforting chicken noodle soup perfect for rainy or sick days. Made easy in th
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
- Reference Recipe **[HERE](https://www.jocooks.com/recipes/instant-pot-chicken-noodle-soup/)**
</RecipeCard>

View File

@ -18,12 +18,10 @@ displayPhoto: ""
<RecipeCard>
## Photos
![Image Coming Soon](./assets/not-found.svg)
*Image Coming Soon*
## Ingredients
### Broth
- 2 lbs beef bones (knuckle, marrow, or oxtail)
- 1 lb beef brisket (chuck as substitute)
@ -51,7 +49,6 @@ displayPhoto: ""
- Hoisin sauce and Sriracha for serving
## Instructions
1. In a large pot, add **beef bones** and **brisket**. Make sure to cut the brisket in half prior to this. Cover with water and bring to a boil and boil for **5 minutes**. Skim any scum off the top.
2. Simultaneously, char the **onion** and **ginger** over medium flame. Rinse away the blackened skin.
3. Also, toast **star anise**, **cinnamon stick**, **cloves**, **cardimom pods**, **coriander seeds**, and **fennel seeds** over medium heat in a saucepan for **3 minutes**.
@ -62,7 +59,6 @@ displayPhoto: ""
Pho is traditionally served piping hot with plenty of fresh herbs and condiments. The key is the balance of rich broth, tender meat, and fresh garnishes.
## Notes
### Cooking Instructions
- Getting beef bones with cartilage is very important as well as getting a stew meat. Also do not forget to skim after boiling.
@ -70,7 +66,5 @@ Pho is traditionally served piping hot with plenty of fresh herbs and condiments
- Pho is traditionally served piping hot with plenty of fresh herbs and condiments. The key is the balance of rich broth, tender meat, and fresh garnishes.
## References
- Reference Recipe **[HERE](https://thewoksoflife.com/pho-vietnamese-noodle-soup/)**
</RecipeCard>

View File

@ -2,7 +2,6 @@ import type { Config } from "tailwindcss";
export default {
content: [
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
"./components/**/*.{js,ts,jsx,tsx,mdx}",
"./app/**/*.{js,ts,jsx,tsx,mdx}",
],
@ -14,5 +13,5 @@ export default {
},
},
},
plugins: [],
plugins: [require("@tailwindcss/typography")],
} satisfies Config;