Bob AI: Added a dedicated map and hours of operation section
This commit is contained in:
@@ -1,291 +1,38 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FeaturesBentoGrid from '@/components/sections/features/FeaturesBentoGrid';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroBillboardTiltedCarousel from '@/components/sections/hero/HeroBillboardTiltedCarousel';
|
||||
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
|
||||
import PricingLayeredCards from '@/components/sections/pricing/PricingLayeredCards';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import { Clock, Leaf, Utensils } 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. 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 AboutHeritageSection from './HomePage/sections/AboutHeritage';
|
||||
import ReviewsSection from './HomePage/sections/Reviews';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import LocationHoursSection from './HomePage/sections/LocationHours';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardTiltedCarousel
|
||||
tag="Authentic Jamaican Cuisine"
|
||||
title="Authentic Jamaican Flavors, Local Kingston Pride"
|
||||
description="Award-rated dishes like our signature fish and chips, served fresh daily. Experience island taste without leaving the city."
|
||||
primaryButton={{
|
||||
text: "Order Now",
|
||||
href: "#order",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "View Menu",
|
||||
href: "#menu",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-delicious-thanksgiving-meal_23-2148629558.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-seafood-appetizers-fish-squid-shrimps-with-sauces-salad_141793-5091.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cute-elegant-calm-happy-woman-green-summer-dress-sits-with-coffee-cafe-enjoying-morning_343596-3672.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/chef-preparing-recipe_23-2148145590.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/grilled-duck-breast-with-vegetable-salad_1203-9889.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cooked-red-crawfish-closeup_132075-14134.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="Our Story"
|
||||
title="A Legacy of Island Taste"
|
||||
description="Born in the heart of Kingston, our restaurant carries forward generations of family recipes, bringing the soul of Jamaica to your plate. Every ingredient is sourced with care, honoring local traditions."
|
||||
items={[
|
||||
{
|
||||
icon: Utensils,
|
||||
title: "Authentic Recipes",
|
||||
description: "Generations of family cooking passed down.",
|
||||
},
|
||||
{
|
||||
icon: Leaf,
|
||||
title: "Farm Fresh",
|
||||
description: "Sourcing fresh produce daily.",
|
||||
},
|
||||
{
|
||||
icon: Clock,
|
||||
title: "Open Daily",
|
||||
description: "Serving you from morning to night.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/asian-people-having-dinner-party_23-2149552643.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesBentoGrid
|
||||
tag="Why Eat With Us"
|
||||
title="The Ladys Experience"
|
||||
description="More than just a meal, it's a taste of home in the heart of Kingston."
|
||||
features={[
|
||||
{
|
||||
title: "Fresh Ingredients",
|
||||
description: "Local produce delivered daily.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/father-s-day-composition-with-slate-decorative-items_23-2147632060.jpg",
|
||||
},
|
||||
{
|
||||
title: "Easy Booking",
|
||||
description: "Reserve tables online in seconds.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/delicious-thanksgiving-day-food-table_23-2149082314.jpg",
|
||||
},
|
||||
{
|
||||
title: "Relaxing Ambiance",
|
||||
description: "Authentic atmosphere for your dining.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/futuristic-kitchen-interior-design_23-2151821268.jpg",
|
||||
},
|
||||
{
|
||||
title: "Award Rated",
|
||||
description: "Consistent 4.8 star experience.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-woman-having-lunch-with-salmon-with-brown-noodles-soup-berry-salad-cocktail_141793-2455.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="menu" data-section="menu">
|
||||
<SectionErrorBoundary name="menu">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Daily Menu"
|
||||
title="Flavor Highlights"
|
||||
description="Explore our curated selections of authentic Jamaican favorites."
|
||||
items={[
|
||||
{
|
||||
title: "Jerk Chicken",
|
||||
description: "Slow-smoked with secret spices.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-veal-meat-sauce-pita-bread-with-vegetable-salad_141793-4257.jpg",
|
||||
},
|
||||
{
|
||||
title: "Curry Goat",
|
||||
description: "Traditional savory tender stew.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/view-tasty-goulash-tomatoes_23-2149388106.jpg",
|
||||
},
|
||||
{
|
||||
title: "Fried Snapper",
|
||||
description: "Fresh catch prepared daily.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/grilled-fish_1387-896.jpg",
|
||||
},
|
||||
{
|
||||
title: "Rich Oxtail",
|
||||
description: "Rich flavor, butter-tender.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-baked-liver-onion-plate-pine-tree-branch-salt-pepper-garlic_140725-99819.jpg",
|
||||
},
|
||||
{
|
||||
title: "Ackee & Saltfish",
|
||||
description: "Our national breakfast favorite.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/shrimp-caesar-salad-table_140725-453.jpg",
|
||||
},
|
||||
{
|
||||
title: "Sweet Plantains",
|
||||
description: "Perfect side for any dish.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/spicy-vegan-salad-with-sticky-berry-grain-rice_1339-8177.jpg",
|
||||
},
|
||||
{
|
||||
title: "Beef Patties",
|
||||
description: "Crispy golden island pastry.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cookies-muffins-wooden-board_114579-20734.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MenuSection />
|
||||
|
||||
<div id="about-heritage" data-section="about-heritage">
|
||||
<SectionErrorBoundary name="about-heritage">
|
||||
<PricingLayeredCards
|
||||
tag="Our Commitment"
|
||||
title="Quality You Can Taste"
|
||||
description="Flexible dining options for every appetite."
|
||||
plans={[
|
||||
{
|
||||
tag: "Quick",
|
||||
price: "$12",
|
||||
description: "Perfect lunch specials.",
|
||||
primaryButton: {
|
||||
text: "View Menu",
|
||||
href: "#menu",
|
||||
},
|
||||
features: [
|
||||
"Lunch size portions",
|
||||
"Daily fresh sides",
|
||||
"Fast service",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Premium",
|
||||
price: "$25",
|
||||
description: "Signature dinner plates.",
|
||||
primaryButton: {
|
||||
text: "Order Now",
|
||||
href: "#order",
|
||||
},
|
||||
features: [
|
||||
"Full portion entree",
|
||||
"Authentic dessert included",
|
||||
"Priority seating",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutHeritageSection />
|
||||
|
||||
<div id="reviews" data-section="reviews">
|
||||
<SectionErrorBoundary name="reviews">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Testimonials"
|
||||
title="What Kingston Says"
|
||||
description="Join our community of satisfied diners who love the island taste."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Marcus A.",
|
||||
role: "Food Blogger",
|
||||
quote: "The absolute best jerk chicken I've ever had in Kingston. Truly authentic.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/lovely-couple-having-fun-while-eating-sushi-rolls-restaurant-modern-terrace_496169-1902.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah P.",
|
||||
role: "Regular Guest",
|
||||
quote: "Staff is wonderful and the atmosphere always feels like home. Must-try!",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/closeup-goodlooking-tender-friendly-pretty-middleaged-30s-woman-extend-arm-hold-camera-hand-smiling-broadly-taking-selfie-photographing-record-videomessage-calling-husband_176420-51274.jpg",
|
||||
},
|
||||
{
|
||||
name: "David K.",
|
||||
role: "Local Business Owner",
|
||||
quote: "Perfect for a quick, high-quality lunch. Never disappointed.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/happy-young-female-student-eating-fast-food-fast-food-cheat-meal_169016-67586.jpg",
|
||||
},
|
||||
{
|
||||
name: "Emily R.",
|
||||
role: "Tourist",
|
||||
quote: "Authentic Jamaican experience. The fish and chips were incredible.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-friends-with-drinks-tacos_23-2149073435.jpg",
|
||||
},
|
||||
{
|
||||
name: "James B.",
|
||||
role: "Culinary Student",
|
||||
quote: "The recipes here are legit. Respect to the kitchen staff.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-smiley-woman-sitting-table_23-2149655602.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ReviewsSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsSimpleCards
|
||||
tag="By The Numbers"
|
||||
title="Serving You Excellence"
|
||||
description="Our passion for island flavor speaks through our community impact."
|
||||
metrics={[
|
||||
{
|
||||
value: "15+",
|
||||
description: "Years of authentic service",
|
||||
},
|
||||
{
|
||||
value: "4.8★",
|
||||
description: "Average customer rating",
|
||||
},
|
||||
{
|
||||
value: "20k+",
|
||||
description: "Meals served with love",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
<LocationHoursSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Visit Us Today"
|
||||
text="Join us at Ladys Restaurant for an unforgettable island meal. We're open daily from 11 AM – 10 PM."
|
||||
primaryButton={{
|
||||
text: "Reserve a Table",
|
||||
href: "#reserve",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Get Directions",
|
||||
href: "#map",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
39
src/pages/HomePage/sections/About.tsx
Normal file
39
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,39 @@
|
||||
// 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 AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import { Clock, Leaf, Utensils } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="Our Story"
|
||||
title="A Legacy of Island Taste"
|
||||
description="Born in the heart of Kingston, our restaurant carries forward generations of family recipes, bringing the soul of Jamaica to your plate. Every ingredient is sourced with care, honoring local traditions."
|
||||
items={[
|
||||
{
|
||||
icon: Utensils,
|
||||
title: "Authentic Recipes",
|
||||
description: "Generations of family cooking passed down.",
|
||||
},
|
||||
{
|
||||
icon: Leaf,
|
||||
title: "Farm Fresh",
|
||||
description: "Sourcing fresh produce daily.",
|
||||
},
|
||||
{
|
||||
icon: Clock,
|
||||
title: "Open Daily",
|
||||
description: "Serving you from morning to night.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/asian-people-having-dinner-party_23-2149552643.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
50
src/pages/HomePage/sections/AboutHeritage.tsx
Normal file
50
src/pages/HomePage/sections/AboutHeritage.tsx
Normal file
@@ -0,0 +1,50 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "about-heritage" section.
|
||||
|
||||
import React from 'react';
|
||||
import PricingLayeredCards from '@/components/sections/pricing/PricingLayeredCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutHeritageSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about-heritage" data-section="about-heritage">
|
||||
<SectionErrorBoundary name="about-heritage">
|
||||
<PricingLayeredCards
|
||||
tag="Our Commitment"
|
||||
title="Quality You Can Taste"
|
||||
description="Flexible dining options for every appetite."
|
||||
plans={[
|
||||
{
|
||||
tag: "Quick",
|
||||
price: "$12",
|
||||
description: "Perfect lunch specials.",
|
||||
primaryButton: {
|
||||
text: "View Menu",
|
||||
href: "#menu",
|
||||
},
|
||||
features: [
|
||||
"Lunch size portions",
|
||||
"Daily fresh sides",
|
||||
"Fast service",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Premium",
|
||||
price: "$25",
|
||||
description: "Signature dinner plates.",
|
||||
primaryButton: {
|
||||
text: "Order Now",
|
||||
href: "#order",
|
||||
},
|
||||
features: [
|
||||
"Full portion entree",
|
||||
"Authentic dessert included",
|
||||
"Priority seating",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
27
src/pages/HomePage/sections/Contact.tsx
Normal file
27
src/pages/HomePage/sections/Contact.tsx
Normal 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 Today"
|
||||
text="Join us at Ladys Restaurant for an unforgettable island meal. We're open daily from 11 AM – 10 PM."
|
||||
primaryButton={{
|
||||
text: "Reserve a Table",
|
||||
href: "#reserve",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Get Directions",
|
||||
href: "#map",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
42
src/pages/HomePage/sections/Features.tsx
Normal file
42
src/pages/HomePage/sections/Features.tsx
Normal file
@@ -0,0 +1,42 @@
|
||||
// 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 FeaturesBentoGrid from '@/components/sections/features/FeaturesBentoGrid';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesBentoGrid
|
||||
tag="Why Eat With Us"
|
||||
title="The Ladys Experience"
|
||||
description="More than just a meal, it's a taste of home in the heart of Kingston."
|
||||
features={[
|
||||
{
|
||||
title: "Fresh Ingredients",
|
||||
description: "Local produce delivered daily.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/father-s-day-composition-with-slate-decorative-items_23-2147632060.jpg",
|
||||
},
|
||||
{
|
||||
title: "Easy Booking",
|
||||
description: "Reserve tables online in seconds.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/delicious-thanksgiving-day-food-table_23-2149082314.jpg",
|
||||
},
|
||||
{
|
||||
title: "Relaxing Ambiance",
|
||||
description: "Authentic atmosphere for your dining.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/futuristic-kitchen-interior-design_23-2151821268.jpg",
|
||||
},
|
||||
{
|
||||
title: "Award Rated",
|
||||
description: "Consistent 4.8 star experience.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-woman-having-lunch-with-salmon-with-brown-noodles-soup-berry-salad-cocktail_141793-2455.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
48
src/pages/HomePage/sections/Hero.tsx
Normal file
48
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,48 @@
|
||||
// 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 HeroBillboardTiltedCarousel from '@/components/sections/hero/HeroBillboardTiltedCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardTiltedCarousel
|
||||
tag="Authentic Jamaican Cuisine"
|
||||
title="Authentic Jamaican Flavors, Local Kingston Pride"
|
||||
description="Award-rated dishes like our signature fish and chips, served fresh daily. Experience island taste without leaving the city."
|
||||
primaryButton={{
|
||||
text: "Order Now",
|
||||
href: "#order",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "View Menu",
|
||||
href: "#menu",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-delicious-thanksgiving-meal_23-2148629558.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-seafood-appetizers-fish-squid-shrimps-with-sauces-salad_141793-5091.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cute-elegant-calm-happy-woman-green-summer-dress-sits-with-coffee-cafe-enjoying-morning_343596-3672.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/chef-preparing-recipe_23-2148145590.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/grilled-duck-breast-with-vegetable-salad_1203-9889.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cooked-red-crawfish-closeup_132075-14134.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
99
src/pages/HomePage/sections/LocationHours.tsx
Normal file
99
src/pages/HomePage/sections/LocationHours.tsx
Normal file
@@ -0,0 +1,99 @@
|
||||
import { MapPin, Clock, Phone } from 'lucide-react';
|
||||
import ScrollReveal from '@/components/ui/ScrollReveal';
|
||||
import TextAnimation from '@/components/ui/TextAnimation';
|
||||
import Card from '@/components/ui/Card';
|
||||
|
||||
export default function LocationHoursSection() {
|
||||
return (
|
||||
<section data-webild-section="location-hours" id="location-hours" className="relative w-full py-24 bg-background">
|
||||
<div className="max-w-content-width mx-auto px-6">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
|
||||
<ScrollReveal variant="slide-up">
|
||||
<Card className="w-full h-[400px] lg:h-[500px] overflow-hidden rounded-3xl relative">
|
||||
<iframe
|
||||
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d60699.64817551415!2d-76.83758416410408!3d18.01804868352667!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x8edb3f74618e11a3%3A0x868c22252a12361b!2sKingston%2C%20Jamaica!5e0!3m2!1sen!2sus!4v1715093845000!5m2!1sen!2sus"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style={{ border: 0 }}
|
||||
allowFullScreen={false}
|
||||
loading="lazy"
|
||||
referrerPolicy="no-referrer-when-downgrade"
|
||||
className="absolute inset-0"
|
||||
></iframe>
|
||||
</Card>
|
||||
</ScrollReveal>
|
||||
|
||||
<div className="flex flex-col justify-center space-y-8">
|
||||
<div>
|
||||
<TextAnimation
|
||||
text="Location & Hours"
|
||||
variant="slide-up"
|
||||
tag="h2"
|
||||
className="text-4xl md:text-5xl font-bold text-foreground mb-4"
|
||||
gradientText={false}
|
||||
/>
|
||||
<p className="text-lg text-muted-foreground">
|
||||
Visit us in the heart of Kingston for an authentic Jamaican dining experience.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<ScrollReveal variant="slide-up" delay={0.2}>
|
||||
<Card className="p-8 space-y-6">
|
||||
<div className="flex items-start space-x-4">
|
||||
<div className="p-3 bg-primary-cta/10 rounded-full text-primary-cta">
|
||||
<Clock className="w-6 h-6" />
|
||||
</div>
|
||||
<div className="w-full">
|
||||
<h3 className="text-xl font-semibold text-foreground mb-3">Hours of Operation</h3>
|
||||
<ul className="space-y-2 text-muted-foreground w-full">
|
||||
<li className="flex justify-between">
|
||||
<span>Monday</span>
|
||||
<span className="font-medium">Closed</span>
|
||||
</li>
|
||||
<li className="flex justify-between">
|
||||
<span>Tuesday - Thursday</span>
|
||||
<span className="font-medium">11:00 AM - 9:00 PM</span>
|
||||
</li>
|
||||
<li className="flex justify-between">
|
||||
<span>Friday - Saturday</span>
|
||||
<span className="font-medium">11:00 AM - 10:00 PM</span>
|
||||
</li>
|
||||
<li className="flex justify-between">
|
||||
<span>Sunday</span>
|
||||
<span className="font-medium">12:00 PM - 8:00 PM</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="h-px w-full bg-border" />
|
||||
|
||||
<div className="flex items-start space-x-4">
|
||||
<div className="p-3 bg-primary-cta/10 rounded-full text-primary-cta">
|
||||
<MapPin className="w-6 h-6" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-xl font-semibold text-foreground mb-1">Address</h3>
|
||||
<p className="text-muted-foreground">123 Kingston Ave, Kingston, Jamaica</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="h-px w-full bg-border" />
|
||||
|
||||
<div className="flex items-start space-x-4">
|
||||
<div className="p-3 bg-primary-cta/10 rounded-full text-primary-cta">
|
||||
<Phone className="w-6 h-6" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-xl font-semibold text-foreground mb-1">Phone</h3>
|
||||
<p className="text-muted-foreground">(876) 555-0198</p>
|
||||
</div>
|
||||
</div>
|
||||
</Card>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
64
src/pages/HomePage/sections/Menu.tsx
Normal file
64
src/pages/HomePage/sections/Menu.tsx
Normal 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="Daily Menu"
|
||||
title="Flavor Highlights"
|
||||
description="Explore our curated selections of authentic Jamaican favorites."
|
||||
items={[
|
||||
{
|
||||
title: "Jerk Chicken",
|
||||
description: "Slow-smoked with secret spices.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-veal-meat-sauce-pita-bread-with-vegetable-salad_141793-4257.jpg",
|
||||
},
|
||||
{
|
||||
title: "Curry Goat",
|
||||
description: "Traditional savory tender stew.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/view-tasty-goulash-tomatoes_23-2149388106.jpg",
|
||||
},
|
||||
{
|
||||
title: "Fried Snapper",
|
||||
description: "Fresh catch prepared daily.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/grilled-fish_1387-896.jpg",
|
||||
},
|
||||
{
|
||||
title: "Rich Oxtail",
|
||||
description: "Rich flavor, butter-tender.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-baked-liver-onion-plate-pine-tree-branch-salt-pepper-garlic_140725-99819.jpg",
|
||||
},
|
||||
{
|
||||
title: "Ackee & Saltfish",
|
||||
description: "Our national breakfast favorite.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/shrimp-caesar-salad-table_140725-453.jpg",
|
||||
},
|
||||
{
|
||||
title: "Sweet Plantains",
|
||||
description: "Perfect side for any dish.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/spicy-vegan-salad-with-sticky-berry-grain-rice_1339-8177.jpg",
|
||||
},
|
||||
{
|
||||
title: "Beef Patties",
|
||||
description: "Crispy golden island pastry.",
|
||||
href: "#order",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cookies-muffins-wooden-board_114579-20734.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
34
src/pages/HomePage/sections/Metrics.tsx
Normal file
34
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,34 @@
|
||||
// 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 MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsSimpleCards
|
||||
tag="By The Numbers"
|
||||
title="Serving You Excellence"
|
||||
description="Our passion for island flavor speaks through our community impact."
|
||||
metrics={[
|
||||
{
|
||||
value: "15+",
|
||||
description: "Years of authentic service",
|
||||
},
|
||||
{
|
||||
value: "4.8★",
|
||||
description: "Average customer rating",
|
||||
},
|
||||
{
|
||||
value: "20k+",
|
||||
description: "Meals served with love",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Reviews.tsx
Normal file
52
src/pages/HomePage/sections/Reviews.tsx
Normal file
@@ -0,0 +1,52 @@
|
||||
// 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 TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ReviewsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="reviews" data-section="reviews">
|
||||
<SectionErrorBoundary name="reviews">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Testimonials"
|
||||
title="What Kingston Says"
|
||||
description="Join our community of satisfied diners who love the island taste."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Marcus A.",
|
||||
role: "Food Blogger",
|
||||
quote: "The absolute best jerk chicken I've ever had in Kingston. Truly authentic.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/lovely-couple-having-fun-while-eating-sushi-rolls-restaurant-modern-terrace_496169-1902.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah P.",
|
||||
role: "Regular Guest",
|
||||
quote: "Staff is wonderful and the atmosphere always feels like home. Must-try!",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/closeup-goodlooking-tender-friendly-pretty-middleaged-30s-woman-extend-arm-hold-camera-hand-smiling-broadly-taking-selfie-photographing-record-videomessage-calling-husband_176420-51274.jpg",
|
||||
},
|
||||
{
|
||||
name: "David K.",
|
||||
role: "Local Business Owner",
|
||||
quote: "Perfect for a quick, high-quality lunch. Never disappointed.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/happy-young-female-student-eating-fast-food-fast-food-cheat-meal_169016-67586.jpg",
|
||||
},
|
||||
{
|
||||
name: "Emily R.",
|
||||
role: "Tourist",
|
||||
quote: "Authentic Jamaican experience. The fish and chips were incredible.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-friends-with-drinks-tacos_23-2149073435.jpg",
|
||||
},
|
||||
{
|
||||
name: "James B.",
|
||||
role: "Culinary Student",
|
||||
quote: "The recipes here are legit. Respect to the kitchen staff.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-smiley-woman-sitting-table_23-2149655602.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user