Merge version_2_1782184303461 into main #1

Merged
bender merged 5 commits from version_2_1782184303461 into main 2026-06-23 03:17:50 +00:00
10 changed files with 372 additions and 249 deletions

View File

@@ -38,70 +38,55 @@ export default function Layout() {
];
return (
<StyleProvider buttonVariant="default" siteBackground="floatingGradient" heroBackground="cornerGlow">
<StyleProvider buttonVariant="default" siteBackground="none" heroBackground="none">
<SiteBackgroundSlot />
<SectionErrorBoundary name="navbar">
<NavbarFloating
logo="Bird Shack"
logo="BirdShack"
ctaButton={{
text: "Order Online",
text: "ORDER NOW",
href: "#contact",
}}
navItems={navItems} />
navItems={[
{ name: "HOME", href: "#hero" },
{ name: "MENU", href: "#menu" },
{ name: "FIND A SHACK", href: "#" },
{ name: "REWARDS", href: "#" },
{ name: "WHO WE ARE", href: "#about" },
{ name: "CONTACT US", href: "#contact" }
]} />
</SectionErrorBoundary>
<main className="flex-grow">
<Outlet />
</main>
<SectionErrorBoundary name="footer">
<FooterSimpleCard
brand="Bird Shack Jamaica"
brand="BirdShack Fried Chicken"
columns={[
{
title: "Visit Us",
title: "Links",
items: [
{
label: "123 Island Rd, Kingston",
href: "#",
},
{ label: "Menu", href: "#menu" },
{ label: "Find A Shack", href: "#" },
{ label: "Rewards", href: "#" },
{ label: "Who We Are", href: "#about" },
{ label: "Contact Us", href: "#contact" },
{ label: "Terms & Conditions", href: "#" }
],
},
{
title: "Our Menu",
title: "Contact",
items: [
{
label: "Full Menu",
href: "#menu",
},
{
label: "Catering Services",
href: "#",
},
{ label: "info@birdshackja.com", href: "mailto:info@birdshackja.com" },
{ label: "(876) 677-6683", href: "tel:8766776683" }
],
},
{
title: "Company",
items: [
{
label: "About Us",
href: "#about",
},
{
label: "Privacy Policy",
href: "#",
},
],
},
}
]}
copyright="© 2024 Bird Shack Jamaica. All rights reserved."
copyright="© 2025 Bird Shack Jamaica. All rights reserved."
links={[
{
label: "Instagram",
href: "#",
},
{
label: "Facebook",
href: "#",
},
{ label: "Facebook", href: "#" },
{ label: "Instagram", href: "#" },
{ label: "TikTok", href: "#" }
]}
/>
</SectionErrorBoundary>

View File

@@ -5,15 +5,15 @@
:root {
/* @colorThemes/lightTheme/grayNavyBlue */
--background: #f6f0e9;
--card: #efe7dd;
--foreground: #2b180a;
--primary-cta: #2b180a;
--primary-cta-text: #f6f0e9;
--secondary-cta: #efe7dd;
--secondary-cta-text: #2b180a;
--accent: #94877c;
--background-accent: #afa094;
--background: #ffffff;
--card: #ffffff;
--foreground: #000000;
--primary-cta: #f3d822;
--primary-cta-text: #000000;
--secondary-cta: #58a5c0;
--secondary-cta-text: #ffffff;
--accent: #e65430;
--background-accent: #f3d822;
/* @layout/border-radius/rounded */
--radius: 0.5rem;

View File

@@ -1,209 +1,33 @@
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import HeroCenteredLogos from '@/components/sections/hero/HeroCenteredLogos';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
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 TestimonialsSection from './HomePage/sections/Testimonials';
import ProofSection from './HomePage/sections/Proof';
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">
<HeroCenteredLogos
avatarsSrc={[
"http://img.b2bpic.net/free-photo/medium-shot-smiley-woman-holding-coffee-cup_23-2149455885.jpg",
"http://img.b2bpic.net/free-photo/friends-eating-conversating-restaurant_23-2148006709.jpg",
"http://img.b2bpic.net/free-photo/attractive-young-woman-hands-holds-two-burgers-blurred-background_169016-43765.jpg",
"http://img.b2bpic.net/free-photo/young-bearded-man-cafe-street-with-glass-wine-romantic-guy-white-shirt-cap-suspenders-city-peaky-blinders-old-fassion-retro_1321-2003.jpg",
]}
avatarText="Loved by local foodies"
title="Authentic Jamaican Grilled Flavors"
description="Experience the vibrant, smoky, and soul-warming taste of Bird Shack Jamaica. Freshly grilled, homemade, and full of authentic island spice."
primaryButton={{
text: "See Our Menu",
href: "#menu",
}}
secondaryButton={{
text: "Visit Us",
href: "#contact",
}}
names={[
"Customer A",
"Customer B",
"Customer C",
"Customer D",
]}
hideMedia={false}
imageSrc="http://img.b2bpic.net/free-photo/front-view-chicken-wooden-board-with-ingredients_23-2148440984.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTestimonial
tag="Our Story"
quote="Bird Shack started in a small home kitchen with a dream to bring the genuine, smokey flavor of authentic Jamaican grilling to our local community."
author="The Bird Shack Family"
role="Founders"
imageSrc="http://img.b2bpic.net/free-photo/side-view-cook-making-dessert_23-2149707923.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesRevealCardsBento
tag="Our Specialties"
title="The Shack Menu"
description="Discover our signature dishes, cooked to perfection using traditional island techniques."
items={[
{
title: "Signature Jerk Chicken",
description: "Tender chicken marinated for 24 hours in our secret spice blend and grilled over pimento wood.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/chef-presents-lula-kebab-served-with-basil_140725-8121.jpg",
},
{
title: "Spicy BBQ Wings",
description: "Crispy, juicy wings glazed with our sweet and fiery house-made sauce.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/pilaf-with-meet-dried-fruits-chestnut-rice-rosemary-leaves-wooden-plate_176474-2978.jpg",
},
{
title: "Festival & Saltfish",
description: "A classic Jamaican staple, crispy fried golden and served with seasoned saltfish.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-rice-dish_23-2147680627.jpg",
},
{
title: "Grilled Red Snapper",
description: "Freshly caught snapper seasoned with island herbs and grilled until flaky.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/side-view-fried-chicken-with-boiled-rice-pan-vegetable-salad-with-sauce_141793-4903.jpg",
},
{
title: "Rice & Peas",
description: "Perfectly fluffy basmati rice cooked with coconut milk and kidney beans.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-tasty-meat-soup-with-potatoes-greens-dark-floor_140725-76936.jpg",
},
{
title: "Fresh Tropical Salad",
description: "Crunchy seasonal vegetables with a zesty citrus vinaigrette dressing.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-woman-with-delicious-dish-poutine_23-2149486062.jpg",
},
{
title: "Homemade Lemonade",
description: "Freshly squeezed lemons with a hint of ginger and mint for ultimate refreshment.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/crop-man-eating-dessert-cafe_23-2147775848.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MenuSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialTrustCard
quote="The most authentic taste of Jamaica I've had in years! The chicken is always so smoky and tender."
rating={5}
author="Marcus Thompson"
avatars={[
{
name: "Marcus",
imageSrc: "http://img.b2bpic.net/free-photo/person-indian-origin-having-fun_23-2150285278.jpg",
},
{
name: "Sophia",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-attractive-redhead-female-student-sits-armchair-leaning-arms-smiling_197531-22962.jpg",
},
{
name: "David",
imageSrc: "http://img.b2bpic.net/free-photo/woman-talking-her-long-distance-lover_23-2149289491.jpg",
},
{
name: "Elena",
imageSrc: "http://img.b2bpic.net/free-photo/ecstatic-caucasian-girl-sitting-cafe-eating-salad-blithesome-woman-enjoying-fresh-vegetables_197531-17191.jpg",
},
{
name: "James",
imageSrc: "http://img.b2bpic.net/free-photo/smiley-couple-sharing-fast-food_329181-20757.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="proof" data-section="proof">
<SectionErrorBoundary name="proof">
<SocialProofMarquee
tag="Featured In"
title="Local Recognition"
description="Bird Shack is honored to be recognized by our local culinary community."
names={[
"Island Flavors Magazine",
"Jamaica Food Review",
"The Daily Local Press",
"Culinary Excellence Awards",
"Travel & Taste Guide",
"Community Business Journal",
"Food Critics Choice",
]}
/>
</SectionErrorBoundary>
</div>
<ProofSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSplitMedia
tag="Info"
title="Common Questions"
description="Have questions about our menu or catering services? We've got you covered."
items={[
{
question: "Do you offer catering?",
answer: "Yes! We specialize in catering for events of all sizes, from family gatherings to office parties.",
},
{
question: "Are your ingredients fresh?",
answer: "Absolutely. We source fresh, local ingredients daily to ensure the highest quality in every meal.",
},
{
question: "Do you offer vegetarian options?",
answer: "Yes, we have a selection of fresh salads and side dishes that cater to vegetarian dietary preferences.",
},
{
question: "How can I order online?",
answer: "You can visit our contact page or give us a call to place your order directly.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/abstract-blur-restaurant_1203-8540.jpg"
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Visit Us"
text="Ready for some authentic flavor? Come visit us or order your meal today!"
primaryButton={{
text: "Get Directions",
href: "#",
}}
secondaryButton={{
text: "Call Now",
href: "tel:8765551234",
}}
/>
</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 AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTestimonial
tag="Our Story"
quote="Bird Shack started in a small home kitchen with a dream to bring the genuine, smokey flavor of authentic Jamaican grilling to our local community."
author="The Bird Shack Family"
role="Founders"
imageSrc="http://img.b2bpic.net/free-photo/side-view-cook-making-dessert_23-2149707923.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 "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 some authentic flavor? Come visit us or order your meal today!"
primaryButton={{
text: "Get Directions",
href: "#",
}}
secondaryButton={{
text: "Call Now",
href: "tel:8765551234",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,39 @@
// 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="Info"
title="Common Questions"
description="Have questions about our menu or catering services? We've got you covered."
items={[
{
question: "Do you offer catering?",
answer: "Yes! We specialize in catering for events of all sizes, from family gatherings to office parties.",
},
{
question: "Are your ingredients fresh?",
answer: "Absolutely. We source fresh, local ingredients daily to ensure the highest quality in every meal.",
},
{
question: "Do you offer vegetarian options?",
answer: "Yes, we have a selection of fresh salads and side dishes that cater to vegetarian dietary preferences.",
},
{
question: "How can I order online?",
answer: "You can visit our contact page or give us a call to place your order directly.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/abstract-blur-restaurant_1203-8540.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,91 @@
/* eslint-disable */
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
import Button from "@/components/ui/Button";
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import AvatarGroup from "@/components/ui/AvatarGroup";
const avatarsSrc = [];
const primaryButton = {
text: "ORDER ONLINE",
href: "#menu"
};
const secondaryButton = {
text: "Visit Us",
href: "#contact"
};
const names = [
"ORIGINAL CRISPY",
"CAJUN SPICY",
"BARBEQUE"
];
type HeroCenteredLogosProps = {
avatarsSrc: string[];
avatarText: string;
title: string;
description: string;
primaryButton: { text: string; href: string };
secondaryButton: { text: string; href: string };
names: string[];
hideMedia?: boolean;
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
const HeroInline = () => {
return (
<section aria-label="Hero section" className="relative h-svh flex flex-col mb-20">
<HeroBackgroundSlot />
{!false && (
<div className="absolute inset-0 z-0">
<ImageOrVideo imageSrc={"https://storage.googleapis.com/webild/users/user_3FWHaCApdMsPkrjRayRKhrZvcTp/uploaded-1782184302347-y72utape.png"} className="size-full object-cover" />
<div className="absolute inset-0 bg-background/80" />
</div>
)}
<div className="relative z-10 flex-1 flex items-center justify-center">
<div className="flex flex-col items-center gap-3 pt-8 w-content-width mx-auto text-center">
<AvatarGroup avatarsSrc={avatarsSrc} label={"Loved by local foodies"} size="lg" />
<TextAnimation
text={"SAVA DI FLAVA!"}
variant="fade"
gradientText={true}
tag="h1"
className="md:max-w-8/10 text-7xl 2xl:text-8xl leading-[1.15] font-black uppercase text-center text-balance"
/>
<TextAnimation
text={"HOT. CRISPY. IRRESISTIBLE."}
variant="fade"
gradientText={false}
tag="p"
className="md:max-w-7/10 text-2xl md:text-3xl font-bold uppercase leading-snug text-balance"
/>
<div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3">
<Button text={primaryButton.text} href={primaryButton.href} variant="primary" className="rounded-full px-8 py-4 text-xl font-bold" />
</div>
</div>
</div>
<div className="relative z-10 w-content-width mx-auto pb-8 overflow-hidden mask-fade-x">
<div className="flex w-max animate-marquee-horizontal" style={{ animationDuration: "30s" }}>
{[...names, ...names, ...names, ...names].map((name, index) => (
<div key={index} className="shrink-0 mx-3 px-4 py-2 card rounded">
<span className="text-xl font-semibold whitespace-nowrap text-foreground/75">{name}</span>
</div>
))}
</div>
</div>
</section>
);
};
export default function HeroSection() {
return (
<div data-webild-section="hero" id="hero">
<HeroInline />
</div>
);
}

View File

@@ -0,0 +1,64 @@
// 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="SOME TOP PICKS JUST FOR YOU!"
title=" "
description="SHOP BY CATEGORY"
items={[
{
"title": "STARTA BOX",
"imageSrc": "https://storage.googleapis.com/webild/users/user_3FWHaCApdMsPkrjRayRKhrZvcTp/uploaded-1782184302347-y72utape.png",
"href": "#",
"description": "1 PIECE COMBO\n1 PIECE OF CHICKEN\nFRIES OR 3 WEDGES\nCORNBREAD\n16 oz SODA"
},
{
"href": "#",
"description": "1 CHICKEN SANDWICH\n1 PIECE OF CHICKEN OR 3 WINGS\nFRIES OR 3 WEDGES\n1 COLESLAW\n16 oz SODA",
"title": "FLEX BOX COMBO",
"imageSrc": "https://storage.googleapis.com/webild/users/user_3FWHaCApdMsPkrjRayRKhrZvcTp/uploaded-1782184302347-y72utape.png"
},
{
"title": "HATRIK",
"imageSrc": "https://storage.googleapis.com/webild/users/user_3FWHaCApdMsPkrjRayRKhrZvcTp/uploaded-1782184302347-y72utape.png",
"href": "#",
"description": "3 PIECES OF CHICKEN\nFRIES OR 3 WEDGES\nCORNBREAD\n16 oz SODA"
},
{
"href": "#",
"description": "1 CHICKEN SANDWICH\nFRIES OR 3 WEDGES\n16 oz SODA",
"title": "CHICKEN SANDWICH COMBO",
"imageSrc": "https://storage.googleapis.com/webild/users/user_3FWHaCApdMsPkrjRayRKhrZvcTp/uploaded-1782184302347-y72utape.png"
},
{
"title": "WINGS COMBO",
"imageSrc": "https://storage.googleapis.com/webild/users/user_3FWHaCApdMsPkrjRayRKhrZvcTp/uploaded-1782184302347-y72utape.png",
"href": "#",
"description": "6 PIECES WINGS\nFRIES OR 3 WEDGES\n16 oz SODA"
},
{
"title": "FAMILY MEAL",
"imageSrc": "https://storage.googleapis.com/webild/users/user_3FWHaCApdMsPkrjRayRKhrZvcTp/uploaded-1782184302347-y72utape.png",
"href": "#",
"description": "8 PIECES OF CHICKEN\nLARGE FRIES\n2 COLESLAW\n4 CORNBREAD"
},
{
"title": "KIDS MEAL",
"imageSrc": "https://storage.googleapis.com/webild/users/user_3FWHaCApdMsPkrjRayRKhrZvcTp/uploaded-1782184302347-y72utape.png",
"href": "#",
"description": "1 PIECE OF CHICKEN\nSMALL FRIES\nAPPLE JUICE"
}
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,29 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "proof" section.
import React from 'react';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ProofSection(): React.JSX.Element {
return (
<div id="proof" data-section="proof">
<SectionErrorBoundary name="proof">
<SocialProofMarquee
tag="Featured In"
title="Local Recognition"
description="Bird Shack is honored to be recognized by our local culinary community."
names={[
"Island Flavors Magazine",
"Jamaica Food Review",
"The Daily Local Press",
"Culinary Excellence Awards",
"Travel & Taste Guide",
"Community Business Journal",
"Food Critics Choice",
]}
/>
</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 "testimonials" section.
import React from 'react';
import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialTrustCard
quote="The most authentic taste of Jamaica I've had in years! The chicken is always so smoky and tender."
rating={5}
author="Marcus Thompson"
avatars={[
{
name: "Marcus",
imageSrc: "http://img.b2bpic.net/free-photo/person-indian-origin-having-fun_23-2150285278.jpg",
},
{
name: "Sophia",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-attractive-redhead-female-student-sits-armchair-leaning-arms-smiling_197531-22962.jpg",
},
{
name: "David",
imageSrc: "http://img.b2bpic.net/free-photo/woman-talking-her-long-distance-lover_23-2149289491.jpg",
},
{
name: "Elena",
imageSrc: "http://img.b2bpic.net/free-photo/ecstatic-caucasian-girl-sitting-cafe-eating-salad-blithesome-woman-enjoying-fresh-vegetables_197531-17191.jpg",
},
{
name: "James",
imageSrc: "http://img.b2bpic.net/free-photo/smiley-couple-sharing-fast-food_329181-20757.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}