2 Commits

Author SHA1 Message Date
cf9520bf58 Merge version_2_1781624814065 into main
Merge version_2_1781624814065 into main
2026-06-16 15:49:43 +00:00
kudinDmitriyUp
5117e90316 Bob AI: Update images across sections to luxury restaurant photograp 2026-06-16 15:48:59 +00:00
8 changed files with 212 additions and 216 deletions

View File

@@ -1,227 +1,33 @@
import AboutText from '@/components/sections/about/AboutText';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import HeroSplitVerticalMarquee from '@/components/sections/hero/HeroSplitVerticalMarquee';
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
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 MenuSection from './HomePage/sections/Menu';
import MetricsSection from './HomePage/sections/Metrics';
import TestimonialsSection from './HomePage/sections/Testimonials';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroSplitVerticalMarquee
tag="Since 1995"
title="A Culinary Journey"
description="Experience fine dining at its best with our seasonal ingredients and refined service."
primaryButton={{
text: "Book a Table",
href: "#contact",
}}
secondaryButton={{
text: "Explore Menu",
href: "#menu",
}}
leftItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/restaurant-hall-with-round-square-tables-some-chairs-plants_140725-8030.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/fried-chicken-isolated-white_628469-378.jpg",
},
]}
rightItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/top-view-fresh-cabbage-salad-inside-plate-dark-background_140725-136872.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/wedding-table-number-decoration_23-2149433859.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutText
title="Crafted with passion, served with elegance."
primaryButton={{
text: "Our Story",
href: "#about",
}}
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesImageBento
tag="Our Menu"
title="Signature Creations"
description="Hand-picked favorites prepared daily by our chefs."
items={[
{
title: "Appetizers",
description: "Delicate starters",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-cooked-squashes-designed-meal-inside-plate-grey-space_140725-83769.jpg",
},
{
title: "Fresh Salads",
description: "Farm-fresh ingredients",
imageSrc: "http://img.b2bpic.net/free-photo/vegetable-salad-bowl-wooden-table_23-2148080140.jpg",
},
{
title: "Steak",
description: "Perfectly grilled cuts",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-vegetable-meal-with-cutlery-table-food-meal-restaurant-dinner_140725-28355.jpg",
},
{
title: "Seafood",
description: "Fresh daily catch",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-grilled-prawns-garnished-with-pickles-flowers_140725-1464.jpg",
},
{
title: "Pasta",
description: "Authentic artisan pasta",
imageSrc: "http://img.b2bpic.net/free-photo/selective-focus-shot-delicious-unique-dish-beautifully-designed-served_181624-19185.jpg",
},
{
title: "Desserts",
description: "Sweet indulgence",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-from-afar-tasty-dessert-plate-pieces-cake-with-strawberries-chocolate-bowls-sweets-strawberries-cup-tea-with-lemon_140725-112021.jpg",
},
{
title: "Wine",
description: "Exclusive vintage selection",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-romantic-dinner-table_23-2148060311.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MenuSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsMediaCards
tag="Our Success"
title="Numbers behind the taste"
description="Consistency is the foundation of our long-standing reputation."
metrics={[
{
value: "25+",
title: "Years in business",
description: "Decades of culinary excellence",
imageSrc: "http://img.b2bpic.net/free-photo/new-normal-time-coronavirus_637285-7876.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialRatingCards
tag="Guest Stories"
title="Heartfelt feedback"
description="Hear what our patrons say about their experience."
testimonials={[
{
name: "Alice M.",
role: "Food Blogger",
quote: "The best dining experience I've had in years.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/pov-businessman-attending-videocall-meeting-office-using-online-videoconference-talk-consultant-about-financial-strategy-company-employee-chatting-remote-teleconference-close-up_482257-40929.jpg",
},
{
name: "John D.",
role: "Chef",
quote: "Technique and flavors are absolutely spot on.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/cheerful-asian-female-entrepreneur-sitting-table-cafe_1262-17235.jpg",
},
{
name: "Sarah P.",
role: "Regular",
quote: "A true hidden gem in the heart of the city.",
rating: 4,
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-smiley-people-bistro_23-2149366429.jpg",
},
{
name: "Michael L.",
role: "Local",
quote: "Impeccable service and amazing pasta.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/close-up-young-handsome-modern-man-wearing-glasses-denim-jacket-yellow-background-with-happy-face-standing-smiling-with-confident-smile-showing-teeth_839833-30354.jpg",
},
{
name: "Jessica R.",
role: "Visitor",
quote: "I love the warm atmosphere and unique menu.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/pleased-female-entrepreneur-trendy-sunglasses-denim-jacke_197531-31011.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTabbedAccordion
tag="Common Questions"
title="Helpful Info"
description="Everything you need to know about your visit."
categories={[
{
name: "Reservations",
items: [
{
question: "Do I need a reservation?",
answer: "Highly recommended on weekends.",
},
{
question: "What's the cancellation policy?",
answer: "24-hour notice requested.",
},
],
},
{
name: "Dietary",
items: [
{
question: "Do you offer gluten-free?",
answer: "Yes, we have many gluten-free options.",
},
{
question: "Can I bring kids?",
answer: "Absolutely, families are welcome.",
},
],
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Ready to visit?"
text="Reserve your table today and taste our seasonal signature dishes."
primaryButton={{
text: "Book Now",
href: "#",
}}
secondaryButton={{
text: "Contact Us",
href: "mailto:hello@bistro.com",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,22 @@
// 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 AboutText from '@/components/sections/about/AboutText';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutText
title="Crafted with passion, served with elegance."
primaryButton={{
text: "Our Story",
href: "#about",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,27 @@
// 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 ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactSection(): React.JSX.Element {
return (
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Ready to visit?"
text="Reserve your table today and taste our seasonal signature dishes."
primaryButton={{
text: "Book Now",
href: "#",
}}
secondaryButton={{
text: "Contact Us",
href: "mailto:hello@bistro.com",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,48 @@
// 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 FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTabbedAccordion
tag="Common Questions"
title="Helpful Info"
description="Everything you need to know about your visit."
categories={[
{
name: "Reservations",
items: [
{
question: "Do I need a reservation?",
answer: "Highly recommended on weekends.",
},
{
question: "What's the cancellation policy?",
answer: "24-hour notice requested.",
},
],
},
{
name: "Dietary",
items: [
{
question: "Do you offer gluten-free?",
answer: "Yes, we have many gluten-free options.",
},
{
question: "Can I bring kids?",
answer: "Absolutely, families are welcome.",
},
],
},
]}
/>
</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 HeroSplitVerticalMarquee from '@/components/sections/hero/HeroSplitVerticalMarquee';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroSplitVerticalMarquee
tag="Since 1995"
title="A Culinary Journey"
description="Experience fine dining at its best with our seasonal ingredients and refined service."
primaryButton={{
text: "Book a Table",
href: "#contact",
}}
secondaryButton={{
text: "Explore Menu",
href: "#menu",
}}
leftItems={[{"imageSrc":"https://images.unsplash.com/photo-1514933651103-005eec06c04b?q=80&w=2874&auto=format&fit=crop"},{"imageSrc":"https://images.unsplash.com/photo-1550966871-3ed3cdb5ed0c?q=80&w=2940&auto=format&fit=crop"}]}
rightItems={[{"imageSrc":"https://images.unsplash.com/photo-1544148103-0773bf10d330?q=80&w=2940&auto=format&fit=crop"},{"imageSrc":"https://images.unsplash.com/photo-1559339352-11d035aa65de?q=80&w=2874&auto=format&fit=crop"}]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,21 @@
// 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 FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MenuSection(): React.JSX.Element {
return (
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesImageBento
tag="Our Menu"
title="Signature Creations"
description="Hand-picked favorites prepared daily by our chefs."
items={[{"title":"Appetizers","description":"Delicate starters","imageSrc":"https://images.unsplash.com/photo-1546069901-ba9599a7e63c?q=80&w=2680&auto=format&fit=crop"},{"imageSrc":"https://images.unsplash.com/photo-1512621776951-a57141f2eefd?q=80&w=2940&auto=format&fit=crop","description":"Farm-fresh ingredients","title":"Fresh Salads"},{"description":"Perfectly grilled cuts","title":"Steak","imageSrc":"https://images.unsplash.com/photo-1544025162-d76694265947?q=80&w=2938&auto=format&fit=crop"},{"description":"Fresh daily catch","title":"Seafood","imageSrc":"https://images.unsplash.com/photo-1559742811-822873691df8?q=80&w=2787&auto=format&fit=crop"},{"title":"Pasta","description":"Authentic artisan pasta","imageSrc":"https://images.unsplash.com/photo-1473093295043-cdd812d0e601?q=80&w=2940&auto=format&fit=crop"},{"title":"Desserts","description":"Sweet indulgence","imageSrc":"https://images.unsplash.com/photo-1551024601-bec78aea704b?q=80&w=2864&auto=format&fit=crop"},{"description":"Exclusive vintage selection","title":"Wine","imageSrc":"https://images.unsplash.com/photo-1510812431401-41d2bd2722f3?q=80&w=2940&auto=format&fit=crop"}]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,21 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "metrics" section.
import React from 'react';
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsMediaCards
tag="Our Success"
title="Numbers behind the taste"
description="Consistency is the foundation of our long-standing reputation."
metrics={[{"imageSrc":"https://images.unsplash.com/photo-1550966871-3ed3cdb5ed0c?q=80&w=2940&auto=format&fit=crop","description":"Decades of culinary excellence","value":"25+","title":"Years in business"}]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,21 @@
// 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="Guest Stories"
title="Heartfelt feedback"
description="Hear what our patrons say about their experience."
testimonials={[{"imageSrc":"https://images.unsplash.com/photo-1534528741775-53994a69daeb?q=80&w=2864&auto=format&fit=crop","quote":"The best dining experience I've had in years.","rating":5,"name":"Alice M.","role":"Food Blogger"},{"quote":"Technique and flavors are absolutely spot on.","imageSrc":"https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?q=80&w=2787&auto=format&fit=crop","rating":5,"name":"John D.","role":"Chef"},{"role":"Regular","quote":"A true hidden gem in the heart of the city.","imageSrc":"https://images.unsplash.com/photo-1494790108377-be9c29b29330?q=80&w=2787&auto=format&fit=crop","name":"Sarah P.","rating":4},{"rating":5,"name":"Michael L.","imageSrc":"https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?q=80&w=2787&auto=format&fit=crop","quote":"Impeccable service and amazing pasta.","role":"Local"},{"role":"Visitor","quote":"I love the warm atmosphere and unique menu.","imageSrc":"https://images.unsplash.com/photo-1531746020798-e6953c6e8e04?q=80&w=2864&auto=format&fit=crop","rating":5,"name":"Jessica R."}]}
/>
</SectionErrorBoundary>
</div>
);
}