Initial commit

This commit is contained in:
DK
2026-02-05 14:33:28 +00:00
commit 48b1277f6f
8 changed files with 1771 additions and 0 deletions

2
.env Normal file
View File

@@ -0,0 +1,2 @@
NEXT_PUBLIC_API_URL=https://dev.api.webild.io
NEXT_PUBLIC_PROJECT_ID=04e93b3d-d169-42b5-bb43-259600607b9c

View File

@@ -0,0 +1,57 @@
name: Code Check
on:
workflow_dispatch:
inputs:
branch:
description: 'Branch to check'
required: true
default: 'main'
permissions:
contents: read
jobs:
check:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout branch
uses: actions/checkout@v3
with:
ref: ${{ gitea.event.inputs.branch }}
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 24
- name: Install dependencies
run: |
set -euo pipefail
npm ci --prefer-offline --no-audit 2>&1 | tee install.log
env:
NODE_OPTIONS: '--max-old-space-size=4096'
- name: TypeScript check
run: |
set -euo pipefail
npm run typecheck 2>&1 | tee build.log
- name: ESLint check
run: |
set -euo pipefail
npm run lint 2>&1 | tee build.log
- name: Upload build log on failure
if: failure()
uses: actions/upload-artifact@v3
with:
name: build-log
path: build.log
if-no-files-found: ignore
- name: Check completed
if: success()
run: echo "Typecheck and lint passed successfully"

87
src/app/blog/page.tsx Normal file
View File

@@ -0,0 +1,87 @@
"use client";
import ReactLenis from "lenis/react";
import BlogCardThree from '@/components/sections/blog/BlogCardThree';
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import { useBlogPosts } from "@/hooks/useBlogPosts";
export default function BlogPage() {
const { posts, isLoading } = useBlogPosts();
return (
<ThemeProvider
defaultButtonVariant="bounce-effect"
defaultTextAnimation="entrance-slide"
borderRadius="pill"
contentWidth="smallMedium"
sizing="mediumLargeSizeLargeTitles"
background="circleGradient"
cardStyle="subtle-shadow"
primaryButtonStyle="shadow"
secondaryButtonStyle="radial-glow"
headingFontWeight="light"
>
<ReactLenis root>
<div className="min-h-screen bg-background">
<NavbarLayoutFloatingOverlay
brandName="BrewMoment"
navItems={[
{ name: "Home", id: "/" },
{ name: "Products", id: "products" },
{ name: "About", id: "about" },
{ name: "Testimonials", id: "testimonials" },
{ name: "Contact", id: "contact" }
]}
button={{ text: "Order Now", href: "contact" }}
/>
{isLoading ? (
<div className="w-content-width mx-auto py-20 text-center">
<p className="text-foreground">Loading posts...</p>
</div>
) : (
<BlogCardThree
blogs={posts}
title="Coffee Stories & Brewing Tips"
description="Discover the art of coffee brewing with expert insights, seasonal blends, and behind-the-scenes stories from our coffee artisans"
tag="Blog"
textboxLayout="default"
useInvertedBackground="noInvert"
animationType="slide-up"
carouselMode="buttons"
/>
)}
<FooterLogoEmphasis
logoText="BrewMoment"
columns={[
{
items: [
{ label: "Home", href: "hero" },
{ label: "Products", href: "products" },
{ label: "About Us", href: "about" }
]
},
{
items: [
{ label: "Contact", href: "contact" },
{ label: "Privacy Policy", href: "#" },
{ label: "Terms of Service", href: "#" }
]
},
{
items: [
{ label: "Follow Us", href: "#" },
{ label: "Instagram", href: "#" },
{ label: "Facebook", href: "#" }
]
}
]}
/>
</div>
</ReactLenis>
</ThemeProvider>
);
}

5
src/app/globals.css Normal file
View File

@@ -0,0 +1,5 @@
@import "tailwindcss";
@import "./styles/variables.css";
@import "./styles/theme.css";
@import "./styles/utilities.css";
@import "./styles/base.css";

1268
src/app/layout.tsx Normal file

File diff suppressed because it is too large Load Diff

232
src/app/page.tsx Normal file
View File

@@ -0,0 +1,232 @@
"use client"
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import HeroBillboardRotatedCarousel from '@/components/sections/hero/HeroBillboardRotatedCarousel';
import ProductCardOne from '@/components/sections/product/ProductCardOne';
import MediaSplitTabsAbout from '@/components/sections/about/MediaSplitTabsAbout';
import TestimonialCardFifteen from '@/components/sections/testimonial/TestimonialCardFifteen';
import MetricCardOne from '@/components/sections/metrics/MetricCardOne';
import ContactSplitForm from '@/components/sections/contact/ContactSplitForm';
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
import { Coffee, Sparkles, Users, Globe, Award, Leaf } from "lucide-react";
export default function LandingPage() {
return (
<ThemeProvider
defaultButtonVariant="bounce-effect"
defaultTextAnimation="entrance-slide"
borderRadius="pill"
contentWidth="smallMedium"
sizing="mediumLargeSizeLargeTitles"
background="circleGradient"
cardStyle="subtle-shadow"
primaryButtonStyle="shadow"
secondaryButtonStyle="radial-glow"
headingFontWeight="light"
>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay
brandName="BrewMoment"
navItems={[
{ name: "Home", id: "hero" },
{ name: "Products", id: "products" },
{ name: "About", id: "about" },
{ name: "Testimonials", id: "testimonials" },
{ name: "Contact", id: "contact" }
]}
button={{
text: "Order Now", href: "contact"
}}
/>
</div>
<div id="hero" data-section="hero">
<HeroBillboardRotatedCarousel
title="Craft Your Perfect Cup"
description="Experience the finest specialty coffee made with passion, precision, and the highest quality beans from around the world."
tag="Premium Coffee"
tagIcon={Coffee}
background={{ variant: "plain" }}
buttons={[
{ text: "Browse Menu", href: "products" },
{ text: "Learn More", href: "about" }
]}
carouselItems={[
{
id: "1", imageSrc: "https://img.b2bpic.net/free-photo/leftover-coffee-black-cup-window-sill_23-2147898257.jpg", imageAlt: "Freshly pulled espresso shot"
},
{
id: "2", imageSrc: "https://img.b2bpic.net/free-photo/close-up-aromatic-coffee-plate_23-2148349623.jpg", imageAlt: "Creamy cappuccino with latte art"
},
{
id: "3", imageSrc: "https://img.b2bpic.net/free-photo/cup-hot-espresso-coffee-takeaway-paper-cup-stone-table-cafe-monotone-background-with-copy-space-coffee-break_166373-3732.jpg", imageAlt: "Refreshing cold brew coffee"
},
{
id: "4", imageSrc: "https://img.b2bpic.net/free-photo/male-barista-preparing-coffee_23-2148824432.jpg", imageAlt: "Coffee shop ambiance"
},
{
id: "5", imageSrc: "https://img.b2bpic.net/free-photo/leftover-coffee-black-cup-window-sill_23-2147898257.jpg", imageAlt: "Premium espresso blend"
},
{
id: "6", imageSrc: "https://img.b2bpic.net/free-photo/close-up-aromatic-coffee-plate_23-2148349623.jpg", imageAlt: "Artisanal coffee creation"
}
]}
autoPlay={true}
autoPlayInterval={4000}
/>
</div>
<div id="products" data-section="products">
<ProductCardOne
title="Our Premium Selection"
description="Handcrafted beverages made with meticulous attention to detail and the finest ingredients available."
tag="Best Sellers"
tagIcon={Sparkles}
textboxLayout="default"
animationType="slide-up"
useInvertedBackground="noInvert"
gridVariant="three-columns-all-equal-width"
products={[
{
id: "1", name: "Single Origin Espresso", price: "$4.50", imageSrc: "https://img.b2bpic.net/free-photo/leftover-coffee-black-cup-window-sill_23-2147898257.jpg", imageAlt: "Single Origin Espresso"
},
{
id: "2", name: "Signature Cappuccino", price: "$5.50", imageSrc: "https://img.b2bpic.net/free-photo/close-up-aromatic-coffee-plate_23-2148349623.jpg", imageAlt: "Signature Cappuccino"
},
{
id: "3", name: "Iced Cold Brew", price: "$4.75", imageSrc: "https://img.b2bpic.net/free-photo/cup-hot-espresso-coffee-takeaway-paper-cup-stone-table-cafe-monotone-background-with-copy-space-coffee-break_166373-3732.jpg", imageAlt: "Iced Cold Brew"
}
]}
carouselMode="buttons"
/>
</div>
<div id="about" data-section="about">
<MediaSplitTabsAbout
title="Our Coffee Story"
description="Discover the passion and craftsmanship behind every cup."
tabs={[
{
id: "sourcing", label: "Ethical Sourcing", description: "We partner directly with sustainable coffee farms around the globe, ensuring fair wages and environmentally responsible practices. Every bean tells a story of dedication and quality."
},
{
id: "roasting", label: "Expert Roasting", description: "Our in-house roastery uses traditional methods combined with precision technology to bring out the unique flavor profiles of each origin, creating the perfect roast every single time."
},
{
id: "community", label: "Community Focus", description: "More than just coffee, we're building a community. Our space is designed for connection, collaboration, and celebrating the simple joy of a perfectly crafted beverage."
}
]}
imageSrc="https://img.b2bpic.net/free-photo/empty-wood-chair-restaurant_1339-5949.jpg"
imageAlt="Our cozy coffee shop interior with welcoming atmosphere"
imagePosition="right"
useInvertedBackground="invertDefault"
/>
</div>
<div id="testimonials" data-section="testimonials">
<TestimonialCardFifteen
testimonial="BrewMoment has completely transformed my morning routine. The quality of the coffee is unmatched, and the atmosphere makes me want to stay all day. Highly recommended!"
rating={5}
author="Sarah Mitchell, Coffee Enthusiast"
avatars={[
{
src: "https://img.b2bpic.net/free-photo/office-worker-using-cell-phone-work_329181-20159.jpg", alt: "Sarah Mitchell"
},
{
src: "https://img.b2bpic.net/free-photo/smiling-woman_23-2147615403.jpg", alt: "Customer testimonial"
},
{
src: "https://img.b2bpic.net/free-photo/young-businessman-happy-expression_1194-1563.jpg", alt: "Customer testimonial"
},
{
src: "https://img.b2bpic.net/free-photo/smiling-young-professional-businesswoman-looking-upper-left-corner-with-hopeful-face-expression-standing-white_176420-41313.jpg", alt: "Customer testimonial"
}
]}
useInvertedBackground="noInvert"
/>
</div>
<div id="metrics" data-section="metrics">
<MetricCardOne
title="Our Impact"
description="Join thousands of coffee lovers who have discovered their perfect brew."
textboxLayout="default"
animationType="slide-up"
useInvertedBackground="invertDefault"
gridVariant="uniform-all-items-equal"
metrics={[
{
id: "1", value: "5K+", title: "Happy Customers", description: "Daily coffee enthusiasts enjoying our blends", icon: Users
},
{
id: "2", value: "15", title: "Origins", description: "Premium coffee sources from around the world", icon: Globe
},
{
id: "3", value: "8", title: "Years", description: "Of dedicated coffee craftsmanship", icon: Award
},
{
id: "4", value: "100%", title: "Sustainable", description: "Ethically sourced and environmentally conscious", icon: Leaf
}
]}
/>
</div>
<div id="contact" data-section="contact">
<ContactSplitForm
title="Get in Touch"
description="Have questions about our coffee or want to place a special order? We'd love to hear from you. Reach out anytime and we'll respond within 24 hours."
inputs={[
{
name: "name", type: "text", placeholder: "Your Name", required: true
},
{
name: "email", type: "email", placeholder: "Your Email", required: true
},
{
name: "phone", type: "tel", placeholder: "Phone Number", required: false
}
]}
textarea={{
name: "message", placeholder: "Tell us about your coffee preferences or questions...", rows: 5,
required: true
}}
useInvertedBackground="noInvert"
imageSrc="https://img.b2bpic.net/free-photo/different-office-stationery-arranged-white-table-co-working-office_285396-1793.jpg"
imageAlt="Coffee shop setup and brewing equipment"
mediaPosition="right"
buttonText="Send Message"
/>
</div>
<div id="footer" data-section="footer">
<FooterLogoEmphasis
logoText="BrewMoment"
columns={[
{
items: [
{ label: "Home", href: "hero" },
{ label: "Products", href: "products" },
{ label: "About Us", href: "about" }
]
},
{
items: [
{ label: "Contact", href: "contact" },
{ label: "Privacy Policy", href: "#" },
{ label: "Terms of Service", href: "#" }
]
},
{
items: [
{ label: "Follow Us", href: "#" },
{ label: "Instagram", href: "#" },
{ label: "Facebook", href: "#" }
]
}
]}
/>
</div>
</ThemeProvider>
);
}

115
src/app/shop/page.tsx Normal file
View File

@@ -0,0 +1,115 @@
"use client";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import ProductCardFour from '@/components/sections/product/ProductCardFour';
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
import { Package } from 'lucide-react';
export default function ShopPage() {
const products = [
{
id: "1", name: "Premium Coffee Blend", price: "$24.99", variant: "Dark Roast • 3 Sizes", imageSrc: "https://images.unsplash.com/photo-1559056199-641a0ac8b55e?w=400&h=400&fit=crop", imageAlt: "Premium Coffee Blend", isFavorited: false,
onFavorite: () => console.log("favorited"),
onProductClick: () => console.log("product clicked")
},
{
id: "2", name: "Espresso Machine Pro", price: "$299.99", variant: "Stainless Steel • 2 Colors", imageSrc: "https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=400&h=400&fit=crop", imageAlt: "Espresso Machine Pro", isFavorited: true,
onFavorite: () => console.log("favorited"),
onProductClick: () => console.log("product clicked")
},
{
id: "3", name: "Coffee Grinder Deluxe", price: "$89.99", variant: "Ceramic Burr • 4 Settings", imageSrc: "https://images.unsplash.com/photo-1504627298434-2119d83b2e7a?w=400&h=400&fit=crop", imageAlt: "Coffee Grinder Deluxe", isFavorited: false,
onFavorite: () => console.log("favorited"),
onProductClick: () => console.log("product clicked")
},
{
id: "4", name: "French Press Classic", price: "$39.99", variant: "Glass • 2 Sizes", imageSrc: "https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=400&h=400&fit=crop", imageAlt: "French Press Classic", isFavorited: false,
onFavorite: () => console.log("favorited"),
onProductClick: () => console.log("product clicked")
},
{
id: "5", name: "Pour Over Set", price: "$59.99", variant: "Ceramic • 3 Colors", imageSrc: "https://images.unsplash.com/photo-1559056199-641a0ac8b55e?w=400&h=400&fit=crop", imageAlt: "Pour Over Set", isFavorited: true,
onFavorite: () => console.log("favorited"),
onProductClick: () => console.log("product clicked")
},
{
id: "6", name: "Coffee Storage Canister", price: "$19.99", variant: "Airtight Seal • 4 Sizes", imageSrc: "https://images.unsplash.com/photo-1504627298434-2119d83b2e7a?w=400&h=400&fit=crop", imageAlt: "Coffee Storage Canister", isFavorited: false,
onFavorite: () => console.log("favorited"),
onProductClick: () => console.log("product clicked")
}
];
return (
<ThemeProvider
defaultButtonVariant="bounce-effect"
defaultTextAnimation="entrance-slide"
borderRadius="pill"
contentWidth="smallMedium"
sizing="mediumLargeSizeLargeTitles"
background="circleGradient"
cardStyle="subtle-shadow"
primaryButtonStyle="shadow"
secondaryButtonStyle="radial-glow"
headingFontWeight="light"
>
<NavbarLayoutFloatingOverlay
brandName="BrewMoment"
navItems={[
{ name: "Home", id: "/" },
{ name: "Shop", id: "/shop" }
]}
button={{
text: "Order Now", href: "contact"
}}
/>
<main className="min-h-screen pt-20">
<ProductCardFour
products={products}
title="Our Coffee Collection"
description="Discover our premium selection of coffee products, from beans to brewing equipment"
tag="Shop Now"
tagIcon={Package}
textboxLayout="default"
gridVariant="three-columns-all-equal-width"
animationType="slide-up"
useInvertedBackground="noInvert"
buttons={[
{
text: "View All Products", href: "#"
},
{
text: "Filter Products", onClick: () => console.log("filter clicked")
}
]}
/>
</main>
<FooterLogoEmphasis
logoText="BrewMoment"
columns={[
{
items: [
{ label: "Home", href: "/" },
{ label: "Shop", href: "/shop" }
]
},
{
items: [
{ label: "Privacy Policy", href: "#" },
{ label: "Terms of Service", href: "#" }
]
},
{
items: [
{ label: "Follow Us", href: "#" },
{ label: "Instagram", href: "#" },
{ label: "Facebook", href: "#" }
]
}
]}
/>
</ThemeProvider>
);
}

5
vercel.json Normal file
View File

@@ -0,0 +1,5 @@
{
"installCommand": "npm ci",
"buildCommand": "npm run build",
"outputDirectory": ".next"
}