// 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 (
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}
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) => (
))}
{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) => (
))}
{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.
ORDER SUMMARY
Dateora · Unlimited
Monthly, after 14-day trial
{t.planPrice}
14-day free trial
−{t.planPrice}
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 });