diff --git a/src/app/calendar/page.tsx b/src/app/calendar/page.tsx new file mode 100644 index 0000000..e0ca351 --- /dev/null +++ b/src/app/calendar/page.tsx @@ -0,0 +1,54 @@ +"use client"; + +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import ReactLenis from "lenis/react"; +import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered'; +import FooterMedia from '@/components/sections/footer/FooterMedia'; + +export default function CalendarPage() { + return ( + + + + +
+

Scheduling & Calendar

+

+ View your upcoming appointments, manage availability, and sync events with your team effortlessly. + This dashboard view provides full control over your service schedule. +

+
+ + +
+
+ ); +} diff --git a/src/app/conversations/page.tsx b/src/app/conversations/page.tsx new file mode 100644 index 0000000..ffbbab8 --- /dev/null +++ b/src/app/conversations/page.tsx @@ -0,0 +1,77 @@ +"use client"; + +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import ReactLenis from "lenis/react"; +import NavbarStyleCentered from "@/components/navbar/NavbarStyleCentered/NavbarStyleCentered"; +import FooterMedia from "@/components/sections/footer/FooterMedia"; +import { useState } from "react"; + +export default function ConversationsPage() { + return ( + + + + +
+
+
+

Threads

+
+ {[1, 2, 3].map((i) => ( +
+
Customer Thread {i}
+
Last message summary...
+
+ ))} +
+
+
+

Message View

+
+
+
Hey, are you available today?
+
Yes, we can be there at 2pm!
+
+
+ +
+
+
+
+
+ + +
+
+ ); +} diff --git a/src/app/leads/page.tsx b/src/app/leads/page.tsx new file mode 100644 index 0000000..891f3cc --- /dev/null +++ b/src/app/leads/page.tsx @@ -0,0 +1,57 @@ +"use client"; + +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import { useState } from "react"; +import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered'; + +export default function LeadsPage() { + const [search, setSearch] = useState(""); + + return ( + + +
+

Leads Dashboard

+
+ setSearch(e.target.value)} + /> + +
+
+ + + + + + + + + + + + + + + + + +
NameStatusLast ContactedActions
John DoeNew2 mins ago + + +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx new file mode 100644 index 0000000..825f566 --- /dev/null +++ b/src/app/login/page.tsx @@ -0,0 +1,38 @@ +"use client"; + +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import { useState } from "react"; +import { useRouter } from "next/navigation"; + +export default function LoginPage() { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [error, setError] = useState(""); + const router = useRouter(); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (!email || !password) { + setError("Please fill in all fields."); + return; + } + console.log("Logging in...", { email, password }); + }; + + return ( + +
+
+

Welcome back

+ {error &&

{error}

} +
+ setEmail(e.target.value)} /> + setPassword(e.target.value)} /> + +
+

Don't have an account? Sign up

+
+
+
+ ); +} \ No newline at end of file diff --git a/src/app/missed-calls/page.tsx b/src/app/missed-calls/page.tsx new file mode 100644 index 0000000..cf715b3 --- /dev/null +++ b/src/app/missed-calls/page.tsx @@ -0,0 +1,88 @@ +"use client"; + +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import ReactLenis from "lenis/react"; +import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered'; +import FooterMedia from '@/components/sections/footer/FooterMedia'; +import { useState } from 'react'; + +export default function MissedCallsPage() { + // Mock data for demonstration + const [calls] = useState([ + { id: 1, caller: "John Doe", phone: "(555) 123-4567", time: "10:30 AM", status: "Missed" }, + { id: 2, caller: "Sarah Smith", phone: "(555) 987-6543", time: "09:15 AM", status: "Missed" }, + { id: 3, caller: "Acme Corp", phone: "(555) 555-5555", time: "Yesterday", status: "Callback Requested" }, + ]); + + return ( + + + + +
+

Missed Calls

+
+ + + + + + + + + + + + {calls.map((call) => ( + + + + + + + + ))} + +
CallerPhoneTimeStatusAction
{call.caller}{call.phone}{call.time}{call.status} + +
+
+
+ + +
+
+ ); +} \ No newline at end of file diff --git a/src/app/page.tsx b/src/app/page.tsx index 9f601f8..b6f84f6 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -29,12 +29,10 @@ export default function LandingPage() { @@ -89,12 +70,9 @@ export default function LandingPage() { title="Missed calls = lost revenue." description="You work hard for your leads, but you lose them when you can't answer. Stop throwing your ad budget away." metrics={[ - { - value: "100%", title: "Response Rate"}, - { - value: "24/7", title: "Coverage"}, - { - value: "Instant", title: "Reply Time"}, + { value: "100%", title: "Response Rate" }, + { value: "24/7", title: "Coverage" }, + { value: "Instant", title: "Reply Time" }, ]} imageSrc="http://img.b2bpic.net/free-photo/army-soldier-reviews-targets-satellite-world-map-ensure-global-protection_482257-91236.jpg" /> @@ -106,18 +84,9 @@ export default function LandingPage() { textboxLayout="split" useInvertedBackground={true} features={[ - { - id: "f1", title: "Instant SMS Replies", descriptions: [ - "Missed call? Our AI fires an immediate, friendly SMS to engage the lead instantly."], - imageSrc: "http://img.b2bpic.net/free-photo/heart-shape-favorite-social-media-notification-icon-speech-bubbles-3d-cartoon-banner-website-ui-pink-background-3d-rendering-illustration_56104-1333.jpg"}, - { - id: "f2", title: "Smart Qualifying", descriptions: [ - "We ask the right questions so you only spend time on high-value jobs."], - imageSrc: "http://img.b2bpic.net/free-vector/book-recommendation-icon_632498-3994.jpg"}, - { - id: "f3", title: "Calendar Sync", descriptions: [ - "Appointments drop straight into your calendar with zero manual entry."], - imageSrc: "http://img.b2bpic.net/free-photo/day-office-travel-agency_23-2150769962.jpg"}, + { id: "f1", title: "Instant SMS Replies", descriptions: ["Missed call? Our AI fires an immediate, friendly SMS to engage the lead instantly."], imageSrc: "http://img.b2bpic.net/free-photo/heart-shape-favorite-social-media-notification-icon-speech-bubbles-3d-cartoon-banner-website-ui-pink-background-3d-rendering-illustration_56104-1333.jpg" }, + { id: "f2", title: "Smart Qualifying", descriptions: ["We ask the right questions so you only spend time on high-value jobs."], imageSrc: "http://img.b2bpic.net/free-vector/book-recommendation-icon_632498-3994.jpg" }, + { id: "f3", title: "Calendar Sync", descriptions: ["Appointments drop straight into your calendar with zero manual entry."], imageSrc: "http://img.b2bpic.net/free-photo/day-office-travel-agency_23-2150769962.jpg" }, ]} title="Bookly responds instantly and books jobs for you." description="We don't just answer; we qualify, schedule, and close." @@ -130,18 +99,9 @@ export default function LandingPage() { textboxLayout="split-description" useInvertedBackground={false} features={[ - { - id: "d1", title: "Customer: Emergency?", descriptions: [ - "Do you do emergency plumbing?"], - imageSrc: "http://img.b2bpic.net/free-photo/front-view-friends-reading-menu-restaurant_23-2150384834.jpg"}, - { - id: "d2", title: "Bookly: 24/7 Ready", descriptions: [ - "Yes—we offer 24/7 emergency services. What's going on?"], - imageSrc: "http://img.b2bpic.net/free-photo/close-up-engineer-using-tablet-sustainable-data-center-implementing-green-technologies-it_482257-132419.jpg"}, - { - id: "d3", title: "Booking confirmed", descriptions: [ - "Got it. We can send someone today at 2 PM."], - imageSrc: "http://img.b2bpic.net/free-photo/cheerful-woman-with-speech-bubble_53876-13588.jpg"}, + { id: "d1", title: "Customer: Emergency?", descriptions: ["Do you do emergency plumbing?"], imageSrc: "http://img.b2bpic.net/free-photo/front-view-friends-reading-menu-restaurant_23-2150384834.jpg" }, + { id: "d2", title: "Bookly: 24/7 Ready", descriptions: ["Yes—we offer 24/7 emergency services. What's going on?"], imageSrc: "http://img.b2bpic.net/free-photo/close-up-engineer-using-tablet-sustainable-data-center-implementing-green-technologies-it_482257-132419.jpg" }, + { id: "d3", title: "Booking confirmed", descriptions: ["Got it. We can send someone today at 2 PM."], imageSrc: "http://img.b2bpic.net/free-photo/cheerful-woman-with-speech-bubble_53876-13588.jpg" }, ]} title="Turn conversations into booked jobs." description="See how Bookly handles an emergency request seamlessly." @@ -154,18 +114,9 @@ export default function LandingPage() { textboxLayout="default" useInvertedBackground={true} features={[ - { - id: "b1", title: "Fast", descriptions: [ - "Under 10 seconds response time."], - imageSrc: "http://img.b2bpic.net/free-photo/arrow-with-bright-neon-colors_23-2151205016.jpg"}, - { - id: "b2", title: "Always On", descriptions: [ - "Nights, weekends, and holidays covered."], - imageSrc: "http://img.b2bpic.net/free-photo/clock-with-arrow-time-concept_187299-46702.jpg"}, - { - id: "b3", title: "Efficient", descriptions: [ - "Eliminate missed call anxiety forever."], - imageSrc: "http://img.b2bpic.net/free-photo/earth-day-environment-eco-concept-space-text_185193-110604.jpg"}, + { id: "b1", title: "Fast", descriptions: ["Under 10 seconds response time."], imageSrc: "http://img.b2bpic.net/free-photo/arrow-with-bright-neon-colors_23-2151205016.jpg" }, + { id: "b2", title: "Always On", descriptions: ["Nights, weekends, and holidays covered."], imageSrc: "http://img.b2bpic.net/free-photo/clock-with-arrow-time-concept_187299-46702.jpg" }, + { id: "b3", title: "Efficient", descriptions: ["Eliminate missed call anxiety forever."], imageSrc: "http://img.b2bpic.net/free-photo/earth-day-environment-eco-concept-space-text_185193-110604.jpg" }, ]} title="Built for service pros." description="Powerful, simple, no receptionist required." @@ -178,24 +129,9 @@ export default function LandingPage() { textboxLayout="default" useInvertedBackground={false} plans={[ - { - id: "starter", tag: "Basic", price: "$49", period: "/mo", description: "Perfect for new service pros.", button: { - text: "Get Started", href: "#contact"}, - featuresTitle: "Included:", features: [ - "Instant SMS", "Booking Sync", "Support"], - }, - { - id: "pro", tag: "Popular", price: "$99", period: "/mo", description: "Best for growing teams.", button: { - text: "Get Started", href: "#contact"}, - featuresTitle: "Everything in Basic, plus:", features: [ - "Priority Routing", "Custom FAQ AI", "Analytics"], - }, - { - id: "premium", tag: "Scale", price: "$149", period: "/mo", description: "For high-volume companies.", button: { - text: "Get Started", href: "#contact"}, - featuresTitle: "Everything in Pro, plus:", features: [ - "Dedicated Account Mgr", "Custom Integration", "API Access"], - }, + { id: "starter", tag: "Basic", price: "$49", period: "/mo", description: "Perfect for new service pros.", button: { text: "Get Started", href: "#contact" }, featuresTitle: "Included:", features: ["Instant SMS", "Booking Sync", "Support"] }, + { id: "pro", tag: "Popular", price: "$99", period: "/mo", description: "Best for growing teams.", button: { text: "Get Started", href: "#contact" }, featuresTitle: "Everything in Basic, plus:", features: ["Priority Routing", "Custom FAQ AI", "Analytics"] }, + { id: "premium", tag: "Scale", price: "$149", period: "/mo", description: "For high-volume companies.", button: { text: "Get Started", href: "#contact" }, featuresTitle: "Everything in Pro, plus:", features: ["Dedicated Account Mgr", "Custom Integration", "API Access"] }, ]} title="Simple monthly pricing." description="Pick the tier that fits your business scale." @@ -207,12 +143,9 @@ export default function LandingPage() { textboxLayout="default" useInvertedBackground={true} faqs={[ - { - id: "q1", title: "Does this replace my dispatcher?", content: "Bookly works alongside your team to handle incoming leads so they can focus on high-priority tasks."}, - { - id: "q2", title: "Can it integrate with my CRM?", content: "Yes, we integrate with all major home service platforms via Zapier or direct API."}, - { - id: "q3", title: "Is the AI realistic?", content: "Yes, it's designed to sound like a professional, helpful member of your office staff."}, + { id: "q1", title: "Does this replace my dispatcher?", content: "Bookly works alongside your team to handle incoming leads so they can focus on high-priority tasks." }, + { id: "q2", title: "Can it integrate with my CRM?", content: "Yes, we integrate with all major home service platforms via Zapier or direct API." }, + { id: "q3", title: "Is the AI realistic?", content: "Yes, it's designed to sound like a professional, helpful member of your office staff." }, ]} title="Common questions." description="Quick answers to help you get started." @@ -223,15 +156,11 @@ export default function LandingPage() {
@@ -240,26 +169,12 @@ export default function LandingPage() { imageSrc="http://img.b2bpic.net/free-photo/copy-space-background-curved-sheets-paper_23-2148319072.jpg" logoText="Bookly" columns={[ - { - title: "Company", items: [ - { - label: "About", href: "#"}, - { - label: "Careers", href: "#"}, - ], - }, - { - title: "Resources", items: [ - { - label: "Blog", href: "#"}, - { - label: "Support", href: "#"}, - ], - }, + { title: "Company", items: [{ label: "About", href: "#" }, { label: "Careers", href: "#" }] }, + { title: "Resources", items: [{ label: "Blog", href: "#" }, { label: "Support", href: "#" }] }, ]} /> ); -} +} \ No newline at end of file diff --git a/src/app/reset-password/page.tsx b/src/app/reset-password/page.tsx new file mode 100644 index 0000000..3f745b7 --- /dev/null +++ b/src/app/reset-password/page.tsx @@ -0,0 +1,22 @@ +"use client"; + +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import { useState } from "react"; + +export default function ResetPasswordPage() { + const [email, setEmail] = useState(""); + + return ( + +
+
+

Reset password

+
+ setEmail(e.target.value)} /> + +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx new file mode 100644 index 0000000..2294013 --- /dev/null +++ b/src/app/settings/page.tsx @@ -0,0 +1,75 @@ +"use client"; + +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import ReactLenis from "lenis/react"; +import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered'; +import FooterMedia from '@/components/sections/footer/FooterMedia'; +import { useState } from 'react'; + +export default function SettingsPage() { + return ( + + + + +
+

Account Settings

+ +
+
+

Profile Information

+
+ + +
+
+ +
+

Billing

+

Current Plan: Pro ($99/mo)

+ +
+ +
+

Configuration

+
+ Enable AI Auto-Reply + +
+
+
+
+ + +
+
+ ); +} diff --git a/src/app/signup/page.tsx b/src/app/signup/page.tsx new file mode 100644 index 0000000..a58e93c --- /dev/null +++ b/src/app/signup/page.tsx @@ -0,0 +1,34 @@ +"use client"; + +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import { useState } from "react"; + +export default function SignupPage() { + const [email, setEmail] = useState(""); + const [error, setError] = useState(""); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (!email) { + setError("Email is required."); + return; + } + console.log("Signing up...", { email }); + }; + + return ( + +
+
+

Create an account

+ {error &&

{error}

} +
+ setEmail(e.target.value)} /> + +
+

Already have an account? Login

+
+
+
+ ); +} \ No newline at end of file diff --git a/src/app/styles/variables.css b/src/app/styles/variables.css index cd7dd49..89a322a 100644 --- a/src/app/styles/variables.css +++ b/src/app/styles/variables.css @@ -10,15 +10,15 @@ --accent: #ffffff; --background-accent: #ffffff; */ - --background: #F9FAFB; + --background: #f9fafb; --card: #ffffff; --foreground: #111827; - --primary-cta: #1E1B4B; + --primary-cta: #4f46e5; --primary-cta-text: #ffffff; - --secondary-cta: #22C55E; + --secondary-cta: #22c55e; --secondary-cta-text: #111827; - --accent: #e2e2e2; - --background-accent: #c4c4c4; + --accent: #e5e7eb; + --background-accent: #f3f4f6; /* text sizing - set by ThemeProvider */ /* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);