Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c5f54a558e | |||
| 49b5ed0ac4 | |||
| ee481ad04c | |||
| 2e1f368521 | |||
| 0bc592730f | |||
| 11ce9966af | |||
| c865208215 | |||
| 11335f42bc | |||
| 606a14d774 | |||
| 41ef43b80e | |||
| ab487a44fb |
@@ -1,12 +1,12 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||||
import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered';
|
import NavbarStyleCentered from "@/components/navbar/NavbarStyleCentered/NavbarStyleCentered";
|
||||||
import HeroSplitDualMedia from '@/components/sections/hero/HeroSplitDualMedia';
|
import HeroSplitDualMedia from "@/components/sections/hero/HeroSplitDualMedia";
|
||||||
import MetricSplitMediaAbout from '@/components/sections/about/MetricSplitMediaAbout';
|
import MetricSplitMediaAbout from "@/components/sections/about/MetricSplitMediaAbout";
|
||||||
import FooterBase from '@/components/sections/footer/FooterBase';
|
import FooterBase from "@/components/sections/footer/FooterBase";
|
||||||
import Link from 'next/link';
|
import Link from "next/link";
|
||||||
import { Sparkles, MapPin } from 'lucide-react';
|
import { Sparkles, MapPin } from "lucide-react";
|
||||||
|
|
||||||
export default function ContactPage() {
|
export default function ContactPage() {
|
||||||
return (
|
return (
|
||||||
@@ -22,21 +22,19 @@ export default function ContactPage() {
|
|||||||
secondaryButtonStyle="glass"
|
secondaryButtonStyle="glass"
|
||||||
headingFontWeight="extrabold"
|
headingFontWeight="extrabold"
|
||||||
>
|
>
|
||||||
{/* Navbar */}
|
|
||||||
<div id="nav" data-section="nav">
|
<div id="nav" data-section="nav">
|
||||||
<NavbarStyleCentered
|
<NavbarStyleCentered
|
||||||
navItems={[
|
navItems={[
|
||||||
{ name: "Home", id: "home" },
|
{ name: "Home", id: "/" },
|
||||||
{ name: "Menu", id: "menu" },
|
{ name: "Menu", id: "/menu" },
|
||||||
{ name: "About", id: "about" },
|
{ name: "About", id: "#about" },
|
||||||
{ name: "Contact", id: "contact" }
|
{ name: "Contact", id: "/contact" },
|
||||||
]}
|
]}
|
||||||
button={{ text: "Order Online", href: "order" }}
|
button={{ text: "Order Online", href: "/contact" }}
|
||||||
brandName="Leavity"
|
brandName="Leavity"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Contact Hero */}
|
|
||||||
<div id="hero" data-section="hero">
|
<div id="hero" data-section="hero">
|
||||||
<HeroSplitDualMedia
|
<HeroSplitDualMedia
|
||||||
title="Get In Touch"
|
title="Get In Touch"
|
||||||
@@ -47,24 +45,23 @@ export default function ContactPage() {
|
|||||||
background={{ variant: "plain" }}
|
background={{ variant: "plain" }}
|
||||||
mediaItems={[
|
mediaItems={[
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/hand-mixing-flour_1170-2250.jpg?_wi=4", imageAlt: "Golden sourdough crust and artisan bread baking"
|
imageSrc:
|
||||||
},
|
"http://img.b2bpic.net/free-photo/hand-mixing-flour_1170-2250.jpg?_wi=4", imageAlt: "Golden sourdough crust and artisan bread baking"},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/assorted-biscuits-candies-cup-tea-gray-surface_114579-20936.jpg?_wi=3", imageAlt: "Specialty coffee with care and precision"
|
imageSrc:
|
||||||
}
|
"http://img.b2bpic.net/free-photo/assorted-biscuits-candies-cup-tea-gray-surface_114579-20936.jpg?_wi=3", imageAlt: "Specialty coffee with care and precision"},
|
||||||
]}
|
]}
|
||||||
mediaAnimation="slide-up"
|
mediaAnimation="slide-up"
|
||||||
rating={5}
|
rating={5}
|
||||||
ratingText="Loved by Salt Lake City"
|
ratingText="Loved by Salt Lake City"
|
||||||
buttons={[
|
buttons={[
|
||||||
{ text: "Order Online", href: "#contact" },
|
{ text: "Order Online", href: "/contact" },
|
||||||
{ text: "Call Us", href: "#contact" }
|
{ text: "Call Us", href: "/contact" },
|
||||||
]}
|
]}
|
||||||
buttonAnimation="slide-up"
|
buttonAnimation="slide-up"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Location & Hours */}
|
|
||||||
<div id="location" data-section="location">
|
<div id="location" data-section="location">
|
||||||
<MetricSplitMediaAbout
|
<MetricSplitMediaAbout
|
||||||
title="Visit Leavity"
|
title="Visit Leavity"
|
||||||
@@ -74,7 +71,7 @@ export default function ContactPage() {
|
|||||||
tagAnimation="slide-up"
|
tagAnimation="slide-up"
|
||||||
metrics={[
|
metrics={[
|
||||||
{ value: "Mon-Sun", title: "6 AM - 7 PM" },
|
{ value: "Mon-Sun", title: "6 AM - 7 PM" },
|
||||||
{ value: "365", title: "Days Fresh Bread" }
|
{ value: "365", title: "Days Fresh Bread" },
|
||||||
]}
|
]}
|
||||||
imageSrc="http://img.b2bpic.net/free-photo/hand-mixing-flour_1170-2250.jpg?_wi=5"
|
imageSrc="http://img.b2bpic.net/free-photo/hand-mixing-flour_1170-2250.jpg?_wi=5"
|
||||||
imageAlt="Leavity Bread & Coffee location and storefront"
|
imageAlt="Leavity Bread & Coffee location and storefront"
|
||||||
@@ -84,7 +81,6 @@ export default function ContactPage() {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* CTA */}
|
|
||||||
<div id="cta" data-section="cta">
|
<div id="cta" data-section="cta">
|
||||||
<MetricSplitMediaAbout
|
<MetricSplitMediaAbout
|
||||||
title="Experience Bread The Way It Was Meant To Be"
|
title="Experience Bread The Way It Was Meant To Be"
|
||||||
@@ -94,7 +90,7 @@ export default function ContactPage() {
|
|||||||
tagAnimation="slide-up"
|
tagAnimation="slide-up"
|
||||||
metrics={[
|
metrics={[
|
||||||
{ value: "Salt Lake", title: "City Location" },
|
{ value: "Salt Lake", title: "City Location" },
|
||||||
{ value: "Fresh", title: "Every Morning" }
|
{ value: "Fresh", title: "Every Morning" },
|
||||||
]}
|
]}
|
||||||
imageSrc="http://img.b2bpic.net/free-photo/donuts-bagels-crackers-bakery-products-belarusian-food-products_132075-13054.jpg?_wi=2"
|
imageSrc="http://img.b2bpic.net/free-photo/donuts-bagels-crackers-bakery-products-belarusian-food-products_132075-13054.jpg?_wi=2"
|
||||||
imageAlt="Fresh daily breads and pastries at Leavity"
|
imageAlt="Fresh daily breads and pastries at Leavity"
|
||||||
@@ -104,7 +100,6 @@ export default function ContactPage() {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Footer */}
|
|
||||||
<div id="footer" data-section="footer">
|
<div id="footer" data-section="footer">
|
||||||
<FooterBase
|
<FooterBase
|
||||||
logoText="Leavity Bread & Coffee"
|
logoText="Leavity Bread & Coffee"
|
||||||
@@ -112,25 +107,25 @@ export default function ContactPage() {
|
|||||||
columns={[
|
columns={[
|
||||||
{
|
{
|
||||||
title: "Shop", items: [
|
title: "Shop", items: [
|
||||||
{ label: "Menu", href: "#menu" },
|
{ label: "Menu", href: "/menu" },
|
||||||
{ label: "Order Online", href: "#contact" },
|
{ label: "Order Online", href: "/contact" },
|
||||||
{ label: "Catering", href: "#contact" }
|
{ label: "Catering", href: "/contact" },
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Leavity", items: [
|
title: "Leavity", items: [
|
||||||
{ label: "Our Story", href: "#about" },
|
{ label: "Our Story", href: "#about" },
|
||||||
{ label: "Our Philosophy", href: "#about" },
|
{ label: "Our Philosophy", href: "#about" },
|
||||||
{ label: "Careers", href: "#" }
|
{ label: "Careers", href: "#" },
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Connect", items: [
|
title: "Connect", items: [
|
||||||
{ label: "Contact Us", href: "#contact" },
|
{ label: "Contact Us", href: "/contact" },
|
||||||
{ label: "Instagram", href: "https://instagram.com" },
|
{ label: "Instagram", href: "https://instagram.com" },
|
||||||
{ label: "Privacy Policy", href: "#" }
|
{ label: "Privacy Policy", href: "#" },
|
||||||
]
|
],
|
||||||
}
|
},
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,52 +7,47 @@ import MetricSplitMediaAbout from "@/components/sections/about/MetricSplitMediaA
|
|||||||
import FooterBase from "@/components/sections/footer/FooterBase";
|
import FooterBase from "@/components/sections/footer/FooterBase";
|
||||||
import { Sparkles, MapPin } from "lucide-react";
|
import { Sparkles, MapPin } from "lucide-react";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
export default function MenuPage() {
|
export default function MenuPage() {
|
||||||
const menuCategories = [
|
const [activeTab, setActiveTab] = useState("breads");
|
||||||
{
|
|
||||||
name: "Artisan Breads", items: [
|
const menuCategories = {
|
||||||
{
|
breads: [
|
||||||
name: "Country Sourdough", description: "Golden crust, airy interior, deeply fermented flavor. 20 hours of slow fermentation.", price: "$6.50"},
|
{
|
||||||
{
|
name: "Country Sourdough", description: "Golden crust, airy interior, deeply fermented flavor. 20 hours of slow fermentation.", price: "$6.50"},
|
||||||
name: "Sesame Baguette", description: "Crispy exterior with sesame seeds, tender interior. Perfect for sharing.", price: "$5.00"},
|
{
|
||||||
{
|
name: "Sesame Baguette", description: "Crispy exterior with sesame seeds, tender interior. Perfect for sharing.", price: "$5.00"},
|
||||||
name: "Garlic Sourdough", description: "Sourdough infused with roasted garlic and herbs. A savory delight.", price: "$7.00"},
|
{
|
||||||
{
|
name: "Garlic Sourdough", description: "Sourdough infused with roasted garlic and herbs. A savory delight.", price: "$7.00"},
|
||||||
name: "Ciabatta", description: "Italian-style with open crumb structure. Ideal for sandwiches and dipping.", price: "$4.50"},
|
{
|
||||||
],
|
name: "Ciabatta", description: "Italian-style with open crumb structure. Ideal for sandwiches and dipping.", price: "$4.50"},
|
||||||
},
|
],
|
||||||
{
|
sandwiches: [
|
||||||
name: "Sandwiches & Toasts", items: [
|
{
|
||||||
{
|
name: "Pig & Fig", description: "Savory pork paired with sweet figs on freshly baked focaccia.", price: "$12.00"},
|
||||||
name: "Pig & Fig", description: "Savory pork paired with sweet figs on freshly baked focaccia.", price: "$12.00"},
|
{
|
||||||
{
|
name: "Avocado Toast", description: "Creamy avocado, lemon, sea salt on toasted sourdough.", price: "$10.50"},
|
||||||
name: "Avocado Toast", description: "Creamy avocado, lemon, sea salt on toasted sourdough.", price: "$10.50"},
|
{
|
||||||
{
|
name: "Jambon Beurre", description: "French-inspired ham and butter on crispy baguette.", price: "$9.00"},
|
||||||
name: "Jambon Beurre", description: "French-inspired ham and butter on crispy baguette.", price: "$9.00"},
|
],
|
||||||
],
|
pastries: [
|
||||||
},
|
{
|
||||||
{
|
name: "Butter Scones", description: "Flaky, buttery scones baked fresh daily. Pairs perfectly with coffee.", price: "$3.50"},
|
||||||
name: "Pastries", items: [
|
{
|
||||||
{
|
name: "Seasonal Pastries", description: "Rotating selection of croissants, tarts, and Danish pastries.", price: "$4.00-$6.00"},
|
||||||
name: "Butter Scones", description: "Flaky, buttery scones baked fresh daily. Pairs perfectly with coffee.", price: "$3.50"},
|
],
|
||||||
{
|
coffee: [
|
||||||
name: "Seasonal Pastries", description: "Rotating selection of croissants, tarts, and Danish pastries.", price: "$4.00-$6.00"},
|
{
|
||||||
],
|
name: "Cortado", description: "Espresso balanced with steamed milk. A Spanish classic.", price: "$4.50"},
|
||||||
},
|
{
|
||||||
{
|
name: "Mexican Mocha", description: "Dark chocolate, espresso, cinnamon, and steamed milk.", price: "$5.50"},
|
||||||
name: "Coffee & Drinks", items: [
|
{
|
||||||
{
|
name: "Biscoff Cookie Latte", description: "Warm, cozy espresso drink with delicate caramel spice.", price: "$6.00"},
|
||||||
name: "Cortado", description: "Espresso balanced with steamed milk. A Spanish classic.", price: "$4.50"},
|
{
|
||||||
{
|
name: "Pour Over Coffee", description: "Single-origin, freshly brewed pour over. Made with precision.", price: "$5.00"},
|
||||||
name: "Mexican Mocha", description: "Dark chocolate, espresso, cinnamon, and steamed milk.", price: "$5.50"},
|
],
|
||||||
{
|
};
|
||||||
name: "Biscoff Cookie Latte", description: "Warm, cozy espresso drink with delicate caramel spice.", price: "$6.00"},
|
|
||||||
{
|
|
||||||
name: "Pour Over Coffee", description: "Single-origin, freshly brewed pour over. Made with precision.", price: "$5.00"},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ThemeProvider
|
<ThemeProvider
|
||||||
@@ -71,13 +66,14 @@ export default function MenuPage() {
|
|||||||
<NavbarStyleCentered
|
<NavbarStyleCentered
|
||||||
brandName="Leavity"
|
brandName="Leavity"
|
||||||
navItems={[
|
navItems={[
|
||||||
{ name: "Home", id: "home" },
|
{ name: "Home", id: "/" },
|
||||||
{ name: "Menu", id: "menu" },
|
{ name: "Menu", id: "/menu" },
|
||||||
{ name: "About", id: "about" },
|
{ name: "About", id: "#about" },
|
||||||
{ name: "Contact", id: "contact" },
|
{ name: "Contact", id: "/contact" },
|
||||||
]}
|
]}
|
||||||
button={{
|
button={{
|
||||||
text: "Order Online", href: "order"}}
|
text: "Order Online", href: "/contact"
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -91,38 +87,63 @@ export default function MenuPage() {
|
|||||||
background={{ variant: "plain" }}
|
background={{ variant: "plain" }}
|
||||||
mediaItems={[
|
mediaItems={[
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-bread-black-background_23-2148288109.jpg?_wi=2", imageAlt: "Premium artisanal sourdough loaves"},
|
imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/close-up-view-bread-black-background_23-2148288109.jpg?_wi=2", imageAlt: "Premium artisanal sourdough loaves"},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/overhead-view-freshly-baked-hot-dogs-fig-slices-almonds-kitchen-counter_23-2147956752.jpg?_wi=2", imageAlt: "Gourmet sandwiches and pastries"},
|
imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/overhead-view-freshly-baked-hot-dogs-fig-slices-almonds-kitchen-counter_23-2147956752.jpg?_wi=2", imageAlt: "Gourmet sandwiches and pastries"},
|
||||||
]}
|
]}
|
||||||
mediaAnimation="slide-up"
|
mediaAnimation="slide-up"
|
||||||
rating={5}
|
rating={5}
|
||||||
ratingText="Crafted with Care"
|
ratingText="Crafted with Care"
|
||||||
buttons={[
|
buttons={[{ text: "Order Now", href: "/contact" }]}
|
||||||
{ text: "Order Now", href: "#contact" },
|
|
||||||
]}
|
|
||||||
buttonAnimation="slide-up"
|
buttonAnimation="slide-up"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="menu-categories" data-section="menu-categories" className="mx-auto px-4 md:px-6 py-12 md:py-20 max-w-6xl">
|
<div id="menu-categories" data-section="menu-categories" className="mx-auto px-4 md:px-6 py-12 md:py-20 max-w-6xl">
|
||||||
<div className="grid gap-12">
|
<div className="space-y-12">
|
||||||
{menuCategories.map((category, idx) => (
|
<div className="text-center space-y-3">
|
||||||
<div key={idx} className="space-y-6">
|
<h2 className="text-4xl md:text-5xl font-extrabold text-foreground">Browse Our Menu</h2>
|
||||||
<h2 className="text-3xl md:text-4xl font-extrabold text-foreground">{category.name}</h2>
|
<p className="text-foreground/70 text-lg">Click tabs to explore different categories</p>
|
||||||
<div className="grid gap-4 md:grid-cols-2">
|
</div>
|
||||||
{category.items.map((item, itemIdx) => (
|
|
||||||
<div key={itemIdx} className="p-6 rounded-lg bg-card border border-accent/20 hover:border-accent/50 transition-all">
|
<div className="flex flex-wrap gap-4 justify-center">
|
||||||
<div className="flex justify-between items-start mb-2">
|
{[
|
||||||
<h3 className="text-lg md:text-xl font-bold text-foreground">{item.name}</h3>
|
{ id: "breads", label: "Artisan Breads" },
|
||||||
<span className="text-primary-cta font-semibold text-lg">{item.price}</span>
|
{ id: "sandwiches", label: "Sandwiches & Toasts" },
|
||||||
</div>
|
{ id: "pastries", label: "Pastries" },
|
||||||
<p className="text-foreground/70 text-sm md:text-base">{item.description}</p>
|
{ id: "coffee", label: "Coffee & Drinks" },
|
||||||
</div>
|
].map((tab) => (
|
||||||
))}
|
<button
|
||||||
|
key={tab.id}
|
||||||
|
onClick={() => setActiveTab(tab.id)}
|
||||||
|
className={`px-6 py-3 rounded-lg font-semibold transition-all duration-300 ${
|
||||||
|
activeTab === tab.id
|
||||||
|
? "bg-primary-cta text-primary-cta-text shadow-lg scale-105"
|
||||||
|
: "bg-card text-foreground border border-accent/30 hover:border-accent/60"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{tab.label}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-3 animate-fade-in">
|
||||||
|
{menuCategories[activeTab as keyof typeof menuCategories].map((item, idx) => (
|
||||||
|
<div
|
||||||
|
key={idx}
|
||||||
|
className="p-6 rounded-lg bg-card border border-accent/20 hover:border-accent/50 transition-all hover:shadow-md hover:scale-105 duration-300 cursor-pointer"
|
||||||
|
onClick={() => console.log(`Clicked: ${item.name}`)}
|
||||||
|
>
|
||||||
|
<div className="flex justify-between items-start mb-2">
|
||||||
|
<h3 className="text-lg font-bold text-foreground">{item.name}</h3>
|
||||||
|
<span className="text-primary-cta font-semibold text-lg">{item.price}</span>
|
||||||
|
</div>
|
||||||
|
<p className="text-foreground/70 text-sm">{item.description}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
))}
|
||||||
))}
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -152,9 +173,9 @@ export default function MenuPage() {
|
|||||||
columns={[
|
columns={[
|
||||||
{
|
{
|
||||||
title: "Shop", items: [
|
title: "Shop", items: [
|
||||||
{ label: "Menu", href: "#menu" },
|
{ label: "Menu", href: "/menu" },
|
||||||
{ label: "Order Online", href: "#contact" },
|
{ label: "Order Online", href: "/contact" },
|
||||||
{ label: "Catering", href: "#contact" },
|
{ label: "Catering", href: "/contact" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -166,7 +187,7 @@ export default function MenuPage() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Connect", items: [
|
title: "Connect", items: [
|
||||||
{ label: "Contact Us", href: "#contact" },
|
{ label: "Contact Us", href: "/contact" },
|
||||||
{ label: "Instagram", href: "https://instagram.com" },
|
{ label: "Instagram", href: "https://instagram.com" },
|
||||||
{ label: "Privacy Policy", href: "#" },
|
{ label: "Privacy Policy", href: "#" },
|
||||||
],
|
],
|
||||||
|
|||||||
145
src/app/page.tsx
145
src/app/page.tsx
@@ -10,8 +10,34 @@ import MetricSplitMediaAbout from "@/components/sections/about/MetricSplitMediaA
|
|||||||
import FooterBase from "@/components/sections/footer/FooterBase";
|
import FooterBase from "@/components/sections/footer/FooterBase";
|
||||||
import { Sparkles, Award, Heart, Star, MapPin, ArrowRight } from "lucide-react";
|
import { Sparkles, Award, Heart, Star, MapPin, ArrowRight } from "lucide-react";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
export default function HomePage() {
|
export default function HomePage() {
|
||||||
|
const [activeTab, setActiveTab] = useState("breads");
|
||||||
|
|
||||||
|
const menuData = {
|
||||||
|
breads: [
|
||||||
|
{ name: "Country Sourdough", desc: "20-hour fermented golden crust" },
|
||||||
|
{ name: "Sesame Baguette", desc: "Crispy with sesame seeds" },
|
||||||
|
{ name: "Garlic Sourdough", desc: "Roasted garlic & herbs" },
|
||||||
|
],
|
||||||
|
sandwiches: [
|
||||||
|
{ name: "Pig & Fig", desc: "Savory pork & sweet figs" },
|
||||||
|
{ name: "Avocado Toast", desc: "Creamy avocado on sourdough" },
|
||||||
|
{ name: "Jambon Beurre", desc: "French ham & butter" },
|
||||||
|
],
|
||||||
|
pastries: [
|
||||||
|
{ name: "Butter Scones", desc: "Flaky & buttery" },
|
||||||
|
{ name: "Croissants", desc: "European-style layered" },
|
||||||
|
{ name: "Seasonal Tarts", desc: "Rotating selection" },
|
||||||
|
],
|
||||||
|
coffee: [
|
||||||
|
{ name: "Cortado", desc: "Espresso & steamed milk" },
|
||||||
|
{ name: "Mexican Mocha", desc: "Chocolate, espresso & cinnamon" },
|
||||||
|
{ name: "Biscoff Latte", desc: "Caramel spice warmth" },
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ThemeProvider
|
<ThemeProvider
|
||||||
defaultButtonVariant="hover-magnetic"
|
defaultButtonVariant="hover-magnetic"
|
||||||
@@ -29,13 +55,14 @@ export default function HomePage() {
|
|||||||
<NavbarStyleCentered
|
<NavbarStyleCentered
|
||||||
brandName="Leavity"
|
brandName="Leavity"
|
||||||
navItems={[
|
navItems={[
|
||||||
{ name: "Home", id: "home" },
|
{ name: "Home", id: "/" },
|
||||||
{ name: "Menu", id: "menu" },
|
{ name: "Menu", id: "/menu" },
|
||||||
{ name: "About", id: "about" },
|
{ name: "About", id: "#about" },
|
||||||
{ name: "Contact", id: "contact" },
|
{ name: "Contact", id: "/contact" },
|
||||||
]}
|
]}
|
||||||
button={{
|
button={{
|
||||||
text: "Order Online", href: "order"}}
|
text: "Order Online", href: "/contact"
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -49,16 +76,18 @@ export default function HomePage() {
|
|||||||
background={{ variant: "plain" }}
|
background={{ variant: "plain" }}
|
||||||
mediaItems={[
|
mediaItems={[
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/hand-mixing-flour_1170-2250.jpg?_wi=1", imageAlt: "Golden sourdough crust and artisan bread baking"},
|
imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/hand-mixing-flour_1170-2250.jpg?_wi=1", imageAlt: "Golden sourdough crust and artisan bread baking"},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/assorted-biscuits-candies-cup-tea-gray-surface_114579-20936.jpg?_wi=1", imageAlt: "Specialty coffee with care and precision"},
|
imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/assorted-biscuits-candies-cup-tea-gray-surface_114579-20936.jpg?_wi=1", imageAlt: "Specialty coffee with care and precision"},
|
||||||
]}
|
]}
|
||||||
mediaAnimation="slide-up"
|
mediaAnimation="slide-up"
|
||||||
rating={5}
|
rating={5}
|
||||||
ratingText="Loved by Salt Lake City"
|
ratingText="Loved by Salt Lake City"
|
||||||
buttons={[
|
buttons={[
|
||||||
{ text: "View Menu", href: "#menu" },
|
{ text: "View Menu", href: "/menu" },
|
||||||
{ text: "Order Online", href: "#contact" },
|
{ text: "Order Online", href: "/contact" },
|
||||||
]}
|
]}
|
||||||
buttonAnimation="slide-up"
|
buttonAnimation="slide-up"
|
||||||
/>
|
/>
|
||||||
@@ -73,14 +102,20 @@ export default function HomePage() {
|
|||||||
tagAnimation="slide-up"
|
tagAnimation="slide-up"
|
||||||
features={[
|
features={[
|
||||||
{
|
{
|
||||||
title: "Slow Fermented Sourdough", description: "Fermented for over 20 hours to create rich flavor, perfect texture, and exceptional digestibility.", imageSrc: "http://img.b2bpic.net/free-photo/man-putting-tomato-white-tablecloth-with-bread-slices-eggs-garlic-gloves-around_114579-2649.jpg", imageAlt: "20-hour slow fermented sourdough process", buttonIcon: ArrowRight,
|
title: "Slow Fermented Sourdough", description:
|
||||||
buttonHref: "#menu"},
|
"Fermented for over 20 hours to create rich flavor, perfect texture, and exceptional digestibility.", imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/man-putting-tomato-white-tablecloth-with-bread-slices-eggs-garlic-gloves-around_114579-2649.jpg", imageAlt: "20-hour slow fermented sourdough process", buttonIcon: ArrowRight,
|
||||||
|
buttonHref: "/menu"},
|
||||||
{
|
{
|
||||||
title: "Craft Coffee", description: "Every cup brewed with precision using high-quality beans roasted with intention and care.", imageSrc: "http://img.b2bpic.net/free-photo/front-view-man-making-coffee_23-2150354568.jpg", imageAlt: "Specialty coffee preparation and pour-over brewing", buttonIcon: ArrowRight,
|
title: "Craft Coffee", description:
|
||||||
buttonHref: "#menu"},
|
"Every cup brewed with precision using high-quality beans roasted with intention and care.", imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/front-view-man-making-coffee_23-2150354568.jpg", imageAlt: "Specialty coffee preparation and pour-over brewing", buttonIcon: ArrowRight,
|
||||||
|
buttonHref: "/menu"},
|
||||||
{
|
{
|
||||||
title: "Handcrafted Daily", description: "Each loaf and pastry made fresh every morning by skilled artisans dedicated to the craft.", imageSrc: "http://img.b2bpic.net/free-photo/donuts-bagels-crackers-bakery-products-belarusian-food-products_132075-13054.jpg?_wi=1", imageAlt: "Daily handcrafted breads and pastries", buttonIcon: ArrowRight,
|
title: "Handcrafted Daily", description:
|
||||||
buttonHref: "#menu"},
|
"Each loaf and pastry made fresh every morning by skilled artisans dedicated to the craft.", imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/donuts-bagels-crackers-bakery-products-belarusian-food-products_132075-13054.jpg?_wi=1", imageAlt: "Daily handcrafted breads and pastries", buttonIcon: ArrowRight,
|
||||||
|
buttonHref: "/menu"},
|
||||||
]}
|
]}
|
||||||
textboxLayout="default"
|
textboxLayout="default"
|
||||||
useInvertedBackground={false}
|
useInvertedBackground={false}
|
||||||
@@ -88,6 +123,51 @@ export default function HomePage() {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="menu" data-section="menu" className="mx-auto px-4 md:px-6 py-12 md:py-20 max-w-6xl">
|
||||||
|
<div className="space-y-8">
|
||||||
|
<div className="text-center space-y-3">
|
||||||
|
<h2 className="text-4xl md:text-5xl font-extrabold text-foreground">Our Menu</h2>
|
||||||
|
<p className="text-foreground/70 text-lg">Explore our carefully curated offerings</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex flex-wrap gap-4 justify-center">
|
||||||
|
{[
|
||||||
|
{ id: "breads", label: "Breads" },
|
||||||
|
{ id: "sandwiches", label: "Sandwiches" },
|
||||||
|
{ id: "pastries", label: "Pastries" },
|
||||||
|
{ id: "coffee", label: "Coffee" },
|
||||||
|
].map((tab) => (
|
||||||
|
<button
|
||||||
|
key={tab.id}
|
||||||
|
onClick={() => setActiveTab(tab.id)}
|
||||||
|
className={`px-6 py-3 rounded-lg font-semibold transition-all duration-300 ${
|
||||||
|
activeTab === tab.id
|
||||||
|
? "bg-primary-cta text-primary-cta-text shadow-lg"
|
||||||
|
: "bg-card text-foreground border border-accent/30 hover:border-accent/60"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{tab.label}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-3">
|
||||||
|
{menuData[activeTab as keyof typeof menuData].map((item, idx) => (
|
||||||
|
<div
|
||||||
|
key={idx}
|
||||||
|
className="p-6 rounded-lg bg-card border border-accent/20 hover:border-accent/50 transition-all hover:shadow-md cursor-pointer"
|
||||||
|
onClick={() => console.log(`Clicked: ${item.name}`)}
|
||||||
|
>
|
||||||
|
<h3 className="text-lg font-bold text-foreground mb-2">
|
||||||
|
{item.name}
|
||||||
|
</h3>
|
||||||
|
<p className="text-foreground/70 text-sm">{item.desc}</p>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="products" data-section="products">
|
<div id="products" data-section="products">
|
||||||
<ProductCardTwo
|
<ProductCardTwo
|
||||||
title="Signature Products"
|
title="Signature Products"
|
||||||
@@ -98,15 +178,18 @@ export default function HomePage() {
|
|||||||
products={[
|
products={[
|
||||||
{
|
{
|
||||||
id: "1", brand: "Leavity", name: "Country Sourdough", price: "Made Fresh Daily", rating: 5,
|
id: "1", brand: "Leavity", name: "Country Sourdough", price: "Made Fresh Daily", rating: 5,
|
||||||
reviewCount: "127+", imageSrc: "http://img.b2bpic.net/free-photo/close-up-view-bread-black-background_23-2148288109.jpg?_wi=1", imageAlt: "Golden country sourdough loaf", isFavorited: false,
|
reviewCount: "127+", imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/close-up-view-bread-black-background_23-2148288109.jpg?_wi=1", imageAlt: "Golden country sourdough loaf", isFavorited: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "2", brand: "Leavity", name: "Pig & Fig Sandwich", price: "Made Fresh Daily", rating: 5,
|
id: "2", brand: "Leavity", name: "Pig & Fig Sandwich", price: "Made Fresh Daily", rating: 5,
|
||||||
reviewCount: "98+", imageSrc: "http://img.b2bpic.net/free-photo/overhead-view-freshly-baked-hot-dogs-fig-slices-almonds-kitchen-counter_23-2147956752.jpg?_wi=1", imageAlt: "Artisanal pork and fig sandwich on focaccia", isFavorited: false,
|
reviewCount: "98+", imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/overhead-view-freshly-baked-hot-dogs-fig-slices-almonds-kitchen-counter_23-2147956752.jpg?_wi=1", imageAlt: "Artisanal pork and fig sandwich on focaccia", isFavorited: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "3", brand: "Leavity", name: "Biscoff Cookie Latte", price: "Made Fresh Daily", rating: 5,
|
id: "3", brand: "Leavity", name: "Biscoff Cookie Latte", price: "Made Fresh Daily", rating: 5,
|
||||||
reviewCount: "156+", imageSrc: "http://img.b2bpic.net/free-photo/assorted-biscuits-candies-cup-tea-gray-surface_114579-20936.jpg?_wi=2", imageAlt: "Warm biscoff cookie latte with caramel spice", isFavorited: false,
|
reviewCount: "156+", imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/assorted-biscuits-candies-cup-tea-gray-surface_114579-20936.jpg?_wi=2", imageAlt: "Warm biscoff cookie latte with caramel spice", isFavorited: false,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
gridVariant="three-columns-all-equal-width"
|
gridVariant="three-columns-all-equal-width"
|
||||||
@@ -127,22 +210,28 @@ export default function HomePage() {
|
|||||||
testimonials={[
|
testimonials={[
|
||||||
{
|
{
|
||||||
id: "1", name: "Sarah Mitchell", role: "Local Regular", company: "Salt Lake City", rating: 5,
|
id: "1", name: "Sarah Mitchell", role: "Local Regular", company: "Salt Lake City", rating: 5,
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-sexy-slim-young-female-jacket-jeans-leani_613910-16189.jpg", imageAlt: "Sarah Mitchell"},
|
imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/portrait-sexy-slim-young-female-jacket-jeans-leani_613910-16189.jpg", imageAlt: "Sarah Mitchell"},
|
||||||
{
|
{
|
||||||
id: "2", name: "James Rodriguez", role: "Food Enthusiast", company: "Salt Lake City", rating: 5,
|
id: "2", name: "James Rodriguez", role: "Food Enthusiast", company: "Salt Lake City", rating: 5,
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/handsome-business-man-wearing-suit-loking-camera-confused-with-raised-hands-standing-pink-background_141793-54101.jpg", imageAlt: "James Rodriguez"},
|
imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/handsome-business-man-wearing-suit-loking-camera-confused-with-raised-hands-standing-pink-background_141793-54101.jpg", imageAlt: "James Rodriguez"},
|
||||||
{
|
{
|
||||||
id: "3", name: "Emma Thompson", role: "Wellness Coach", company: "Salt Lake City", rating: 5,
|
id: "3", name: "Emma Thompson", role: "Wellness Coach", company: "Salt Lake City", rating: 5,
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/business-woman-with-crossed-arms-smiling_23-2148095677.jpg", imageAlt: "Emma Thompson"},
|
imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/business-woman-with-crossed-arms-smiling_23-2148095677.jpg", imageAlt: "Emma Thompson"},
|
||||||
{
|
{
|
||||||
id: "4", name: "Michael Chen", role: "Coffee Connoisseur", company: "Salt Lake City", rating: 5,
|
id: "4", name: "Michael Chen", role: "Coffee Connoisseur", company: "Salt Lake City", rating: 5,
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/closeup-handsome-young-businessman-trendy-suit-smiling-standing-against-white-background_1258-170863.jpg", imageAlt: "Michael Chen"},
|
imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/closeup-handsome-young-businessman-trendy-suit-smiling-standing-against-white-background_1258-170863.jpg", imageAlt: "Michael Chen"},
|
||||||
{
|
{
|
||||||
id: "5", name: "Jessica Parker", role: "Bread Lover", company: "Salt Lake City", rating: 5,
|
id: "5", name: "Jessica Parker", role: "Bread Lover", company: "Salt Lake City", rating: 5,
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-businesswoman-pointing-copy-space_329181-1212.jpg", imageAlt: "Jessica Parker"},
|
imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/smiling-businesswoman-pointing-copy-space_329181-1212.jpg", imageAlt: "Jessica Parker"},
|
||||||
{
|
{
|
||||||
id: "6", name: "David Wilson", role: "Community Member", company: "Salt Lake City", rating: 5,
|
id: "6", name: "David Wilson", role: "Community Member", company: "Salt Lake City", rating: 5,
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/emotions-people-concept-headshot-serious-looking-handsome-man-with-beard-looking-confident-determined_1258-26730.jpg", imageAlt: "David Wilson"},
|
imageSrc:
|
||||||
|
"http://img.b2bpic.net/free-photo/emotions-people-concept-headshot-serious-looking-handsome-man-with-beard-looking-confident-determined_1258-26730.jpg", imageAlt: "David Wilson"},
|
||||||
]}
|
]}
|
||||||
kpiItems={[
|
kpiItems={[
|
||||||
{ value: "20+", label: "Years of Baking Excellence" },
|
{ value: "20+", label: "Years of Baking Excellence" },
|
||||||
@@ -182,9 +271,9 @@ export default function HomePage() {
|
|||||||
columns={[
|
columns={[
|
||||||
{
|
{
|
||||||
title: "Shop", items: [
|
title: "Shop", items: [
|
||||||
{ label: "Menu", href: "#menu" },
|
{ label: "Menu", href: "/menu" },
|
||||||
{ label: "Order Online", href: "#contact" },
|
{ label: "Order Online", href: "/contact" },
|
||||||
{ label: "Catering", href: "#contact" },
|
{ label: "Catering", href: "/contact" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -196,7 +285,7 @@ export default function HomePage() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Connect", items: [
|
title: "Connect", items: [
|
||||||
{ label: "Contact Us", href: "#contact" },
|
{ label: "Contact Us", href: "/contact" },
|
||||||
{ label: "Instagram", href: "https://instagram.com" },
|
{ label: "Instagram", href: "https://instagram.com" },
|
||||||
{ label: "Privacy Policy", href: "#" },
|
{ label: "Privacy Policy", href: "#" },
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user