diff --git a/src/pages/Menu.tsx b/src/pages/Menu.tsx new file mode 100644 index 0000000..41e531a --- /dev/null +++ b/src/pages/Menu.tsx @@ -0,0 +1,167 @@ +import { Link } from "react-router-dom"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { Separator } from "@/components/ui/separator"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Card, CardContent } from "@/components/ui/card"; +import { Download, UtensilsCrossed, Wine, Star } from "lucide-react"; +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import { useSaas } from "@/hooks/use-tygarun"; + +const menuItems = { + starters: [ + { name: "Burrata & Heirloom Tomato", desc: "Creamy burrata, vine-ripened tomatoes, basil oil, aged balsamic", price: "$18", badges: ["V"] }, + { name: "Seared Scallops", desc: "Pan-seared diver scallops, cauliflower purée, truffle vinaigrette", price: "$24", badges: ["GF"] }, + { name: "Duck Confit Terrine", desc: "Slow-cooked duck leg, pistachio, cornichon, sourdough toast", price: "$19", badges: [] }, + { name: "Wild Mushroom Risotto", desc: "Arborio rice, porcini, chanterelle, shaved parmesan, herb oil", price: "$16", badges: ["V", "GF"] }, + ], + mains: [ + { name: "Wagyu Beef Tenderloin", desc: "A5 wagyu, bone marrow butter, roasted root vegetables, red wine jus", price: "$62", badges: ["GF"] }, + { name: "Pan-Roasted Halibut", desc: "Wild halibut, saffron beurre blanc, fennel, olive tapenade", price: "$44", badges: [] }, + { name: "Rack of Lamb", desc: "Herb-crusted lamb, pommes dauphine, mint gremolata", price: "$52", badges: [] }, + { name: "Truffle Tagliatelle", desc: "Hand-rolled pasta, black truffle cream, pecorino, fresh herbs", price: "$36", badges: ["V"] }, + { name: "Roasted Duck Breast", desc: "Cherry-glazed duck, confit potatoes, wilted greens, port reduction", price: "$48", badges: ["GF"] }, + ], + desserts: [ + { name: "Valrhona Chocolate Fondant", desc: "Warm dark chocolate cake, vanilla bean ice cream, gold leaf", price: "$16", badges: ["V"] }, + { name: "Crème Brûlée", desc: "Tahitian vanilla custard, caramelized sugar, shortbread", price: "$14", badges: ["GF"] }, + { name: "Tarte Tatin", desc: "Caramelized apple, puff pastry, calvados cream", price: "$15", badges: [] }, + { name: "Lemon Posset", desc: "Set cream, fresh berries, lavender meringue", price: "$13", badges: ["V", "GF"] }, + ], + drinks: [ + { name: "Signature Old Fashioned", desc: "Woodford Reserve, demerara, Angostura, flamed orange peel", price: "$19", badges: [] }, + { name: "Garden Spritz", desc: "Elderflower, prosecco, cucumber, fresh mint, soda", price: "$16", badges: [] }, + { name: "Sommelier Wine Pairing", desc: "Five-course curated wine flight matched to your meal", price: "$65", badges: [] }, + { name: "Espresso Martini", desc: "Ketel One, fresh espresso, Kahlúa, vanilla", price: "$18", badges: [] }, + ], +}; + +const tastingCourses = [ + "Amuse-bouche · Seasonal selection", "Seared Scallops · Cauliflower, truffle", "Wagyu Beef · Root vegetables, red wine jus", "Artisan Cheese · Honeycomb, fig compote", "Chocolate Fondant · Vanilla ice cream" +]; + +const renderItems = (items: { name: string; desc: string; price: string; badges: string[] }[]) => + items.map((item, i) => ( +
+
+
+
+ {item.name} + {item.badges.map((b, j) => ( + {b} + ))} +
+

{item.desc}

+
+ {item.price} +
+
+ )); + +export default function MenuPage() { + // Menu catalog from tyga.run ecommerce (falls back to seed until store is live) + const { data: catalog } = useSaas("ecommerce", "/catalog"); + const byCat = (cat: keyof typeof menuItems) => { + const live = Array.isArray(catalog) + ? catalog + .filter((p: any) => String(p.category || "").toLowerCase() === cat) + .map((p: any) => ({ + name: p.name, + desc: p.description || "", + price: typeof p.priceCents === "number" ? "$" + (p.priceCents / 100).toFixed(0) : (p.price || ""), + badges: Array.isArray(p.badges) ? p.badges : [], + })) + : []; + return live.length ? live : menuItems[cat]; + }; + + return ( +
+
+ + {/* ── HERO ── */} +
+
+
+
+
+
+ +
+

Our Menu

+

Seasonal selections crafted daily by our executive chef

+
+
+ + {/* ── TABBED MENU ── */} +
+
+ + + Starters + Mains + Desserts + Drinks + + + {renderItems(byCat("starters"))} +
+

Wine pairing recommended with select starters

+ + + {renderItems(byCat("mains"))} +
+

Ask your sommelier for pairing suggestions

+ + + {renderItems(byCat("desserts"))} +
+ + {renderItems(byCat("drinks"))} + +
+ V Vegetarian + GF Gluten Free +
+
+
+ + + + {/* ── TASTING MENU ── */} +
+
+
+ +
+

Chef's Tasting Menu

+

A five-course journey through our most celebrated dishes

+ + + {tastingCourses.map((c, i) => ( +
{c}
+ ))} +
$135 per person
+

Wine pairing available for $85

+
+
+

+ Ask your sommelier for wine pairing recommendations +

+
+
+ + {/* ── DOWNLOAD ── */} +
+
+ +
+
+ +
+ ); +} \ No newline at end of file