diff --git a/app/(marketing)/layout.tsx b/app/(marketing)/layout.tsx
index 2d838ad..c41b8d7 100644
--- a/app/(marketing)/layout.tsx
+++ b/app/(marketing)/layout.tsx
@@ -1,15 +1,20 @@
import { Navbar } from '@/components/marketing/Navbar';
import { Footer } from '@/components/marketing/Footer';
import type { ReactNode } from 'react';
+import { LeadsProvider } from '@/components/providers/LeadsProvider';
+import DemoRequestModalTrigger from '@/components/DemoRequestModalTrigger';
export default function MarketingLayout({ children }: { children: ReactNode }) {
return (
-
-
-
- {children}
-
-
-
+
+
+
+
+ {children}
+
+
+
+
+
);
}
diff --git a/components/DemoRequestModal.tsx b/components/DemoRequestModal.tsx
new file mode 100644
index 0000000..f85efac
--- /dev/null
+++ b/components/DemoRequestModal.tsx
@@ -0,0 +1,85 @@
+"use client";
+
+import React from "react";
+import { motion, AnimatePresence } from "framer-motion";
+import { X, Globe } from "lucide-react";
+import { useTheme } from "next-themes";
+
+interface DemoRequestModalProps {
+ isOpen: boolean;
+ onClose: () => void;
+}
+
+const GOOGLE_CAL_URL =
+ "https://calendar.google.com/calendar/appointments/schedules/AcZssZ2go-uvRkTNc0XR_6kDLKXLBgBoTZ4AgevaBshsjgQqxSFmuV7DJCMp2HWvOLu5EdeJtHPCguCz";
+
+const DemoRequestModal = ({ isOpen, onClose }: DemoRequestModalProps) => {
+ const { resolvedTheme } = useTheme();
+ const isDark = resolvedTheme === "dark";
+
+ return (
+
+ {isOpen && (
+
+ {/* Backdrop */}
+
+
+ {/* Modal Content */}
+
+
+
+
+
+
+ Book a Demo
+
+
+ Schedule your live demo session with the Prism AI team.
+
+
+
+
+
+
+
+
+
+ Secured via Google Calendar
+
+
+
+
+ )}
+
+ );
+};
+
+export default DemoRequestModal;
diff --git a/components/DemoRequestModalTrigger.tsx b/components/DemoRequestModalTrigger.tsx
new file mode 100644
index 0000000..a903450
--- /dev/null
+++ b/components/DemoRequestModalTrigger.tsx
@@ -0,0 +1,14 @@
+"use client";
+
+import { useLeads } from "@/components/providers/LeadsProvider";
+import DemoRequestModal from "@/components/DemoRequestModal";
+
+export default function DemoRequestModalTrigger() {
+ const { isDemoModalOpen, closeDemoModal } = useLeads();
+ return (
+
+ );
+}
diff --git a/components/landing/DetailedFeatures.tsx b/components/landing/DetailedFeatures.tsx
index 171029e..b5c8c6a 100644
--- a/components/landing/DetailedFeatures.tsx
+++ b/components/landing/DetailedFeatures.tsx
@@ -1,3 +1,5 @@
+'use client';
+
import Image, { StaticImageData } from 'next/image';
import prismUi from '@/public/img/prism-ui.png';
import policies from '@/public/img/policies.png';
@@ -8,6 +10,8 @@ import { cn } from '@/lib/utils';
import { Check, ArrowRight } from 'lucide-react';
import Link from 'next/link';
+import { useLeads } from '@/components/providers/LeadsProvider';
+
interface FeatureSectionProps {
title: string;
children: React.ReactNode;
@@ -19,6 +23,9 @@ interface FeatureSectionProps {
}
function FeatureSection({ title, children, image, imageAlt, reversed = false, ctaText, ctaHref }: FeatureSectionProps) {
+ const { openDemoModal } = useLeads();
+ const isCloudLink = ctaHref === "https://cloud.prism.ultraviolet.rs";
+
return (
@@ -30,14 +37,24 @@ function FeatureSection({ title, children, image, imageAlt, reversed = false, ct
{ctaText && ctaHref && (
-
- {ctaText}
-
-
+ {isCloudLink ? (
+
+ ) : (
+
+ {ctaText}
+
+
+ )}
)}
diff --git a/components/landing/Hero.tsx b/components/landing/Hero.tsx
index 60da4f5..9a22bf0 100644
--- a/components/landing/Hero.tsx
+++ b/components/landing/Hero.tsx
@@ -4,7 +4,11 @@ import Link from 'next/link';
import { motion } from 'framer-motion';
import { ArrowRight, Shield, Lock, Cpu } from 'lucide-react';
+import { useLeads } from '@/components/providers/LeadsProvider';
+
export function Hero() {
+ const { openDemoModal } = useLeads();
+
return (
{/* Background Gradient */}
@@ -50,14 +54,13 @@ export function Hero() {
transition={{ duration: 0.5, delay: 0.3 }}
className="flex flex-col sm:flex-row gap-4 w-full justify-center"
>
-
Try Prism Cloud
-
+
-
+
{partners.map((partner) => (
-
+
))}
diff --git a/components/landing/Pricing.tsx b/components/landing/Pricing.tsx
index 273b432..1c68d2c 100644
--- a/components/landing/Pricing.tsx
+++ b/components/landing/Pricing.tsx
@@ -1,7 +1,12 @@
+'use client';
+
import Link from 'next/link';
import { Check } from 'lucide-react';
+import { useLeads } from '@/components/providers/LeadsProvider';
export function Pricing() {
+ const { openDemoModal } = useLeads();
+
return (
@@ -35,13 +40,12 @@ export function Pricing() {
Community support
-
Get Started
-
+
{/* Enterprise Plan */}
diff --git a/components/marketing/Footer.tsx b/components/marketing/Footer.tsx
index 1146a28..e099e7a 100644
--- a/components/marketing/Footer.tsx
+++ b/components/marketing/Footer.tsx
@@ -1,7 +1,12 @@
+'use client';
+
import Link from 'next/link';
import Image from 'next/image';
+import { useLeads } from '@/components/providers/LeadsProvider';
export function Footer() {
+ const { openDemoModal } = useLeads();
+
return (