'use client' import { motion } from 'framer-motion' import Image from 'next/image' import { Check, X } from '@phosphor-icons/react' const pulseFeatures = [ { label: 'No cookies required', has: true }, { label: 'GDPR compliant by default', has: true }, { label: 'No consent banner needed', has: true }, { label: 'Open source client', has: true }, { label: 'Script under 2KB', has: true }, { label: 'Swiss infrastructure', has: true }, { label: 'No cross-site tracking', has: true }, { label: 'Free tier available', has: true }, { label: 'Real-time dashboard', has: true }, ] const gaFeatures = [ { label: 'Requires cookies', has: false }, { label: 'GDPR requires configuration', has: false }, { label: 'Consent banner required', has: false }, { label: 'Closed source', has: false }, { label: 'Script over 45KB', has: false }, { label: 'US infrastructure', has: false }, { label: 'Cross-site tracking', has: false }, { label: 'Free tier available', has: true }, { label: 'Real-time dashboard', has: true }, ] export default function ComparisonCards() { return (

How Pulse compares.

Privacy-first analytics doesn't mean less insight. See how Pulse stacks up.

{/* Pulse — highlighted */}
Pulse

Pulse

Privacy-first analytics

    {pulseFeatures.map((f) => (
  • {f.label}
  • ))}
{/* Google Analytics — muted */}
📊

Google Analytics

Traditional tracking

    {gaFeatures.map((f) => (
  • {f.has ? ( ) : ( )} {f.label}
  • ))}
) }