Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b28bb63675 | |||
| e7c1ec3512 | |||
| 0ec500e71b | |||
| a3e3b3fdc8 | |||
| 686c1f1856 | |||
| 420716ed8f | |||
| 51e9681701 | |||
| e0984aa10b | |||
| 704f308cac | |||
| 1f70f9c349 | |||
| 46d248b354 | |||
| 7c685efcb0 | |||
| ef71150c09 | |||
| ed9424958d | |||
| d3f6e58d1d | |||
| 5a1973550d | |||
| 71c91f6391 | |||
| 5231631713 | |||
| 4fe3d8494b | |||
| f2a584ca61 | |||
| 9811e4d812 | |||
| 964be13bba |
50
src/app/admin/page.tsx
Normal file
50
src/app/admin/page.tsx
Normal file
@@ -0,0 +1,50 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import { useState } from "react";
|
||||
|
||||
export default function AdminDashboard() {
|
||||
const [bookings, setBookings] = useState([
|
||||
{ id: "1", client: "John Doe", service: "Precision Fade", status: "Pending" },
|
||||
{ id: "2", client: "Mike Smith", service: "Beard Sculpt", status: "Confirmed" }
|
||||
]);
|
||||
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="hover-magnetic"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="rounded"
|
||||
contentWidth="medium"
|
||||
sizing="medium"
|
||||
background="noise"
|
||||
cardStyle="glass-elevated"
|
||||
primaryButtonStyle="gradient"
|
||||
secondaryButtonStyle="solid"
|
||||
headingFontWeight="semibold"
|
||||
>
|
||||
<div className="min-h-screen p-8">
|
||||
<h1 className="text-3xl font-bold mb-8">Booking Management Dashboard</h1>
|
||||
<div className="grid gap-6">
|
||||
{bookings.map((booking) => (
|
||||
<div key={booking.id} className="p-6 flex justify-between items-center border rounded-lg">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold">{booking.client}</h2>
|
||||
<p className="text-muted-foreground">{booking.service}</p>
|
||||
</div>
|
||||
<div className="flex items-center gap-4">
|
||||
<span className={`px-3 py-1 rounded-full text-sm font-medium ${booking.status === "Pending" ? "bg-yellow-100 text-yellow-800" : "bg-green-100 text-green-800"}`}>
|
||||
{booking.status}
|
||||
</span>
|
||||
{booking.status === "Pending" && (
|
||||
<button className="px-4 py-2 bg-blue-600 text-white rounded-md" onClick={() => setBookings(prev => prev.map(b => b.id === booking.id ? {...b, status: "Confirmed"} : b))}>
|
||||
Process Booking
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
71
src/app/book-appointment/page.tsx
Normal file
71
src/app/book-appointment/page.tsx
Normal file
@@ -0,0 +1,71 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import ReactLenis from "lenis/react";
|
||||
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
|
||||
import ContactSplitForm from '@/components/sections/contact/ContactSplitForm';
|
||||
import FooterBase from '@/components/sections/footer/FooterBase';
|
||||
|
||||
export default function BookAppointmentPage() {
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="hover-magnetic"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="rounded"
|
||||
contentWidth="smallMedium"
|
||||
sizing="large"
|
||||
background="floatingGradient"
|
||||
cardStyle="gradient-bordered"
|
||||
primaryButtonStyle="radial-glow"
|
||||
secondaryButtonStyle="solid"
|
||||
headingFontWeight="normal"
|
||||
>
|
||||
<ReactLenis root>
|
||||
<div id="nav" data-section="nav">
|
||||
<NavbarStyleFullscreen
|
||||
navItems={[
|
||||
{ name: "Home", id: "/" },
|
||||
{ name: "Services", id: "/" },
|
||||
{ name: "Gallery", id: "/" },
|
||||
{ name: "Contact", id: "/" },
|
||||
{ name: "Book", id: "/book-appointment" },
|
||||
{ name: "Admin", id: "/admin" }
|
||||
]}
|
||||
brandName="Elite Grooming"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="booking" data-section="booking" className="py-24">
|
||||
<ContactSplitForm
|
||||
title="Schedule Your Appointment"
|
||||
description="Select your preferred service and time. Our team will confirm your booking shortly."
|
||||
inputs={[
|
||||
{ name: "fullName", type: "text", placeholder: "Full Name", required: true },
|
||||
{ name: "email", type: "email", placeholder: "Email Address", required: true },
|
||||
{ name: "date", type: "date", placeholder: "Appointment Date", required: true }
|
||||
]}
|
||||
multiSelect={{
|
||||
name: "service",
|
||||
label: "Choose Service",
|
||||
options: ["Precision Fade", "Beard Sculpt", "Hot Towel Shave"]
|
||||
}}
|
||||
textarea={{ name: "notes", placeholder: "Any special instructions or requests?" }}
|
||||
buttonText="Confirm Booking"
|
||||
onSubmit={(data) => console.log("Booking submitted:", data)}
|
||||
useInvertedBackground={false}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="footer" data-section="footer">
|
||||
<FooterBase
|
||||
logoText="Elite Grooming"
|
||||
columns={[
|
||||
{ title: "Navigation", items: [{ label: "Home", href: "/" }, { label: "Services", href: "/" }] },
|
||||
{ title: "Support", items: [{ label: "FAQ", href: "/" }, { label: "Book", href: "/book-appointment" }] }
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
</ReactLenis>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
42
src/app/booking/page.tsx
Normal file
42
src/app/booking/page.tsx
Normal file
@@ -0,0 +1,42 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import ContactCenter from '@/components/sections/contact/ContactCenter';
|
||||
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
|
||||
|
||||
export default function BookingPage() {
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="hover-magnetic"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="rounded"
|
||||
contentWidth="medium"
|
||||
sizing="medium"
|
||||
background="none"
|
||||
cardStyle="glass-elevated"
|
||||
primaryButtonStyle="gradient"
|
||||
secondaryButtonStyle="glass"
|
||||
headingFontWeight="normal"
|
||||
>
|
||||
<div id="nav" data-section="nav">
|
||||
<NavbarStyleFullscreen
|
||||
navItems={[
|
||||
{ name: "Home", id: "/" },
|
||||
{ name: "Services", id: "/services" },
|
||||
{ name: "Book Online", id: "/booking" }
|
||||
]}
|
||||
brandName="Elite Grooming"
|
||||
/>
|
||||
</div>
|
||||
<div id="contact" data-section="contact" className="pt-32 pb-20">
|
||||
<ContactCenter
|
||||
tag="Appointment"
|
||||
title="Schedule Your Visit"
|
||||
description="Select your preferred time and barber for your next grooming session."
|
||||
background={{ variant: "plain" }}
|
||||
useInvertedBackground={false}
|
||||
/>
|
||||
</div>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
@@ -3,14 +3,14 @@
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import ReactLenis from "lenis/react";
|
||||
import ContactCenter from '@/components/sections/contact/ContactCenter';
|
||||
import FaqDouble from '@/components/sections/faq/FaqDouble';
|
||||
import FaqSplitText from '@/components/sections/faq/FaqSplitText';
|
||||
import FeatureCardSixteen from '@/components/sections/feature/FeatureCardSixteen';
|
||||
import FooterBaseCard from '@/components/sections/footer/FooterBaseCard';
|
||||
import FooterBase from '@/components/sections/footer/FooterBase';
|
||||
import HeroSplitDualMedia from '@/components/sections/hero/HeroSplitDualMedia';
|
||||
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
|
||||
import PricingCardThree from '@/components/sections/pricing/PricingCardThree';
|
||||
import TeamCardOne from '@/components/sections/team/TeamCardOne';
|
||||
import TestimonialCardTwo from '@/components/sections/testimonial/TestimonialCardTwo';
|
||||
import TeamCardTwo from '@/components/sections/team/TeamCardTwo';
|
||||
import TestimonialCardTen from '@/components/sections/testimonial/TestimonialCardTen';
|
||||
import TextAbout from '@/components/sections/about/TextAbout';
|
||||
|
||||
export default function LandingPage() {
|
||||
@@ -34,7 +34,8 @@ export default function LandingPage() {
|
||||
{ name: "Home", id: "hero" },
|
||||
{ name: "Services", id: "services" },
|
||||
{ name: "Gallery", id: "gallery" },
|
||||
{ name: "Contact", id: "contact" }
|
||||
{ name: "Contact", id: "contact" },
|
||||
{ name: "Admin", id: "/admin" }
|
||||
]}
|
||||
brandName="Elite Grooming"
|
||||
/>
|
||||
@@ -71,18 +72,9 @@ export default function LandingPage() {
|
||||
textboxLayout="split"
|
||||
useInvertedBackground={false}
|
||||
plans={[
|
||||
{
|
||||
id: "fade", price: "$35", name: "Precision Fade", features: ["Consultation", "Skin fade", "Hot towel finish"],
|
||||
buttons: [{ text: "Book Now", href: "#contact" }]
|
||||
},
|
||||
{
|
||||
id: "beard", price: "$25", name: "Beard Sculpt", features: ["Beard trim", "Lineup", "Conditioning balm"],
|
||||
buttons: [{ text: "Book Now", href: "#contact" }]
|
||||
},
|
||||
{
|
||||
id: "shave", price: "$45", name: "Hot Towel Shave", features: ["Steam treatment", "Straight razor shave", "Aftershave balm"],
|
||||
buttons: [{ text: "Book Now", href: "#contact" }]
|
||||
}
|
||||
{ id: "fade", price: "$35", name: "Precision Fade", features: ["Consultation", "Skin fade", "Hot towel finish"], buttons: [{ text: "Book Now", href: "#contact" }] },
|
||||
{ id: "beard", price: "$25", name: "Beard Sculpt", features: ["Beard trim", "Lineup", "Conditioning balm"], buttons: [{ text: "Book Now", href: "#contact" }] },
|
||||
{ id: "shave", price: "$45", name: "Hot Towel Shave", features: ["Steam treatment", "Straight razor shave", "Aftershave balm"], buttons: [{ text: "Book Now", href: "#contact" }] }
|
||||
]}
|
||||
title="Our Professional Services"
|
||||
description="Expert grooming to keep you sharp."
|
||||
@@ -102,50 +94,43 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<TestimonialCardTwo
|
||||
animationType="slide-up"
|
||||
textboxLayout="split"
|
||||
useInvertedBackground={false}
|
||||
<TestimonialCardTen
|
||||
title="Client Stories"
|
||||
description="Read what our happy clients say about our grooming services."
|
||||
textboxLayout="split"
|
||||
useInvertedBackground={false}
|
||||
testimonials={[
|
||||
{ id: "1", name: "John Doe", role: "Regular Client", testimonial: "Best fade I've ever had, hands down.", imageSrc: "http://img.b2bpic.net/free-photo/close-up-portrait-young-stately-ginger-fellow-stylish-navy-t-shirt-smiling-showing-ok-sign-looking-camera-while-posing-blue-studio-background-human-facial-expressions-sincer_639032-2122.jpg" },
|
||||
{ id: "2", name: "Mike Smith", role: "Beard Enthusiast", testimonial: "Exceptional service and great conversation.", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-man-hair-salon_23-2150665422.jpg" },
|
||||
{ id: "3", name: "David W.", role: "Business Professional", testimonial: "Clean shave was incredibly relaxing.", imageSrc: "http://img.b2bpic.net/free-photo/confident-handsome-young-man-without-shirt_1262-4882.jpg" },
|
||||
{ id: "4", name: "Alex R.", role: "Frequent Visitor", testimonial: "I never go anywhere else.", imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-covering-his-mouth_23-2149438540.jpg" },
|
||||
{ id: "5", name: "Chris B.", role: "New Client", testimonial: "High level of skill and attention.", imageSrc: "http://img.b2bpic.net/free-photo/positive-blond-bearded-male-dressed-plaid-shirt-denim-jacket-posing-grey-vignette-background_613910-11758.jpg" }
|
||||
{ id: "1", title: "Excellent Service", quote: "Best fade I've ever had, hands down.", name: "John Doe", role: "Regular Client", imageSrc: "http://img.b2bpic.net/free-photo/close-up-portrait-young-stately-ginger-fellow-stylish-navy-t-shirt-smiling-showing-ok-sign-looking-camera-while-posing-blue-studio-background-human-facial-expressions-sincer_639032-2122.jpg" },
|
||||
{ id: "2", title: "Great Atmosphere", quote: "Exceptional service and great conversation.", name: "Mike Smith", role: "Beard Enthusiast", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-man-hair-salon_23-2150665422.jpg" }
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="team" data-section="team">
|
||||
<TeamCardOne
|
||||
<TeamCardTwo
|
||||
animationType="slide-up"
|
||||
textboxLayout="default"
|
||||
gridVariant="three-columns-all-equal-width"
|
||||
textboxLayout="split"
|
||||
gridVariant="uniform-all-items-equal"
|
||||
title="Master Barber"
|
||||
description="Our dedicated master barber ensures excellence in every service."
|
||||
useInvertedBackground={false}
|
||||
title="Meet Your Barbers"
|
||||
description="Meet the professionals behind the magic."
|
||||
members={[
|
||||
{ id: "t1", name: "Marcus", role: "Head Barber", imageSrc: "http://img.b2bpic.net/free-photo/portrait-stylish-male-who-himself-shaving-while-sitting-barber-chair-hairdressing-salon_613910-18649.jpg" },
|
||||
{ id: "t2", name: "Jason", role: "Master Stylist", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-girl-with-colorful-hair-black-apron-white-t-shirt-holding-handmade-little-bowl-dreamily-looking-camera-pottery-studio-isolated_574295-1028.jpg" },
|
||||
{ id: "t3", name: "Leo", role: "Junior Barber", imageSrc: "http://img.b2bpic.net/free-photo/latino-hair-salon-owner-preparing-clients_23-2150286080.jpg" }
|
||||
{ id: "t1", name: "Marcus", role: "Head Barber", description: "With over 10 years of experience, Marcus specializes in classic shaves and modern precision cuts.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-stylish-male-who-himself-shaving-while-sitting-barber-chair-hairdressing-salon_613910-18649.jpg" }
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<FaqDouble
|
||||
textboxLayout="default"
|
||||
useInvertedBackground={false}
|
||||
<FaqSplitText
|
||||
sideTitle="Common Questions"
|
||||
sideDescription="Answers to your most frequent inquiries."
|
||||
faqs={[
|
||||
{ id: "f1", title: "Do you accept walk-ins?", content: "We are appointment-based to ensure quality service for every client." },
|
||||
{ id: "f2", title: "What payment methods are accepted?", content: "We accept cash and all major credit cards." },
|
||||
{ id: "f3", title: "How long are appointments?", content: "Standard haircuts are 45 minutes; shaves are 30 minutes." }
|
||||
{ id: "f2", title: "What is your pricing policy?", content: "Pricing is transparent and based on the complexity of the requested style." },
|
||||
{ id: "f3", title: "How early should I arrive?", content: "Please arrive 5 minutes before your scheduled slot." }
|
||||
]}
|
||||
title="Common Questions"
|
||||
faqsAnimation="slide-up"
|
||||
description="Answers to your most frequent inquiries."
|
||||
useInvertedBackground={false}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -160,15 +145,15 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<div id="footer" data-section="footer">
|
||||
<FooterBaseCard
|
||||
<FooterBase
|
||||
logoText="Elite Grooming"
|
||||
columns={[
|
||||
{ title: "Menu", items: [{ label: "Services", href: "#services" }, { label: "Gallery", href: "#gallery" }] },
|
||||
{ title: "Company", items: [{ label: "About", href: "#about" }, { label: "Contact", href: "#contact" }] }
|
||||
{ title: "Navigation", items: [{ label: "Home", href: "#hero" }, { label: "Services", href: "#services" }] },
|
||||
{ title: "Support", items: [{ label: "FAQ", href: "#faq" }, { label: "Contact", href: "#contact" }] }
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
</ReactLenis>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -11,11 +11,11 @@
|
||||
--background-accent: #ffffff; */
|
||||
|
||||
--background: #000000;
|
||||
--card: #121212;
|
||||
--foreground: #ffffff;
|
||||
--card: #1A1A1A;
|
||||
--foreground: #FFFFFF;
|
||||
--primary-cta: #FFD700;
|
||||
--primary-cta-text: #000000;
|
||||
--secondary-cta: #1A1A1A;
|
||||
--secondary-cta: #262626;
|
||||
--secondary-cta-text: #FFFFFF;
|
||||
--accent: #B8860B;
|
||||
--background-accent: #262626;
|
||||
|
||||
Reference in New Issue
Block a user