"use client"; import Link from "next/link"; import { motion } from "framer-motion"; import { MaterialIcon } from "@/components/ui/MaterialIcon"; import { PhoneStage } from "@/components/home/voice/PhoneStage"; import { FloatingRequestCards } from "@/components/home/voice/FloatingRequestCards"; import { VoiceWaves } from "@/components/home/voice/VoiceWaves"; import { viewport } from "@/lib/animations"; const EASE = [0.22, 1, 0.36, 1] as [number, number, number, number]; const EASE_OUT = [0.16, 1, 0.3, 1] as [number, number, number, number]; const FEATURE_CHIPS = [ { emoji: "🎤", label: "Voice Shopping" }, { emoji: "🧠", label: "Natural Language AI" }, { emoji: "🏪", label: "Local Merchant Discovery" }, { emoji: "⚡", label: "Real-Time Availability" }, ]; const badgeVariant = { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0, transition: { duration: 0.6, ease: EASE } }, }; const lineStagger = { hidden: {}, visible: { transition: { staggerChildren: 0.14, delayChildren: 0.12 } }, }; const lineReveal = { hidden: { y: 48, opacity: 0, filter: "blur(8px)" }, visible: { y: 0, opacity: 1, filter: "blur(0px)", transition: { duration: 0.85, ease: EASE_OUT } }, }; const descVariant = { hidden: { opacity: 0, y: 22 }, visible: { opacity: 1, y: 0, transition: { duration: 0.6, delay: 0.42, ease: EASE } }, }; const chipStagger = { hidden: {}, visible: { transition: { staggerChildren: 0.07, delayChildren: 0.56 } }, }; const chipItem = { hidden: { opacity: 0, y: 12 }, visible: { opacity: 1, y: 0, transition: { duration: 0.45, ease: EASE } }, }; const ctaVariant = { hidden: { opacity: 0, y: 16 }, visible: { opacity: 1, y: 0, transition: { duration: 0.6, delay: 0.86, ease: EASE } }, }; const phoneVariant = { hidden: { opacity: 0, y: 40, scale: 0.96 }, visible: { opacity: 1, y: 0, scale: 1, transition: { duration: 1.05, delay: 0.15, ease: EASE_OUT } }, }; // The homepage's product showcase: a live Nearle app running inside the phone, // so a visitor can watch a spoken request turn into a delivered order without // installing anything. The Hero above introduces Nearle — this shows the work. export function VoiceCommerceExperience() { return ( // Explicit padding rather than the shared .section rhythm: the cards that // float above and below the phone need more room than 88px to breathe.
{/* Voice waves sit behind everything, centred on the phone side */}
{/* ─── LEFT: what it does ─── */} AI Voice Commerce
Just speak.
{/* text-balance keeps the mobile wrap as "Nearle handles / the rest." instead of orphaning "rest." on its own line */} Nearle handles the rest.
Order products, discover nearby stores, and book trusted local services using natural conversation. {FEATURE_CHIPS.map((chip) => ( {chip.emoji} {chip.label} ))} Try Voice Commerce
{/* ─── RIGHT: the live phone ─── */} {/* Width-driven at every breakpoint — the 476/941 aspect ratio derives the height, so the phone never collapses. */}
{/* soft purple glow anchoring the device */}
); }