10 Commits

Author SHA1 Message Date
9e0035fd08 Update src/app/layout.tsx 2026-02-26 21:12:37 +00:00
2f689a6359 Merge version_5 into main
Merge version_5 into main
2026-02-26 21:11:48 +00:00
0045974a4e Bob AI: Add flip animation effect on hover to all product images in 2026-02-26 23:11:38 +02:00
e755dfc777 Merge version_4 into main
Merge version_4 into main
2026-02-26 21:09:12 +00:00
eafcfdc800 Bob AI: change font to Inter + Open Sans 2026-02-26 23:09:04 +02:00
c95aa9ebab Merge version_3 into main
Merge version_3 into main
2026-02-26 21:07:43 +00:00
b04375fdc0 Bob AI: make theme darker 2026-02-26 23:07:35 +02:00
248de42a44 Merge version_2 into main
Merge version_2 into main
2026-02-26 21:06:57 +00:00
b3b908e9a1 Bob AI: Replace the current NavbarLayoutFloatingInline navbar with a 2026-02-26 23:06:47 +02:00
b2602f9006 Merge version_1 into main
Merge version_1 into main
2026-02-26 21:04:58 +00:00
5 changed files with 1447 additions and 22 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -10,6 +10,7 @@ import TestimonialCardSixteen from '@/components/sections/testimonial/Testimonia
import ContactSplit from '@/components/sections/contact/ContactSplit';
import FooterCard from '@/components/sections/footer/FooterCard';
import { Award, ChefHat, Facebook, Heart, Instagram, Mail, Sparkles, Twitter } from "lucide-react";
import NavbarStyleCentered from "@/components/navbar/NavbarStyleCentered/NavbarStyleCentered";
export default function LandingPage() {
return (
@@ -26,7 +27,7 @@ export default function LandingPage() {
headingFontWeight="bold"
>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
<NavbarStyleCentered
brandName="Artisan Bakery"
navItems={[
{ name: "About", id: "about" },
@@ -35,7 +36,8 @@ export default function LandingPage() {
{ name: "Contact", id: "contact" }
]}
button={{
text: "Order Now", href: "https://example.com/order"
text: "Order Now",
href: "https://example.com/order"
}}
/>
</div>

View File

@@ -11,7 +11,7 @@ html {
body {
background-color: var(--background);
color: var(--foreground);
font-family: var(--font-nunito), sans-serif;
font-family: var(--font-open-sans), sans-serif;
position: relative;
min-height: 100vh;
overscroll-behavior: none;
@@ -24,5 +24,5 @@ h3,
h4,
h5,
h6 {
font-family: var(--font-nunito), sans-serif;
font-family: var(--font-inter), sans-serif;
}

View File

@@ -3,22 +3,22 @@
/* --vw is set by ThemeProvider */
/* --background: #f7f6f7;;
--card: #ffffff;;
--foreground: #0c1325;;
--card: #16213e;;
--foreground: #e0e0e0;;
--primary-cta: #0798ff;;
--secondary-cta: #ffffff;;
--accent: #93c7ff;;
--background-accent: #a8cde8;; */
--secondary-cta: #1a1a2e;;
--accent: #5a9fd4;;
--background-accent: #2d3e5f;; */
--background: #f7f6f7;;
--card: #ffffff;;
--foreground: #0c1325;;
--background: #1a1a2e;;
--card: #16213e;;
--foreground: #e0e0e0;;
--primary-cta: #0798ff;;
--primary-cta-text: #f7f6f7;;
--secondary-cta: #ffffff;;
--secondary-cta: #1a1a2e;;
--secondary-cta-text: #0c1325;;
--accent: #93c7ff;;
--background-accent: #a8cde8;;
--accent: #5a9fd4;;
--background-accent: #2d3e5f;;
/* text sizing - set by ThemeProvider */
/* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);

View File

@@ -7,6 +7,8 @@ import CardStack from "@/components/cardStack/CardStack";
import ProductImage from "@/components/shared/ProductImage";
import QuantityButton from "@/components/shared/QuantityButton";
import Button from "@/components/button/Button";
"use client";
import { useTheme } from "@/providers/themeProvider/ThemeProvider";
import { useProducts } from "@/hooks/useProducts";
import { getButtonProps } from "@/lib/buttonUtils";
@@ -75,6 +77,55 @@ interface ProductCardItemProps {
}
const ProductCardItem = memo(({
product,
shouldUseLightText,
isFromApi,
onBuyClick,
cardClassName,
imageClassName,
cardNameClassName,
quantityControlsClassName,
}: ProductCardItemProps) => {
return (
<div className={cls("flex flex-col gap-4", cardClassName)}>
<div className="relative w-full overflow-hidden rounded-lg bg-gray-100 dark:bg-gray-800">
<img
src={product.image}
alt={product.name}
className={cls(
"w-full h-full object-cover transition-transform duration-500 ease-out hover:scale-x-[-1]",
imageClassName
)}
/>
</div>
<div className="flex flex-col gap-2">
<h3 className={cls("font-semibold text-lg", cardNameClassName)}>
{product.name}
</h3>
<p className="text-sm text-gray-600 dark:text-gray-400">
{product.description}
</p>
<div className="flex items-center justify-between mt-2">
<span className="text-xl font-bold">
${product.price.toFixed(2)}
</span>
{onBuyClick && (
<button
onClick={() => onBuyClick(product.id, product.initialQuantity || 1)}
className="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors"
>
Buy
</button>
)}
</div>
</div>
</div>
);
});
ProductCardItem.displayName = "ProductCardItem";
const ProductCardThreeContent = memo(({
product,
shouldUseLightText,
isFromApi,