Merge version_1 into main

Merge version_1 into main
This commit was merged in pull request #4.
This commit is contained in:
2026-02-23 15:15:50 +00:00
5 changed files with 83 additions and 71 deletions

View File

@@ -1,7 +1,6 @@
"use client";
import ReactLenis from "lenis/react";
import BlogCardOne from "@/components/sections/blog/BlogCardOne";
import NavbarStyleFullscreen from "@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import { useBlogPosts } from "@/hooks/useBlogPosts";
@@ -37,9 +36,15 @@ export default function BlogPage() {
{isLoading ? (
<div className="text-center text-gray-600">Loading blog posts...</div>
) : posts && posts.length > 0 ? (
<BlogCardOne
posts={posts}
/>
<div className="grid gap-8">
{posts.map((post) => (
<article key={post.id} className="bg-white rounded-lg shadow-md p-6">
<h2 className="text-2xl font-bold text-gray-900 mb-2">{post.title}</h2>
<p className="text-sm text-gray-600 mb-4">{post.date}</p>
<p className="text-gray-700">{post.excerpt}</p>
</article>
))}
</div>
) : (
<div className="text-center text-gray-600">No blog posts available yet.</div>
)}

View File

@@ -10,8 +10,7 @@ const outfit = Outfit({
export const metadata: Metadata = {
title: "Artisan Bakery | Fresh Baked Goods Made with Love", description: "Discover handcrafted pastries and breads made with passion and traditional techniques. Experience the warmth of our cozy bakery.", keywords: "artisan bakery, fresh baked goods, pastries, sourdough, handcrafted bread", openGraph: {
title: "Artisan Bakery | Fresh Baked Goods Made with Love", description: "Discover handcrafted pastries and breads made with passion and traditional techniques.", type: "website"
},
title: "Artisan Bakery | Fresh Baked Goods Made with Love", description: "Discover handcrafted pastries and breads made with passion and traditional techniques.", type: "website"},
};
export default function RootLayout({

View File

@@ -85,14 +85,11 @@ export default function Home() {
useInvertedBackground={true}
features={[
{
id: "feature-1", title: "Locally Sourced Ingredients", description: "We partner with local farms and suppliers to bring you the freshest, highest-quality ingredients for our baked goods.", tag: "Fresh & Local", imageSrc: "https://img.b2bpic.net/free-photo/organic-foods-fresh-organic-food-local-farmers-market-farmers-markets-are-traditional-way-selling-agricultural-products_1391-373.jpg", imageAlt: "Farmers market local ingredients fresh produce organic foods"
},
id: "feature-1", title: "Locally Sourced Ingredients", description: "We partner with local farms and suppliers to bring you the freshest, highest-quality ingredients for our baked goods.", tag: "Fresh & Local", imageSrc: "https://img.b2bpic.net/free-photo/organic-foods-fresh-organic-food-local-farmers-market-farmers-markets-are-traditional-way-selling-agricultural-products_1391-373.jpg", imageAlt: "Farmers market local ingredients fresh produce organic foods"},
{
id: "feature-2", title: "Traditional Techniques", description: "Our bakers use time-tested methods passed down through generations to create authentic flavors and textures.", tag: "Time-Honored", imageSrc: "https://img.b2bpic.net/free-photo/painting-inspiration-supplies-placed-ready-be-painted-canvas_482257-115978.jpg", imageAlt: "Traditional baking wooden rolling pin clay pot artisan techniques"
},
id: "feature-2", title: "Traditional Techniques", description: "Our bakers use time-tested methods passed down through generations to create authentic flavors and textures.", tag: "Time-Honored", imageSrc: "https://img.b2bpic.net/free-photo/painting-inspiration-supplies-placed-ready-be-painted-canvas_482257-115978.jpg", imageAlt: "Traditional baking wooden rolling pin clay pot artisan techniques"},
{
id: "feature-3", title: "Daily Freshness", description: "Each item is baked fresh daily, ensuring peak flavor and quality when you enjoy it at home or in our cozy shop.", tag: "Made Fresh Daily", imageSrc: "https://img.b2bpic.net/free-photo/cup-milky-cappuccino-with-cookie-blue-table_114579-4248.jpg", imageAlt: "Fresh baked goods croissants rustic tray daily freshness"
},
id: "feature-3", title: "Daily Freshness", description: "Each item is baked fresh daily, ensuring peak flavor and quality when you enjoy it at home or in our cozy shop.", tag: "Made Fresh Daily", imageSrc: "https://img.b2bpic.net/free-photo/cup-milky-cappuccino-with-cookie-blue-table_114579-4248.jpg", imageAlt: "Fresh baked goods croissants rustic tray daily freshness"},
]}
/>
</div>
@@ -107,17 +104,13 @@ export default function Home() {
useInvertedBackground={true}
products={[
{
id: "croissant", name: "Butter Croissant", price: "$3.50", imageSrc: "https://img.b2bpic.net/free-photo/wooden-cutting-board-with-powdered-cacao-cookie_114579-52662.jpg", imageAlt: "Delicious butter croissant with golden layers"
},
id: "croissant", name: "Butter Croissant", price: "$3.50", imageSrc: "https://img.b2bpic.net/free-photo/wooden-cutting-board-with-powdered-cacao-cookie_114579-52662.jpg", imageAlt: "Delicious butter croissant with golden layers"},
{
id: "sourdough", name: "Sourdough Bread", price: "$5.00", imageSrc: "https://img.b2bpic.net/free-photo/close-up-fresh-bread-wooden-board_23-2148613571.jpg", imageAlt: "Freshly baked sourdough loaf with rustic crust"
},
id: "sourdough", name: "Sourdough Bread", price: "$5.00", imageSrc: "https://img.b2bpic.net/free-photo/close-up-fresh-bread-wooden-board_23-2148613571.jpg", imageAlt: "Freshly baked sourdough loaf with rustic crust"},
{
id: "chocolate-chip", name: "Chocolate Chip Cookie", price: "$2.50", imageSrc: "https://img.b2bpic.net/free-photo/plate-with-fresh-cookies-from-oven_23-2148837150.jpg", imageAlt: "Warm chocolate chip cookie with gooey center"
},
id: "chocolate-chip", name: "Chocolate Chip Cookie", price: "$2.50", imageSrc: "https://img.b2bpic.net/free-photo/plate-with-fresh-cookies-from-oven_23-2148837150.jpg", imageAlt: "Warm chocolate chip cookie with gooey center"},
{
id: "blueberry-muffin", name: "Blueberry Muffin", price: "$3.00", imageSrc: "https://img.b2bpic.net/free-photo/muffins-with-black-currant_661915-152.jpg", imageAlt: "Soft blueberry muffin with fresh berries on top"
},
id: "blueberry-muffin", name: "Blueberry Muffin", price: "$3.00", imageSrc: "https://img.b2bpic.net/free-photo/muffins-with-black-currant_661915-152.jpg", imageAlt: "Soft blueberry muffin with fresh berries on top"},
]}
/>
</div>
@@ -127,20 +120,16 @@ export default function Home() {
testimonials={[
{
id: "testimonial-1", name: "Sarah Johnson", role: "Local Food Blogger", company: "Bite & Sip", rating: 5,
imageSrc: "https://img.b2bpic.net/free-photo/beautiful-girls-buys-buns-bakery_1157-24661.jpg", imageAlt: "Customer enjoying pastry cozy bakery happy customer fresh baked goods"
},
imageSrc: "https://img.b2bpic.net/free-photo/beautiful-girls-buys-buns-bakery_1157-24661.jpg", imageAlt: "Customer enjoying pastry cozy bakery happy customer fresh baked goods"},
{
id: "testimonial-2", name: "Michael Torres", role: "Community Chef", company: "Urban Kitchen", rating: 5,
imageSrc: "https://img.b2bpic.net/free-photo/high-angle-parents-teaching-girl-cook_23-2148542888.jpg", imageAlt: "Family bakery visit children with pastries local community happy family"
},
imageSrc: "https://img.b2bpic.net/free-photo/high-angle-parents-teaching-girl-cook_23-2148542888.jpg", imageAlt: "Family bakery visit children with pastries local community happy family"},
{
id: "testimonial-3", name: "Emma Richardson", role: "Artisan Bread Enthusiast", company: "The Bread Collective", rating: 5,
imageSrc: "https://img.b2bpic.net/free-photo/tea-time-cafe_1098-14163.jpg", imageAlt: "Elderly customer warm croissant cozy seating retired customer"
},
imageSrc: "https://img.b2bpic.net/free-photo/tea-time-cafe_1098-14163.jpg", imageAlt: "Elderly customer warm croissant cozy seating retired customer"},
{
id: "testimonial-4", name: "David Chen", role: "Local Business Owner", company: "Cozy Corner Café", rating: 5,
imageSrc: "https://img.b2bpic.net/free-photo/smiling-girl-with-curly-hair-listening-music-sitting-restaurant_651396-865.jpg", imageAlt: "Young professional coffee and pastry rustic table workplace cafe"
},
imageSrc: "https://img.b2bpic.net/free-photo/smiling-girl-with-curly-hair-listening-music-sitting-restaurant_651396-865.jpg", imageAlt: "Young professional coffee and pastry rustic table workplace cafe"},
]}
gridVariant="uniform-all-items-equal"
animationType="slide-up"
@@ -162,20 +151,15 @@ export default function Home() {
description="Find answers to common questions about our artisanal baked goods, ordering process, and bakery experience."
faqs={[
{
id: "faq-1", title: "What makes your baked goods special?", content: "Our baked goods are crafted using traditional methods and high-quality ingredients sourced from local farms. Each item is made fresh daily with care and attention to detail."
},
id: "faq-1", title: "What makes your baked goods special?", content: "Our baked goods are crafted using traditional methods and high-quality ingredients sourced from local farms. Each item is made fresh daily with care and attention to detail."},
{
id: "faq-2", title: "How do I place an order?", content: "You can place orders online through our website or by calling us directly. We also offer custom orders for special occasions and events."
},
id: "faq-2", title: "How do I place an order?", content: "You can place orders online through our website or by calling us directly. We also offer custom orders for special occasions and events."},
{
id: "faq-3", title: "Do you offer gluten-free options?", content: "Yes, we have a selection of gluten-free breads and pastries available. Please inform us of any allergies when placing your order."
},
id: "faq-3", title: "Do you offer gluten-free options?", content: "Yes, we have a selection of gluten-free breads and pastries available. Please inform us of any allergies when placing your order."},
{
id: "faq-4", title: "What are your hours of operation?", content: "We're open Tuesday through Sunday from 7:00 AM to 6:00 PM. Closed on Mondays for fresh ingredient preparation."
},
id: "faq-4", title: "What are your hours of operation?", content: "We're open Tuesday through Sunday from 7:00 AM to 6:00 PM. Closed on Mondays for fresh ingredient preparation."},
{
id: "faq-5", title: "Can I customize my order?", content: "Absolutely! We love creating custom cakes, pastries, and breads for birthdays, weddings, and corporate events. Contact us for more details."
},
id: "faq-5", title: "Can I customize my order?", content: "Absolutely! We love creating custom cakes, pastries, and breads for birthdays, weddings, and corporate events. Contact us for more details."},
]}
faqsAnimation="slide-up"
textboxLayout="inline-image"

View File

@@ -5,8 +5,6 @@ import { useRouter } from "next/navigation";
import ReactLenis from "lenis/react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarStyleFullscreen from "@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen";
import ProductDetailCard from "@/components/ecommerce/productDetail/ProductDetailCard";
import ProductCart from "@/components/ecommerce/cart/ProductCart";
import { useProductDetail } from "@/hooks/useProductDetail";
function ProductDetailContent({ id }: { id: string }) {
@@ -36,21 +34,34 @@ function ProductDetailContent({ id }: { id: string }) {
}
return (
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 py-12 px-4">
<ProductDetailCard
layout="grid"
name={product.name || "Product"}
price={product.price || "N/A"}
images={product.images || []}
buttons={[{ text: "Add to Cart", onClick: handleAddToCart }]}
/>
<ProductCart
isOpen={true}
onClose={() => {}}
items={[{ id: product.id, name: product.name, price: product.price, quantity: 1 }]}
total={product.price || "0"}
buttons={[{ text: "Checkout", onClick: () => {} }]}
/>
<div className="py-12 px-4">
<div className="max-w-4xl mx-auto grid grid-cols-1 lg:grid-cols-2 gap-12">
<div>
{product.images && product.images.length > 0 && (
<img
src={product.images[0]}
alt={product.name}
className="w-full rounded-lg shadow-lg"
/>
)}
</div>
<div>
<h1 className="text-4xl font-bold text-gray-900 mb-4">{product.name}</h1>
<p className="text-3xl text-gray-700 font-semibold mb-6">${product.price}</p>
<button
onClick={handleAddToCart}
className="w-full bg-blue-600 text-white font-semibold py-3 px-6 rounded hover:bg-blue-700 transition"
>
Add to Cart
</button>
<button
onClick={() => router.push("/shop")}
className="w-full mt-4 px-4 py-2 bg-gray-600 text-white rounded hover:bg-gray-700 transition"
>
Back to Shop
</button>
</div>
</div>
</div>
);
}

View File

@@ -4,30 +4,43 @@ import { Suspense } from "react";
import ReactLenis from "lenis/react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarStyleFullscreen from "@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen";
import ProductCatalog from "@/components/ecommerce/productCatalog/ProductCatalog";
import { useProductCatalog } from "@/hooks/useProductCatalog";
function ShopPageContent() {
const {
products,
category,
setCategory,
sort,
setSort,
filters,
categories,
} = useProductCatalog();
return (
<ProductCatalog
products={products}
category={category}
setCategory={setCategory}
sort={sort}
setSort={setSort}
filters={filters}
categories={categories}
/>
<div className="min-h-screen bg-gray-50 py-12 px-4">
<div className="max-w-7xl mx-auto">
<h1 className="text-4xl font-bold text-gray-900 mb-8">Our Shop</h1>
{products && products.length > 0 ? (
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
{products.map((product) => (
<div key={product.id} className="bg-white rounded-lg shadow-md overflow-hidden">
{product.images && product.images.length > 0 && (
<img
src={product.images[0]}
alt={product.name}
className="w-full h-48 object-cover"
/>
)}
<div className="p-6">
<h2 className="text-xl font-bold text-gray-900 mb-2">{product.name}</h2>
<p className="text-lg text-gray-700 font-semibold mb-4">${product.price}</p>
<button className="w-full bg-blue-600 text-white font-semibold py-2 px-4 rounded hover:bg-blue-700 transition">
Add to Cart
</button>
</div>
</div>
))}
</div>
) : (
<div className="text-center text-gray-600">No products available.</div>
)}
</div>
</div>
);
}