Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9741023bee | |||
| 3e2e6b4c01 | |||
| 3a2905a8b0 | |||
| 153ad3e960 |
@@ -1,7 +1,7 @@
|
||||
"use client"
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
|
||||
import HeroLogo from '@/components/sections/hero/HeroLogo';
|
||||
import HeroBillboard from '@/components/sections/hero/HeroBillboard';
|
||||
import MediaAbout from '@/components/sections/about/MediaAbout';
|
||||
import FeatureCardMedia from '@/components/sections/feature/FeatureCardMedia';
|
||||
import ProductCardOne from '@/components/sections/product/ProductCardOne';
|
||||
@@ -43,17 +43,49 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<div id="hero-section" data-section="hero-section">
|
||||
<HeroLogo
|
||||
logoText="Warm & Crumb"
|
||||
description="Artisan Baked Goods Delivered to Your Doorstep"
|
||||
<HeroBillboard
|
||||
title="Artisanal Baked Goods"
|
||||
description="Handcrafted with passion and premium ingredients for an unforgettable taste experience"
|
||||
background={{ variant: "radial-gradient" }}
|
||||
tag="Fresh Daily"
|
||||
tagIcon={null}
|
||||
tagAnimation="fade-in"
|
||||
buttons={[
|
||||
{ text: "View Our Menu", href: "products-section" },
|
||||
{ text: "Visit Us", href: "contact-section" }
|
||||
{ text: "View Our Menu", href: "#menu", dataWebildId: "btn-1" },
|
||||
{ text: "Order Online", href: "#order", dataWebildId: "btn-2" }
|
||||
]}
|
||||
buttonAnimation="slide-up"
|
||||
imageSrc="https://img.b2bpic.net/free-photo/view-delicious-baked-bread-pastry-shop_23-2150379551.jpg"
|
||||
imageAlt="Warm and inviting bakery interior with fresh pastries on display"
|
||||
showDimOverlay={true}
|
||||
avatars={[]}
|
||||
avatarText=""
|
||||
videoSrc="https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
|
||||
videoAriaLabel="Baking process demonstration video"
|
||||
mediaAnimation="zoom-in"
|
||||
marqueeItems={[
|
||||
{ text: "Organic Ingredients", icon: null, dataWebildId: "marquee-1" },
|
||||
{ text: "Fresh Daily", icon: null, dataWebildId: "marquee-2" },
|
||||
{ text: "Handcrafted", icon: null, dataWebildId: "marquee-3" }
|
||||
]}
|
||||
marqueeSpeed={1}
|
||||
showMarqueeCard={true}
|
||||
ariaLabel="Welcome to Warm & Crumb Bakery"
|
||||
className=""
|
||||
containerClassName=""
|
||||
textBoxClassName=""
|
||||
titleClassName=""
|
||||
descriptionClassName=""
|
||||
tagClassName=""
|
||||
avatarGroupClassName=""
|
||||
buttonContainerClassName=""
|
||||
buttonClassName=""
|
||||
buttonTextClassName=""
|
||||
mediaWrapperClassName=""
|
||||
imageClassName=""
|
||||
marqueeClassName=""
|
||||
marqueeItemClassName=""
|
||||
marqueeCardClassName=""
|
||||
marqueeImageClassName=""
|
||||
marqueeTextClassName=""
|
||||
marqueeIconClassName=""
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -151,6 +183,14 @@ export default function LandingPage() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="flex justify-center gap-4 py-8">
|
||||
<span className="text-4xl">❤️</span>
|
||||
<span className="text-4xl">❤️</span>
|
||||
<span className="text-4xl">❤️</span>
|
||||
<span className="text-4xl">❤️</span>
|
||||
<span className="text-4xl">❤️</span>
|
||||
</div>
|
||||
|
||||
<div id="faq-section" data-section="faq-section">
|
||||
<FaqBase
|
||||
title="Frequently Asked Questions"
|
||||
|
||||
@@ -9,6 +9,7 @@ import { useButtonAnimation } from "@/components/hooks/useButtonAnimation";
|
||||
import type { LucideIcon } from "lucide-react";
|
||||
import type { ButtonConfig, ButtonAnimationType } from "@/types/button";
|
||||
import type { Avatar } from "@/components/shared/AvatarGroup";
|
||||
import { useRef, useEffect } from "react";
|
||||
|
||||
type HeroBillboardBackgroundProps = Extract<
|
||||
HeroBackgroundVariantProps,
|
||||
@@ -67,9 +68,13 @@ interface HeroBillboardProps {
|
||||
marqueeImageClassName?: string;
|
||||
marqueeTextClassName?: string;
|
||||
marqueeIconClassName?: string;
|
||||
backgroundVideoSrc?: string;
|
||||
backgroundVideoFallbackSrc?: string;
|
||||
}
|
||||
|
||||
const HeroBillboard = ({
|
||||
backgroundVideoSrc,
|
||||
backgroundVideoFallbackSrc = "https://img.b2bpic.net/free-photo/abstract-luxury-gradient-blue-background_53876-120942.jpg",
|
||||
title,
|
||||
description,
|
||||
background,
|
||||
|
||||
@@ -8,6 +8,7 @@ import ProductImage from "@/components/shared/ProductImage";
|
||||
import { cls, shouldUseInvertedText } from "@/lib/utils";
|
||||
import { useTheme } from "@/providers/themeProvider/ThemeProvider";
|
||||
import { useProducts } from "@/hooks/useProducts";
|
||||
import { useRef, useEffect } from "react";
|
||||
import type { Product } from "@/lib/api/product";
|
||||
import type { LucideIcon } from "lucide-react";
|
||||
import type { ButtonConfig, GridVariant, CardAnimationType, TitleSegment, ButtonAnimationType } from "@/components/cardStack/types";
|
||||
@@ -52,6 +53,8 @@ interface ProductCardOneProps {
|
||||
textBoxButtonContainerClassName?: string;
|
||||
textBoxButtonClassName?: string;
|
||||
textBoxButtonTextClassName?: string;
|
||||
backgroundVideoUrl?: string;
|
||||
showBackgroundVideo?: boolean;
|
||||
}
|
||||
|
||||
interface ProductCardItemProps {
|
||||
@@ -72,7 +75,7 @@ const ProductCardItem = memo(({
|
||||
cardPriceClassName = "",
|
||||
}: ProductCardItemProps) => {
|
||||
return (
|
||||
<article
|
||||
<article className="relative overflow-hidden"
|
||||
className={cls("card group relative h-full flex flex-col gap-4 cursor-pointer p-4 rounded-theme-capped", cardClassName)}
|
||||
onClick={product.onProductClick}
|
||||
role="article"
|
||||
|
||||
Reference in New Issue
Block a user