Merge version_2_1781528313614 into main #1
@@ -1,224 +1,35 @@
|
||||
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import FeaturesTaggedCards from '@/components/sections/features/FeaturesTaggedCards';
|
||||
import HeroBrand from '@/components/sections/hero/HeroBrand';
|
||||
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 FeaturesSection from './HomePage/sections/Features';
|
||||
import ProductsSection from './HomePage/sections/Products';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import InstagramFeedSection from './HomePage/sections/InstagramFeed';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBrand
|
||||
brand="Love Over Coffee Gurugram"
|
||||
description="Your cozy corner for artisanal coffee, handcrafted pastas, and warm moments in Sector 23."
|
||||
primaryButton={{
|
||||
text: "Reserve a Table",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "View Menu",
|
||||
href: "#products",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/tanned-lady-is-sitting-cafe-with-wooden-furniture-watching-video-phone_197531-17107.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTextSplit
|
||||
title="A Space for Stories"
|
||||
descriptions={[
|
||||
"Located in the heart of Gurugram Sector 23, Love Over Coffee is more than just a cafe. It's a sanctuary where the aroma of freshly ground beans meets the comfort of home-cooked favorites.",
|
||||
"Whether you are looking for a quiet corner to work, a space for a catch-up, or just a perfect brownie shake to brighten your day, we are here to serve you with love and attention.",
|
||||
]}
|
||||
primaryButton={{
|
||||
text: "Get Directions",
|
||||
href: "https://maps.google.com",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesTaggedCards
|
||||
tag="Signature Highlights"
|
||||
title="Taste the Perfection"
|
||||
description="From our popular Popcorn Cappuccino to our classic Italian pastas, every dish is crafted for excellence."
|
||||
items={[
|
||||
{
|
||||
tag: "Pasta",
|
||||
title: "Pesto Pasta",
|
||||
description: "Fresh basil, pine nuts, and parmesan in our signature sauce.",
|
||||
primaryButton: {
|
||||
text: "Order Online",
|
||||
href: "#",
|
||||
},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stir-fried-macaroni-with-tomato-chili-pepper-seeds-basil-white-dish_1150-22168.jpg",
|
||||
},
|
||||
{
|
||||
tag: "Coffee",
|
||||
title: "Popcorn Cappuccino",
|
||||
description: "A unique blend of specialty coffee with a salty, buttery twist.",
|
||||
primaryButton: {
|
||||
text: "Order Online",
|
||||
href: "#",
|
||||
},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beverage-topped-with-sliced-dried-citrus-flower_141793-618.jpg",
|
||||
},
|
||||
{
|
||||
tag: "Pizza",
|
||||
title: "Margherita Pizza",
|
||||
description: "Classic thin-crust pizza with mozzarella and fresh basil.",
|
||||
primaryButton: {
|
||||
text: "Order Online",
|
||||
href: "#",
|
||||
},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-chef-preparing-pizza_23-2150235785.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesImageBento
|
||||
tag="Full Menu"
|
||||
title="Cravings Satisfied"
|
||||
description="Explore our extensive menu ranging from refreshing frappes to hearty meals."
|
||||
items={[
|
||||
{
|
||||
title: "Brownie Shake",
|
||||
description: "Decadent chocolate brownie shake.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/iced-chocolate_1339-4413.jpg",
|
||||
},
|
||||
{
|
||||
title: "Cheesy Nachos",
|
||||
description: "Crispy nachos loaded with cheese and salsa.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-fruit-salad-with-nachos_23-2148283084.jpg",
|
||||
},
|
||||
{
|
||||
title: "Falafel Wrap",
|
||||
description: "Freshly wrapped Mediterranean goodness.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/vertical-view-healthy-vegan-salads-dried-pineapples-lavash-wraps-stained-white-surface_179666-34351.jpg",
|
||||
},
|
||||
{
|
||||
title: "White Sauce Pasta",
|
||||
description: "Creamy, smooth, and delicious.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/penne-pasta-with-mixed-ingredients-orange-juice_114579-3212.jpg",
|
||||
},
|
||||
{
|
||||
title: "Lasagna",
|
||||
description: "Layers of classic baked lasagna.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tasty-italian-pasta-dish_1084-85.jpg",
|
||||
},
|
||||
{
|
||||
title: "Hazelnut Frappe",
|
||||
description: "Nutty, cold, and refreshing.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cup-coffee-wooden-board_114579-20074.jpg",
|
||||
},
|
||||
{
|
||||
title: "Lemon Iced Tea",
|
||||
description: "The perfect summer refresher.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/ice-drinking-cocktails-glass_1203-9369.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ProductsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeCards
|
||||
tag="Guest Stories"
|
||||
title="Loved by our Community"
|
||||
description="Discover why local foodies in Gurugram choose us for their daily coffee fix."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah Johnson",
|
||||
role: "Food Blogger",
|
||||
quote: "Best cafe in Sector 23! The vibe is perfect for work and catching up.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-drinking-coffee-spacious-cafeteria_23-2150424007.jpg",
|
||||
},
|
||||
{
|
||||
name: "Michael Chen",
|
||||
role: "Architect",
|
||||
quote: "Their pasta is awesome. I love the cold coffee, it's consistent every single time.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-sitting-cafe-drinking-coffee-working-computer_1303-14740.jpg",
|
||||
},
|
||||
{
|
||||
name: "Emily Rodriguez",
|
||||
role: "Designer",
|
||||
quote: "Cozy, inviting ambiance. It's my go-to place to focus and relax.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/lovely-women-relaxing-indoors_23-2148422441.jpg",
|
||||
},
|
||||
{
|
||||
name: "David Kim",
|
||||
role: "Manager",
|
||||
quote: "Excellent service and attentive staff. Always a pleasant experience here.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/guy-with-long-hair-dressed-fashionable-denim-jacket-cafe_273609-3904.jpg",
|
||||
},
|
||||
{
|
||||
name: "Priya Sharma",
|
||||
role: "Local Resident",
|
||||
quote: "A wonderful local find. The menu variety is impressive and everything is delicious.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/happy-woman-sitting-coffee-shop_273609-2854.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTwoColumn
|
||||
tag="Common Questions"
|
||||
title="Need Help?"
|
||||
description="Here is what you need to know about our cafe."
|
||||
items={[
|
||||
{
|
||||
question: "What are your operating hours?",
|
||||
answer: "We are open daily from 10:00 AM to 10:30 PM.",
|
||||
},
|
||||
{
|
||||
question: "Do you accept reservations?",
|
||||
answer: "Yes, we encourage reservations for groups. Please call us at 098188 25064.",
|
||||
},
|
||||
{
|
||||
question: "Is there parking available?",
|
||||
answer: "Yes, there is convenient shopping center parking right at our location.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer delivery?",
|
||||
answer: "Yes, you can order online via our menu link on Zomato.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Visit Us"
|
||||
text="Join us today for a cup of coffee and a bite. We are located in District Shopping Center, Sector 23, Gurugram."
|
||||
primaryButton={{
|
||||
text: "Call to Reserve",
|
||||
href: "tel:09818825064",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Get Directions",
|
||||
href: "https://maps.google.com",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
<InstagramFeedSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
26
src/pages/HomePage/sections/About.tsx
Normal file
26
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
// 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="A Space for Stories"
|
||||
descriptions={[
|
||||
"Located in the heart of Gurugram Sector 23, Love Over Coffee is more than just a cafe. It's a sanctuary where the aroma of freshly ground beans meets the comfort of home-cooked favorites.",
|
||||
"Whether you are looking for a quiet corner to work, a space for a catch-up, or just a perfect brownie shake to brighten your day, we are here to serve you with love and attention.",
|
||||
]}
|
||||
primaryButton={{
|
||||
text: "Get Directions",
|
||||
href: "https://maps.google.com",
|
||||
}}
|
||||
/>
|
||||
</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"
|
||||
text="Join us today for a cup of coffee and a bite. We are located in District Shopping Center, Sector 23, Gurugram."
|
||||
primaryButton={{
|
||||
text: "Call to Reserve",
|
||||
href: "tel:09818825064",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Get Directions",
|
||||
href: "https://maps.google.com",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Faq.tsx
Normal file
38
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,38 @@
|
||||
// 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="Common Questions"
|
||||
title="Need Help?"
|
||||
description="Here is what you need to know about our cafe."
|
||||
items={[
|
||||
{
|
||||
question: "What are your operating hours?",
|
||||
answer: "We are open daily from 10:00 AM to 10:30 PM.",
|
||||
},
|
||||
{
|
||||
question: "Do you accept reservations?",
|
||||
answer: "Yes, we encourage reservations for groups. Please call us at 098188 25064.",
|
||||
},
|
||||
{
|
||||
question: "Is there parking available?",
|
||||
answer: "Yes, there is convenient shopping center parking right at our location.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer delivery?",
|
||||
answer: "Yes, you can order online via our menu link on Zomato.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Features.tsx
Normal file
52
src/pages/HomePage/sections/Features.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 "features" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesTaggedCards from '@/components/sections/features/FeaturesTaggedCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesTaggedCards
|
||||
tag="Signature Highlights"
|
||||
title="Taste the Perfection"
|
||||
description="From our popular Popcorn Cappuccino to our classic Italian pastas, every dish is crafted for excellence."
|
||||
items={[
|
||||
{
|
||||
tag: "Pasta",
|
||||
title: "Pesto Pasta",
|
||||
description: "Fresh basil, pine nuts, and parmesan in our signature sauce.",
|
||||
primaryButton: {
|
||||
text: "Order Online",
|
||||
href: "#",
|
||||
},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stir-fried-macaroni-with-tomato-chili-pepper-seeds-basil-white-dish_1150-22168.jpg",
|
||||
},
|
||||
{
|
||||
tag: "Coffee",
|
||||
title: "Popcorn Cappuccino",
|
||||
description: "A unique blend of specialty coffee with a salty, buttery twist.",
|
||||
primaryButton: {
|
||||
text: "Order Online",
|
||||
href: "#",
|
||||
},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beverage-topped-with-sliced-dried-citrus-flower_141793-618.jpg",
|
||||
},
|
||||
{
|
||||
tag: "Pizza",
|
||||
title: "Margherita Pizza",
|
||||
description: "Classic thin-crust pizza with mozzarella and fresh basil.",
|
||||
primaryButton: {
|
||||
text: "Order Online",
|
||||
href: "#",
|
||||
},
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-chef-preparing-pizza_23-2150235785.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
src/pages/HomePage/sections/Hero.tsx
Normal file
28
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
// 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 HeroBrand from '@/components/sections/hero/HeroBrand';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBrand
|
||||
brand="Love Over Coffee Gurugram"
|
||||
description="Your cozy corner for artisanal coffee, handcrafted pastas, and warm moments in Sector 23."
|
||||
primaryButton={{
|
||||
text: "Reserve a Table",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "View Menu",
|
||||
href: "#products",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/tanned-lady-is-sitting-cafe-with-wooden-furniture-watching-video-phone_197531-17107.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
95
src/pages/HomePage/sections/InstagramFeed.tsx
Normal file
95
src/pages/HomePage/sections/InstagramFeed.tsx
Normal file
@@ -0,0 +1,95 @@
|
||||
import { motion } from "motion/react"
|
||||
import Button from "@/components/ui/Button"
|
||||
import TextAnimation from "@/components/ui/TextAnimation"
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal"
|
||||
import ImageOrVideo from "@/components/ui/ImageOrVideo"
|
||||
import { Instagram } from "lucide-react"
|
||||
|
||||
export default function InstagramFeed() {
|
||||
const feedItems = [
|
||||
{
|
||||
imageSrc: "https://images.unsplash.com/photo-1497935586351-b67a49e012bf?auto=format&fit=crop&q=80&w=800",
|
||||
title: "Popcorn Cappuccino",
|
||||
description: "Our signature brew."
|
||||
},
|
||||
{
|
||||
imageSrc: "https://images.unsplash.com/photo-1554118811-1e0d58224f24?auto=format&fit=crop&q=80&w=800",
|
||||
title: "Cozy Vibes",
|
||||
description: "Your perfect workspace."
|
||||
},
|
||||
{
|
||||
imageSrc: "https://images.unsplash.com/photo-1574071318508-1cdbab80d002?auto=format&fit=crop&q=80&w=800",
|
||||
title: "Margherita Pizza",
|
||||
description: "Fresh out of the oven."
|
||||
},
|
||||
{
|
||||
imageSrc: "https://images.unsplash.com/photo-1461023058943-07fcbe16d735?auto=format&fit=crop&q=80&w=800",
|
||||
title: "Hazelnut Frappe",
|
||||
description: "Cool down with our frappe."
|
||||
},
|
||||
{
|
||||
imageSrc: "https://images.unsplash.com/photo-1473093295043-cdd812d0e601?auto=format&fit=crop&q=80&w=800",
|
||||
title: "Pesto Pasta",
|
||||
description: "A crowd favorite."
|
||||
},
|
||||
{
|
||||
imageSrc: "https://images.unsplash.com/photo-1606313564200-e75d5e30476c?auto=format&fit=crop&q=80&w=800",
|
||||
title: "Chocolate Brownie",
|
||||
description: "Decadent and rich."
|
||||
}
|
||||
];
|
||||
|
||||
return (
|
||||
<section data-webild-section="instagram-feed" id="instagram-feed" className="relative w-full py-24 bg-background overflow-hidden">
|
||||
<div className="w-content-width mx-auto px-6">
|
||||
<div className="flex flex-col items-center text-center mb-16">
|
||||
<ScrollReveal variant="fade">
|
||||
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-card text-foreground text-sm font-medium mb-6">
|
||||
<Instagram className="w-4 h-4" />
|
||||
<span>Social</span>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
|
||||
<TextAnimation
|
||||
text="Follow Us @LoveOverCoffee"
|
||||
variant="fade-blur"
|
||||
tag="h2"
|
||||
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
|
||||
gradientText={false}
|
||||
/>
|
||||
|
||||
<ScrollReveal variant="fade" delay={0.2}>
|
||||
<p className="text-lg text-muted-foreground max-w-2xl mx-auto mb-8">
|
||||
Share your moments with us! Tag us to get featured on our feed.
|
||||
</p>
|
||||
<Button
|
||||
text="Follow on Instagram"
|
||||
variant="primary"
|
||||
href="https://instagram.com"
|
||||
/>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-2 md:grid-cols-3 gap-4 md:gap-6">
|
||||
{feedItems.map((item, index) => (
|
||||
<ScrollReveal variant="fade"
|
||||
key={index}
|
||||
delay={0.1 * index}
|
||||
className="group relative aspect-square rounded-theme overflow-hidden card"
|
||||
>
|
||||
<ImageOrVideo
|
||||
imageSrc={item.imageSrc}
|
||||
className="w-full h-full object-cover transition-transform duration-500 group-hover:scale-110"
|
||||
/>
|
||||
<div className="absolute inset-0 bg-black/60 opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex flex-col justify-center items-center p-6 text-center">
|
||||
<Instagram className="w-8 h-8 text-white mb-3" />
|
||||
<h3 className="text-white font-bold text-lg mb-1">{item.title}</h3>
|
||||
<p className="text-white/80 text-sm">{item.description}</p>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Products.tsx
Normal file
57
src/pages/HomePage/sections/Products.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "products" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ProductsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesImageBento
|
||||
tag="Full Menu"
|
||||
title="Cravings Satisfied"
|
||||
description="Explore our extensive menu ranging from refreshing frappes to hearty meals."
|
||||
items={[
|
||||
{
|
||||
title: "Brownie Shake",
|
||||
description: "Decadent chocolate brownie shake.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/iced-chocolate_1339-4413.jpg",
|
||||
},
|
||||
{
|
||||
title: "Cheesy Nachos",
|
||||
description: "Crispy nachos loaded with cheese and salsa.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-fruit-salad-with-nachos_23-2148283084.jpg",
|
||||
},
|
||||
{
|
||||
title: "Falafel Wrap",
|
||||
description: "Freshly wrapped Mediterranean goodness.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/vertical-view-healthy-vegan-salads-dried-pineapples-lavash-wraps-stained-white-surface_179666-34351.jpg",
|
||||
},
|
||||
{
|
||||
title: "White Sauce Pasta",
|
||||
description: "Creamy, smooth, and delicious.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/penne-pasta-with-mixed-ingredients-orange-juice_114579-3212.jpg",
|
||||
},
|
||||
{
|
||||
title: "Lasagna",
|
||||
description: "Layers of classic baked lasagna.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tasty-italian-pasta-dish_1084-85.jpg",
|
||||
},
|
||||
{
|
||||
title: "Hazelnut Frappe",
|
||||
description: "Nutty, cold, and refreshing.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cup-coffee-wooden-board_114579-20074.jpg",
|
||||
},
|
||||
{
|
||||
title: "Lemon Iced Tea",
|
||||
description: "The perfect summer refresher.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/ice-drinking-cocktails-glass_1203-9369.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Testimonials.tsx
Normal file
52
src/pages/HomePage/sections/Testimonials.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 "testimonials" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialMarqueeCards from '@/components/sections/testimonial/TestimonialMarqueeCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeCards
|
||||
tag="Guest Stories"
|
||||
title="Loved by our Community"
|
||||
description="Discover why local foodies in Gurugram choose us for their daily coffee fix."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah Johnson",
|
||||
role: "Food Blogger",
|
||||
quote: "Best cafe in Sector 23! The vibe is perfect for work and catching up.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-drinking-coffee-spacious-cafeteria_23-2150424007.jpg",
|
||||
},
|
||||
{
|
||||
name: "Michael Chen",
|
||||
role: "Architect",
|
||||
quote: "Their pasta is awesome. I love the cold coffee, it's consistent every single time.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-sitting-cafe-drinking-coffee-working-computer_1303-14740.jpg",
|
||||
},
|
||||
{
|
||||
name: "Emily Rodriguez",
|
||||
role: "Designer",
|
||||
quote: "Cozy, inviting ambiance. It's my go-to place to focus and relax.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/lovely-women-relaxing-indoors_23-2148422441.jpg",
|
||||
},
|
||||
{
|
||||
name: "David Kim",
|
||||
role: "Manager",
|
||||
quote: "Excellent service and attentive staff. Always a pleasant experience here.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/guy-with-long-hair-dressed-fashionable-denim-jacket-cafe_273609-3904.jpg",
|
||||
},
|
||||
{
|
||||
name: "Priya Sharma",
|
||||
role: "Local Resident",
|
||||
quote: "A wonderful local find. The menu variety is impressive and everything is delicious.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/happy-woman-sitting-coffee-shop_273609-2854.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user