// Dateora — onboarding screens: Welcome, SignUp, Plan+Trial, Payment // ─── Welcome ────────────────────────────────────────────────────── const WelcomeScreen = ({ t, onStart, onSignIn }) => { if (t.id === 'mentor') { return (
For men who freeze {t.welcomeHeadline}

{t.welcomeSub}

{t.welcomeCTA} {t.welcomeAlt}
14-day trial · no card today Cancel from any page
“Tell me about a real situation. Where do you freeze?”
Adam · your coach
); } if (t.id === 'editorial') { return (
Vol. 01 · The conversation issue
Feature · Coaching {t.welcomeHeadline}

{t.welcomeSub}

{t.welcomeCTA} {t.welcomeAlt}
Pictured: Adam, on-call coach p. 03
); } // studio return (
Already in? Log in
Beta · invite-only
Real reps.
With a real coach.
Until the freeze is gone.

{t.welcomeSub}

{t.welcomeCTA} See how it works
14 days free · No card today · Cancel anytime
LIVE · Adam
“When's the last time you wanted to say hi and didn't?”
); }; // ─── Avatar portrait card ───────────────────────────────────────── const AvatarPortrait = ({ t }) => { // Three different unsplash photos per direction so each direction // feels visually distinct. All cropped portrait, men 30s-40s. const src = { mentor: 'https://images.unsplash.com/photo-1492562080023-ab3db95bfbce?auto=format&fit=crop&w=900&q=80', editorial: 'https://images.unsplash.com/photo-1519085360753-af0119f7cbe7?auto=format&fit=crop&w=900&q=80', studio: 'https://images.unsplash.com/photo-1564564321837-a57b7070ac4f?auto=format&fit=crop&w=900&q=80', }[t.id]; const overlay = { mentor: 'linear-gradient(180deg, transparent 30%, rgba(20,17,15,0.85) 100%), linear-gradient(110deg, rgba(212,154,92,0.10), transparent 40%)', editorial: 'linear-gradient(180deg, transparent 60%, rgba(26,23,20,0.15) 100%)', studio: 'linear-gradient(180deg, transparent 40%, rgba(10,10,11,0.6) 100%)', }[t.id]; const filter = { mentor: 'saturate(0.85) contrast(1.05) brightness(0.9)', editorial: 'grayscale(0.15) contrast(1.05)', studio: 'saturate(1.1) contrast(1.1)', }[t.id]; return (
{ e.currentTarget.style.display = 'none'; }} style={{ width: '100%', height: '100%', objectFit: 'cover', filter, display: 'block' }} />
); }; // ─── SignUp ─────────────────────────────────────────────────────── const SignUpScreen = ({ t, onSubmit, onBack, mode = 'signup' }) => { const [email, setEmail] = React.useState(mode === 'signin' ? 'you@example.com' : ''); const [pw, setPw] = React.useState(mode === 'signin' ? '••••••••' : ''); const isSignup = mode === 'signup'; const title = isSignup ? 'Create your account' : 'Welcome back'; const sub = isSignup ? 'Email and a password. Nothing else right now.' : 'Sign in to continue with Adam.'; const cta = isSignup ? 'Continue' : 'Sign in'; return (
Back
{isSignup ? 'Step 1 of 3' : 'Sign in'} {title}

{sub}

{ e.preventDefault(); onSubmit({ email }); }} style={{ display: 'flex', flexDirection: 'column', gap: 18 }}> onSubmit({ email })}>{cta}
or
onSubmit({ email: 'google@example.com' })}> Continue with Google
{isSignup ? 'Have an account? ' : 'New here? '} {isSignup ? 'Sign in' : 'Create one'}
By continuing you agree to Dateora's Terms and acknowledge our Privacy Policy.
{t.id !== 'studio' && (
)}
); }; const GoogleG = () => ( ); // ─── Plan + Trial ───────────────────────────────────────────────── const PlanScreen = ({ t, onStart, onBack }) => { const features = [ 'Unlimited sessions with Adam', 'Voice and text conversations', 'Saved history — review your reps', 'Weekly progress nudges by email', 'Cancel from any page, two clicks', ]; if (t.id === 'editorial') { return (
Back
{t.planEyebrow} · Vol. 01 {t.planTitle}

{t.planBody}

“Subscription pricing for a coach is unusual. We chose it because reps must be cheap to take.” — A note from the editor.
{t.planPrice} {t.planPeriod}
14 days free, first
{features.map((f) => (
{f}
))}
{t.planCTA}
{t.planFinePrint}
); } // mentor + studio (mostly aligned layout, tokens diverge) return (
Back
Step 2 of 3 · {t.planEyebrow} {t.planTitle}

{t.planBody}

{t.id === 'studio' && (
FREE FOR 14 DAYS
)}
Membership
Dateora · Unlimited
{t.planPrice}
{t.planPeriod}
{features.map((f) => (
{f}
))}
{t.planCTA}
{t.planFinePrint}
); }; // ─── Payment ───────────────────────────────────────────────────── const PaymentScreen = ({ t, onPaid, onBack }) => { const [card, setCard] = React.useState('4242 4242 4242 4242'); const [exp, setExp] = React.useState('12 / 28'); const [cvc, setCvc] = React.useState('123'); const [name, setName] = React.useState(''); const [processing, setProcessing] = React.useState(false); const submit = (e) => { e.preventDefault(); setProcessing(true); setTimeout(() => onPaid(), 1100); }; return (
Back
Step 3 of 3 Card to start your trial

You won't be charged today. We'll email you 3 days before the trial ends.

{processing ? Starting trial… : 'Start 14-day trial'}
Secured by Stripe · No charge today
ORDER SUMMARY
Dateora · Unlimited
Monthly, after 14-day trial
{t.planPrice}
14-day free trial
−{t.planPrice}
Due today
$0.00
First charge: 14 days from now
You'll receive an email 3 days before the trial ends. Cancel anytime from your account page — no charge if you do.
); }; const Spinner = () => ( ); Object.assign(window, { WelcomeScreen, SignUpScreen, PlanScreen, PaymentScreen, AvatarPortrait, Spinner, GoogleG });