3 Commits

Author SHA1 Message Date
8e065fcc83 Merge version_2_1782000462802 into main
Merge version_2_1782000462802 into main
2026-06-21 00:10:18 +00:00
kudinDmitriyUp
67325fbe3c Bob AI: Replace contact section with custom Google Maps integration 2026-06-21 00:09:39 +00:00
7ed3f232c9 Merge version_1_1782000234536 into main
Merge version_1_1782000234536 into main
2026-06-21 00:05:57 +00:00
10 changed files with 403 additions and 156 deletions

View File

@@ -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 />
</>
);
}

View 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>
);
}

View 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>
);
}

View 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>
);
}

View 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>
);
}

View 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>
);
}

View 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>
);
}

View 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>
);
}

View 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>
);
}

View 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>
);
}