diff --git a/app/about/page.tsx b/app/about/page.tsx index f8c834f..13a1980 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -1,8 +1,8 @@ import type { Metadata } from 'next'; export const metadata: Metadata = { - title: 'About - Cooking', - description: 'Learn more about our recipe collection', + title: 'About - PWS Recipes', + description: 'Learn more about the PWS recipe collection', }; export default function AboutPage() { @@ -10,22 +10,20 @@ export default function AboutPage() {

- About + About PWS Recipes

- Welcome to our content-first recipe site + Explore recipes in a user-friendly manner on a website that prioritizes your cooking experience over monetizing your clicks.

- Our Mission + The PWS Mission

- We believe cooking should be accessible, enjoyable, and creative. Our goal is to provide - high-quality recipes with clear instructions and beautiful photography to inspire home cooks - everywhere. + 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.

@@ -48,8 +46,7 @@ export default function AboutPage() { Technology

- Built with modern web technologies including Next.js, React, TypeScript, and Tailwind CSS - to ensure fast performance and excellent SEO. + Built with modern web technologies including Next.js, React, TypeScript, and Tailwind CSS to ensure fast performance.

diff --git a/app/globals.css b/app/globals.css index 410f84e..0fef7bf 100644 --- a/app/globals.css +++ b/app/globals.css @@ -9,7 +9,7 @@ @media (prefers-color-scheme: dark) { :root { - --background: #0a0a0a; + --background: #111827; --foreground: #ededed; } } diff --git a/app/layout.tsx b/app/layout.tsx index f459188..2e3dbc8 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -4,16 +4,16 @@ import Header from "@/components/Header"; import Footer from "@/components/Footer"; export const metadata: Metadata = { - title: "Cooking - Recipe Collection", - description: "A content-first recipe site with delicious recipes and cooking tips", + title: "PWS Recipes", + description: "A content-first recipe site with delicious recipes and cooking tips.", keywords: ["recipes", "cooking", "food", "kitchen"], authors: [{ name: "Cooking" }], openGraph: { type: "website", locale: "en_US", - url: "https://cooking.example.com", - siteName: "Cooking", - title: "Cooking - Recipe Collection", + url: "https://recipes.whitney.rip", + siteName: "PWS Recipes", + title: "PWS Recipes", description: "A content-first recipe site with delicious recipes and cooking tips", }, }; @@ -25,7 +25,7 @@ export default function RootLayout({ }>) { return ( - +
{children} diff --git a/app/page.tsx b/app/page.tsx index 2a619ec..5557069 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,28 +1,27 @@ import Image from 'next/image'; import Link from 'next/link'; +import QuoteOfTheDay from '@/components/QuoteOfTheDay'; export default function Home() { return (

- Welcome to Cooking + PWS Recipes

-

- Discover delicious recipes, cooking tips, and culinary inspiration for every occasion. -

+
- Browse Recipes + Cook Something! - Learn More + Why PWS Recipes?
@@ -32,16 +31,16 @@ export default function Home() {
Person deciding what to cook
-
-

Easy Recipes

+
+

You Want to Cook

- Step-by-step instructions for home cooks of all skill levels. Whether you're a beginner or an experienced cook, every recipe is written with clarity in mind. + Cooking is fun, theraputic, and you need to eat stuff to survive. I've collected and tweaked recipes over the years, but over time the bookmark folder has gotten big and recipe sites have gotten worse...

Online cookbook illustration
-
-

Beautiful Photos

+
+

But Recipe Sites Suck!

- High-quality images accompany every recipe to inspire your cooking journey. See exactly what you're making before you start. + Monetized recipe sites don't bother me, but I do mind when sites have overly aggressive ad integrations that block or move around the main content. Many modern sites share the same user-unfriendly plugins.

@@ -73,17 +72,17 @@ export default function Home() {
Organized recipe collection
-
-

No Nonsense

+
+

Welcome to my Self-Hosted Cookbook!

- Just recipes. Find what you need quickly by browsing categories, filtering by tags, or searching by ingredient. + Rather than make a physical cookbook, I have built this website to collect my recipes. This content-first website framework renders each page from a MDX markdown file, offering a friendly approach to frontend design for us backend engineers.

diff --git a/components/Header.tsx b/components/Header.tsx index 0c83f94..4e1b875 100644 --- a/components/Header.tsx +++ b/components/Header.tsx @@ -9,7 +9,7 @@ export default function Header() { href="/" className="text-2xl font-bold text-gray-900 dark:text-white hover:text-gray-700 dark:hover:text-gray-300 transition-colors" > - Cooking + PWS Recipes
diff --git a/components/QuoteOfTheDay.tsx b/components/QuoteOfTheDay.tsx new file mode 100644 index 0000000..8c46e02 --- /dev/null +++ b/components/QuoteOfTheDay.tsx @@ -0,0 +1,62 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import quotes from '@/public/quotes.json'; + +interface Quote { + text: string; + author?: string; + link?: string; +} + +function getDayOfYear(): number { + const now = new Date(); + const start = new Date(now.getFullYear(), 0, 0); + const diff = now.getTime() - start.getTime(); + return Math.floor(diff / (1000 * 60 * 60 * 24)); +} + +export default function QuoteOfTheDay() { + const [quote, setQuote] = useState(null); + + useEffect(() => { + const index = getDayOfYear() % quotes.length; + setQuote(quotes[index] as Quote); + }, []); + + if (!quote) { + return

 

; + } + + const content = quote.author ? ( + <> + “{quote.text}” + — {quote.author} + + ) : ( + {quote.text} + ); + + const href = quote.link && !/^https?:\/\//.test(quote.link) + ? `https://${quote.link}` + : quote.link; + + const wrapper = href ? ( + + {content} + + ) : ( + content + ); + + return ( +

+ {wrapper} +

+ ); +} diff --git a/components/RecipeLayout.tsx b/components/RecipeLayout.tsx index 33f2f44..5e83eae 100644 --- a/components/RecipeLayout.tsx +++ b/components/RecipeLayout.tsx @@ -34,66 +34,76 @@ export default function RecipeLayout({ {/* Mobile Overlay */} {sidebarOpen && (
setSidebarOpen(false)} aria-hidden="true" /> )} - {/* Mobile menu button - only visible on mobile */} -
+ {/* Mobile filter button */} +
- {/* Sidebar - Always visible on desktop (lg+), slide-out on mobile */} + {/* Sidebar - Always visible on desktop (lg+), slide-out drawer on mobile */} {/* Main content */} -
+
{children} -
+
); diff --git a/components/RecipePageClient.tsx b/components/RecipePageClient.tsx index d47f26c..9954985 100644 --- a/components/RecipePageClient.tsx +++ b/components/RecipePageClient.tsx @@ -12,7 +12,7 @@ interface RecipePageClientProps { export default function RecipePageClient({ recipe, sections }: RecipePageClientProps) { return ( -
+
{/* Back navigation */}