Bob AI: <ATTACHED_BLOCKS>

The user attached the section/component ca
This commit is contained in:
kudinDmitriyUp
2026-06-14 10:07:51 +00:00
parent 93c74b59d1
commit 96cf4a96e7
8 changed files with 191 additions and 115 deletions

View File

@@ -1,126 +1,33 @@
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
import HeroSplitVerticalMarquee from '@/components/sections/hero/HeroSplitVerticalMarquee';
import TeamListCards from '@/components/sections/team/TeamListCards';
import TestimonialMarqueeCards from '@/components/sections/testimonial/TestimonialMarqueeCards';
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 ServicesSection from './HomePage/sections/Services';
import TeamSection from './HomePage/sections/Team';
import ReviewsSection from './HomePage/sections/Reviews';
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 2024"
title="Cristaux Barber-Shop: Your Style, Our Expertise."
description="Experience professional grooming in the heart of Montendre. From classic cuts to precision beard trims, we define gentlemanly style."
primaryButton={{ text: "Book an Appointment", href: "tel:0780149717" }}
secondaryButton={{ text: "View Location", href: "https://maps.google.com" }}
leftItems={[
{ imageSrc: "http://img.b2bpic.net/free-photo/photo-metal-texture-pattern_58702-13629.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-composition-shaving-objects_23-2148121964.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/comfortable-old-fashioned-chair-rustic-antique-elegance-indoors-generated-by-ai_188544-29043.jpg" }
]}
rightItems={[
{ imageSrc: "http://img.b2bpic.net/free-photo/barber-equipment-working-surface-by-mirror-barbershop_627829-8282.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/luxury-armchairs-barber-shop_140725-7720.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/background-from-old-boards-with-bright-patterns-wall-old-barn-bright-sun-weathered-sunbleached-wooden-boards-with-remnants-old-blue-white-paint_166373-2101.jpg" }
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTextSplit
title="About Cristaux Barber-Shop"
descriptions={[
"Located at 4 Av. de Royan, we are committed to providing Montendre with the finest men's grooming services. Our shop combines tradition with modern precision for every client.", "Our team takes pride in cleanliness, friendliness, and high-quality results. Whether you need a simple cleanup or a full style overhaul, you are in safe hands here."
]}
primaryButton={{ text: "Call us now", href: "tel:0780149717" }}
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesMediaCarousel
tag="Services"
title="Professional Grooming Services"
description="Premium care for your hair and beard."
items={[
{ title: "Precision Haircut", description: "Classic and modern cuts.", buttonIcon: "Scissors", imageSrc: "http://img.b2bpic.net/free-photo/close-up-man-hairdresser-shop_23-2149220595.jpg" },
{ title: "Beard Trim", description: "Expert shaping and care.", buttonIcon: "Zap", imageSrc: "http://img.b2bpic.net/free-photo/from-hands-shaving-neck_23-2147778916.jpg" },
{ title: "Hot Towel Shave", description: "Luxury grooming experience.", buttonIcon: "Sparkles", imageSrc: "http://img.b2bpic.net/free-photo/overhead-view-foam-bowl-shaving-brush-razor-white-folded-napkin-against-wooden-textured-backdrop_23-2148088537.jpg" },
{ title: "Hair Styling", description: "Professional styling finishes.", buttonIcon: "Star", imageSrc: "http://img.b2bpic.net/free-photo/woman-holding-her-client-s-head-side-view_23-2148353446.jpg" },
{ title: "Scalp Treatment", description: "Refreshing scalp care.", buttonIcon: "Award", imageSrc: "http://img.b2bpic.net/free-photo/lovely-overjoyed-woman-domestic-wear-has-healthy-skin-clenches-fists-from-happiness_273609-37082.jpg" },
{ title: "Full Grooming", description: "Comprehensive care package.", buttonIcon: "CheckCircle", imageSrc: "http://img.b2bpic.net/free-photo/close-up-man-selfcare-products_23-2149313012.jpg" }
]}
/>
</SectionErrorBoundary>
</div>
<ServicesSection />
<div id="team" data-section="team">
<SectionErrorBoundary name="team">
<TeamListCards
tag="Our Team"
title="Meet the Barbers"
description="Skilled professionals dedicated to your perfect look."
groups={[
{
title: "The Team", members: [
{ name: "The Master Barber", role: "Senior Stylist", detail: "10+ years of expertise in classic grooming and modern fade techniques.", imageSrc: "http://img.b2bpic.net/free-photo/positive-bearded-black-male-with-tattoo-cross-arms-dressed-white-shirt_613910-15917.jpg" }
]
}
]}
/>
</SectionErrorBoundary>
</div>
<TeamSection />
<div id="reviews" data-section="reviews">
<SectionErrorBoundary name="reviews">
<TestimonialMarqueeCards
tag="Testimonials"
title="What our clients say"
description="Rated 4.5/5 stars by our valued community."
testimonials={[
{ name: "John Edgar", role: "Traveler", quote: "Best haircut I've had in months of traveling Europe. Listened to exactly what I wanted.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-young-man-isolated-white-background_23-2148056445.jpg" },
{ name: "Stephen Course", role: "Local Client", quote: "Excellent work, clean shop. Friendly bilingual staff made everything easy.", imageSrc: "http://img.b2bpic.net/free-photo/professional-girl-hairdresser-makes-client-haircut-girl-is-sitting-mask-beauty-salon_343596-4457.jpg" },
{ name: "Haithem", role: "Regular", quote: "Excellent 5/5, highly recommended.", imageSrc: "http://img.b2bpic.net/free-photo/side-view-makeup-artist-applying-powder-model_23-2147783866.jpg" },
{ name: "Client Four", role: "Local", quote: "Great atmosphere and consistent quality every visit.", imageSrc: "http://img.b2bpic.net/free-photo/close-up-portrait-blue-eyed-redhead-full-throttle-bearded-male-grey-background_613910-9289.jpg" },
{ name: "Client Five", role: "Regular", quote: "Super nice barber, always a pleasure to visit.", imageSrc: "http://img.b2bpic.net/free-photo/excited-young-male-barber-wearing-glasses-red-shirt-barber-apron-holding-barbering-tools-looking-camera-showing-thumb-up-isolated-blue-background_141793-138548.jpg" }
]}
/>
</SectionErrorBoundary>
</div>
<ReviewsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTwoColumn
tag="FAQ"
title="Common Questions"
description="Get the answers you need."
items={[
{ question: "Do I need an appointment?", answer: "We recommend booking ahead, especially for weekends. Please call 07 80 14 97 17." },
{ question: "Where are you located?", answer: "We are located at 4 Av. de Royan, 17130 Montendre." },
{ question: "Do you speak English?", answer: "Yes, we are happy to assist in English." }
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Visit Us"
text="Ready for your next cut? Book your spot today."
primaryButton={{ text: "Book Now", href: "tel:0780149717" }}
secondaryButton={{ text: "Directions", href: "https://maps.google.com/?q=4+Av.+de+Royan,17130+Montendre" }}
/>
</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 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="About Cristaux Barber-Shop"
descriptions={[
"Located at 4 Av. de Royan, we are committed to providing Montendre with the finest men's grooming services. Our shop combines tradition with modern precision for every client.", "Our team takes pride in cleanliness, friendliness, and high-quality results. Whether you need a simple cleanup or a full style overhaul, you are in safe hands here."
]}
primaryButton={{ text: "Call us now", href: "tel:0780149717" }}
/>
</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 "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="Visit Us"
text="Ready for your next cut? Book your spot today."
primaryButton={{ text: "Book Now", href: "tel:0780149717" }}
secondaryButton={{ text: "Directions", href: "https://maps.google.com/?q=4+Av.+de+Royan,17130+Montendre" }}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,25 @@
// 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 FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTwoColumn
tag="FAQ"
title="Common Questions"
description="Get the answers you need."
items={[
{ question: "Do I need an appointment?", answer: "We recommend booking ahead, especially for weekends. Please call 07 80 14 97 17." },
{ question: "Where are you located?", answer: "We are located at 4 Av. de Royan, 17130 Montendre." },
{ question: "Do you speak English?", answer: "Yes, we are happy to assist in English." }
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,19 @@
// Created by add_section_from_catalog (HeroBillboardCarousel).
import React from 'react';
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
export default function HeroSection(): React.JSX.Element {
return (
<div data-webild-section="hero" id="hero">
<HeroBillboardCarousel
title="Cristaux Barber-Shop: Your Style, Our Expertise."
items={[{"imageSrc":"http://img.b2bpic.net/free-photo/photo-metal-texture-pattern_58702-13629.jpg"},{"imageSrc":"http://img.b2bpic.net/free-photo/flat-lay-composition-shaving-objects_23-2148121964.jpg"},{"imageSrc":"http://img.b2bpic.net/free-photo/comfortable-old-fashioned-chair-rustic-antique-elegance-indoors-generated-by-ai_188544-29043.jpg"},{"imageSrc":"http://img.b2bpic.net/free-photo/barber-equipment-working-surface-by-mirror-barbershop_627829-8282.jpg"},{"imageSrc":"http://img.b2bpic.net/free-photo/luxury-armchairs-barber-shop_140725-7720.jpg"}]}
primaryButton={{"href":"tel:0780149717","text":"Book an Appointment"}}
secondaryButton={{"href":"https://maps.google.com","text":"View Location"}}
tag="Since 2024"
description="Experience professional grooming in the heart of Montendre. From classic cuts to precision beard trims, we define gentlemanly style."
/>
</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 "reviews" section.
import React from 'react';
import TestimonialMarqueeCards from '@/components/sections/testimonial/TestimonialMarqueeCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ReviewsSection(): React.JSX.Element {
return (
<div id="reviews" data-section="reviews">
<SectionErrorBoundary name="reviews">
<TestimonialMarqueeCards
tag="Testimonials"
title="What our clients say"
description="Rated 4.5/5 stars by our valued community."
testimonials={[
{ name: "John Edgar", role: "Traveler", quote: "Best haircut I've had in months of traveling Europe. Listened to exactly what I wanted.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-young-man-isolated-white-background_23-2148056445.jpg" },
{ name: "Stephen Course", role: "Local Client", quote: "Excellent work, clean shop. Friendly bilingual staff made everything easy.", imageSrc: "http://img.b2bpic.net/free-photo/professional-girl-hairdresser-makes-client-haircut-girl-is-sitting-mask-beauty-salon_343596-4457.jpg" },
{ name: "Haithem", role: "Regular", quote: "Excellent 5/5, highly recommended.", imageSrc: "http://img.b2bpic.net/free-photo/side-view-makeup-artist-applying-powder-model_23-2147783866.jpg" },
{ name: "Client Four", role: "Local", quote: "Great atmosphere and consistent quality every visit.", imageSrc: "http://img.b2bpic.net/free-photo/close-up-portrait-blue-eyed-redhead-full-throttle-bearded-male-grey-background_613910-9289.jpg" },
{ name: "Client Five", role: "Regular", quote: "Super nice barber, always a pleasure to visit.", imageSrc: "http://img.b2bpic.net/free-photo/excited-young-male-barber-wearing-glasses-red-shirt-barber-apron-holding-barbering-tools-looking-camera-showing-thumb-up-isolated-blue-background_141793-138548.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 "services" section.
import React from 'react';
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ServicesSection(): React.JSX.Element {
return (
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesMediaCarousel
tag="Services"
title="Professional Grooming Services"
description="Premium care for your hair and beard."
items={[
{ title: "Precision Haircut", description: "Classic and modern cuts.", buttonIcon: "Scissors", imageSrc: "http://img.b2bpic.net/free-photo/close-up-man-hairdresser-shop_23-2149220595.jpg" },
{ title: "Beard Trim", description: "Expert shaping and care.", buttonIcon: "Zap", imageSrc: "http://img.b2bpic.net/free-photo/from-hands-shaving-neck_23-2147778916.jpg" },
{ title: "Hot Towel Shave", description: "Luxury grooming experience.", buttonIcon: "Sparkles", imageSrc: "http://img.b2bpic.net/free-photo/overhead-view-foam-bowl-shaving-brush-razor-white-folded-napkin-against-wooden-textured-backdrop_23-2148088537.jpg" },
{ title: "Hair Styling", description: "Professional styling finishes.", buttonIcon: "Star", imageSrc: "http://img.b2bpic.net/free-photo/woman-holding-her-client-s-head-side-view_23-2148353446.jpg" },
{ title: "Scalp Treatment", description: "Refreshing scalp care.", buttonIcon: "Award", imageSrc: "http://img.b2bpic.net/free-photo/lovely-overjoyed-woman-domestic-wear-has-healthy-skin-clenches-fists-from-happiness_273609-37082.jpg" },
{ title: "Full Grooming", description: "Comprehensive care package.", buttonIcon: "CheckCircle", imageSrc: "http://img.b2bpic.net/free-photo/close-up-man-selfcare-products_23-2149313012.jpg" }
]}
/>
</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 "team" section.
import React from 'react';
import TeamListCards from '@/components/sections/team/TeamListCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TeamSection(): React.JSX.Element {
return (
<div id="team" data-section="team">
<SectionErrorBoundary name="team">
<TeamListCards
tag="Our Team"
title="Meet the Barbers"
description="Skilled professionals dedicated to your perfect look."
groups={[
{
title: "The Team", members: [
{ name: "The Master Barber", role: "Senior Stylist", detail: "10+ years of expertise in classic grooming and modern fade techniques.", imageSrc: "http://img.b2bpic.net/free-photo/positive-bearded-black-male-with-tattoo-cross-arms-dressed-white-shirt_613910-15917.jpg" }
]
}
]}
/>
</SectionErrorBoundary>
</div>
);
}