Merge version_2_1782000462802 into main #2
@@ -1,168 +1,38 @@
|
||||
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
||||
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
|
||||
import TeamStackedCards from '@/components/sections/team/TeamStackedCards';
|
||||
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
// AUTO-GENERATED shell by per-section-migrate.
|
||||
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
|
||||
// files directly. Non-block content (wrappers, non-inlinable sections) is
|
||||
// preserved inline; extracted section blocks become <XSection/> refs.
|
||||
|
||||
export default function HomePage() {
|
||||
import React from 'react';
|
||||
import HeroSection from './HomePage/sections/Hero';
|
||||
import AboutSection from './HomePage/sections/About';
|
||||
import FeaturesSection from './HomePage/sections/Features';
|
||||
import MenuSection from './HomePage/sections/Menu';
|
||||
import TeamSection from './HomePage/sections/Team';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import LocationSection from './HomePage/sections/Location';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplitMediaGrid
|
||||
tag="Since 1995"
|
||||
title="A Symphony of Culinary Art"
|
||||
description="Experience the perfect balance of traditional flavors and modern innovation, curated by our expert chefs in an atmosphere of refined elegance."
|
||||
primaryButton={{
|
||||
text: "Reserve Now", href: "#contact"}}
|
||||
secondaryButton={{
|
||||
text: "View Menu", href: "#menu"}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/burning-candle-table_140725-8115.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/male-chef-kitchen-cooking-dish-frying-pan_23-2149646209.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTextSplit
|
||||
title="Our Passion"
|
||||
descriptions={[
|
||||
"Nestled in the heart of the city, Luxe Bistro brings a fresh perspective to fine dining, combining locally sourced ingredients with world-class techniques.", "Our philosophy is rooted in the belief that great food connects people, fostering moments of joy and celebration around every table."]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesDetailedSteps
|
||||
tag="Crafted"
|
||||
title="The Menu Journey"
|
||||
description="Discover our multi-course selections, designed to guide you through a narrative of taste."
|
||||
steps={[
|
||||
{
|
||||
tag: "01", title: "Starters", subtitle: "Curated beginnings", description: "Delicate appetizers that wake up your palate.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-delicious-cheesecake-with-strawberry-knife-plate-bowls-with-strawberries-dark-isolated-background_140725-136702.jpg"},
|
||||
{
|
||||
tag: "02", title: "Main Course", subtitle: "The signature experience", description: "Expertly prepared proteins and fresh seasonal vegetables.", imageSrc: "http://img.b2bpic.net/free-photo/vegetable-salad-with-caviar-shrimps_140725-6375.jpg"},
|
||||
{
|
||||
tag: "03", title: "Dessert", subtitle: "A sweet finale", description: "Artfully crafted sweets to complete your evening.", imageSrc: "http://img.b2bpic.net/free-photo/tasty-dessert-chocolate-cake-concept-delicious-dessert_185193-108429.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="menu" data-section="menu">
|
||||
<SectionErrorBoundary name="menu">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Signature Dishes"
|
||||
title="Explore Our Selection"
|
||||
description="Browse our curated list of house specials."
|
||||
items={[
|
||||
{
|
||||
title: "Truffle Pasta", description: "Handmade pasta, seasonal black truffles, aged parmesan.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/close-up-avocado-with-tomatoes_23-2148471863.jpg"},
|
||||
{
|
||||
title: "Grilled Wagyu", description: "A5 Wagyu beef, rosemary reduction, roasted root veg.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/creative-assortment-delicious-food_23-2148949024.jpg"},
|
||||
{
|
||||
title: "Sea Bass", description: "Wild-caught bass, lemon-butter foam, crispy skin.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/tart-with-profiteroles-top-with-whipped-cream_114579-85592.jpg"},
|
||||
{
|
||||
title: "Artisanal Cheese", description: "Selection of local farm cheeses, honey, walnuts.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/close-up-round-table-served-two-christms-dinner-silver-candle-decorated-with-natural-fir-branches-two-flutes-pairs-plates-with-decorative-handmade-christmas-trees_132075-11391.jpg"},
|
||||
{
|
||||
title: "Crème Brûlée", description: "Vanilla bean custard, caramelized sugar crisp.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/skilled-chef-working-stovetop-cooking-vegetables-oil-with-kitchen-tools_482257-121198.jpg"},
|
||||
{
|
||||
title: "House Wine", description: "Vintage label from the sommelier selection.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/salad-with-mozarella-tomato-slices-with-basilic-herbal-dressing_114579-3682.jpg"},
|
||||
{
|
||||
title: "Signature Cocktail", description: "Botanical infusion, unique craft mix.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/view-food-professional-kitchen_23-2149728021.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MenuSection />
|
||||
|
||||
<div id="team" data-section="team">
|
||||
<SectionErrorBoundary name="team">
|
||||
<TeamStackedCards
|
||||
tag="Meet the Chefs"
|
||||
title="Behind the Scenes"
|
||||
description="Our culinary team dedicated to perfection."
|
||||
members={[
|
||||
{
|
||||
name: "Elena Rossi", role: "Executive Chef", imageSrc: "http://img.b2bpic.net/free-photo/young-male-shirt-apron-holding-hands-waist-looking-focused-front-view_176474-22583.jpg"},
|
||||
{
|
||||
name: "Marcus Thorne", role: "Sous Chef", imageSrc: "http://img.b2bpic.net/free-photo/standing-male-restaurant-hotel-equipment_1134-1294.jpg"},
|
||||
{
|
||||
name: "Sarah Miller", role: "General Manager", imageSrc: "http://img.b2bpic.net/free-photo/portrait-restaurant-waiter-wearing-professional-uniform-apron_482257-95100.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TeamSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialRatingCards
|
||||
tag="Kind Words"
|
||||
title="Our Guests Agree"
|
||||
description="Read what our frequent diners have to say about their experience."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.", role: "Local Critic", quote: "The best dining experience in the city. Incredible detail.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-cheering-with-wine-glasses-luxurious-restaurant_23-2150517422.jpg"},
|
||||
{
|
||||
name: "David W.", role: "Food Blogger", quote: "Truly unique flavors that you won't find anywhere else.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-woman-holding-coffee-cup_23-2149708124.jpg"},
|
||||
{
|
||||
name: "Emily C.", role: "Regular Guest", quote: "The atmosphere is unmatched. Highly recommend for dates.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-handsome-man-white-shirt-open-having-breakfast-cafe-with-vegetarian-burger-drinking-coffee-lifestyle-tropical-island-life-bali_1321-3941.jpg"},
|
||||
{
|
||||
name: "Michael L.", role: "Business Executive", quote: "Professional service and exceptional cuisine. Perfect for lunch.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/successful-young-businessman-formal-outfit-using-tablet_181624-33464.jpg"},
|
||||
{
|
||||
name: "Rebecca P.", role: "Guest", quote: "A hidden gem! Cannot wait to return for more.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-meeting-family-reunion_23-2149153754.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSplitMedia
|
||||
tag="Common Queries"
|
||||
title="Frequently Asked"
|
||||
description="Everything you need to know before visiting us."
|
||||
items={[
|
||||
{
|
||||
question: "Do I need to make a reservation?", answer: "Reservations are highly recommended, especially for evening seating."},
|
||||
{
|
||||
question: "Is the menu seasonal?", answer: "Yes, we change our menu every quarter to ensure the freshest produce."},
|
||||
{
|
||||
question: "Are vegetarian options available?", answer: "Absolutely! We have a dedicated plant-based menu for every course."},
|
||||
{
|
||||
question: "Do you host private events?", answer: "We do. Please contact us for venue rental and event catering."},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/rustic-chandelier-made-bulbs-ropes-dining-table-vintage-kitchen_181624-9173.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
<LocationSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Reservations"
|
||||
text="Experience Luxe Bistro tonight."
|
||||
primaryButton={{
|
||||
text: "Reserve a Table", href: "#"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us", href: "#"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
20
src/pages/HomePage/sections/About.tsx
Normal file
20
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "about" section.
|
||||
|
||||
import React from 'react';
|
||||
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTextSplit
|
||||
title="Our Passion"
|
||||
descriptions={[
|
||||
"Nestled in the heart of the city, Luxe Bistro brings a fresh perspective to fine dining, combining locally sourced ingredients with world-class techniques.", "Our philosophy is rooted in the belief that great food connects people, fostering moments of joy and celebration around every table."]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
85
src/pages/HomePage/sections/Contact.tsx
Normal file
85
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,85 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
import Tag from "@/components/ui/Tag";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import Button from "@/components/ui/Button";
|
||||
import { MapPin, Phone, Clock } from "lucide-react";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-webild-section="contact" className="py-24 bg-background">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<div className="w-content-width mx-auto">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<Tag text="Location & Hours" className="mb-6" />
|
||||
<TextAnimation
|
||||
text="Visit Luxe Bistro"
|
||||
variant="fade-blur"
|
||||
tag="h2"
|
||||
gradientText={false}
|
||||
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
|
||||
/>
|
||||
<p className="text-lg text-accent mb-8">
|
||||
Join us for an unforgettable dining experience. We are located in the heart of the city, offering a warm and elegant atmosphere.
|
||||
</p>
|
||||
|
||||
<div className="space-y-6 mb-8">
|
||||
<div className="flex items-start gap-4">
|
||||
<div className="p-3 rounded-full card text-foreground">
|
||||
<MapPin className="w-6 h-6" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-xl font-semibold text-foreground mb-1">Address</h3>
|
||||
<p className="text-accent">123 Culinary Avenue<br/>Gourmet District, NY 10001</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-start gap-4">
|
||||
<div className="p-3 rounded-full card text-foreground">
|
||||
<Clock className="w-6 h-6" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-xl font-semibold text-foreground mb-1">Hours</h3>
|
||||
<p className="text-accent">Mon-Thu: 5:00 PM - 10:00 PM<br/>Fri-Sun: 4:00 PM - 11:00 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-start gap-4">
|
||||
<div className="p-3 rounded-full card text-foreground">
|
||||
<Phone className="w-6 h-6" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-xl font-semibold text-foreground mb-1">Contact</h3>
|
||||
<p className="text-accent">+1 (555) 123-4567<br/>reservations@luxebistro.com</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-wrap gap-4">
|
||||
<Button text="Reserve a Table" variant="primary" href="#" />
|
||||
<Button text="Get Directions" variant="secondary" href="#" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="h-[500px] rounded-lg overflow-hidden card">
|
||||
<iframe
|
||||
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3022.1422937950147!2d-73.98731968459391!3d40.75889497932681!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x89c25855c6480299%3A0x55194ec5a1ae072e!2sTimes+Square!5e0!3m2!1sen!2sus!4v1560412120874!5m2!1sen!2sus"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style={{ border: 0 }}
|
||||
allowFullScreen={true}
|
||||
loading="lazy"
|
||||
referrerPolicy="no-referrer-when-downgrade"
|
||||
title="Restaurant Location"
|
||||
></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
31
src/pages/HomePage/sections/Faq.tsx
Normal file
31
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,31 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "faq" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSplitMedia
|
||||
tag="Common Queries"
|
||||
title="Frequently Asked"
|
||||
description="Everything you need to know before visiting us."
|
||||
items={[
|
||||
{
|
||||
question: "Do I need to make a reservation?", answer: "Reservations are highly recommended, especially for evening seating."},
|
||||
{
|
||||
question: "Is the menu seasonal?", answer: "Yes, we change our menu every quarter to ensure the freshest produce."},
|
||||
{
|
||||
question: "Are vegetarian options available?", answer: "Absolutely! We have a dedicated plant-based menu for every course."},
|
||||
{
|
||||
question: "Do you host private events?", answer: "We do. Please contact us for venue rental and event catering."},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/rustic-chandelier-made-bulbs-ropes-dining-table-vintage-kitchen_181624-9173.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
src/pages/HomePage/sections/Features.tsx
Normal file
28
src/pages/HomePage/sections/Features.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "features" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesDetailedSteps
|
||||
tag="Crafted"
|
||||
title="The Menu Journey"
|
||||
description="Discover our multi-course selections, designed to guide you through a narrative of taste."
|
||||
steps={[
|
||||
{
|
||||
tag: "01", title: "Starters", subtitle: "Curated beginnings", description: "Delicate appetizers that wake up your palate.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-delicious-cheesecake-with-strawberry-knife-plate-bowls-with-strawberries-dark-isolated-background_140725-136702.jpg"},
|
||||
{
|
||||
tag: "02", title: "Main Course", subtitle: "The signature experience", description: "Expertly prepared proteins and fresh seasonal vegetables.", imageSrc: "http://img.b2bpic.net/free-photo/vegetable-salad-with-caviar-shrimps_140725-6375.jpg"},
|
||||
{
|
||||
tag: "03", title: "Dessert", subtitle: "A sweet finale", description: "Artfully crafted sweets to complete your evening.", imageSrc: "http://img.b2bpic.net/free-photo/tasty-dessert-chocolate-cake-concept-delicious-dessert_185193-108429.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
30
src/pages/HomePage/sections/Hero.tsx
Normal file
30
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "hero" section.
|
||||
|
||||
import React from 'react';
|
||||
import HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplitMediaGrid
|
||||
tag="Since 1995"
|
||||
title="A Symphony of Culinary Art"
|
||||
description="Experience the perfect balance of traditional flavors and modern innovation, curated by our expert chefs in an atmosphere of refined elegance."
|
||||
primaryButton={{
|
||||
text: "Reserve Now", href: "#contact"}}
|
||||
secondaryButton={{
|
||||
text: "View Menu", href: "#menu"}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/burning-candle-table_140725-8115.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/male-chef-kitchen-cooking-dish-frying-pan_23-2149646209.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
82
src/pages/HomePage/sections/Location.tsx
Normal file
82
src/pages/HomePage/sections/Location.tsx
Normal file
@@ -0,0 +1,82 @@
|
||||
import React from 'react';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
import Tag from "@/components/ui/Tag";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import Button from "@/components/ui/Button";
|
||||
import { MapPin, Phone, Clock } from "lucide-react";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="location" data-webild-section="location" className="py-24 bg-background">
|
||||
<SectionErrorBoundary name="location">
|
||||
<div className="w-content-width mx-auto">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<Tag text="Location & Hours" className="mb-6" />
|
||||
<TextAnimation
|
||||
text="Visit Luxe Bistro"
|
||||
variant="fade-blur"
|
||||
tag="h2"
|
||||
gradientText={false}
|
||||
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
|
||||
/>
|
||||
<p className="text-lg text-accent mb-8">
|
||||
Join us for an unforgettable dining experience. We are located in the heart of the city, offering a warm and elegant atmosphere.
|
||||
</p>
|
||||
|
||||
<div className="space-y-6 mb-8">
|
||||
<div className="flex items-start gap-4">
|
||||
<div className="p-3 rounded-full card text-foreground">
|
||||
<MapPin className="w-6 h-6" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-xl font-semibold text-foreground mb-1">Address</h3>
|
||||
<p className="text-accent">123 Culinary Avenue<br/>Gourmet District, NY 10001</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-start gap-4">
|
||||
<div className="p-3 rounded-full card text-foreground">
|
||||
<Clock className="w-6 h-6" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-xl font-semibold text-foreground mb-1">Hours</h3>
|
||||
<p className="text-accent">Mon-Thu: 5:00 PM - 10:00 PM<br/>Fri-Sun: 4:00 PM - 11:00 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-start gap-4">
|
||||
<div className="p-3 rounded-full card text-foreground">
|
||||
<Phone className="w-6 h-6" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-xl font-semibold text-foreground mb-1">Contact</h3>
|
||||
<p className="text-accent">+1 (555) 123-4567<br/>reservations@luxebistro.com</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-wrap gap-4">
|
||||
<Button text="Reserve a Table" variant="primary" href="#" />
|
||||
<Button text="Get Directions" variant="secondary" href="#" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="h-[500px] rounded-lg overflow-hidden card">
|
||||
<iframe
|
||||
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3022.1422937950147!2d-73.98731968459391!3d40.75889497932681!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x89c25855c6480299%3A0x55194ec5a1ae072e!2sTimes+Square!5e0!3m2!1sen!2sus!4v1560412120874!5m2!1sen!2sus"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style={{ border: 0 }}
|
||||
allowFullScreen={true}
|
||||
loading="lazy"
|
||||
referrerPolicy="no-referrer-when-downgrade"
|
||||
title="Restaurant Location"
|
||||
></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
36
src/pages/HomePage/sections/Menu.tsx
Normal file
36
src/pages/HomePage/sections/Menu.tsx
Normal file
@@ -0,0 +1,36 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "menu" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MenuSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="menu" data-section="menu">
|
||||
<SectionErrorBoundary name="menu">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Signature Dishes"
|
||||
title="Explore Our Selection"
|
||||
description="Browse our curated list of house specials."
|
||||
items={[
|
||||
{
|
||||
title: "Truffle Pasta", description: "Handmade pasta, seasonal black truffles, aged parmesan.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/close-up-avocado-with-tomatoes_23-2148471863.jpg"},
|
||||
{
|
||||
title: "Grilled Wagyu", description: "A5 Wagyu beef, rosemary reduction, roasted root veg.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/creative-assortment-delicious-food_23-2148949024.jpg"},
|
||||
{
|
||||
title: "Sea Bass", description: "Wild-caught bass, lemon-butter foam, crispy skin.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/tart-with-profiteroles-top-with-whipped-cream_114579-85592.jpg"},
|
||||
{
|
||||
title: "Artisanal Cheese", description: "Selection of local farm cheeses, honey, walnuts.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/close-up-round-table-served-two-christms-dinner-silver-candle-decorated-with-natural-fir-branches-two-flutes-pairs-plates-with-decorative-handmade-christmas-trees_132075-11391.jpg"},
|
||||
{
|
||||
title: "Crème Brûlée", description: "Vanilla bean custard, caramelized sugar crisp.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/skilled-chef-working-stovetop-cooking-vegetables-oil-with-kitchen-tools_482257-121198.jpg"},
|
||||
{
|
||||
title: "House Wine", description: "Vintage label from the sommelier selection.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/salad-with-mozarella-tomato-slices-with-basilic-herbal-dressing_114579-3682.jpg"},
|
||||
{
|
||||
title: "Signature Cocktail", description: "Botanical infusion, unique craft mix.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/view-food-professional-kitchen_23-2149728021.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
src/pages/HomePage/sections/Team.tsx
Normal file
28
src/pages/HomePage/sections/Team.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "team" section.
|
||||
|
||||
import React from 'react';
|
||||
import TeamStackedCards from '@/components/sections/team/TeamStackedCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TeamSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="team" data-section="team">
|
||||
<SectionErrorBoundary name="team">
|
||||
<TeamStackedCards
|
||||
tag="Meet the Chefs"
|
||||
title="Behind the Scenes"
|
||||
description="Our culinary team dedicated to perfection."
|
||||
members={[
|
||||
{
|
||||
name: "Elena Rossi", role: "Executive Chef", imageSrc: "http://img.b2bpic.net/free-photo/young-male-shirt-apron-holding-hands-waist-looking-focused-front-view_176474-22583.jpg"},
|
||||
{
|
||||
name: "Marcus Thorne", role: "Sous Chef", imageSrc: "http://img.b2bpic.net/free-photo/standing-male-restaurant-hotel-equipment_1134-1294.jpg"},
|
||||
{
|
||||
name: "Sarah Miller", role: "General Manager", imageSrc: "http://img.b2bpic.net/free-photo/portrait-restaurant-waiter-wearing-professional-uniform-apron_482257-95100.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
37
src/pages/HomePage/sections/Testimonials.tsx
Normal file
37
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,37 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "testimonials" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialRatingCards
|
||||
tag="Kind Words"
|
||||
title="Our Guests Agree"
|
||||
description="Read what our frequent diners have to say about their experience."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.", role: "Local Critic", quote: "The best dining experience in the city. Incredible detail.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-cheering-with-wine-glasses-luxurious-restaurant_23-2150517422.jpg"},
|
||||
{
|
||||
name: "David W.", role: "Food Blogger", quote: "Truly unique flavors that you won't find anywhere else.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-woman-holding-coffee-cup_23-2149708124.jpg"},
|
||||
{
|
||||
name: "Emily C.", role: "Regular Guest", quote: "The atmosphere is unmatched. Highly recommend for dates.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-handsome-man-white-shirt-open-having-breakfast-cafe-with-vegetarian-burger-drinking-coffee-lifestyle-tropical-island-life-bali_1321-3941.jpg"},
|
||||
{
|
||||
name: "Michael L.", role: "Business Executive", quote: "Professional service and exceptional cuisine. Perfect for lunch.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/successful-young-businessman-formal-outfit-using-tablet_181624-33464.jpg"},
|
||||
{
|
||||
name: "Rebecca P.", role: "Guest", quote: "A hidden gem! Cannot wait to return for more.", rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-meeting-family-reunion_23-2149153754.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user