-
+
-
-
-
- The PWS Mission
-
-
+
+
+ The PWS Mission
+
We believe that cooking should be accessible, enjoyable, and creative. Our goal while collecting and organizing these recipes is to make knowledge readily available and keep your cooking experience a cathartic and fun one.
-
-
- Content Structure
-
-
+
+ Content Structure
+
Each recipe is organized in its own folder with:
-
+
- Markdown file with metadata frontmatter, recipe content, and instructions
- Assets folder for images and other media
-
-
- Technology
-
-
+
+ Technology
+
Built with modern web technologies including Next.js, React, TypeScript, and Tailwind CSS to ensure fast performance.
-
+
);
}
diff --git a/components/RecipeTabs.tsx b/components/RecipeTabs.tsx
index 4b38ae3..8b75f1e 100644
--- a/components/RecipeTabs.tsx
+++ b/components/RecipeTabs.tsx
@@ -1,6 +1,7 @@
'use client';
import { useRef, useState, type KeyboardEvent, type ReactNode } from 'react';
+import { MARKDOWN_BODY_CLASSES } from './markdown-styles';
export interface RecipeTab {
id: string;
@@ -65,21 +66,7 @@ export default function RecipeTabs({ tabs }: { tabs: RecipeTab[] }) {
id={`tab-panel-${tab.id}`}
aria-labelledby={`tab-${tab.id}`}
hidden={tab.id !== activeId}
- className="p-8 max-w-none text-base leading-relaxed
- [&_h3]:text-lg [&_h3]:font-semibold [&_h3]:text-gray-900 dark:[&_h3]:text-white [&_h3]:mt-5 [&_h3]:mb-2
- [&_p]:text-gray-700 dark:[&_p]:text-gray-300 [&_p]:my-2
- [&_strong]:text-gray-900 dark:[&_strong]:text-white
- [&_ol]:list-decimal [&_ol]:pl-6 [&_ol]:space-y-2 [&_ol]:my-4
- [&_ul]:list-disc [&_ul]:pl-6 [&_ul]:space-y-2 [&_ul]:my-4
- [&_li]:text-gray-700 dark:[&_li]:text-gray-300
- [&_li]:marker:text-gray-500 dark:[&_li]:marker:text-gray-400
- [&_code]:text-gray-900 dark:[&_code]:text-gray-100 [&_code]:bg-gray-100 dark:[&_code]:bg-gray-800 [&_code]:rounded [&_code]:px-1.5 [&_code]:py-0.5
- [&_pre]:bg-gray-100 dark:[&_pre]:bg-gray-900
- [&_table]:border-collapse
- [&_th]:border [&_th]:border-gray-300 dark:[&_th]:border-gray-600
- [&_td]:border [&_td]:border-gray-300 dark:[&_td]:border-gray-600
- [&_figure]:my-6
- [&_figcaption]:mt-2 [&_figcaption]:text-center [&_figcaption]:text-sm [&_figcaption]:italic [&_figcaption]:text-gray-600 dark:[&_figcaption]:text-gray-400"
+ className={`p-8 ${MARKDOWN_BODY_CLASSES}`}
>
{tab.title}
diff --git a/components/markdown-styles.ts b/components/markdown-styles.ts
new file mode 100644
index 0000000..9ee831f
--- /dev/null
+++ b/components/markdown-styles.ts
@@ -0,0 +1,18 @@
+// Typography for markdown-style body content (recipe tabs, About page).
+// Lives in components/ because Tailwind only scans components/ and app/ for class names,
+// and outside RecipeTabs because a 'use client' module can't share values with server components.
+export const MARKDOWN_BODY_CLASSES = `max-w-none text-base leading-relaxed
+ [&_h3]:text-lg [&_h3]:font-semibold [&_h3]:text-gray-900 dark:[&_h3]:text-white [&_h3]:mt-5 [&_h3]:mb-2
+ [&_p]:text-gray-700 dark:[&_p]:text-gray-300 [&_p]:my-2
+ [&_strong]:text-gray-900 dark:[&_strong]:text-white
+ [&_ol]:list-decimal [&_ol]:pl-6 [&_ol]:space-y-2 [&_ol]:my-4
+ [&_ul]:list-disc [&_ul]:pl-6 [&_ul]:space-y-2 [&_ul]:my-4
+ [&_li]:text-gray-700 dark:[&_li]:text-gray-300
+ [&_li]:marker:text-gray-500 dark:[&_li]:marker:text-gray-400
+ [&_code]:text-gray-900 dark:[&_code]:text-gray-100 [&_code]:bg-gray-100 dark:[&_code]:bg-gray-800 [&_code]:rounded [&_code]:px-1.5 [&_code]:py-0.5
+ [&_pre]:bg-gray-100 dark:[&_pre]:bg-gray-900
+ [&_table]:border-collapse
+ [&_th]:border [&_th]:border-gray-300 dark:[&_th]:border-gray-600
+ [&_td]:border [&_td]:border-gray-300 dark:[&_td]:border-gray-600
+ [&_figure]:my-6
+ [&_figcaption]:mt-2 [&_figcaption]:text-center [&_figcaption]:text-sm [&_figcaption]:italic [&_figcaption]:text-gray-600 dark:[&_figcaption]:text-gray-400`;