import { useState } from "react" const G = "linear-gradient(135deg, #1d4ed8 0%, #0891b2 100%)" function MirrorLogo({ size = 48 }) { return ( ) } function StepConcept() { return (

Your conversations reveal
who you are

Most people go through hundreds of conversations without ever seeing their own patterns. mirror changes that — not by telling you what to say, but by reflecting how you actually show up.

{[ ["How you show up varies", "Confident in some rooms, hesitant in others. The mirror maps both."], ["Your signals are consistent", "Speech pace, filler words, how you listen, when you push — they form a pattern whether you notice it or not."], ["Seeing it clearly is rare", "Most people only get this from years of therapy or a very honest coach. This is a faster mirror."], ].map(([title, body]) => (
{title}
{body}
))}
) } function StepHow() { const steps = [ ["Record a Google Meet call", "Hit Start Recording in the side panel when your conversation begins — mirror captures your voice automatically, right there in the room."], ["We extract your patterns", "Speech pace, confidence signals, how you listen, when you interrupt, how your energy shifts — all mapped to the type of conversation."], ["Your portrait builds", "Your first profile appears after 3 sessions. After 10, the mirror knows your patterns better than people who've known you for years."], ] return (

It gets smarter with every session

Each conversation you record teaches the mirror something new about you. The first few sessions are setup — after that, it starts talking back.

{steps.map(([title, body], i) => (
{i < steps.length - 1 && (
)}
{i + 1}
{title}
{body}
))}
) } function StepPreview() { const reflected = [ ["#5b9cf6", "pace", "brisk, steady 170 wpm across your sessions"], ["#c084fc", "vocabulary richness", "varied — about 66% unique words"], ] return (

Here's what you'll see

After a few sessions, your portrait starts to look something like this — specific to you, not generic advice.

Example
Your Portrait

"You tend to hedge more and speak more carefully in high-stakes reviews, but that caution disappears almost entirely in casual conversations — where your pace picks up and you build on what others say far more often."

{["context-sensitive", "measured under pressure", "collaborative when relaxed"].map(tag => ( {tag} ))}
Already reflected back
{reflected.map(([color, name, body], i) => (
0 ? "1px solid #131722" : "none", }}>
{name}
·
{body}
))}
?
What the mirror can't see yet
You haven't recorded an evaluative conversation yet — some patterns only show up in high-stakes settings.
) } function StepTrust() { return (
🔒

What happens to your recording

Two things are true every single time, no exceptions.

{[ ["Deleted the instant it's processed", "Your audio is analyzed and permanently deleted the moment that finishes — never stored, never replayed, never shared with anyone, including us."], ["We remember you. No one else.", "Only your own patterns are kept. Anyone else on the call is never profiled, never stored, never analyzed individually — the mirror reflects you, not the room."], ].map(([title, body]) => (
{title}
{body}
))}
) } const STEPS = [StepConcept, StepHow, StepPreview, StepTrust] export default function OnboardingView({ onDone }) { const [step, setStep] = useState(0) const StepComponent = STEPS[step] function finish() { // Persisting the "done" flag (scoped to the signed-in account) is // App.jsx's job — it's the one that knows which user is currently // signed in, this component doesn't need to. onDone() } return (
{/* Step indicators */}
{STEPS.map((_, i) => (
))}
{/* Navigation */}
{step > 0 && ( )}
) }