import React, { useState, useEffect, useMemo } from 'react'; import Button from './ui/Button'; import { Check, Sparkles, Send, MessageSquare, X } from 'lucide-react'; // --- Shared Components --- const NetworkBackground: React.FC<{ className?: string }> = ({ className = "" }) => { // Static node positions for consistency in other steps const nodes = [ { cx: "20%", cy: "20%", r: 4, fill: "#14b8a6" }, // teal { cx: "50%", cy: "10%", r: 6, fill: "#a855f7" }, // purple { cx: "80%", cy: "30%", r: 5, fill: "#f97316" }, // orange { cx: "30%", cy: "50%", r: 7, fill: "#3b82f6" }, // blue { cx: "70%", cy: "60%", r: 6, fill: "#ec4899" }, // pink { cx: "10%", cy: "70%", r: 5, fill: "#ef4444" }, // red { cx: "40%", cy: "80%", r: 4, fill: "#14b8a6" }, { cx: "90%", cy: "80%", r: 5, fill: "#8b5cf6" }, { cx: "60%", cy: "40%", r: 3, fill: "#eab308" }, { cx: "25%", cy: "90%", r: 6, fill: "#3b82f6" }, ]; return (
{/* Lines */} {/* Nodes */} {nodes.map((node, i) => ( ))}
); }; const SectionLayout: React.FC<{ number: string; title: string; description: React.ReactNode; visual: React.ReactNode; }> = ({ number, title, description, visual }) => { return (
{/* Text Content */}
{number}

{title}

{description}
{/* Visual Content */}
{visual}
); }; // --- Step 1: Generate Focus Group --- const Step1 = () => { const [status, setStatus] = useState<'input' | 'creating' | 'ready'>('input'); const [inputValue, setInputValue] = useState("AI-focused startup founders in Europe"); const handleCreate = () => { setStatus('creating'); setTimeout(() => { setStatus('ready'); }, 2000); }; return (

Use plain english to describe your target audience, or generate a personal focus group based on your real social media interactions.

Personalize your experience with your own LinkedIn network database.

LinkedIn and X data are going into the persona simulator.

} visual={ <> {/* Background for all phases, fully visible in 'ready' */}
{/* Input State */}
Target Audience

Who would you like to simulate?

setInputValue(e.target.value)} className="w-full bg-gray-900 border border-gray-700 rounded-lg py-3 px-4 text-white focus:outline-none focus:border-teal-500" />
{/* Creating State */}
Generating Focus Group...
{/* Ready State */}
{/* Bottom Toast Overlay */}
Your Personal Focus Group is Ready
} /> ); }; // --- Step 2: Run Experiments --- const Step2 = () => { const [isSimulating, setIsSimulating] = useState(false); const handleSimulate = () => { setIsSimulating(true); setTimeout(() => { setIsSimulating(false); }, 2500); }; return (
{/* Post Card */}

Our new brand identity focuses on radical transparency and community-driven growth...

{/* Simulating Overlay */}
Simulating reactions...
} /> ); }; // --- Step 3: Get Insights --- const Step3 = () => { return (
{/* Score Card */}
Brand Alignment
94/100
Highly Coherent
Trustworthiness 88%
Brand Recall 82%
{/* Feedback Card */}
Brand Insight

"The 'transparency' angle increased trust scores by 25% among Millennial tech professionals."

} /> ); }; // --- Step 4: Forecast Outcome --- const Step4 = () => { const [activeVariant, setActiveVariant] = useState(0); const variants = [ { label: "Original", score: 52, text: "We're launching a new sustainable clothing line next month." }, { label: "Variant 1", score: 91, text: "Radical transparency in every stitch. Meet the brand that's redefining sustainable luxury." }, { label: "Variant 2", score: 78, text: "Style without compromise. Our eco-friendly collection arrives soon." }, ]; return ( {/* Main Content Area */}
{variants[activeVariant].label}
Score: {variants[activeVariant].score}

{variants[activeVariant].text}

{/* Floating Menu */}
Select Variant
{variants.map((v, i) => (
setActiveVariant(i)} className={`p-2 rounded cursor-pointer transition-all flex justify-between items-center group ${activeVariant === i ? 'bg-white text-black' : 'hover:bg-white/10 text-gray-400'}`} > {v.label} {v.score}
))}
{/* Connecting Line Visual */}
} /> ); }; // --- Main Container --- const InteractiveDemo: React.FC = () => { return (
); }; export default InteractiveDemo;