'use client' import { useState, useEffect, useCallback } from 'react' import Image from 'next/image' import Link from 'next/link' import pulseIcon from '@/public/pulse_icon_no_margins.png' import { AnimatePresence, motion } from 'framer-motion' import { PulseMockup } from '@/components/marketing/mockups/pulse-mockup' import { PagesCard, ReferrersCard, LocationsCard, TechnologyCard, PeakHoursCard } from '@/components/marketing/mockups/pulse-features-carousel' interface Slide { headline: string mockup: React.ReactNode } function FeatureCard({ children }: { children: React.ReactNode }) { return (
{children}
) } const slides: Slide[] = [ { headline: 'Your traffic, at a glance.', mockup: }, { headline: 'See which pages perform best.', mockup: }, { headline: 'Know where your visitors come from.', mockup: }, { headline: 'Visitors from around the world.', mockup: }, { headline: 'Understand your audience\u2019s tech stack.', mockup: }, { headline: 'Find your peak traffic hours.', mockup: }, ] export default function FeatureSlideshow() { const [activeIndex, setActiveIndex] = useState(0) const advance = useCallback(() => { setActiveIndex((prev) => (prev + 1) % slides.length) }, []) useEffect(() => { let timer: ReturnType | null = null const start = () => { timer = setInterval(advance, 8000) } const stop = () => { if (timer) { clearInterval(timer); timer = null } } const onVisibility = () => { if (document.hidden) stop() else start() } start() document.addEventListener('visibilitychange', onVisibility) return () => { stop() document.removeEventListener('visibilitychange', onVisibility) } }, [advance]) const slide = slides[activeIndex] return (
{/* Background image */} {/* Dark overlay */}
{/* Logo */}
Pulse Pulse
{/* Content */}
{/* Headline — centered */}

{slide.headline}

{/* Mockup — constrained */}
{/* Orange glow */}
{slide.mockup}
) }