Spaces:
Sleeping
Sleeping
File size: 13,071 Bytes
d1cde70 88c192b d1cde70 88c192b d1cde70 88c192b d1cde70 88c192b d1cde70 88c192b d1cde70 7dd0d81 d1cde70 88c192b d1cde70 88c192b d1cde70 88c192b d1cde70 88c192b d1cde70 88c192b d1cde70 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | import Reveal, { RevealItem } from "./Reveal"
const G = "linear-gradient(135deg, #1d4ed8 0%, #0891b2 100%)"
const FEATURES = [
{
icon: "π€",
color: "#5b9cf6",
title: "Real Conversation Analysis",
body: "We read what was actually said, not just extracted numbers. The AI identifies missed questions, interrupted thoughts, and moments you talked past each other.",
},
{
icon: "π",
color: "#34d399",
title: "A Feed That Reflects Back",
body: "Session recaps and the moments a pattern first shows up, interleaved β not a static report, a running read on how you're actually coming across.",
},
{
icon: "π―",
color: "#f59e0b",
title: "Context-Aware Insights",
body: "An interview is not a casual chat. We detect the type of conversation automatically and calibrate what good looks like for that specific setting.",
},
{
icon: "π",
color: "#818cf8",
title: "Your Behavioral Shape",
body: "Real signals β pace, curiosity, directness, how you build on others β positioned against your own history. No grades, no numbers, never compared to anyone but you.",
},
{
icon: "π§",
color: "#fb923c",
title: "Every Session, Broken Down",
body: "Each recording gets its own read β what the conversation was about, and how this one session compared to your own usual, signal by signal.",
},
{
icon: "π",
color: "#5b9cf6",
title: "Privacy by Design",
body: "Your audio is processed and deleted the moment analysis finishes. Only your own behavioral patterns are kept β never your words, never anyone else's.",
},
]
const CONTEXT_TYPES = [
{ label: "Interview & Review Β· High Stakes", desc: "Job interviews, performance reviews, presentations" },
{ label: "Conflict & Friction", desc: "Disagreements, pushback, difficult conversations" },
{ label: "Collaborative", desc: "Team meetings, brainstorming, joint problem-solving" },
{ label: "Persuading & Pitching", desc: "Sales calls, pitches, convincing others" },
{ label: "Negotiation", desc: "Deals, salary discussions, competing interests" },
{ label: "Coaching & Feedback", desc: "Mentoring, giving criticism, guiding others" },
{ label: "Supportive Listening", desc: "Emotional support, being there for someone" },
{ label: "Deep Personal", desc: "Vulnerable, emotionally open conversations" },
{ label: "Casual & Low-Stakes", desc: "Everyday chat, catching up, informal exchanges" },
]
function Section({ label, title, subtitle, children }) {
return (
<div style={{ marginBottom: 64 }}>
{label && (
<div style={{ fontSize: 11, fontWeight: 700, color: "#5b9cf6",
textTransform: "uppercase", letterSpacing: 1.2, marginBottom: 10,
textAlign: "center" }}>
{label}
</div>
)}
{title && (
<h2 style={{ fontSize: 24, fontWeight: 800, color: "#f0eeff",
margin: "0 0 10px", letterSpacing: "-0.5px", textAlign: "center",
lineHeight: 1.25 }}>
{title}
</h2>
)}
{subtitle && (
<p style={{ fontSize: 14, color: "#6b6888", textAlign: "center",
margin: "0 0 32px", lineHeight: 1.75, maxWidth: 520, marginInline: "auto" }}>
{subtitle}
</p>
)}
{children}
</div>
)
}
export default function HowItWorksView({ onBack }) {
return (
<div style={{ paddingBottom: 80 }} className="view-enter">
{/* Back */}
<button onClick={onBack}
style={{ background: "none", border: "none", cursor: "pointer",
color: "#4a4865", fontSize: 13, padding: 0, marginBottom: 40,
display: "flex", alignItems: "center", gap: 5 }}>
β Back
</button>
{/* ββ Hero ββ */}
<Reveal>
<div style={{ textAlign: "center", marginBottom: 72 }}>
<div style={{ display: "flex", justifyContent: "center", marginBottom: 20 }}>
<svg width="52" height="52" viewBox="0 0 52 52" fill="none">
<defs>
<linearGradient id="hiw-g" x1="0" y1="0" x2="52" y2="0" gradientUnits="userSpaceOnUse">
<stop stopColor="#1d4ed8"/><stop offset="1" stopColor="#0891b2"/>
</linearGradient>
</defs>
<rect x="2" y="20" width="6" height="6" rx="3" fill="url(#hiw-g)" opacity=".35"/>
<rect x="11" y="13" width="6" height="13" rx="3" fill="url(#hiw-g)" opacity=".6"/>
<rect x="20" y="6" width="8" height="20" rx="4" fill="url(#hiw-g)"/>
<rect x="31" y="13" width="6" height="13" rx="3" fill="url(#hiw-g)" opacity=".6"/>
<rect x="40" y="20" width="6" height="6" rx="3" fill="url(#hiw-g)" opacity=".35"/>
<line x1="0" y1="28" x2="52" y2="28" stroke="#1e2438" strokeWidth="1.25"/>
<rect x="2" y="29" width="6" height="6" rx="3" fill="url(#hiw-g)" opacity=".15"/>
<rect x="11" y="29" width="6" height="13" rx="3" fill="url(#hiw-g)" opacity=".27"/>
<rect x="20" y="29" width="8" height="20" rx="4" fill="url(#hiw-g)" opacity=".33"/>
<rect x="31" y="29" width="6" height="13" rx="3" fill="url(#hiw-g)" opacity=".27"/>
<rect x="40" y="29" width="6" height="6" rx="3" fill="url(#hiw-g)" opacity=".15"/>
</svg>
</div>
<h1 style={{ fontSize: 30, fontWeight: 800, margin: "0 0 6px",
letterSpacing: "-0.7px", lineHeight: 1.2, color: "#f0eeff" }}>
Your conversations,
</h1>
<h1 style={{ fontSize: 30, fontWeight: 800, margin: "0 0 20px",
letterSpacing: "-0.7px", lineHeight: 1.2,
background: G, WebkitBackgroundClip: "text",
WebkitTextFillColor: "transparent", backgroundClip: "text" }}>
reflected back.
</h1>
<p style={{ fontSize: 14, color: "#6b6888", lineHeight: 1.85,
maxWidth: 460, margin: "0 auto" }}>
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 showing you how you actually show up.
</p>
</div>
</Reveal>
{/* ββ The Problem ββ */}
<Reveal>
<Section label="The Problem" title="You can't see yourself clearly in the moment.">
<div style={{ display: "flex", flexDirection: "column", gap: 14 }}>
{[
<>In every conversation you're focused on what to say next. Nobody tells you that you interrupted four times, spoke for 70% of the conversation, or always go quiet when you're challenged.</>,
<><span style={{ color: "#c4c2d8", fontWeight: 600 }}>Good coaches cost hundreds per hour.</span> Therapy takes years. Most feedback from the people around you is filtered through politeness or filtered out entirely.</>,
<><span style={{ color: "#c4c2d8", fontWeight: 600 }}>That's why mirror exists.</span> Record a Google Meet call and we show you exactly what's happening β not what you think is happening.</>,
].map((text, i) => (
<p key={i} style={{ margin: 0, fontSize: 14, color: "#8b89aa",
lineHeight: 1.85, textAlign: "center", maxWidth: 540, marginInline: "auto" }}>
{text}
</p>
))}
</div>
</Section>
</Reveal>
{/* ββ How It Works ββ */}
<Reveal>
<Section label="How It Works" title="It gets smarter with every session.">
<div style={{ display: "flex", flexDirection: "column",
maxWidth: 520, margin: "0 auto" }}>
{[
{
num: "1",
title: "Record a Google Meet call",
body: "Hit one button when the conversation starts. Hindi or English, code-switched or not β what you talked about doesn't matter. How you showed up does.",
},
{
num: "2",
title: "AI reads what was actually said",
body: "Not just numbers β the actual conversation. We find what you missed, what you repeated, how you listened, and where you lost the thread.",
},
{
num: "3",
title: "Your profile builds over time",
body: "Every session gives you something. A handful in, real patterns start emerging β each one only named once it's shown up consistently for you, never guessed early.",
},
].map(({ num, title, body }, i, arr) => (
<div key={num} style={{ display: "flex", gap: 20, position: "relative",
paddingBottom: i < arr.length - 1 ? 34 : 0 }}>
{i < arr.length - 1 && (
<div style={{ position: "absolute", left: 17, top: 42,
width: 2, height: "calc(100% - 14px)",
background: "linear-gradient(to bottom, rgba(29,78,216,0.25), transparent)" }} />
)}
<div style={{ width: 36, height: 36, borderRadius: "50%", flexShrink: 0,
background: "rgba(29,78,216,0.1)", border: "1.5px solid rgba(29,78,216,0.3)",
display: "flex", alignItems: "center", justifyContent: "center",
fontSize: 14, fontWeight: 700, color: "#5b9cf6", zIndex: 1 }}>
{num}
</div>
<div style={{ paddingTop: 5 }}>
<div style={{ fontSize: 14, fontWeight: 700, color: "#f0eeff",
marginBottom: 6 }}>{title}</div>
<div style={{ fontSize: 13, color: "#6b6888", lineHeight: 1.7 }}>{body}</div>
</div>
</div>
))}
</div>
</Section>
</Reveal>
{/* ββ Features Grid ββ */}
<Reveal>
<Section label="What You Get" title="Everything the mirror sees."
subtitle="Each session adds signal. Here's what we track and what it builds into.">
<div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 10 }}>
{FEATURES.map(({ icon, color, title, body }, idx) => (
<RevealItem key={title} index={idx}>
<div className="card"
style={{ background: "#151922",
border: "1px solid #1e2438", borderRadius: 14, padding: "20px 18px" }}>
<div style={{ width: 42, height: 42, borderRadius: 11,
background: `${color}12`, border: `1px solid ${color}28`,
display: "flex", alignItems: "center", justifyContent: "center",
fontSize: 20, marginBottom: 14 }}>
{icon}
</div>
<div style={{ fontSize: 13, fontWeight: 700, color: "#f0eeff",
marginBottom: 7, lineHeight: 1.35 }}>
{title}
</div>
<div style={{ fontSize: 12, color: "#6b6888", lineHeight: 1.65 }}>
{body}
</div>
</div>
</RevealItem>
))}
</div>
</Section>
</Reveal>
{/* ββ Context Types ββ */}
<Reveal>
<Section label="Context Types" title="Every setting is different."
subtitle="We automatically detect what kind of conversation you had and adjust the feedback. The more types you record in, the fuller the picture.">
<div style={{ display: "flex", flexDirection: "column", gap: 6 }}>
{CONTEXT_TYPES.map(({ label, desc }) => (
<div key={label} style={{ display: "flex", justifyContent: "space-between",
alignItems: "center", padding: "11px 16px",
background: "#151922", border: "1px solid #1e2438", borderRadius: 10,
gap: 12 }}>
<span style={{ fontSize: 13, fontWeight: 600, color: "#c4c2d8",
flexShrink: 0 }}>
{label}
</span>
<span style={{ fontSize: 12, color: "#4a4865", textAlign: "right" }}>
{desc}
</span>
</div>
))}
</div>
</Section>
</Reveal>
{/* ββ Privacy ββ */}
<Reveal>
<div style={{ background: "#151922", border: "1px solid #1e2438",
borderRadius: 14, padding: "28px 24px", textAlign: "center" }}>
<div style={{ fontSize: 32, marginBottom: 14 }}>π</div>
<h3 style={{ fontSize: 17, fontWeight: 700, color: "#f0eeff",
margin: "0 0 10px" }}>
We remember you. No one else.
</h3>
<p style={{ fontSize: 13, color: "#6b6888", lineHeight: 1.8, margin: 0,
maxWidth: 420, marginInline: "auto" }}>
Your audio is processed and permanently deleted the moment analysis finishes β
never stored, never replayed. Only your own behavioral patterns are kept.
Anyone else on the call is never profiled, never stored, never analyzed individually.
</p>
</div>
</Reveal>
</div>
)
}
|