Compare commits

...

27 Commits

Author SHA1 Message Date
kudinDmitriyUp
e2dcc2d5e5 Bob AI: Add evocative and concise descriptions for each beer in the 2026-06-02 14:50:41 +00:00
ea750d0b01 Switch to version 12: modified src/pages/HomePage/sections/Beers.tsx 2026-06-02 14:44:43 +00:00
3618dd9836 Merge version_13_1780411189796 into main
Merge version_13_1780411189796 into main
2026-06-02 14:41:44 +00:00
kudinDmitriyUp
4c5eccd24d Bob AI (approx): Expand on each beer's description with captivating tasting n 2026-06-02 14:41:40 +00:00
65d86351c8 Merge version_12_1780411041624 into main
Merge version_12_1780411041624 into main
2026-06-02 14:39:06 +00:00
kudinDmitriyUp
96bd96da91 Bob AI: Added different colors to badges in the hero section 2026-06-02 14:39:00 +00:00
6d11724ec5 Merge version_11_1780410770038 into main
Merge version_11_1780410770038 into main
2026-06-02 14:34:20 +00:00
kudinDmitriyUp
caf3807d41 Bob AI (stub): make badges in hero sections each on in different color 2026-06-02 14:34:16 +00:00
bb88c37cd4 Merge version_10_1780410417085 into main
Merge version_10_1780410417085 into main
2026-06-02 14:28:16 +00:00
kudinDmitriyUp
61e1311d23 Bob AI (stub): make badges in hero sections each on in different color 2026-06-02 14:28:12 +00:00
kudinDmitriyUp
1e14fd6e43 Bob AI: Split src/pages/HomePage.tsx into per-section files (7 sections) 2026-06-02 14:27:11 +00:00
8077861d43 Merge version_9_1780407462050 into main
Merge version_9_1780407462050 into main
2026-06-02 13:40:56 +00:00
kudinDmitriyUp
39aa18800d Bob AI: Add a primary or secondary call-to-action button to the 'sto 2026-06-02 13:40:20 +00:00
9d57261117 Merge version_8_1780407270523 into main
Merge version_8_1780407270523 into main
2026-06-02 13:36:10 +00:00
kudinDmitriyUp
8f228cf4b2 Bob AI: Replace one of the duplicate 'Leaf' icons in the hero's valu 2026-06-02 13:35:34 +00:00
809a1cd0c1 Merge version_6_1780406242438 into main
Merge version_6_1780406242438 into main
2026-06-02 13:21:16 +00:00
kudinDmitriyUp
c85f04a2a1 Bob AI: fix build errors (attempt 1) 2026-06-02 13:20:40 +00:00
kudinDmitriyUp
58d25ae19b Bob AI: Apply different background colors to each badge within the h 2026-06-02 13:19:41 +00:00
9fce7aa7e8 Merge version_5_1780405786010 into main
Merge version_5_1780405786010 into main
2026-06-02 13:13:47 +00:00
kudinDmitriyUp
87b70ffcf0 Bob AI: fix build errors (attempt 1) 2026-06-02 13:13:11 +00:00
kudinDmitriyUp
af016b7dc8 Bob AI: Locate badge elements within the home section (assumed to be 2026-06-02 13:12:16 +00:00
d300cd9834 Merge version_4_1780405336764 into main
Merge version_4_1780405336764 into main
2026-06-02 13:06:13 +00:00
kudinDmitriyUp
e1874f6bb0 Bob AI (stub): make badges in hero sections each on in different color 2026-06-02 13:06:09 +00:00
46736ec39c Merge version_3_1780405209697 into main
Merge version_3_1780405209697 into main
2026-06-02 13:00:40 +00:00
kudinDmitriyUp
4f414deb3f Bob AI: Add FaqSimple section (faq) 2026-06-02 13:00:33 +00:00
b25ab02db6 Merge version_2_1780404978372 into main
Merge version_2_1780404978372 into main
2026-06-02 12:58:21 +00:00
kudinDmitriyUp
7674a998e9 Bob AI: Add a new section to the page.
INLINE-ONLY (Option A archit
2026-06-02 12:57:39 +00:00
8 changed files with 358 additions and 171 deletions

View File

@@ -1,177 +1,32 @@
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FeaturesMediaCards from '@/components/sections/features/FeaturesMediaCards';
import FeaturesRevealCardsBentoSharp from '@/components/sections/features/FeaturesRevealCardsBentoSharp';
import HeroOverlayMarquee from '@/components/sections/hero/HeroOverlayMarquee';
import { Award, Droplet, Leaf, Users } from "lucide-react";
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; this shell only fixes render order.
export default function HomePage() {
import React from 'react';
import HomeSection from './HomePage/sections/Home';
import BeersSection from './HomePage/sections/Beers';
import StorySection from './HomePage/sections/Story';
import TaproomSection from './HomePage/sections/Taproom';
import TestimonialQuoteCardsSection from './HomePage/sections/TestimonialQuoteCards';
import FaqSimpleSection from './HomePage/sections/FaqSimple';
import ContactSection from './HomePage/sections/Contact';
{/* webild-stub @2026-06-02T14:34:15.285Z: make badges in hero sections each on in different color */}
{/* webild-stub @2026-06-02T14:28:11.483Z: make badges in hero sections each on in different color */}
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="home" data-section="home">
<SectionErrorBoundary name="home">
<HeroOverlayMarquee
tag="Welcome to Vermont's Finest"
title="Crafting Exceptional Beer Since 1998"
description="Nestled in the picturesque Cedar Mountains, our brewery is dedicated to producing high-quality, artisanal beers that capture the spirit of Vermont. We combine traditional techniques with a passion for innovation, ensuring every sip is a taste of our unique heritage."
primaryButton={{
text: "Explore Our Beers",
href: "#beers",
}}
secondaryButton={{
text: "Our Story",
href: "#story",
}}
items={[
{
text: "Local Ingredients",
icon: Leaf,
},
{
text: "Sustainable Brewing",
icon: Leaf,
},
{
text: "Award-Winning",
icon: Award,
},
]}
imageSrc="http://img.b2bpic.net/free-photo/morning-mountains-carpathian-ukraine-aerial-view_1153-6120.jpg"
/>
</SectionErrorBoundary>
</div>
<div id="beers" data-section="beers">
<SectionErrorBoundary name="beers">
<FeaturesRevealCardsBentoSharp
tag="Our Signature Collection"
title="Taste the Craftsmanship"
description="From crisp lagers to robust stouts, each Cedar Mountain brew tells a story of Vermont's rich landscape and our dedication to the art of brewing. Discover our most popular and beloved beers."
items={[
{
title: "Maple Amber Ale",
description: "A rich, malty ale with subtle notes of Vermont maple syrup, balanced by a clean hop finish. Perfect for any season.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/composed-books-autumnal-goods_23-2147687094.jpg",
},
{
title: "Cascade IPA",
description: "Our flagship IPA, bursting with vibrant citrus and pine aromas from generous Cascade hop additions. Bold, refreshing, and truly iconic.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-psd/flat-design-oktoberfest-celebration-poster_23-2150683567.jpg",
},
{
title: "Stout Mountain Porter",
description: "A dark and brooding porter with deep roasted malt flavors, hints of chocolate and coffee, and a creamy texture. A comforting classic.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/front-view-bottles-bear-dark-background_140725-94854.jpg",
},
{
title: "Summertime Lager",
description: "Light, crisp, and incredibly refreshing. Our lager is brewed for sunny days and good company, with a clean finish that invites another sip.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/celebration-beer-cheers-concept-close-up-hand-holding-up-glasses-beer-man_1150-6458.jpg",
},
{
title: "Harvest Wheat Beer",
description: "A hazy, unfiltered wheat beer brewed with local Vermont wheat, offering subtle fruit and spice notes. A true taste of the harvest.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/composition-with-tasty-american-beer_23-2148907632.jpg",
},
{
title: "Barrel-Aged Scotch Ale",
description: "A robust Scotch Ale aged in oak barrels, developing complex vanilla, caramel, and smoky characteristics. A beer for sipping and savoring.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/pints-draught-beer-macro-photography_53876-101409.jpg",
},
{
title: "Raspberry Sour",
description: "A delightfully tart and fruity sour ale, brewed with real Vermont raspberries for a vibrant color and juicy, refreshing flavor.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-friends-beach-with-beer_23-2147827103.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<div id="story" data-section="story">
<SectionErrorBoundary name="story">
<AboutFeaturesSplit
tag="Our Journey"
title="The Heart of Cedar Mountain Brewing"
description="For over two decades, Cedar Mountain Brewery has been more than just a place to make beer; it's a testament to passion, community, and the pristine environment of Vermont. Our story began with a simple idea: to craft beers that reflect the purity of our mountain springs and the richness of local harvests. Every batch is a labor of love, a blend of traditional techniques, and innovative spirit."
items={[
{
icon: Droplet,
title: "Traditional Craft",
description: "Honoring age-old brewing methods passed down through generations, ensuring authenticity in every batch.",
},
{
icon: Leaf,
title: "Local Sourcing",
description: "Utilizing the finest Vermont-grown hops, grains, and pure mountain water to create unique flavors.",
},
{
icon: Users,
title: "Community Focused",
description: "A gathering place for locals and visitors, fostering connection over great beer and shared experiences.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/smiling-man-breaking-egg-white-big-bowl_23-2148164492.jpg"
/>
</SectionErrorBoundary>
</div>
<div id="taproom" data-section="taproom">
<SectionErrorBoundary name="taproom">
<FeaturesMediaCards
tag="Experience Our Home"
title="The Cedar Mountain Taproom"
description="Join us at our cozy taproom, nestled at the base of Cedar Mountain. Enjoy fresh brews straight from the source, delicious local bites, and a welcoming atmosphere. It's more than a bar; it's where our community comes together to celebrate good beer and good company."
items={[
{
title: "Fresh Taps Daily",
description: "Always a rotating selection of our latest and greatest brews on tap, featuring seasonal specialties and classic favorites.",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-beer-brewing-elements_23-2150321509.jpg",
},
{
title: "Local Food Pairings",
description: "Savor delicious appetizers and meals, thoughtfully crafted to complement our beers, made with ingredients from Vermont farms.",
imageSrc: "http://img.b2bpic.net/free-photo/medium-fried-pieces-meat-fried-onions_140725-3560.jpg",
},
{
title: "Live Music & Events",
description: "Check our calendar for regular live performances, engaging trivia nights, and exciting new beer releases.",
imageSrc: "http://img.b2bpic.net/free-photo/handsome-young-men-standing-bar-counter-talking-each-other_23-2147861997.jpg",
},
{
title: "Scenic Outdoor Seating",
description: "Relax on our spacious patio with stunning panoramic views of the surrounding Cedar Mountains and lush Vermont landscape.",
imageSrc: "http://img.b2bpic.net/free-photo/wooden-chair-table-outdoor-terrace_74190-3968.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Plan Your Visit"
text="Ready to taste the best of Vermont craft beer? Visit our taproom, explore our events, or get in touch with us today!"
primaryButton={{
text: "Get Directions",
href: "https://maps.google.com/?q=Cedar+Mountain+Brewery+Vermont",
}}
secondaryButton={{
text: "Contact Us",
href: "mailto:info@cedarmountainbrewery.com",
}}
/>
</SectionErrorBoundary>
</div>
<HomeSection />
<BeersSection />
<StorySection />
<TaproomSection />
<TestimonialQuoteCardsSection />
<FaqSimpleSection />
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,75 @@
import React from 'react';
import ScrollReveal from '@/components/ui/ScrollReveal';
import Card from '@/components/ui/Card';
import Tag from '@/components/ui/Tag';
export default function BeersSection() {
const beers = [
{
name: "Mountain Peak Pilsner",
style: "Crisp & Refreshing Pilsner",
description: "Crisp and brilliantly clear, this classic pilsner delivers delicate floral hop aromas over a crackery malt base, finishing with a refreshing, snappy bite.",
alt: "Glass of crisp pilsner beer on a wooden table",
abv: "4.8% ABV"
},
{
name: "Pine Ridge IPA",
style: "West Coast IPA",
description: "A bold West Coast classic bursting with resinous pine and bright grapefruit zest. Supported by a lean caramel malt backbone for a perfectly bitter, dry finish.",
alt: "Pint of hazy IPA beer with a thick head",
abv: "6.5% ABV"
},
{
name: "Amber Glow Ale",
style: "American Amber Ale",
description: "Deep copper in color, offering rich layers of toasted biscuit and sweet caramel. Balanced by a gentle earthy hop profile for a smooth, highly drinkable experience.",
alt: "Glass of amber ale beer with condensation",
abv: "5.2% ABV"
},
{
name: "Midnight Stout",
style: "Oatmeal Stout",
description: "Velvety and pitch-black, featuring decadent notes of dark chocolate, espresso, and roasted barley. A luxurious, full-bodied stout with a remarkably smooth finish.",
alt: "Pint of dark stout beer with a creamy tan head",
abv: "7.0% ABV"
}
];
return (
<section id="beers" className="bg-background">
<div className="max-w-content-width mx-auto px-6">
<ScrollReveal variant="slide-up" className="text-center flex flex-col items-center">
<Tag text="Our Signature Collection" className="mb-6" />
<h2 className="text-4xl md:text-5xl font-bold text-foreground mb-4">Crafted for Every Palate</h2>
<p className="text-lg text-muted-foreground max-w-content-width mx-auto">
Discover our core lineup of artisanal beers, brewed with passion, precision, and the finest local ingredients.
</p>
</ScrollReveal>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
{beers.map((beer, index) => (
<ScrollReveal key={index} variant="slide-up" delay={index * 0.1}>
<Card className="h-full flex flex-col overflow-hidden group border border-border/50">
<div className="relative h-64 overflow-hidden bg-card">
<img
src=""
alt={beer.alt}
className="w-full h-full object-cover transition-transform duration-700 group-hover:scale-105"
/>
<div className="absolute top-4 right-4">
<Tag text={beer.abv} className="bg-background/90 backdrop-blur-sm text-foreground" />
</div>
</div>
<div className="p-6 flex flex-col flex-grow">
<p className="text-xs font-bold text-accent mb-2 uppercase tracking-widest">{beer.style}</p>
<h3 className="text-xl font-bold text-foreground mb-3">{beer.name}</h3>
<p className="text-muted-foreground text-sm flex-grow leading-relaxed">{beer.description}</p>
</div>
</Card>
</ScrollReveal>
))}
</div>
</div>
</section>
);
}

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="Plan Your Visit"
text="Ready to taste the best of Vermont craft beer? Visit our taproom, explore our events, or get in touch with us today!"
primaryButton={{
text: "Get Directions",
href: "https://maps.google.com/?q=Cedar+Mountain+Brewery+Vermont",
}}
secondaryButton={{
text: "Contact Us",
href: "mailto:info@cedarmountainbrewery.com",
}}
/>
</SectionErrorBoundary>
</div>
);
}

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 "FaqSimple" section.
import React from 'react';
import FaqSimple from '@/components/sections/faq/FaqSimple';
export default function FaqSimpleSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq" data-webild-section="FaqSimple">
<FaqSimple
tag="Your Questions Answered"
title="Frequently Asked Questions"
description="Find answers to common questions about Cedar Mountain Brewery, our beers, taproom, and special events. We're here to help you plan your visit."
primaryButton={{"text":"Visit Our Taproom","href":"/taproom"}}
secondaryButton={{"text":"Explore Our Beers","href":"/beers"}}
items={[{"question":"What types of beer does Cedar Mountain Brewery offer?","answer":"We brew a diverse range of craft beers, including crisp lagers, hoppy IPAs, rich stouts, and seasonal ales. Our selection is constantly evolving, often featuring unique Vermont-inspired ingredients. Please check our 'Beers' page for our current tap list and availability."},{"question":"What are your taproom hours and location?","answer":"Our taproom is located in the heart of Vermont. We are open Wednesday to Friday from 3 PM - 9 PM, Saturday from 12 PM - 10 PM, and Sunday from 12 PM - 7 PM. We are closed on Monday and Tuesday. You can find our full address and directions on our 'Contact Us' page."},{"question":"Do you host special events or private parties?","answer":"Yes, we regularly host live music, trivia nights, and seasonal festivals. Our taproom is also available for private event bookings. Visit our 'Events' page for an up-to-date schedule or contact us directly to inquire about hosting your private gathering."},{"question":"Can I take a tour of the Cedar Mountain brewery?","answer":"We offer guided brewery tours on Saturdays at 2 PM and 4 PM. These tours provide a behind-the-scenes look at our brewing process and include a tasting flight. Reservations are highly recommended due to limited space."},{"question":"Where can I purchase Cedar Mountain beers to take home?","answer":"Our beers are available for purchase directly from our taproom in growlers, cans, and bottles. You can also find select Cedar Mountain brews at various local Vermont retailers and restaurants. Check our website for a list of distributors."}]}
/>
</div>
);
}

View File

@@ -0,0 +1,47 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "home" section.
import React from 'react';
import HeroOverlayMarquee from '@/components/sections/hero/HeroOverlayMarquee';
import { Award, Droplet, Leaf, Users, Star } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HomeSection(): React.JSX.Element {
return (
<div id="home" data-section="home">
<SectionErrorBoundary name="home">
<HeroOverlayMarquee
tag="Welcome to Vermont's Finest"
title="Crafting Exceptional Beer Since 1998"
description="Nestled in the picturesque Cedar Mountains, our brewery is dedicated to producing high-quality, artisanal beers that capture the spirit of Vermont. We combine traditional techniques with a passion for innovation, ensuring every sip is a taste of our unique heritage."
primaryButton={{
text: "Explore Our Beers",
href: "#beers",
}}
secondaryButton={{
text: "Our Story",
href: "#story",
}}
items={[
{
text: "Local Ingredients",
icon: Leaf,
className: "bg-green-100 text-green-800 border-green-200",
},
{
text: "Sustainable Brewing",
icon: Droplet,
className: "bg-blue-100 text-blue-800 border-blue-200",
},
{
text: "Award-Winning",
icon: Award,
className: "bg-yellow-100 text-yellow-800 border-yellow-200",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/morning-mountains-carpathian-ukraine-aerial-view_1153-6120.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,43 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "story" section.
import React from 'react';
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import { Award, Droplet, Leaf, Users, Star } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function StorySection(): React.JSX.Element {
return (
<div id="story" data-section="story">
<SectionErrorBoundary name="story">
<AboutFeaturesSplit
tag="Our Journey"
title="The Heart of Cedar Mountain Brewing"
description="For over two decades, Cedar Mountain Brewery has been more than just a place to make beer; it's a testament to passion, community, and the pristine environment of Vermont. Our story began with a simple idea: to craft beers that reflect the purity of our mountain springs and the richness of local harvests. Every batch is a labor of love, a blend of traditional techniques, and innovative spirit."
primaryButton={{
text: "Meet Our Brewers",
href: "#",
}}
items={[
{
icon: Droplet,
title: "Traditional Craft",
description: "Honoring age-old brewing methods passed down through generations, ensuring authenticity in every batch.",
},
{
icon: Leaf,
title: "Local Sourcing",
description: "Utilizing the finest Vermont-grown hops, grains, and pure mountain water to create unique flavors.",
},
{
icon: Users,
title: "Community Focused",
description: "A gathering place for locals and visitors, fostering connection over great beer and shared experiences.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/smiling-man-breaking-egg-white-big-bowl_23-2148164492.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,42 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "taproom" section.
import React from 'react';
import FeaturesMediaCards from '@/components/sections/features/FeaturesMediaCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TaproomSection(): React.JSX.Element {
return (
<div id="taproom" data-section="taproom">
<SectionErrorBoundary name="taproom">
<FeaturesMediaCards
tag="Experience Our Home"
title="The Cedar Mountain Taproom"
description="Join us at our cozy taproom, nestled at the base of Cedar Mountain. Enjoy fresh brews straight from the source, delicious local bites, and a welcoming atmosphere. It's more than a bar; it's where our community comes together to celebrate good beer and good company."
items={[
{
title: "Fresh Taps Daily",
description: "Always a rotating selection of our latest and greatest brews on tap, featuring seasonal specialties and classic favorites.",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-beer-brewing-elements_23-2150321509.jpg",
},
{
title: "Local Food Pairings",
description: "Savor delicious appetizers and meals, thoughtfully crafted to complement our beers, made with ingredients from Vermont farms.",
imageSrc: "http://img.b2bpic.net/free-photo/medium-fried-pieces-meat-fried-onions_140725-3560.jpg",
},
{
title: "Live Music & Events",
description: "Check our calendar for regular live performances, engaging trivia nights, and exciting new beer releases.",
imageSrc: "http://img.b2bpic.net/free-photo/handsome-young-men-standing-bar-counter-talking-each-other_23-2147861997.jpg",
},
{
title: "Scenic Outdoor Seating",
description: "Relax on our spacious patio with stunning panoramic views of the surrounding Cedar Mountains and lush Vermont landscape.",
imageSrc: "http://img.b2bpic.net/free-photo/wooden-chair-table-outdoor-terrace_74190-3968.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,78 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "TestimonialQuoteCards" section.
import React from 'react';
import { Award, Droplet, Leaf, Users, Star } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import TextAnimation from "@/components/ui/TextAnimation";
import ScrollReveal from "@/components/ui/ScrollReveal";
import GridOrCarousel from "@/components/ui/GridOrCarousel";
export default function TestimonialQuoteCardsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials" data-webild-section="TestimonialQuoteCards">
<SectionErrorBoundary name="testimonials">
<section aria-label="Testimonials section" className="">
<div className="flex flex-col gap-8">
<div className="flex flex-col items-center w-content-width mx-auto gap-2">
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
<p>What Our Guests Say</p>
</div>
<TextAnimation
text="Cheers from the Community"
variant="slide-up"
gradientText={true}
tag="h2"
className="md:max-w-8/10 text-6xl 2xl:text-7xl leading-[1.15] font-semibold text-center text-balance"
/>
<TextAnimation
text="Don't just take our word for it. Here's what craft beer lovers have to say about their experiences at Cedar Mountain Brewery."
variant="slide-up"
gradientText={false}
tag="p"
className="md:max-w-7/10 text-lg md:text-xl leading-snug text-center text-balance"
/>
</div>
<ScrollReveal variant="fade-blur">
<GridOrCarousel>
{[
{
name: "Sarah Jenkins",
role: "Local Enthusiast",
quote: "The Cascade IPA is hands down the best I've had in Vermont. The taproom atmosphere is so welcoming, and the staff really knows their stuff!",
},
{
name: "Mike & Emily",
role: "Weekend Visitors",
quote: "We stopped by during our road trip and ended up staying for hours. The Maple Amber Ale and the live music made for a perfect afternoon.",
},
{
name: "David Chen",
role: "Homebrewer",
quote: "You can taste the dedication to traditional craft in every sip of the Stout Mountain Porter. It's inspiring to see a brewery so committed to quality.",
}
].map((testimonial, i) => (
<div key={i} className="flex flex-col gap-4 xl:gap-5 2xl:gap-6 p-6 xl:p-7 2xl:p-8 h-full card rounded">
<div className="flex gap-1">
{[...Array(5)].map((_, j) => (
<Star key={j} className="size-5 text-accent fill-accent" />
))}
</div>
<p className="text-lg md:text-xl leading-snug flex-grow">"{testimonial.quote}"</p>
<div className="flex flex-col gap-1 mt-4">
<span className="text-base font-semibold">{testimonial.name}</span>
<span className="text-sm opacity-70">{testimonial.role}</span>
</div>
</div>
))}
</GridOrCarousel>
</ScrollReveal>
</div>
</section>
</SectionErrorBoundary>
</div>
);
}