// screens.jsx — v2 peptide-first funnel screens. Each screen is registered as // window.SCREEN_ and consumed by buildFlow() in app.jsx. Reusable factories // (pickScreen / multiScreen / inputScreen / eduScreen) keep the ~40 screens DRY. const { useState: useS, useEffect: useE, useMemo: useM } = React; function TitleBlock({ eyebrow, title, sub }) { return (
{eyebrow && {eyebrow}}

{title}

{sub &&

{sub}

}
); } // ── Factories ─────────────────────────────────────────────────── // Single-select; tapping a card records the answer and advances. function pickScreen({ key, eyebrow, title, sub, opts, icons = true }) { return function ({ state, set, next }) { return (
{opts.map(o => ( { set(key, o.id); next(); }} /> ))}
); }; } // Multi-select with optional "None" + Continue. function multiScreen({ key, eyebrow, title, sub, opts, none = false, minOne = true, icon }) { return function ({ state, set, next }) { const sel = state[key] || []; const isNone = none && state[key + '_none']; const toggle = (id) => { if (isNone) set(key + '_none', false); set(key, sel.includes(id) ? sel.filter(x => x !== id) : [...sel, id]); }; const chooseNone = () => { set(key + '_none', !isNone); set(key, []); }; const disabled = minOne && sel.length === 0 && !isNone; return ( <>
{opts.map(o => ( toggle(o.id)} /> ))} {none && (<>
)}
); }; } // Free-text / number input. function inputScreen({ key, eyebrow, title, sub, placeholder, type = 'text', inputMode, banner, lock, optional }) { return function ({ state, set, next }) { const [v, setV] = useS(state[key] || ''); useE(() => { set(key, v); }, [v]); return ( <>
{banner && {banner}} setV(e.target.value)} autoFocus /> {lock &&
{lock}
}
); }; } // Education / social-proof interstitial. function eduScreen({ eyebrow, title, sub, bullets, cta = 'Continue' }) { return function ({ next }) { return ( <>
{bullets && (
{bullets.map((b, i) => (
{b.t || b}
))}
)}
); }; } // Silhouette grid (only used inside fat-loss / muscle lanes). function silhouetteGrid({ key, title, sub, opts, height = 300 }) { return function ({ state, set, next }) { const g = state.sex === 'female' ? 'f' : 'm'; return (
{opts.map(o => ( { set(key, o.id); next(); }} /> ))}
); }; } // ════════════════════════════════════════════════════════════════ // SECTION 1 — Hook & trust // ════════════════════════════════════════════════════════════════ window.SCREEN_landing = function ({ next }) { return (
MD-led COA-verified 6,200+ protocols
Takes ~3 minutes · no card required
); }; window.SCREEN_edu_peptides = eduScreen({ eyebrow: 'Peptides 101', title: 'What even is a peptide?', sub: "New to this? Here's the 20-second version before we start.", bullets: [ { icon: 'atom', t: 'Signals your body already makes — short chains of amino acids that tell cells what to do.' }, { icon: 'spark', t: 'Targeted, not blunt — each one nudges a specific system: fat, healing, sleep, focus, libido.' }, { icon: 'shield', t: 'Prescription + lab-tested — written by a licensed MD, compounded by a 503A/B pharmacy, HPLC-verified.' }, ], cta: "Got it — let's go", }); window.SCREEN_source = pickScreen({ key: 'source', title: 'What got you curious about peptides?', sub: 'No wrong answer — it just helps us tailor how much we explain.', opts: [ { id: 'friend', icon: 'user', t: 'A friend or family member' }, { id: 'media', icon: 'play', t: 'A podcast or video' }, { id: 'social', icon: 'heart', t: 'Social media' }, { id: 'doctor', icon: 'stethoscope', t: 'My doctor suggested it' }, { id: 'research', icon: 'brain', t: 'My own research' }, ], }); // ════════════════════════════════════════════════════════════════ // SECTION 2 — Goal & ambition // ════════════════════════════════════════════════════════════════ window.SCREEN_goal = pickScreen({ key: 'goal', eyebrow: 'Your #1 goal', title: 'What do you most want to fix or improve?', sub: 'Pick the one that matters most right now — you can add others next.', opts: [ { id: 'fat_loss', icon: 'flame', t: 'Lose fat & reset metabolism', sub: 'GLP-1s, Tesamorelin, MOTS-C' }, { id: 'muscle', icon: 'muscle', t: 'Build muscle & boost GH', sub: 'Sermorelin, Ipamorelin, CJC' }, { id: 'recover', icon: 'spark', t: 'Heal, recover & kill pain', sub: 'BPC-157, TB-500, GHK-Cu' }, { id: 'aesthetics', icon: 'star', t: 'Look younger — skin & hair', sub: 'GHK-Cu, Glutathione, longevity' }, { id: 'mind', icon: 'brain', t: 'Sharpen focus, mood & sleep', sub: 'Semax, Selank, DSIP' }, { id: 'vitality', icon: 'heart', t: 'Energy, libido & vitality', sub: 'NAD+, PT-141, MOTS-C' }, { id: 'unsure', icon: 'info', t: 'Not sure — help me figure it out', sub: "We'll guide you" }, ], }); window.SCREEN_subgoals = multiScreen({ key: 'subgoals', title: 'What else matters to you?', sub: 'Pick everything that applies — most people stack 2–4. We tune the protocol accordingly.', minOne: false, opts: [ { id: 'stubborn_fat', icon: 'flame', t: 'Lose stubborn fat' }, { id: 'lean_muscle', icon: 'muscle', t: 'Build lean muscle' }, { id: 'recovery', icon: 'spark', t: 'Recover faster' }, { id: 'joint_pain', icon: 'shield', t: 'Heal joint or tendon pain' }, { id: 'sleep', icon: 'moon', t: 'Sleep deeper' }, { id: 'focus', icon: 'brain', t: 'Sharper focus' }, { id: 'mood', icon: 'heart', t: 'Calmer mood / less anxiety' }, { id: 'skin', icon: 'star', t: 'Younger skin' }, { id: 'hair', icon: 'user', t: 'Thicker hair' }, { id: 'libido', icon: 'heart', t: 'Better libido' }, { id: 'immune', icon: 'shield', t: 'Stronger immunity' }, { id: 'gut', icon: 'drop', t: 'Heal my gut' }, { id: 'energy', icon: 'lightning', t: 'More energy' }, { id: 'longevity', icon: 'atom', t: 'Slow aging / longevity' }, ], }); window.SCREEN_readiness = pickScreen({ key: 'readiness', title: 'How ready are you to start?', sub: 'Honest answer — it tells your physician how to pace things.', opts: [ { id: 'exploring', icon: 'info', t: 'Just exploring for now' }, { id: 'comparing', icon: 'scale', t: 'Comparing my options' }, { id: 'soon', icon: 'calendar',t: 'Ready within a month' }, { id: 'now', icon: 'flame', t: "Ready now — let's go" }, ], }); // ════════════════════════════════════════════════════════════════ // SECTION 3 — About you // ════════════════════════════════════════════════════════════════ window.SCREEN_sex = pickScreen({ key: 'sex', title: 'What sex were you assigned at birth?', sub: 'We calibrate dosing and hormone interactions on biology.', opts: [ { id: 'male', icon: 'user', t: 'Male' }, { id: 'female', icon: 'user', t: 'Female' }, ], }); window.SCREEN_age = pickScreen({ key: 'age', title: 'Your age range', sub: 'Peptide response shifts every decade — especially GH and longevity stacks.', opts: [ { id: '18-29', icon: 'user', t: '18–29' }, { id: '30-39', icon: 'user', t: '30–39' }, { id: '40-49', icon: 'user', t: '40–49' }, { id: '50-59', icon: 'user', t: '50–59' }, { id: '60+', icon: 'user', t: '60+' }, ], }); function unitScreen({ key, unitKey, units, title, sub, ph }) { return function ({ state, set, next }) { const [unit, setUnit] = useS(state[unitKey] || units[0]); const [v, setV] = useS(state[key] || ''); useE(() => { set(unitKey, unit); }, [unit]); useE(() => { set(key, v); }, [v]); return ( <>
{units.map(u => )}
setV(e.target.value)} autoFocus />
); }; } window.SCREEN_height = unitScreen({ key: 'height', unitKey: 'height_unit', units: ['ft', 'cm'], title: "What's your height?", sub: 'Used for BMI and dosing weight-class.', ph: u => u === 'ft' ? 'Height, ft' : 'Height, cm' }); window.SCREEN_weight = unitScreen({ key: 'weight', unitKey: 'weight_unit', units: ['lb', 'kg'], title: 'Your current weight', sub: 'Private and encrypted — used only by your reviewing physician.', ph: u => u === 'lb' ? 'Current weight, lb' : 'Current weight, kg' }); // ════════════════════════════════════════════════════════════════ // SECTION 4 — Goal deep-dives (branched) // ── Fat loss ── window.SCREEN_fl_bodytype = silhouetteGrid({ key: 'fl_bodytype', title: 'Choose your body type', sub: "Honest answers calibrate the protocol — we don't judge.", opts: [ { id: 'slim', t: 'Slim', fat: 0.10, muscle: 0.3 }, { id: 'average', t: 'Average', fat: 0.28, muscle: 0.4 }, { id: 'big', t: 'Big', fat: 0.55, muscle: 0.5 }, { id: 'heavy', t: 'Heavy', fat: 0.78, muscle: 0.35 }, ] }); window.SCREEN_fl_bodyfat = function ({ state, set, next }) { const [val, setVal] = useS(state.fl_bodyfat ?? 3); const ranges = ['5–9%', '10–14%', '15–19%', '20–24%', '25–29%', '30–34%', '35–39%', '>40%']; const fatVals = [0.06, 0.14, 0.22, 0.32, 0.42, 0.55, 0.7, 0.85]; const g = state.sex === 'female' ? 'f' : 'm'; const pct = (val / (ranges.length - 1)) * 100; useE(() => set('fl_bodyfat', val), [val]); return ( <>
{ranges[val]}
setVal(parseInt(e.target.value))} style={{ '--p': pct + '%' }} />
); }; window.SCREEN_fl_storage = multiScreen({ key: 'fl_storage', title: 'Where do you hold fat most?', sub: 'Tap all that apply.', minOne: false, none: true, icon: 'flame', opts: [{ id: 'belly', t: 'Belly / midsection' }, { id: 'love_handles', t: 'Love handles / lower back' }, { id: 'hips', t: 'Hips & thighs' }, { id: 'chest', t: 'Chest' }, { id: 'arms', t: 'Arms' }, { id: 'face', t: 'Face / neck' }] }); window.SCREEN_fl_appetite = pickScreen({ key: 'fl_appetite', title: 'How are your cravings & appetite?', sub: 'This decides whether a GLP-1 (appetite) or a metabolic peptide fits better.', opts: [{ id: 'constant', icon: 'flame', t: 'Constant — I think about food a lot' }, { id: 'evenings', icon: 'moon', t: 'Fine by day, hungry at night' }, { id: 'stress', icon: 'heart', t: 'Stress / boredom eating' }, { id: 'controlled', icon: 'check', t: 'Appetite is controlled — fat just won’t move' }] }); window.SCREEN_fl_glp1 = pickScreen({ key: 'fl_glp1', title: 'Have you tried a GLP-1 (Ozempic, Wegovy, Mounjaro)?', sub: 'So we don’t double up — and can escalate or switch you appropriately.', opts: [{ id: 'never', icon: 'x', t: 'Never' }, { id: 'past', icon: 'clock', t: 'In the past, not now' }, { id: 'current', icon: 'syringe', t: 'Currently on one' }, { id: 'plateau', icon: 'trend', t: 'On one, but plateaued' }] }); window.SCREEN_fl_target = unitScreen({ key: 'fl_target', unitKey: 'weight_unit', units: ['lb', 'kg'], title: "What's your target weight?", sub: 'Realistic targets get approved faster.', ph: u => u === 'lb' ? 'Target weight, lb' : 'Target weight, kg' }); // ── Muscle ── window.SCREEN_mu_training = pickScreen({ key: 'mu_training', title: 'How long have you trained seriously?', opts: [{ id: 'new', icon: 'home', t: 'Just starting' }, { id: 'lt2', icon: 'gym', t: 'Under 2 years' }, { id: '2to5', icon: 'gym', t: '2–5 years' }, { id: '5plus', icon: 'muscle', t: '5+ years' }] }); window.SCREEN_mu_bodytype = silhouetteGrid({ key: 'mu_bodytype', title: 'Your current build', sub: 'Pick the closest match.', opts: [{ id: 'slim', t: 'Slim', fat: 0.12, muscle: 0.35 }, { id: 'average', t: 'Average', fat: 0.25, muscle: 0.5 }, { id: 'athletic', t: 'Athletic', fat: 0.16, muscle: 0.7 }, { id: 'big', t: 'Bigger', fat: 0.45, muscle: 0.6 }] }); window.SCREEN_mu_target = silhouetteGrid({ key: 'mu_target', title: 'The build you want', sub: 'Sets the growth ceiling for your stack.', height: 280, opts: [{ id: 'athlete', t: 'Athlete', fat: 0.12, muscle: 0.6 }, { id: 'hero', t: 'Hero', fat: 0.10, muscle: 0.8 }, { id: 'builder', t: 'Bodybuilder', fat: 0.07, muscle: 0.95 }, { id: 'lean', t: 'Lean & toned', fat: 0.15, muscle: 0.5 }] }); window.SCREEN_mu_recovery = pickScreen({ key: 'mu_recovery', title: 'How well do you recover between sessions?', opts: [{ id: 'fast', icon: 'lightning', t: 'Fast — ready next day' }, { id: 'ok', icon: 'clock', t: 'Okay, a little sore' }, { id: 'slow', icon: 'moon', t: 'Slow — sore for days' }, { id: 'plateau', icon: 'trend', t: 'Plateaued / overtrained' }] }); window.SCREEN_mu_priority = pickScreen({ key: 'mu_priority', title: 'What matters more right now?', opts: [{ id: 'size', icon: 'muscle', t: 'Maximum size' }, { id: 'lean', icon: 'spark', t: 'Lean, defined mass' }, { id: 'recomp', icon: 'scale', t: 'Recomp — build + lose fat' }, { id: 'strength', icon: 'gym', t: 'Raw strength' }] }); // ── Recover ── window.SCREEN_re_painmap = function ({ state, set, next }) { const sel = state.re_pain || []; const toggle = (k) => set('re_pain', sel.includes(k) ? sel.filter(x => x !== k) : [...sel, k]); const opts = [{ id: 'shoulders', t: 'Shoulders' }, { id: 'chest', t: 'Chest' }, { id: 'arms', t: 'Arms / elbows' }, { id: 'abs', t: 'Core / gut' }, { id: 'legs', t: 'Legs / knees' }, { id: 'back', t: 'Back / spine' }]; return ( <>
{opts.map(o => ( ))}
); }; window.SCREEN_re_duration = pickScreen({ key: 're_duration', title: 'How long have you had this?', opts: [{ id: 'acute', icon: 'lightning', t: 'Recent — under a month' }, { id: 'months', icon: 'clock', t: '1–6 months' }, { id: 'chronic', icon: 'calendar', t: '6+ months' }, { id: 'recurring', icon: 'trend', t: 'It keeps coming back' }] }); window.SCREEN_re_cause = pickScreen({ key: 're_cause', title: 'What caused it?', opts: [{ id: 'training', icon: 'gym', t: 'Training / sport' }, { id: 'injury', icon: 'warning', t: 'An injury or accident' }, { id: 'surgery', icon: 'plus', t: 'Surgery' }, { id: 'age', icon: 'clock', t: 'Age / wear and tear' }, { id: 'unknown', icon: 'info', t: 'Not sure' }] }); window.SCREEN_re_priortx = multiScreen({ key: 're_priortx', title: 'Tried anything for it yet?', sub: 'Tap all that apply.', none: true, minOne: false, opts: [{ id: 'rest', icon: 'moon', t: 'Rest / time' }, { id: 'pt', icon: 'spark', t: 'Physical therapy' }, { id: 'cortisone', icon: 'syringe', t: 'Cortisone shots' }, { id: 'surgery', icon: 'plus', t: 'Surgery' }, { id: 'nsaids', icon: 'drop', t: 'Anti-inflammatories' }] }); window.SCREEN_re_limiting = pickScreen({ key: 're_limiting', title: 'Is it limiting your training or daily life?', opts: [{ id: 'severe', icon: 'warning', t: "Yes — I've had to stop" }, { id: 'some', icon: 'trend', t: 'Somewhat — I work around it' }, { id: 'mild', icon: 'check', t: 'Mild — just annoying' }] }); // ── Aesthetics ── window.SCREEN_ae_skin = multiScreen({ key: 'ae_skin', title: 'Your top skin concerns?', sub: 'Tap all that apply.', none: true, minOne: false, icon: 'star', opts: [{ id: 'lines', t: 'Fine lines & wrinkles' }, { id: 'laxity', t: 'Sagging / loss of firmness' }, { id: 'dull', t: 'Dullness / uneven tone' }, { id: 'pigment', t: 'Dark spots / pigmentation' }, { id: 'scars', t: 'Scars / stretch marks' }, { id: 'acne', t: 'Acne / breakouts' }] }); window.SCREEN_ae_hair = pickScreen({ key: 'ae_hair', title: 'How about your hair?', opts: [{ id: 'thinning', icon: 'user', t: 'Thinning / losing density' }, { id: 'shedding', icon: 'warning', t: 'Shedding more than usual' }, { id: 'receding', icon: 'trend', t: 'Receding hairline' }, { id: 'none', icon: 'check', t: 'Hair is fine' }] }); window.SCREEN_ae_sun = pickScreen({ key: 'ae_sun', title: 'How much sun does your skin get?', opts: [{ id: 'lots', icon: 'flame', t: 'A lot — outdoors often' }, { id: 'some', icon: 'spark', t: 'Some / seasonal' }, { id: 'little', icon: 'moon', t: 'Very little' }] }); window.SCREEN_ae_routine = pickScreen({ key: 'ae_routine', title: 'Your current skincare effort?', opts: [{ id: 'none', icon: 'x', t: 'Basically nothing' }, { id: 'basic', icon: 'drop', t: 'Cleanser + moisturizer' }, { id: 'active', icon: 'spark', t: 'Actives (retinol, vit C…)' }, { id: 'pro', icon: 'star', t: 'Dermatologist / treatments' }] }); window.SCREEN_ae_bioage = pickScreen({ key: 'ae_bioage', title: 'How much does aging itself worry you?', sub: 'Drives whether we add longevity peptides (Epithalon, NAD+).', opts: [{ id: 'lots', icon: 'atom', t: "A lot — I want to slow it" }, { id: 'some', icon: 'clock', t: 'Somewhat' }, { id: 'little', icon: 'check', t: 'Just the visible stuff' }] }); // ── Mind ── window.SCREEN_mi_focus = pickScreen({ key: 'mi_focus', title: 'How is your focus & concentration?', opts: [{ id: 'sharp', icon: 'check', t: 'Sharp most days' }, { id: 'dips', icon: 'clock', t: 'Dips in the afternoon' }, { id: 'scattered', icon: 'warning', t: 'Scattered / easily distracted' }, { id: 'struggle', icon: 'brain', t: 'A real daily struggle' }] }); window.SCREEN_mi_fog = pickScreen({ key: 'mi_fog', title: 'Brain fog?', opts: [{ id: 'never', icon: 'check', t: 'Rarely' }, { id: 'sometimes', icon: 'info', t: 'Sometimes' }, { id: 'often', icon: 'warning', t: 'Often' }, { id: 'constant', icon: 'moon', t: 'Almost constant' }] }); window.SCREEN_mi_mood = pickScreen({ key: 'mi_mood', title: 'How would you describe your mood lately?', opts: [{ id: 'good', icon: 'heart', t: 'Pretty stable' }, { id: 'anxious', icon: 'warning', t: 'Anxious / wired' }, { id: 'low', icon: 'moon', t: 'Low / flat' }, { id: 'irritable', icon: 'flame', t: 'Irritable / short fuse' }] }); window.SCREEN_mi_memory = pickScreen({ key: 'mi_memory', title: 'Memory & recall?', opts: [{ id: 'sharp', icon: 'check', t: 'Sharp' }, { id: 'slipping', icon: 'clock', t: 'Slipping a bit' }, { id: 'forgetful', icon: 'warning', t: 'Noticeably forgetful' }] }); window.SCREEN_mi_sleeponset = pickScreen({ key: 'mi_sleeponset', title: 'How fast do you fall asleep?', opts: [{ id: 'fast', icon: 'check', t: 'Out in minutes' }, { id: 'ok', icon: 'clock', t: '15–30 min' }, { id: 'slow', icon: 'moon', t: 'Over 30 min — mind races' }, { id: 'wake', icon: 'warning', t: 'I wake through the night' }] }); // ── Vitality ── window.SCREEN_vi_crash = pickScreen({ key: 'vi_crash', title: 'When does your energy crash?', opts: [{ id: 'morning', icon: 'moon', t: 'I wake up tired' }, { id: 'afternoon', icon: 'clock', t: 'Afternoon slump' }, { id: 'evening', icon: 'lightning', t: 'Run out by evening' }, { id: 'allday', icon: 'warning', t: 'Drained all day' }] }); window.SCREEN_vi_libido = pickScreen({ key: 'vi_libido', title: 'How is your libido / sex drive?', opts: [{ id: 'fine', icon: 'check', t: "It's good" }, { id: 'lower', icon: 'trend', t: 'Lower than it was' }, { id: 'low', icon: 'warning', t: 'Noticeably low' }, { id: 'performance', icon: 'heart', t: 'Performance, not desire' }] }); window.SCREEN_vi_morning = pickScreen({ key: 'vi_morning', title: 'How do you feel in the morning?', opts: [{ id: 'great', icon: 'spark', t: 'Energized & sharp' }, { id: 'slow', icon: 'clock', t: 'Slow to get going' }, { id: 'exhausted', icon: 'moon', t: 'Exhausted before the day starts' }] }); // ════════════════════════════════════════════════════════════════ // SECTION 5 — Lifestyle modifiers window.SCREEN_sleep = pickScreen({ key: 'sleep', title: "How's your sleep?", sub: 'Poor sleep blunts growth hormone — we may add DSIP, Epithalon, or Sermorelin.', opts: [{ id: 'great', icon: 'moon', t: '7–9 hrs, rested' }, { id: 'okay', icon: 'moon', t: '6–7 hrs, could be deeper' }, { id: 'broken', icon: 'moon', t: 'Frequently broken' }, { id: 'bad', icon: 'moon', t: 'Under 6 hrs, chronic' }] }); window.SCREEN_energy = pickScreen({ key: 'energy', title: 'Daily energy level', opts: [{ id: 'high', icon: 'lightning', t: 'High — rarely crash' }, { id: 'mid', icon: 'lightning', t: 'Steady with a dip' }, { id: 'low', icon: 'lightning', t: 'Tired by midday' }, { id: 'flat', icon: 'lightning', t: 'Constantly drained' }] }); window.SCREEN_stress = pickScreen({ key: 'stress', title: 'Stress, last 30 days', opts: [{ id: 'low', icon: 'heart', t: 'Mostly calm' }, { id: 'mid', icon: 'heart', t: 'Manageable' }, { id: 'high', icon: 'heart', t: 'High' }, { id: 'burn', icon: 'flame', t: 'Burnt out' }] }); window.SCREEN_activity = pickScreen({ key: 'activity', title: 'Activity level', opts: [{ id: 'sedentary', icon: 'home', t: 'Sedentary', sub: 'Desk work' }, { id: 'light', icon: 'home', t: 'Light', sub: 'Walks, occasional' }, { id: 'active', icon: 'gym', t: 'Active', sub: '3–4×/week' }, { id: 'intense', icon: 'gym', t: 'Intense', sub: '5+×/week' }] }); window.SCREEN_diet = pickScreen({ key: 'diet', title: 'How do you eat most days?', opts: [{ id: 'omnivore', icon: 'fork', t: 'Omnivore' }, { id: 'highprot', icon: 'fork', t: 'High-protein' }, { id: 'keto', icon: 'drop', t: 'Keto / low-carb' }, { id: 'med', icon: 'leaf', t: 'Mediterranean' }, { id: 'plant', icon: 'leaf', t: 'Plant-based' }, { id: 'no', icon: 'x', t: 'No real pattern' }] }); window.SCREEN_alcohol = pickScreen({ key: 'alcohol', title: 'Alcohol?', opts: [{ id: 'none', icon: 'x', t: 'None' }, { id: 'light', icon: 'drop', t: 'A few drinks a week' }, { id: 'mod', icon: 'drop', t: 'Most days' }, { id: 'heavy', icon: 'warning', t: 'Heavily' }] }); window.SCREEN_caffeine = pickScreen({ key: 'caffeine', title: 'Caffeine?', opts: [{ id: 'none', icon: 'x', t: 'None' }, { id: 'one', icon: 'drop', t: '1 cup a day' }, { id: 'few', icon: 'lightning', t: '2–3 a day' }, { id: 'lots', icon: 'warning', t: 'I run on it' }] }); window.SCREEN_nicotine = pickScreen({ key: 'nicotine', title: 'Nicotine or vaping?', opts: [{ id: 'none', icon: 'check', t: 'Never' }, { id: 'quit', icon: 'clock', t: 'Quit' }, { id: 'sometimes', icon: 'drop', t: 'Occasionally' }, { id: 'daily', icon: 'warning', t: 'Daily' }] }); // ════════════════════════════════════════════════════════════════ // SECTION 6 — Medical & readiness window.SCREEN_doctor_intro = eduScreen({ eyebrow: 'Medical oversight', title: 'Every protocol is physician-reviewed.', sub: 'Peptides are prescription-only in the US. A board-certified MD reviews your answers and signs off — or asks follow-ups.', bullets: [ { icon: 'shield', t: 'Licensed physicians in all 50 states' }, { icon: 'check', t: '503A & 503B FDA-registered pharmacies' }, { icon: 'drop', t: 'Third-party HPLC tested for purity' }, ], cta: 'I understand', }); window.SCREEN_peptide_history = pickScreen({ key: 'peptide_history', title: 'Have you used peptides before?', opts: [{ id: 'never', icon: 'spark', t: "Never — I'm new", sub: 'Onboarding call included' }, { id: 'glp1', icon: 'syringe', t: 'Only a GLP-1 pen' }, { id: 'other', icon: 'atom', t: 'Yes, other peptides' }] }); window.SCREEN_injection_comfort = pickScreen({ key: 'injection_comfort', title: 'How do you feel about injections?', sub: 'Most peptides are a tiny sub-Q pin — but we have needle-free options too.', opts: [{ id: 'fine', icon: 'check', t: 'Totally fine with needles' }, { id: 'nervous', icon: 'warning', t: 'Nervous but willing' }, { id: 'avoid', icon: 'x', t: "I'd rather avoid needles" }] }); window.SCREEN_delivery_pref = pickScreen({ key: 'delivery_pref', title: 'Preferred way to take it?', sub: 'We carry both — this filters your matches.', opts: [{ id: 'needle_free', icon: 'drop', t: 'Needle-free (nasal / oral)' }, { id: 'injectable', icon: 'syringe', t: 'Injectable (most potent)' }, { id: 'either', icon: 'check', t: 'Whatever works best' }] }); window.SCREEN_meds = multiScreen({ key: 'meds', title: 'Currently on any of these?', sub: 'Some interact with peptide therapy — your MD needs this.', none: true, opts: [{ id: 'glp1', t: 'GLP-1 (Ozempic, Wegovy…)' }, { id: 'trt', t: 'Testosterone (TRT)' }, { id: 'thyroid', t: 'Thyroid medication' }, { id: 'bp', t: 'Blood pressure meds' }, { id: 'antidep', t: 'Antidepressants / SSRIs' }, { id: 'blood_thin', t: 'Blood thinners' }, { id: 'birth_control', t: 'Hormonal birth control' }, { id: 'other', t: 'Other prescription' }] }); window.SCREEN_conditions = multiScreen({ key: 'conditions', title: 'Any pre-existing conditions?', sub: 'Some are exclusions, others just shift the protocol.', none: true, icon: 'warning', opts: [{ id: 'cancer', t: 'Cancer (personal/family history)' }, { id: 'thyroid_d', t: 'Thyroid disorder' }, { id: 'diabetes', t: 'Diabetes (Type 1 or 2)' }, { id: 'heart', t: 'Heart disease / arrhythmia' }, { id: 'kidney', t: 'Kidney or liver disease' }, { id: 'pancreatitis', t: 'Pancreatitis' }] }); window.SCREEN_pregnancy = pickScreen({ key: 'pregnancy', title: 'Are you pregnant or breastfeeding?', sub: 'Required — most peptides are not used during pregnancy.', opts: [{ id: 'no', icon: 'check', t: 'No' }, { id: 'yes', icon: 'warning', t: 'Yes' }, { id: 'trying', icon: 'heart', t: 'Trying to conceive' }] }); window.SCREEN_supplements = multiScreen({ key: 'supplements', title: 'Supplements you already take?', sub: 'Helps us avoid doubling up.', none: true, minOne: false, icon: 'leaf', opts: [{ id: 'protein', t: 'Protein / creatine' }, { id: 'vitd', t: 'Vitamin D / omega-3' }, { id: 'magnesium', t: 'Magnesium / sleep aids' }, { id: 'preworkout', t: 'Pre-workout / caffeine' }, { id: 'nad', t: 'NAD / longevity supps' }, { id: 'other', t: 'Other' }] }); // ════════════════════════════════════════════════════════════════ // SECTION 7 — Commitment & projection window.SCREEN_halfway = eduScreen({ eyebrow: 'Almost there', title: "You're more thorough than 83% of clients.", sub: 'Last stretch — timeline and budget, then we build your stack. Across 6,200+ protocols: 91% report better sleep, 78% hit their goal, 4.8★ average rating.', cta: 'Keep going', }); window.SCREEN_timeline = pickScreen({ key: 'timeline', title: 'When do you want results?', opts: [{ id: '4w', icon: 'clock', t: '4 weeks', sub: 'Aggressive' }, { id: '12w', icon: 'clock', t: '12 weeks', sub: 'Recommended' }, { id: '6m', icon: 'clock', t: '6 months', sub: 'Sustainable' }, { id: 'flex', icon: 'clock', t: 'No deadline' }] }); window.SCREEN_budget = pickScreen({ key: 'budget', title: 'Monthly budget', sub: "We'll match quality to your range — single peptides start around $40/mo.", opts: [{ id: 'starter', icon: 'dollar', t: '$40 – $120', sub: '1–2 peptides' }, { id: 'core', icon: 'dollar', t: '$120 – $250', sub: 'Most popular — a full stack' }, { id: 'elite', icon: 'dollar', t: '$250 – $500', sub: 'Advanced stacks' }, { id: 'sky', icon: 'dollar', t: '$500+', sub: 'Concierge' }] }); window.SCREEN_projection = function ({ state, next }) { const hasWeight = parseFloat(state.weight) > 0 && parseFloat(state.fl_target) > 0; if (hasWeight) { const cur = parseFloat(state.weight), tgt = parseFloat(state.fl_target), unit = state.weight_unit || 'lb'; const goalDate = useM(() => { const wks = state.timeline === '4w' ? 4 : state.timeline === '12w' ? 12 : state.timeline === '6m' ? 26 : 16; const d = new Date(); d.setDate(d.getDate() + wks * 7); return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }); }, [state.timeline]); const pts = useM(() => Array.from({ length: 14 }, (_, i) => { const t = i / 13; return cur + (tgt - cur) * (1 - Math.pow(1 - t, 1.6)); }), [cur, tgt]); const w = 480, h = 200, pad = 28, minY = Math.min(...pts) - 4, maxY = Math.max(...pts) + 4; const path = pts.map((y, i) => { const x = pad + (i / 13) * (w - pad * 2); const yy = h - pad - ((y - minY) / (maxY - minY)) * (h - pad * 2); return `${i === 0 ? 'M' : 'L'} ${x.toFixed(1)} ${yy.toFixed(1)}`; }).join(' '); return ( <>
Start
{cur} {unit}
By {goalDate}
{tgt} {unit}
Based on 6,200+ similar clients. Individual results vary.
); } // Non-weight goals: a milestone timeline instead of a weight curve. const steps = [ { w: 'Week 1–2', t: 'Onboarding + first doses. Early signal (sleep, energy) for fast-acting peptides.' }, { w: 'Week 3–4', t: 'Consistent effects settle in — the "this is working" window.' }, { w: 'Week 6–8', t: 'Visible / measurable change in your target area.' }, { w: 'Week 12', t: 'Full cycle benefit. MD reviews and adjusts your next phase.' }, ]; return ( <>
{steps.map((s, i) => (
{s.w}
{s.t}
))}
); }; // ════════════════════════════════════════════════════════════════ // SECTION 8 — Lead capture window.SCREEN_name = inputScreen({ key: 'name', banner: 'Your protocol is ready', title: "What's your name?", sub: 'So your physician can address you directly.', placeholder: 'First name' }); window.SCREEN_dob = inputScreen({ key: 'dob', banner: 'Your protocol is ready', title: 'Date of birth', sub: 'Required for prescription verification. Must be 18+.', placeholder: 'MM / DD / YYYY' }); window.SCREEN_email = inputScreen({ key: 'email', banner: 'Your protocol is ready', title: 'Where should we send it?', sub: "You'll get your protocol summary, a plain-English peptide guide, and your consult invite.", placeholder: 'name@example.com', type: 'email', inputMode: 'email', lock: 'Encrypted & HIPAA-compliant. Never sold.' }); window.SCREEN_phone = inputScreen({ key: 'phone', title: 'Want a text when your review is back?', sub: 'Optional — we only text about your protocol. No spam.', placeholder: 'Mobile number', type: 'tel', inputMode: 'tel', optional: true }); // ════════════════════════════════════════════════════════════════ // SECTION 9 — Reveal, educate, convert window.SCREEN_loading = function ({ state, next }) { const [step, setStep] = useS(0); const steps = ['Analyzing your answers…', 'Matching to 28 peptide compounds…', 'Cross-checking medications & conditions…', 'Filtering by your delivery preference…', 'Sequencing your 12-week cycle…', 'Routing to physician review…']; // Best-effort lead capture (no-op until /api/lead exists). useE(() => { try { fetch('/api/lead', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ source: 'protocol-quiz', submitted_at: new Date().toISOString(), answers: state }) }).catch(() => {}); } catch (e) {} }, []); useE(() => { if (step >= steps.length) { const t = setTimeout(next, 350); return () => clearTimeout(t); } const t = setTimeout(() => setStep(step + 1), 650); return () => clearTimeout(t); }, [step]); const pct = Math.round((step / steps.length) * 100); return (
{pct}%

Building your protocol

{steps[Math.min(step, steps.length - 1)]}

); }; function formatLabel(f) { return f === 'nasal' ? 'Nasal spray' : 'Injectable'; } window.SCREEN_result = function ({ state, next }) { const rec = useM(() => window.recommendStack(state), [state]); const items = rec.items; const name = state.name || 'You'; const fmtCount = items.reduce((a, p) => { a[p.format] = (a[p.format] || 0) + 1; return a; }, {}); const fmtSummary = Object.entries(fmtCount).map(([f, n]) => `${n} ${f === 'nasal' ? 'nasal' : 'injectable'}`).join(' · '); return (
Protocol 0427-A · pending MD review

{name}'s protocol.

Matched to your answers from our catalog. A licensed physician reviews and counter-signs within 24 hours.

Your stack
{items.length} {items.length === 1 ? 'peptide' : 'peptides'} · {fmtSummary}
{items.map((p, i) => (
0 ? '1px solid var(--line)' : 'none' }}>
{p.name}
{formatLabel(p.format)}
{p.schedule}
{p.summary}
))}
Dr. Mara Eklund, MD will review your case
Typical turnaround: 6–18 hours
Estimated monthly
{rec.monthly ? <>${rec.monthly}/mo : At consult}
{rec.hasPending && rec.monthly &&
+ GLP-1 priced at consult
}
In your budget
); }; window.SCREEN_education = function ({ state, next }) { const rec = useM(() => window.recommendStack(state), [state]); return (
{rec.items.map(p => (
{p.name}
{formatLabel(p.format)}
{p.desc}
{(p.uses || []).map((u, i) => {u})}
Dose: {p.schedule}
))}
Final doses are set by your physician after reviewing your full intake. Nothing ships before MD sign-off.
); }; window.SCREEN_cta = function ({ state }) { return (
Your protocol is saved to {state.email || 'your inbox'}
{['Physician review & prescription', 'Compounded & shipped to your door', 'Unlimited dose adjustments', 'Cancel anytime — no penalty'].map((l, i) => (
{l}
))}
Book my free consult Browse the full catalog
90-day satisfaction guarantee · refunded if the MD can't clear your protocol.
); };