/* BioReveal — Medical screening step.
*
* Captures the clinical truth a prescriber needs before any peptide can be
* approved: current meds, conditions, allergies, family history, prior peptide
* use, pregnancy/breastfeeding. Uses pill-style toggles + autocomplete-ish
* tag input for max speed (4 min total intake budget).
*/
const COMMON_MEDS = [
"Lisinopril", "Atorvastatin", "Metformin", "Levothyroxine", "Sertraline",
"Escitalopram", "Bupropion", "Adderall", "Vyvanse", "Wellbutrin",
"Ozempic", "Mounjaro", "Wegovy", "Zepbound", "Testosterone", "Estrogen",
"Birth control pill", "Thyroid medication", "Beta blocker", "Statin",
"Rapamycin", "Metformin (off-label)",
];
const CONDITIONS = [
{ id: "hypertension", label: "High blood pressure" },
{ id: "diabetes", label: "Diabetes (any type)" },
{ id: "thyroid", label: "Thyroid disorder" },
{ id: "kidney", label: "Kidney disease" },
{ id: "liver", label: "Liver disease" },
{ id: "heart", label: "Heart disease" },
{ id: "cancer_history", label: "Cancer (current or past)" },
{ id: "autoimmune", label: "Autoimmune condition" },
{ id: "depression", label: "Depression / anxiety" },
{ id: "seizure", label: "Seizure disorder" },
{ id: "pituitary", label: "Pituitary tumor / disorder" },
{ id: "mental", label: "Bipolar / schizophrenia" },
{ id: "none", label: "None of the above" },
];
const FAMILY_FLAGS = [
{ id: "fh_cancer", label: "Cancer (any)" },
{ id: "fh_heart", label: "Heart disease" },
{ id: "fh_thyroid", label: "Thyroid cancer" },
{ id: "fh_men2", label: "MEN-2 syndrome" },
{ id: "fh_diabetes", label: "Type 2 diabetes" },
{ id: "fh_none", label: "None known" },
];
const PRIOR_PEPS = [
"Sermorelin", "Ipamorelin", "CJC-1295", "BPC-157", "TB-500",
"NAD+", "GHK-Cu", "Glutathione", "Selank", "Semax",
"Semaglutide", "Tirzepatide", "Other",
];
const TagInput = ({ label, suggestions, value = [], onChange, placeholder }) => {
const [input, setInput] = React.useState("");
const add = (v) => {
const t = v.trim();
if (!t) return;
if (!value.includes(t)) onChange([...value, t]);
setInput("");
};
const remove = (t) => onChange(value.filter(x => x !== t));
const filtered = suggestions.filter(s => s.toLowerCase().includes(input.toLowerCase()) && !value.includes(s)).slice(0, 6);
return (
{label}
{value.map(t => (
{t}
))}
setInput(e.target.value)}
onKeyDown={(e) => { if (e.key === "Enter") { e.preventDefault(); add(input); } }}
style={{
width: "100%", boxSizing: "border-box", padding: "12px 14px",
background: "var(--paper-2)", border: "1.5px solid var(--paper-3)",
borderRadius: "var(--r-md)", fontSize: 14, fontFamily: "inherit", color: "var(--ink)",
}}
/>
{input && filtered.length > 0 && (
{filtered.map(s => (
))}
)}
);
};
const ToggleGrid = ({ items, value = [], onChange, max = 0 }) => {
const toggle = (id) => {
if (value.includes(id)) {
onChange(value.filter(x => x !== id));
} else {
const next = [...value, id];
if (max > 0 && next.length > max) return;
onChange(next);
}
};
return (
{items.map(it => (
))}
);
};
const StepMedical = ({ value = {}, onChange }) => {
const v = {
current_meds: [],
conditions: [],
allergies: [],
family_history: [],
prior_peptides: [],
pregnant: null,
...value,
};
const set = (k, val) => onChange({ ...v, [k]: val });
return (
<>
07 / 08 · Clinical screen · Required
Tell us the truth.
Every order is reviewed by a licensed clinician. They need this to clear your protocol — wrong answers here can block fulfillment or cause harm.
set("current_meds", x)}
placeholder="Type a med name + Enter, or pick from suggestions…"
/>
Existing conditions
set("conditions", x.includes("none") && x.length > 1 ? x.filter(i => i !== "none") : x)}/>
set("allergies", x)}
placeholder="Type an allergy + Enter…"
/>
Family history (1st-degree relatives)
set("family_history", x)}/>
Have you used peptides before?
{PRIOR_PEPS.map(p => (
))}
Are you pregnant, breastfeeding, or trying to conceive?
{[{ k: false, l: "No" }, { k: true, l: "Yes" }, { k: "na", l: "Not applicable" }].map(o => (
))}
🔒 HIPAA-ALIGNED · Only the reviewing clinician sees the full record. Stack matching uses anonymized signal vectors.
>
);
};
window.BR_STEPS = window.BR_STEPS || {};
window.BR_STEPS.StepMedical = StepMedical;