Product surface and patient journey
MEDvidi · A1
Four public JavaScript bundles read end to end: six clinic brands, four applications, one release train — and the pay-then-qualify sequence that produces the review distribution.
Proven rule. Every body claim traces to a source. Inferred or single-sourced-shaky claims live in section 4.
Kicker. What a patient buys from MEDvidi is not a treatment and not a subscription — it is
a 30-minute video appointment with a licensed prescriber, paid in full before any clinical
information is collected, with no guarantee that a prescription results. The company's own
refill page says so out loud: "scheduling a prescription refill appointment does not
automatically guarantee a prescription refill." Everything that looks like product — the
Personal Portal, the intake form, the free DSM-5 self-tests, the 359-post blog, the 27
programmatic state pages — exists to route a search for a drug name into that one paid
appointment slot. And the surface a VP of Product would inherit is much larger than
medvidi.com: the production JavaScript config served publicly from the patient portal shows
one multi-tenant platform running six clinic brands (EZCare Clinic — the default —
plus Mango Clinic, MMJ Doctor, ESAcare, MDBerry and MEDvidi) across four separate Angular
applications (patient, clinician, CRM, admin) on a shared platform domain, dctr.app. The
job posting's "two product tracks" almost certainly maps onto that estate rather than onto
medvidi.com. And the honest state of the experience, per 1,909 Google reviews aggregated at
3.9/5 with 24% one-star, is bimodal: patients who get their prescription love it, and
patients whose prescription never reaches the pharmacy call it a scam — a failure mode the
company's own refund policy explicitly refuses to refund.
Source legend
| Tag | Source |
|---|---|
| [JD] | The VP of Product posting for MEDvidi, extracted verbatim by the Orchestrator to assets/vpp.md (Notion page 336be61c-1951-8039-94c0-dd077e10b082), read 2026-08-18. Names the org, the two product tracks and the three shipped AI features. |
| [WEB] | MEDvidi's own public marketing pages on medvidi.com, fetched unauthenticated with curl on 2026-08-18. Specific URLs are given inline at each claim. This is the company describing itself to prospective patients. |
| [SM] | MEDvidi's Squirrly-SEO XML sitemaps — medvidi.com/sitemap-pages.xml, -posts.xml, -custom-posts.xml?type=team — pulled 2026-08-18 and also held locally at assets/sm_*.xml. Used here for the <lastmod> date on every page, i.e. when each surface was last touched. |
| [LEGAL] | MEDvidi's own consent and policy pages: /ai-usage-consent/, /consent-to-telehealth/, /payment-terms/, /about-us/refund-policy/, /patient-phe-update/, /faqs/pharmacy-issues/, /promo-codes/. Fetched 2026-08-18. These carry product mechanics the marketing pages do not advertise. |
| [ARC] | Wayback Machine captures of medvidi.com/, /faqs/ and /reviews/, retrieved 2026-08-18 via the CDX API and the …id_/ raw-content endpoint. Used to date pricing changes, state-coverage growth and the disappearance of therapy. Timestamps are given inline. |
| [APP-PP] | The patient portal production JavaScript bundle, https://join.medvidi.com/main-MJ3Z3VDY.js (1.93 MB), a public unauthenticated static asset fetched 2026-08-18. Angular app titled "User Dashboard". Contains the full route map, the analytics event catalogue, the status machines, the environment config and the patient-facing notification copy. Nothing behind a login was touched. |
| [APP-ADM] | The admin console bundle, https://admin.medvidi.com/main-AWPCFFAT.js (1.96 MB), public static asset fetched 2026-08-18. Angular app titled "Admin Medvidi". Contains the admin navigation tree, the platform configuration entities and a shared cross-app analytics event catalogue. |
| [APP-DOC] | The clinician app bundle, https://doc.medvidi.com/main-V2S2PPAN.js (2.80 MB), public static asset fetched 2026-08-18. Angular app titled "Doctor Medvidi". Contains the Chart Review AI and AI-Scribe endpoint surface and the clinician route map. |
| [APP-CRM] | The Care Team CRM bundle, https://crm.dctr.app/main-T6J4M27N.js (2.89 MB), public static asset fetched 2026-08-18. Angular app titled "CRM Medvidi". Contains the operations route map (leads, tasks, calls, refunds, salary). |
| [HDR] | Raw HTTP response headers from join.medvidi.com, admin.medvidi.com, doc.medvidi.com, crm.dctr.app, dctr.app/v/ and api.medvidi.com, captured 2026-08-18. Used for deploy timestamps and infrastructure identification. |
| [MKT-GTM] | MEDvidi's public Google Tag Manager container GTM-T7TBQ8C, fetched from googletagmanager.com/gtm.js?id=GTM-T7TBQ8C on 2026-08-18. Public by design. Shows which conversion events and ad platforms are wired to the funnel. |
| [REV-TI] | Trustindex's public aggregation page for medvidi.com, trustindex.io/reviews/medvidi.com (and its /sk locale variant), read 2026-08-18. Aggregates 1,828 Google reviews plus 81 Trustindex reviews. Self-selected, directional only — never treat as a sample. |
| [REV-BBB] | The Better Business Bureau profile and complaint log for "Medvidi Inc", bbb.org/us/ca/san-jose/profile/mental-health-services/medvidi-inc-1216-1647461 and its /complaints page, read 2026-08-18. The seal is linked from MEDvidi's own homepage footer. Complaint narratives are consumer-written and unverified. |
| [REV-TP] | Trustpilot's public profile for medvidi.com. Direct fetch was blocked (HTTP 403) from this environment; the aggregate figure quoted here came through a search-result snippet on 2026-08-18 and is therefore weaker than [REV-TI]. |
| [COMP-MEDVI] | Public material on MEDVi (medvi.com / medvi.org / en-medvi.net) — a different company selling compounded GLP-1 by subscription with medication shipped to the door. Gathered via search on 2026-08-18. Relevant only because MEDvidi's own BBB profile carries a disclaimer distinguishing itself from it, and some BBB complaints appear to be MEDVi's. |
| [REASON] | This Area's own arithmetic. An estimate, never a fact. Inputs and assumptions shown in a fenced block every time. |
1. What we found
1.1 The thing being sold is an appointment, not a treatment or a subscription
MEDvidi's public price list has exactly two numbers and has had the same two numbers for
roughly three years: $195 for a 30-minute initial visit, $159 for a 15-minute follow-up,
described as covering "the majority of our services" [WEB] (medvidi.com/faqs/, fetched
2026-08-18). There is no insurance. There is no published subscription. There is no bundled
medication cost. What the $195 buys, in the company's own words, is that "a clinician will
assess your symptoms, make a diagnosis, create a treatment plan, and provide you with a
prescription if deemed necessary" [WEB].
That conditional is the whole product. The prescription-refill page states the risk without
softening it: "The medication choice is based on the symptoms evaluation and treatment
history and is subject to federal and state laws. Therefore, scheduling a prescription
refill appointment does not automatically guarantee a prescription refill" [WEB]
(medvidi.com/services/prescription-refill/, lastmod 2025-10-24 [SM]). The same page
excludes a whole drug class outright — "Narcotic pain medications are not refilled on our
platform" — and flags that "Controlled substances like anxiolytics, sedatives, and
stimulants require additional assessment" [WEB].
There is no /pricing/ page. A request to medvidi.com/pricing/ returns the WordPress
404 template [WEB]. Price is disclosed inside the FAQ and repeated on service pages.
One service departs from the two-price model and is worth flagging because it is the only
bundle on the site. The weight-loss page sells three SKUs: "Introductory Consultation
$195", "Introductory + Follow-up Consultation Package $249 — Save $105", and "Follow-up
Consultation $159" [WEB] (medvidi.com/services/weight-loss-treatment/, lastmod
2026-06-18 [SM]).
Weight-loss package arithmetic [REASON]
À-la-carte: $195 initial + $159 follow-up = $354
Package: $249
Stated saving: $105
Check: 354 - 249 = 105 ✓ the site's own arithmetic is correct.
Implied discount: 105 / 354 = 29.7% off two visits.
The ESA-letter page also says "Full ESA Package — From $195", listing "An online
15-minute consultation / ESA eligibility assessment / … / Issuance of the ESA letter / 24/7
support during a year / Over-the-phone verifications" [WEB]
(medvidi.com/services/esa-letter/, lastmod 2026-05-08 [SM]). The same page's own
process section contradicts that framing — see §3.
1.2 The information architecture is a drug-name funnel, and it converges on one URL
The site's navigation is organised primarily by branded medication, not by condition or
by service. The Medications menu lists 9 ADHD drugs, 10 anxiety drugs, 9 depression drugs, 3
insomnia drugs, 3 OCD drugs and 6 weight-loss drugs, each linking to a blog post whose slug
is a purchase intent — /blog/how-to-get-prescribed-adderall,
/blog/how-to-get-xanax-prescribed-online, /blog/zoloft-sertraline-prescription-online,
/blog/how-to-get-zepbound-prescription-online [WEB] (homepage nav, fetched 2026-08-18).
Underneath that sit eleven service pages (/services/adhd-treatment/,
/anxiety-disorder-treatment/, /depression-treatment/, /insomnia-treatment/,
/ocd-treatment/, /weight-loss-treatment/, /esa-letter/, /medication-management/,
/prescription-refill/, /online-assessment/, /adhd-medication-online/), a nine-page ADHD
topic cluster (/adhd/, /adhd/symptoms/, /types/, /diagnosis/, /treatment/,
/medications/, /doctors/), two free self-tests, and 27 programmatic
/services/adhd-treatment/<state>/ pages against only 5 for anxiety [SM].
The crucial mechanical fact is what happens at the end. Every call-to-action on every page
resolves to the same bare URL: https://join.medvidi.com/signup. Counted in the served
HTML: 7 occurrences on /services/adhd-treatment/, 9 on /services/esa-letter/, 15 on
/services/adhd-treatment/ny/, 27 on /services/weight-loss-treatment/, 2 on /tests/adhd/
— with no query string on any of them [WEB].
This matters because the portal is built to accept one. The patient app reads at least
sixteen parameters off its own URL, including service (repeatable — the helper is
getMultiple, so several services can be pre-selected), promocode, the five utm_*
fields, doctor_id, slot, autoSignInEmail, autoSignInPhone, intakeReminderSource,
rescheduleSource, autoReschedule and nextVisitAction [APP-PP]. None of those are
passed from the marketing site in the HTML as served. A patient who has just read four
thousand words about Zepbound arrives at an undifferentiated signup screen and picks their
service again from scratch.
Campaign attribution, by contrast, is handled: the GTM container configures a GA4
cross-domain linker across "medvidi.com, join.medvidi.com" with urlPosition: query and
enableUrlPassthrough: true [MKT-GTM], and the portal separately reads the _ga cookie to
recover a Google client ID [APP-PP]. So the gap is specific: attribution crosses the
boundary, intent does not.
1.3 The step order is the single most consequential design decision: pay, then intake
The patient app's analytics screen-name enumeration spells out the booking flow in order, in the company's own words [APP-PP]:
"Registration window - personal info"
"Registration window - verify your email"
"Registration - thank you page after reg"
"Appointment flow - choose service/plan/date&time"
"Appointment flow - payment step"
"Appointment flow - successful payment page"
"Appointment flow - intake step"
"Appointment flow - thank you page"
Payment precedes intake. The route map confirms the same shape — /appointment →
/payment → /intake/:uuid — and the lead status machine has a dedicated
WAITING_FOR_INTAKE state entered after isPaid is true [APP-PP]. The patient-facing
copy for that state reads: "Your intake form is incomplete. Please finish it in your account
to secure your appointment. Your swift response is crucial." [APP-PP]
Then comes a gate almost nobody advertises. After intake there is a
WAITING_FOR_VERIFICATION status whose patient-facing message is: "Dear {name}, your
intake and PDMP forms are now under review! This process helps us ensure you are receiving
the best possible treatment tailored for your needs." [APP-PP] PDMP is the state
Prescription Drug Monitoring Program. The admin console has a first-class configuration
entity for it — a navigation item literally labelled "Bamboo Health Credentials"
[APP-ADM], Bamboo Health being the operator of the PMP AWARxE / NarxCare PDMP gateway — and
bamboo-health/credentials appears in both the patient and clinician apps' lists of
endpoints whose request and response bodies must be stripped from session recordings
[APP-PP] [APP-DOC].
The verification stage has named failure reasons, visible as task types in the shared
enumeration: intake_verification, pdmp_verification,
verification_issues_intake_other, verification_issues_pdmp_drugs,
verification_issues_pdmp_medication,
verification_issues_provider_state_not_matching_patient_residence,
add_patient_to_dosespot [APP-PP]. That last-but-one reason — provider state not matching
patient residence — is the same failure the refund policy names as a full-refund condition
("Incorrect Provider Assignment: A patient is scheduled with a provider not licensed in
their state") [LEGAL]. It happens often enough to have both a task type and a refund clause.
And a human call sits in the middle of the "book online in a minute" promise. The
NEED_APPOINTMENT notification copy is: "Thank you for your payment! A representative
will be contacting you shortly by calling the number provided on your application to
schedule and/or confirm the date and time of your appointment, verify your information and
inform if any additional documents are needed." [APP-PP] A second state,
WAITING_CONFIRMATION, says "verification has been cleared and your appointment can now be
scheduled. Our Care Team will reach out shortly to confirm the time and date." [APP-PP]
So the real sequence for at least some cohort is: land → sign up → choose slot → pay $195 → fill intake → wait for intake+PDMP review → get phoned by a human → then have the appointment. The homepage promises "Appointments within 24 hours" [WEB]; nothing observable tells us what share of leads take the fast path versus the reviewed-and-called path.
1.4 Documents the patient must supply, and what the portal records about them
The document-type enumeration in the patient app is: INTAKE, PDMP, PHARMACY_ISSUE,
CL_LETTER, MEDICAL_RECORDS, RESIDENCY_PROOFS, ID, TC_FORM, DISCHARGE_LETTER,
BY_PATIENT [APP-PP]. Read as a list of asks, that is: government ID, proof of state
residency, prior medical records, a signed telehealth-consent form, plus system-generated
PDMP reports, a "CL letter" (the companion/ESA letter — the same object the admin console
manages under Letter Templates, with a letter-template/render endpoint [APP-ADM]), and
a discharge letter for patients the practice ends care with.
Intake instrumentation confirms the uploads are real and where they hurt: PP — Intake — ID
Upload, PP — Intake — Insurance Card Uploaded, PP — Intake — Selected Insurance Deleted,
PP — Intake — Address ZIP Changed, PP — Intake — Step Opened, PP — Intake — Next Button
Clicked, PP — Intake — Back Button Clicked and — the telling one — PP — Intake — Form
Abandoned [APP-PP]. Abandonment inside intake is a named, tracked event, which means
somebody is already watching it.
The insurance events are worth pausing on, because MEDvidi does not accept insurance for the
visit. The intake asks for an insurance card anyway, and the API surface includes
insurance/card [APP-PP]. The reason is visible in the pharmacy FAQ: the medication can
go through the patient's own insurance at the pharmacy, and the company gives advice on
non-coverage, prior authorisation, exceptions and appeals [LEGAL]
(medvidi.com/faqs/pharmacy-issues/). The weight-loss page markets "Insurance coverage
assistance" against semaglutide specifically [WEB]. So the correct statement is: the
visit is cash-pay; the drug is not necessarily.
There is also a real identity-verification layer. passport/verification and lead-passport
appear in the endpoint-masking list, and the string persona occurs 15 times in the patient
bundle and 14 in the admin bundle [APP-PP] [APP-ADM] — consistent with Persona, an
identity-verification vendor. Given Schedule II prescribing, an ID check is what one would
expect; the exact vendor binding is parked in §4.
1.5 Intake is followed by clinical questionnaires, and they are a separate product surface
Distinct from the intake form, the portal has a /treatment/:leadId route whose analytics
namespace is pp:questionnaires: — screen_view, questionnaire_started,
questionnaire_completed [APP-PP]. Four lead statuses exist purely to chase them:
TREATMENT_INITIAL_NOT_COMPLETED, TREATMENT_OPTIONAL_NOT_COMPLETED,
TREATMENT_FOLLOW_UP_NOT_COMPLETED, TREATMENT_SYMPTOM_NOT_COMPLETED [APP-PP].
The copy for each is specific and, frankly, well designed:
- Initial: "Required pre-visit assessment — Your provider needs to review your {assessment} symptoms level before your visit."
- Optional: "{condition} often occurs with other conditions, like {others}. Take an optional free assessment to help your provider better prepare for your visit."
- Follow-up: "Your provider needs to review your {assessments} symptoms level before your visit."
- Symptom: "What bothers you most? Please select the symptom that's bothering you most to help your provider prioritize your treatment." — button: "Select my focus symptom."
All quoted verbatim [APP-PP]. This is a standardised-measure layer: a required pre-visit instrument, an optional comorbidity screen used as a cross-sell into a second condition, a repeat measure at follow-up, and a single-symptom prioritisation prompt. It is the closest thing MEDvidi has to measurement-based care, and it is invisible from the marketing site.
There is a public, unauthenticated front door to the same idea. /services/online-assessment/
brands it SmartCare: "a brief mental health quiz", "A free and accurate DSM-5
assessment", "Only 5 minutes to complete", "The results are provided immediately after the
completion", covering depression, ADHD, anxiety, insomnia and OCD [WEB] (lastmod
2024-11-20 [SM]). /tests/adhd/ implements it concretely: an 18-question, 5-minute
instrument whose questions are the ASRS (Adult ADHD Self-Report Scale) item set — the
page's form element is literally <form id="asrs-form">, with 18 radio groups scored 0–4
client-side [WEB] (lastmod 2024-10-18 [SM]).
And it captures nothing. There is no email field, no results-gate, no lead form on the test
page — only "Consult a Professional" and the same bare join.medvidi.com/signup link
[WEB]. A free, WHO-derived qualification instrument that scores the exact population the
business monetises, publishing the score to the visitor and keeping no identifier.
1.6 The video visit runs on the company's own app, and the AI is listening
The portal route is /video-call/:leadId, and the production environment config names the
target: videoChatHost: "https://dctr.app/v/" [APP-PP]. Fetching that host returns a
separate Angular application whose <title> is "MEDvidi Video" [HDR] — a distinct
build (Inter + Material Icons, older Angular hashing) from the four main apps (Manrope). So
the visit does not run on Zoom or an embedded third-party room; it runs on an in-house video
app on the shared platform domain.
Visit-quality and satisfaction are instrumented end to end:
pp:appointment:attempted_to_join_call, joined_to_call, failed_to_join_call,
stayed_at_call, left_call, attempted_to_leave_call,
closed_appointment_in_progress_page, and then pp:appointment:appointment_rated and
pp:appointment:provider_rated [APP-PP]. Two separate ratings — the visit and the
clinician — collected in-product.
On the clinician side, during that same call, the AI Scribe is running. The shared event catalogue names it "AI Generation" and traces the whole pipeline [APP-ADM] [APP-DOC]:
Doctor Cabinet — Audio Recording — Pipeline Created / Streaming Started /
Stream Data Sent / Track Changed / Streaming Stopped / Pipeline Error
Doctor Cabinet — Transcript — Updated / Error / Subscribed to Socket Events
Doctor Cabinet — AI Generation — AI Mode Toggle Clicked
Doctor Cabinet — AI Generation — Doctor Joined Appointment / Patient Joined Appointment
Doctor Cabinet — AI Generation — Doctor Audio Track Saved Locally
Doctor Cabinet — AI Generation — Chart Data Fetched / Chart Data Saved
Doctor Cabinet — AI Generation — Chart Fields Saved To Form / Chart Fields Updated
Doctor Cabinet — AI Generation — Chart AI Update Finished / Awaiting Last Generation
Doctor Cabinet — AI Generation — Resources Released / Error
The clinician app's endpoints match: POST doctor-area/appointment-charts/leads/:id/prefill
(AI prefill of the chart), GET doctor-area/appointment-charts/leads/:id, PUT
doctor-area/appointment-charts/:chartId (submit), POST …/addendums, and — importantly —
PUT doctor-area/appointment/:id/turn-chart-generation {isGenerationActive} [APP-DOC].
There is a per-appointment kill switch and a UI toggle for AI mode. There is also a
Doctor Cabinet — Chart Form — Save Conflict event, i.e. AI writes and human writes can
collide [APP-ADM].
This is exactly what the patient-facing consent page discloses, and the disclosure is
unusually blunt. /ai-usage-consent/ — titled "AI-User Disclosures", lastmod 2026-06-11
[SM] — has two halves [LEGAL]. The first, "Consent to Use Ambient Intelligence Tools",
says the tools "'listen' to clinical conversations during your provider visit and write draft
notes or summaries of the visit in real-time" and then states: "You will not know the
ambient intelligence tool is being used; you will not interact with it." It also concedes
scope beyond note-taking: "Some ambient intelligence tools do other activities to help
support providers while they make diagnoses or decisions regarding your care and treatment."
The second half is titled "AI-Powered Text and Voice Communication Disclosure and Notice
(SMS, Website Chat, and Voice)" and covers AI Agents across four channels: "SMS/text
messaging, authenticated patient portal chat, public website chat, and voice interactions."
It says users "should be aware that they are communicating with an automated system and not a
human representative", and lists among collected categories "Call audio recordings and call
transcripts (for voice interactions)" and "Inferences drawn from the above information to
create a profile reflecting preferences and characteristics" [LEGAL]. That is the posting's
"Agentic AI Receptionist" [JD], disclosed as patient-facing on four channels including
voice. The booking form even instruments the click: pp:booking_form:ai_consent_link_clicked
[APP-PP] — the AI consent is surfaced during booking, alongside telehealth consent, terms,
privacy and refund policy links, each with its own click event.
1.7 Prescription and pharmacy: the longest, least-owned stretch of the journey
The e-prescribing vendor is DoseSpot: Dosespot/DOSESPOT appears in the patient,
admin and clinician bundles, with a task type add_patient_to_dosespot, socket events
DOSESPOT_ERX_DATA_UPDATE and MEDVIDI_ERX_DATA_UPDATE, and a clinician-side counter object
{pendingPrescriptionCount, transmissionErrorCount, refillRequest…} [APP-PP] [APP-DOC].
There is a dedicated event Doctor Cabinet — Dosespot — System error occurred [APP-ADM].
The raw prescription status set is DoseSpot's: Entered, Printed, Sending, eRxSent,
FaxSent, Error, Deleted, Requested, Edited, EpcsError, EpcsSigned,
ReadyToSign, PharmacyVerified [APP-PP]. EPCS is Electronic Prescriptions for
Controlled Substances — its presence, with a distinct error state, is the machinery for the
Schedule II–V half of the business. Separately the app models pharmacy fill outcomes:
FullFill, PartialFill, NoFill, Active, Discontinued, Completed,
CancelRequested, CancelPending, Cancelled, CancelDenied, Changed, surfaced to
patients as "Medication filled / partially filled / not filled / active / discontinued /
…" [APP-PP].
Those thirteen raw states collapse into eight the patient sees: Preparing → Sent to
pharmacy → Ready to pick up → Picked up, plus Partially filled, Discontinued,
Cancelled and Prescription issue [APP-PP]. The company markets this as a feature —
"Track your prescription online: Check your prescription status anytime and know when the
medication is ready to pick up" and "Switch pharmacies: Your chosen pharmacy doesn't have
your medication? Select another one in a minute" [WEB]
(/services/prescription-refill/).
Pharmacy selection is itself a multi-item, ranked list. Intake events include Pharmacies
Options Requested / Received, Pharmacy Option Selected, Pharmacy Option Removed and
Pharmacy Value Re-Ordered [APP-PP], and the pharmacy service sorts candidates by
computed distance [APP-PP]. A PostHog feature flag is_pharmacy_text_search_enabled
suggests free-text pharmacy search is still being rolled out [APP-PP]. There are also
migration-cleanup methods — getMigrationRemovedPharmacies,
deleteMigrationRemovedPharmacies — meaning the pharmacy dataset has been through at least
one messy migration [APP-PP].
And then the promise runs out. The pharmacy FAQ, last modified 2023-11-29 [SM] and therefore nearly three years stale, is the company's own account of everything that can go wrong [LEGAL]:
- "Some pharmacies, large chains and small independents may not accept electronic prescriptions (eRx) from telehealth services due to their specific policies. These policies and the list of pharmacies vary from state to state."
- "MEDvidi's providers cannot increase supply, order, or transfer controlled substances such as Ritalin, Adderall, etc. due to nationwide restrictions and remands. Also, due to the risk of electronic fraud and DEA guidelines, our providers do not send electronic scripts for controlled substances to multiple pharmacies for stock availability."
- Refills: "processed by the Care Team by the end of the same working day. Then, your healthcare provider has to approve the refill and send it to the pharmacy, and this step may take up to 72 hours. You may need to have a follow-up appointment to refill your prescription."
- "refills can be requested only 25 days after the previous prescription's fill date, and pharmacies usually dispense medication 30 days after the last fill date."
The portal has a first-class route for the fallout: /report-pharmacy-issue, plus a document
type PHARMACY_ISSUE, a task type pharmacy_issue, a separate prescription_issue, and a
query parameter ivr recorded as PHARMACY_ISSUE_IVR_SOURCE [APP-PP] — matching the PHE
page's instruction to "contact our Hotline at (504) 414-5095 and press 6" [LEGAL]. So
the phone IVR deep-links callers into the pharmacy-issue form. On the clinician side there is
an entire Prescription Issue Resolution module: "Re-Prescription Count Notification
Viewed", "Re-Prescription Task Viewed", "Medical Chart Viewed in Re-Prescription Task",
"PDMP Report Requested OR Link to PDMP Website Clicked", "Re-Prescription Declined by
Provider", "Prescriptions Sent to Pharmacy and Re-Prescription Task Is Closed" [APP-ADM].
A final, structural constraint that a VP of Product should be able to state from memory: the refill page notes that a Schedule II controlled substance cannot legally be refilled — "A new prescription should be issued every time" [WEB]. Every 30 days, an ADHD stimulant patient needs a new prescription, not a refill. That is the recurrence engine of the whole business, and it is a legal fact rather than a product choice.
1.8 Money mechanics the marketing pages do not mention
Three things sit in the legal surface and materially change the journey.
Split payment. The Payment Terms — last modified 2023-12-12 [SM], the stalest legal
page on the site — say: "The payment might be divided into two parts. First part charges at
the moment of the appointment booking. The rest charges just before the appointment
starts." [LEGAL] The lead status machine implements exactly that:
WAITING_FOR_FULL_PAYMENT, a task type SECOND_PAYMENT, and patient statuses
CONFIRMED_AWAITING_FULL_PAYMENT and RESCHEDULED_AWAITING_FULL_PAYMENT [APP-PP].
Penalty fees. The Refunds & Fees Policy, last updated 5 May 2025 [LEGAL], sets a $50
Late Cancellation/Rescheduling Fee for changes inside 8 hours and a $100 No-Show Fee,
where no-show means "failing to log in within 5 minutes of the scheduled appointment time
when the provider is available". It adds: "Any outstanding No-Show or Late
Cancellation/Rescheduling fees must be paid before a new appointment can be scheduled."
The fee taxonomy in code is finer than the policy: no_show_lead,
no_show_lead_reschedule, no_show_doctor, no_show_both, late_reschedule,
technical_issue_lead, technical_issue_doctor [APP-PP] — the system tracks provider
no-shows and provider-side technical failures as first-class events too, and has dedicated
patient copy for them ("We're sorry your provider couldn't make it. Let's get you rebooked
for your {plan}") [APP-PP].
Refund friction, and one explicit carve-out. Refund requests must be made within 15 days; support responds in "48–72 hours"; approved refunds process in "2–3 business days" and then "up to 28 additional business days" to land [LEGAL]. And: "Refunds will not be issued if a pharmacy refuses to fill a prescription due to their policies or stock availability." [LEGAL] The single most common patient complaint category (§1.10) is contractually non-refundable.
Payment rails are broad. The patient bundle wraps Stripe (a pk_live_… publishable key is
embedded in the public config, as Stripe intends) and calls Stripe confirmation methods for
PayPal, Klarna and Affirm among others [APP-PP]. Buy-now-pay-later on a $195
psychiatric consultation is a deliberate choice about who the patient is. A PostHog flag
HSA_FSA_test1 indicates HSA/FSA payment is being tested [APP-PP].
Promo codes officially do not exist and mechanically do. /promo-codes/ (last modified
2025-02-19 [SM]) states: "At this time, MEDvidi does not offer promo codes or discounts to
maintain transparent and fair pricing for all patients", and warns that third-party codes
"are not valid" [WEB]. Meanwhile the portal reads a promocode URL parameter, persists it
to localStorage as PROMOCODE, tracks a DISCOUNT_IS_CLOSED_BY_USER flag for a
dismissible discount banner, and the admin console has full CRUD at /promo-code
[APP-PP] [APP-ADM]. The page is best read as a defensive SEO asset against coupon-intent
queries, not as a statement about the system.
1.9 Membership is being rebuilt — and this is the second time round
The portal has a complete subscription surface: /membership, /membership/cards,
/membership/history, /membership/manage [APP-PP]. Its instrumentation is more thorough
than anything else in the app — 21 distinct PP — Membership — … events including Screen
Viewed, Went To Payment Info, Went To Billing History, New Card Added, Default Card
Changed, Card Deleted, Went To Membership Cancellaton (sic), Membership Cancelled,
Membership Reactivated, Went To Membership Reactivation, and two that reveal a
save-the-customer flow: Stayed With Membership and Moved Next With Membership
Cancellation [APP-PP]. The dashboard and header carry entry points — PP — Dashboard —
Went To Membership Reactivation, PP — Dashboard — Went To Update Payment Card, PP —
Header — Went To Manage Membership [APP-PP]. The booking form knows about it too:
Membership Coverage Warning Viewed, Membership Visit Confirmed, Membership Visit
Confirmation Error, Went To Join Membership [APP-PP].
It is gated behind flags, i.e. not fully launched: Membership_Launch_Test_1 and
Targeted_release_late_reshedule_membership_offer (sic) [APP-PP]. That second flag is
notable — a membership offer targeted at people who reschedule late, i.e. at the exact moment
they would otherwise be charged the $50 fee.
The Wayback record shows this is a return, not a debut. On 2022-05-25 the FAQ described
MEDvidi as a three-tier subscription business [ARC]
(web.archive.org/web/20220525025124/https://medvidi.com/faqs/):
- "If you're on the Medication management plan, your first month's membership will only cost $49! … The subscription includes unlimited messaging with our CareTeam and ongoing video sessions with a therapist or phone appointments with your prescriber."
- "If you're on the Therapy & Medications management plan, your first month's membership will only cost $219. … plus bi-weekly sessions with a licensed therapist."
- "The first month of MEDvidi's Therapy plan costs $199. This subscription includes bi-weekly sessions with a licensed therapist, unlimited messaging with our CareTeam…"
By 2022-12-08 the homepage had switched to variable per-visit pricing: "Book an initial appointment at a cost from $25 to $195, depending on the chosen service and your location", "A flexible system of follow-ups allows you to pay for one appointment at a time. Monitor your progress paying from $99 to $175 per visit!", and a discount hook: "Limited offer if joining today: from $25 for your initial visit and as low as $99 per visit afterward" [ARC]. By 2023-11-06 the FAQ shows the flat $195 / $159 that still stands today [ARC].
Pricing eras, dated from Wayback captures [ARC]
Era 1 ≤ 2022-05 subscription: $49 / $199 / $219 first month, therapy included
Era 2 2022-12 → 2023-05 variable per-visit: $25–$195 initial, $99–$175 follow-up,
discount-led ("limited offer")
Era 3 2023-11 → 2026-08 flat $195 / $159, publicly "no promo codes or discounts"
Era 4 in progress membership behind PostHog flag Membership_Launch_Test_1 [APP-PP]
Two things vanished on the way and have not come back. Therapy: the homepage mentioned "therapy" or "therapist" 49 times in December 2021, 27 times through mid-2023, once in December 2023, and zero times from December 2024 onward [ARC]. The current provider list is MD, DO, NP, PMHNP, PA — no therapists [WEB]. Unlimited CareTeam messaging: sold in 2022 [ARC], absent from today's portal route map, which has no messaging or chat route at all [APP-PP].
State coverage moved the other way. Counting two-letter state abbreviations on the homepage: 16 in December 2023, 20 in December 2024, 22 in May 2025, 34 in December 2025, 35 today [ARC] [WEB]. Roughly a doubling in two years, with the step change concentrated in the second half of 2025.
1.10 What patients say actually happens
All of this is self-selected and must never be treated as a sample. It is still the only outside view of the experience, and it is unusually consistent.
Trustindex, aggregating 1,828 Google reviews plus 81 of its own, reports 3.9 / 5 across 1,909 reviews, distributed 1,329 five-star, 56 four, 24 three, 41 two and 459 one-star [REV-TI].
Review distribution arithmetic [REASON] over [REV-TI] counts
Total check: 1329 + 56 + 24 + 41 + 459 = 1909 ✓
Weighted mean: (1329·5 + 56·4 + 24·3 + 41·2 + 459·1) / 1909
= (6645 + 224 + 72 + 82 + 459) / 1909 = 7482 / 1909 = 3.92 ✓ matches "3.9"
Five-star share: 1329 / 1909 = 69.6%
One-star share: 459 / 1909 = 24.0%
Middle (2–4 star): 121 / 1909 = 6.3% → a barbell, not a bell curve.
Fifteen reviews dated 11–17 August 2026 — the week before this Inquiry — split cleanly [REV-TI]. The five-star reviews almost all name an individual support agent for fixing something: "Sadie was incredibly helpful in resolving my payment issue quickly and efficiently" (5★, 2026-08-17); "Ene at Medvidi was wonderful… The whole process was seamless—easy to schedule" (5★, 2026-08-13); "Cameron was very helpful and directed me in the right direction" (5★, 2026-08-11); and, revealingly, "Elish was the best help in the world after speaking to several MEDvidi staff, she was the first one" (5★, 2026-08-15).
The one-star reviews cluster into five failure modes:
- Paid, prescription never arrived at the pharmacy. "Now on day 13 and still don't have it called in to the pharmacy. Have given them 3 different pharmacies. … Paid $195 for nothing!" (1★, 2026-08-16). "100% scam. No prescription, and no refund…they stopped responding" (1★, 2026-08-13).
- Paid, then declined or redirected. "I feel like I wasted my time and money…told that I don't qualify for treatment here" (1★, 2026-08-15). "I paid $200 to be referred to an alternate company" (1★, 2026-08-12). "I paid $200 for the online Doctor appt…Total waste of time and money!" (1★, 2026-08-12).
- The visit felt like an interrogation. "The consultation was uncomfortable from the beginning and felt more like an interrogation" (1★, 2026-08-13); "just to be interrogated, questioned" (1★, 2026-08-15). This is what the PDMP-plus-verification gate feels like from the patient's chair.
- Card retained and charged. "They will get your credit card number and long after you terminate your relationship…they keep charging" (1★, 2026-08-13).
- No escalation path. "Unbelievable and absolutely a scam. No way of talking to a 'manager' or a 'supervisor'" (1★, 2026-08-16). And the cost consequence: "IF I COULD GIVE 0 STARS I WOULD…NOW I CANT AFFORD TO GET MY MEDICATION" (1★, 2026-08-11).
BBB, whose seal MEDvidi links from its own footer, records 159 complaints in three years, 58 closed in the last twelve months, categorised as Service/Repair 70, Product 56, Customer Service 10, Sales/Advertising 9, Billing 8, Order 5, Delivery 1 [REV-BBB]. The profile carries an A+ rating and BBB accreditation since 2025-03-07; business start date 2020-04-08; address 4010 Moorpark Ave #114, San Jose, CA [REV-BBB]. Complaint narratives include one squarely on the core product: "$195 paid for telehealth ADHD consult" where the provider had internet issues and the prescription was submitted without patient confirmation (2026-06-16), and a provider who "agreed to fill out FMLA documents" then refused, "claiming requires in-person diagnosis" (2026-06-15) [REV-BBB].
For calibration, MEDvidi's own /reviews/ page (last modified 2026-07-01 [SM]) claims
"4.85/5 — Our patients rated their providers", "89% of our patients rated their
appointments 5 out of 5" and "33k+ patients rated their appointments" [WEB]. Wayback
shows that stat block first appearing between 2025-04-23 and 2025-06-13 and carrying the
identical three numbers ever since — through 2025-09, 2025-12, 2026-04 and today [ARC].
Fourteen months without a single digit moving. Treat "33k+" as a mid-2025 hardcoded marketing
figure, not a live metric — though it is still a useful floor: at some point before mid-2025
the platform had accumulated over thirty thousand in-product appointment ratings.
Trustpilot, which the footer also links, shows a 4-star score across 1,248 reviews [REV-TP]. That figure came via a search snippet because direct fetches returned 403, so it is the weakest number here. A second support number, (415) 548-2062, appears on the Trustpilot profile alongside the (504) number used everywhere on the site [REV-TP].
1.11 The surfaces a VP of Product would actually inherit
This is the finding that reframes the role. The production environment object embedded in the public patient-portal bundle enumerates the estate [APP-PP]:
environment (verbatim keys, values abridged)
adminAPI / crmAPI / doctorAPI / patientAPI → https://api.medvidi.com
socketMedvidiAPI → https://socket.medvidi.com
socketDctrAPI → wss://socket.dctr.app
adminHost → https://admin.dctr.app
doctorHost → https://doc.medvidi.com
crmHost → https://crm.dctr.app
videoChatHost → https://dctr.app/v/
sessionKey → "dctrapp.api.sess"
posthogApiHost → https://data.medvidi.com/ (PostHog project 149642)
googleTagManager → { start.ezcareclinic.io: GTM-5G78WWS,
start.ezcareclinic.com: GTM-5G78WWS,
join.medvidi.com: GTM-T7TBQ8C,
start.mangoclinic.com: GTM-JVQKGW2 }
websiteCode → { default: "start_ezcareclinic",
start.ezcareclinic.io / .com: "start_ezcareclinic",
start.mangoclinic.com: "start_mangoclinic",
join.medvidi.com: "join_medvidi" }
clinicName → { default: "EZCare Clinic", start_ezcareclinic: "EZCare Clinic",
mmjdoctor: "MMJ Doctor", esacare: "ESAcare",
medvidi: "MEDvidi", start_mangoclinic: "Mango Clinic",
mdberry: "MDBerry" }
Read that carefully. The default brand is EZCare Clinic, not MEDvidi. MEDvidi is one
tenant on a platform whose canonical domain is dctr.app and whose brand registry also holds
Mango Clinic, MMJ Doctor, ESAcare and MDBerry. An independent source corroborates: MEDvidi
Inc's BBB profile lists "EZCare Clinic" and "Mango Clinic" as alternate business
names [REV-BBB]. Four Sentry projects — adminSentry, crmSentry, doctorSentry,
patientSentry, all under org o1050997 — confirm four separately monitored applications
[APP-PP], and the app-name constant is explicit: DOCTOR_APP="doctor_app",
PATIENT_APP="patient_app", CRM_APP="crm_app", ADMIN_APP="admin_app" [APP-PP].
All four are live and titled [HDR]:
| Host | <title> |
Role |
|---|---|---|
join.medvidi.com |
User Dashboard | Personal Portal (patient) |
doc.medvidi.com |
Doctor Medvidi | Doctor Cabinet (clinician) |
crm.dctr.app |
CRM Medvidi | Care Team / ops |
admin.medvidi.com |
Admin Medvidi | Platform configuration |
dctr.app/v/ |
MEDvidi Video | Video visit app |
join.medvidi.com and admin.medvidi.com returned the same last-modified timestamp —
Fri, 14 Aug 2026 12:01:45 GMT — with different ETags and sizes, and both load the identical
polyfills-E7553MJI.js [HDR]. One monorepo, one release train, four apps deployed
together. api.medvidi.com is a single shared API behind AWS API Gateway and CloudFront
(apigw-requestid, x-amz-cf-pop: JFK52-P8), returning 404 Not Found at root [HDR]. The
front ends are served from nginx 1.18.0 on Ubuntu [HDR].
The route maps are the org chart of the product:
Patient portal [APP-PP]: signup, signin, verification-code, phone-verification,
auto-login, dashboard, appointment, payment, intake/:uuid, thank-you,
treatment/:leadId, video-call/:leadId, manage-appointment/:id,
cancel-appointment/:id, update-zip, profile, membership, cards, history,
manage, report-pharmacy-issue. Plus /engine.io — a Socket.IO connection, with a
Shared — Socket — Disconnected event [APP-PP].
Doctor Cabinet [APP-DOC]: dashboard, home, appointments, schedule, patient,
charts, my-charts, adherence, peer-review, reviewers,
review/:reviewId, erx, letters, finances, help-desk, providers, personal,
master-login, session-expired, doctor-area/doctor-event/.
Care Team CRM [APP-CRM]: lead, task, call, activity, appointments, schedule,
letter, refunds, financial-reports, salary, providers,
online-monitor, charts, my-charts, adherence, peer-review, reviewers,
dashboard, master-login.
Admin console [APP-ADM], whose navigation groups are: States · Websites · Service
Accounts | Services · Service State · Service Plan | Email Templates · Letter
Templates | Event Config · Clinician Docs · Bamboo Health Credentials. Plus
/user, /user-group, /permission-group, /doctor, /doctor-document, /promo-code,
/task-attributes.
The configuration model is therefore Website × Service × State × Plan, with per-clinician credentialling documents and per-clinician PDMP credentials. That is precisely the abstraction that lets one codebase run six clinic brands in 35 states.
Two more surfaces exist in the portal's own service catalogue that the marketing site does not
sell. The service-code enum is adhd, anxiety, depression, insomnia, narc
(narcolepsy), weight_loss, esa, system_service [APP-PP]. Narcolepsy appears nowhere
on medvidi.com [WEB] [SM]. And the lead-creation-type enum is WEBSITE, CALENDAR,
MOBILE, FOLLOW_UP, INCOMING_CALL, SUBSCRIPTION, USER_DASHBOARD, BY_DOCTOR
[APP-PP] — appointments can be created by a subscription and by a doctor, not only by the
patient.
1.12 The support surface, and where the AI receptionist bites
The Care Team's inbound channel enumeration is: incoming_call, missed_call,
incoming_email_message, incoming_sms, incoming_facebook_message,
incoming_mobile_message, incoming_twilio_live_chat_message, twilio_task, manual,
auto_task, other [APP-PP]. Outbound reply actions are reply_to_sms,
reply_to_email, reply_to_twilio_live_chat, contact_to_pay, call_patient_on…
[APP-PP]. Twilio is confirmed by call-state constants such as
CONNECTION_CANCELLED_BY_THE_CALLER_BEFORE_ACCEPTED_BY_TWILIO_CLIENT [APP-PP], and the
clinician bundle carries Twilio's call-quality warning thresholds (MOS floor 3, jitter max
30 ms, RTT max 400 ms) [APP-DOC] — so staff dial from the browser and the app watches line
quality.
contact_to_pay deserves a sentence of its own: it is a named Care Team action for chasing
payment. Combined with the split-payment terms, the CLOSED_PAYMENT_OVERDUE status and the
copy "Sorry, the payment is now overdue, and the appointment information was canceled because
of that" [APP-PP] [LEGAL], the picture is of a funnel where a meaningful number of booked
appointments stall unpaid and get worked by humans on the phone.
That is the queue the "Agentic AI Receptionist that owns internal support processes" [JD] is pointed at, and the AI consent page confirms it is already live on SMS, portal chat, website chat and voice [LEGAL]. Note the mismatch worth asking about: the AI is disclosed as running a public website chat and an authenticated patient portal chat, yet the patient portal route map contains no chat route at all [APP-PP]. Either the chat is a widget rather than a route, or the disclosure runs ahead of the shipped surface.
The clinician-quality loop is the other AI bite point. Chart Review AI's API is
chart-review/providers, chart-review/providers/protocol-adherence,
chart-review/providers/protocol-rules-scores, chart-review/charts/:id,
chart-review/charts/assign, chart-review/charts/status, chart-review/reviewers,
chart-review/reviewers/summary — and, crucially,
chart-review/charts/:id/report-ai-mistake [APP-DOC]. Its metrics are
protocolAdherence and redFlagsPercentages, rendered RED or GREEN, with an
adherence_score per chart and per-rule properties adherence_rule_type,
adherence_rule_name, adherence_rule_number (reviewRuleId) and adherence_rule_action
[APP-DOC]. Protocols are defined per condition and visit type: adhd_initial,
adhd_follow_up, anxiety_initial, anxiety_follow_up, depression_initial,
depression_follow_up, … [APP-DOC]. Reviewers are assigned charts; deviations paginate;
clinicians file addendums. Time windows are today / 7 / 30 days / by month / custom / last 12
months [APP-DOC].
There is a human-in-the-loop eval channel (report-ai-mistake) and a peer-review structure
(reviewers, peer-review, review/:reviewId) already wired into both the clinician app and
the CRM [APP-DOC] [APP-CRM]. Whether anyone reads the mistake reports is the question a
VP would ask on day two.
1.13 Analytics and experimentation: better than the marketing site suggests
The patient app runs PostHog (project 149642, reverse-proxied through
data.medvidi.com) with session recording, feature flags, and a deliberate PHI-masking
layer: 19 endpoint patterns whose request and response bodies are dropped entirely
(user/login, password, token, bamboo-health/credentials, passport/verification,
lead-passport, insurance/card, /files/, /s3/, payment/stripe, …), two patterns whose
bodies are field-level redacted (chart-review/, appointment-charts/ — masking addendum,
client, comment, explanation, failureReason, search, visitDate), URL query masking
of search, and full input masking except in explicitly allow-listed elements [APP-PP].
Somebody thought hard about recording a HIPAA product.
The live feature-flag list is small and revealing: Membership_Launch_Test_1,
patient_session_recording_split, patient_anonymous_signup_session_recording,
is_pharmacy_text_search_enabled, Targeted_release_late_reshedule_membership_offer,
HSA_FSA_test1 [APP-PP].
GA4 (G-BZMEPY2QES) sits in GTM alongside Google Ads and Microsoft/Bing UET, with
conversion events purchase, book_appointment_payment, form_submit, screen_loaded,
experience_impression and cookie_consent_update; consent is managed by Cookiebot
[MKT-GTM] [WEB]. Notably absent from this container: any Meta or TikTok pixel — despite
MEDvidi maintaining public Facebook, Instagram and TikTok profiles linked from its own footer
[MKT-GTM] [WEB]. Segment is also present in the bundles [APP-PP].
The booking funnel is instrumented step by step: screen_viewed, sign_up_form_started,
account_created, service_selected, start_with_adhd_selected, transfer_ongoing_care_selected,
symptom_selected, challenge_selected, plan_selected, loaded_time_slots,
loaded_next_days, loaded_previous_days, selected_time_slot, another_provider_selected,
payment_method_selected, attempted_to_pay, purchase_succeeded, purchase_failed,
toggled_sms_consent, toggled_terms_consent, plus a click event on each of the five legal
links [APP-PP].
transfer_ongoing_care_selected is a strategic tell. The booking form branches between
starting fresh with ADHD and transferring existing care — and the ADHD treatment page
carries matching copy, "Already diagnosed, but need a change?" [WEB]. A patient already on
a stimulant who needs a new prescriber is a materially different, higher-intent, lower-risk
segment than an undiagnosed adult, and the product already knows which one it is talking to.
1.14 There is no native mobile app, and here is how that was established
Four independent checks, all on 2026-08-18:
- Apple App Store search via the public iTunes Search API for
medvidi,ezcare clinicandmango clinic(US storefront,entity=software). 17, 19 and 8 results respectively, none of them MEDvidi's, EZCare's or Mango Clinic's — the hits are unrelated (MediRoutes, Practo Pro, Teladoc, Amwell, Zocdoc, "Mango Mango Dessert") [WEB]. - Google Play search pages for
medvidi,ezcare clinic,esacare,mmj doctorandmdberry. No matching app appears in any result set [WEB]. - No app-store links anywhere on medvidi.com. Grepping every page fetched for this Area
— homepage plus 18 service, test, legal and content pages — for
apps.apple.com,play.google.comoritunes.apple.comreturns nothing [WEB]. - The patient surface is a browser app.
join.medvidi.comserves an Angular + Angular-Material SPA titled "User Dashboard" with awidth=device-widthviewport, and the app detects platform purely from the user-agent string (ANDROID/IOS/NOT_MOBILE) [APP-PP] [HDR].
Conclusion: as of August 2026 MEDvidi ships no native iOS or Android app. Its patient
product is responsive web only. The MOBILE value in the lead-creation enum and the
INCOMING_MOBILE_MESSAGE support channel are mobile-web and mobile-messaging, not an app
[APP-PP]. Historical check: the December 2021 homepage contained no fetchable app-store
badge either [ARC].
1.15 The clinical entity behind the consumer brand
One structural fact fell out of the legal read and belongs on the record. The Consent to Telehealth (last updated 17 March 2025) opens: "Medvidi Health, P.C., a California professional corporation (a 'Medical Group') provides mental health care services via telehealth" — and then repeatedly says "the applicable Medical Group", implying more than one [LEGAL]. That is the standard MSO / "friendly PC" split: MEDvidi, Inc. is the management and technology company; one or more professional corporations hold the clinical licence and the provider relationships. The consent also renews itself silently — "this consent will be considered renewed upon each new telehealth consultation" — and includes an authorisation to "share information regarding the telehealth exam with other organizations or individuals for treatment, payment, and health care operations purposes" [LEGAL].
The clinician app's finances route and the CRM's salary and financial-reports routes say
providers can see their own earnings inside the product [APP-DOC] [APP-CRM], which is
consistent with per-visit contractor compensation rather than salary. Detail is A5/A7's; it is
recorded here because it came from A1's sources.
1.16 Content surfaces that have been abandoned
Worth naming because a VP inherits them. /webinars/ lists five titles — "Burnout
Explained", "Neurodivergence & Mental health", "Self-love isn't selfish, it's necessary",
"Mental health x vision", "A Holistic Treatment Approach to ADHD" [WEB] — whose landing
pages (/burnout/, /neurodivergence/, /self-love/, /mental-health-x-vision/) were last
modified 2024-09-25 and 2024-11-13 [SM]. The webinars index itself: 2025-10-21 [SM]. Two
years untouched.
The staleness map across the legal and support surface is the sharper signal [SM]:
Page lastmod age at 2026-08-18
/faqs/pharmacy-issues/ 2023-11-29 ~2 yr 9 mo ← the top complaint driver
/payment-terms/ 2023-12-12 ~2 yr 8 mo ← governs split payment
/terms-and-conditions/ 2023-12-15 ~2 yr 8 mo
/services/online-assessment/ 2024-11-20 ~1 yr 9 mo ← the SmartCare front door
/tests/adhd/ 2024-10-18 ~1 yr 10 mo ← the ASRS lead magnet
/promo-codes/ 2025-02-19 ~1 yr 6 mo
/consent-to-telehealth/ 2025-03-17 ~1 yr 5 mo
/about-us/refund-policy/ 2025-05-05 ~1 yr 3 mo (page's own "Last updated")
/ai-usage-consent/ 2026-06-11 ~2 mo ← the only fresh legal page
/services/adhd-treatment/ 2026-08-14 days
/faqs/ 2026-08-14 days
The pattern is unambiguous: the acquisition pages and the AI disclosure are maintained; the pages that govern money and the pages that explain what to do when the prescription fails are not.
2. Capability / object table
| Item | Status | Evidence | Notes |
|---|---|---|---|
| Initial visit, 30 min | Live, $195 | [WEB] faqs | Unchanged since Nov 2023 |
| Follow-up visit, 15 min | Live, $159 | [WEB] faqs | Unchanged since Nov 2023 |
| Weight-loss 2-visit package | Live, $249 | [WEB] weight-loss | Only bundle on site |
| ESA "Full Package" | Live, "From $195" | [WEB] esa-letter | Process implies 2 visits |
| Dedicated pricing page | Absent | [WEB] /pricing/ 404 | Price lives in FAQ |
| Insurance for the visit | Not accepted | [WEB] faqs | Drug may be covered |
| Late cancel/reschedule fee | $50, under 8 h | [LEGAL] refund policy | Blocks rebooking if unpaid |
| No-show fee | $100, 5-min grace | [LEGAL] refund policy | — |
| Split payment | In terms + code | [LEGAL] [APP-PP] | Second charge pre-visit |
| Refund window | 15 days | [LEGAL] refund policy | 48–72 h response |
| Pharmacy-refusal refund | Excluded | [LEGAL] refund policy | Top complaint, no refund |
| Promo codes, public stance | "None offered" | [WEB] promo-codes | Page dated 2025-02-19 |
| Promo codes, machinery | Present | [APP-PP] [APP-ADM] | URL param + admin CRUD |
| Stripe | Live (pk_live_) |
[APP-PP] | Publishable key public by design |
| PayPal / Klarna / Affirm | Wired via Stripe | [APP-PP] | BNPL on a $195 consult |
| HSA/FSA | Flagged test | [APP-PP] HSA_FSA_test1 |
Not confirmed live |
| Membership subscription | Behind flag | [APP-PP] | Membership_Launch_Test_1 |
| Membership save-offer | Instrumented | [APP-PP] | Stayed With Membership |
| Late-reschedule membership offer | Flagged | [APP-PP] | Targeted release |
| Subscription era 2022 | Retired | [ARC] 2022-05 | $49 / $199 / $219 tiers |
| Therapy / therapists | Retired | [ARC] | 49→0 homepage mentions |
| Unlimited CareTeam messaging | Retired | [ARC] 2022 | No chat route today |
| SmartCare free assessment | Live, ungated | [WEB] online-assessment | DSM-5, 5 min |
| ADHD self-test | Live, ASRS 18-item | [WEB] <form id="asrs-form"> |
No email capture |
| Anxiety self-test | Live | [WEB] /tests/anxiety/ | lastmod 2024-12-20 |
| Pre-visit questionnaires | Live | [APP-PP] pp:questionnaires: |
4 chasing statuses |
| Comorbidity cross-sell screen | Live | [APP-PP] copy | "often occurs with…" |
| Focus-symptom prompt | Live | [APP-PP] copy | "What bothers you most?" |
| Intake, post-payment | Live | [APP-PP] screen order | Payment precedes intake |
| Intake abandonment tracking | Live | [APP-PP] Form Abandoned |
— |
| ID upload | Live | [APP-PP] Intake — ID Upload |
Doc type ID |
| Residency proof | Doc type exists | [APP-PP] RESIDENCY_PROOFS |
Guards state licensure |
| Insurance-card upload | Live | [APP-PP] + insurance/card |
For pharmacy, not visit |
| Identity verification vendor | Persona (probable) | [APP-PP] 15 hits | Binding unconfirmed |
| PDMP review gate | Live | [APP-PP] WAITING_FOR_VERIFICATION |
Patient told explicitly |
| Bamboo Health credentials | Admin entity | [APP-ADM] nav | Per-clinician PDMP creds |
| Care Team confirmation call | In copy | [APP-PP] NEED_APPOINTMENT |
Human in "instant" flow |
| Provider-state mismatch | Named failure | [APP-PP] [LEGAL] | Task type + refund clause |
| Video visit app | Live, in-house | [HDR] dctr.app/v/ | Title "MEDvidi Video" |
| Visit rating | Live | [APP-PP] appointment_rated |
— |
| Provider rating | Live | [APP-PP] provider_rated |
Separate from visit |
| AI Scribe (ambient) | Live | [APP-DOC] [LEGAL] | Per-appointment toggle |
| AI Scribe patient consent | Published | [LEGAL] ai-usage-consent | "You will not know" |
| Chart Review AI | Live | [APP-DOC] chart-review/* | Adherence + red flags |
| AI-mistake reporting | Endpoint exists | [APP-DOC] report-ai-mistake | Human eval channel |
| Peer review of charts | Live | [APP-DOC] [APP-CRM] | Reviewers, assignment |
| Agentic AI Receptionist | Disclosed live | [LEGAL] [JD] | SMS, chat, web chat, voice |
| Patient portal chat route | Absent | [APP-PP] route map | Disclosure vs surface gap |
| e-Prescribing | DoseSpot | [APP-PP] [APP-DOC] | EPCS states present |
| Prescription status, patient | 8 states | [APP-PP] | From 13 DoseSpot states |
| Pharmacy fill status | Modelled | [APP-PP] | Full/partial/no fill |
| Multi-pharmacy, ranked | Live | [APP-PP] reorder event | Distance-sorted |
| Pharmacy text search | Behind flag | [APP-PP] | Not yet default |
| Report pharmacy issue | Live route | [APP-PP] | IVR deep-link, press 6 |
| Prescription Issue Resolution | Live clinician module | [APP-ADM] events | PDMP in the loop |
| Refill lead time | Up to 72 h | [LEGAL] pharmacy FAQ | Care Team same-day |
| Refill earliest | 25 days post-fill | [LEGAL] pharmacy FAQ | Pharmacy dispenses at 30 |
| Multi-pharmacy CS eRx | Refused | [LEGAL] pharmacy FAQ | DEA-fraud rationale |
| Schedule II refill | Legally impossible | [WEB] refill page | New Rx every time |
| Narcotic pain meds | Excluded | [WEB] refill page | — |
| Narcolepsy service | In portal, unlisted | [APP-PP] narc |
Not on medvidi.com |
| Native iOS app | None | [WEB] iTunes API | 4-check negative |
| Native Android app | None | [WEB] Play search | 4-check negative |
| Patient portal | Angular web SPA | [HDR] [APP-PP] | "User Dashboard" |
| Doctor Cabinet | Angular web SPA | [HDR] [APP-DOC] | doc.medvidi.com |
| Care Team CRM | Angular web SPA | [HDR] [APP-CRM] | crm.dctr.app |
| Admin console | Angular web SPA | [HDR] [APP-ADM] | admin.medvidi.com |
| Shared API | api.medvidi.com | [HDR] [APP-PP] | AWS APIGW + CloudFront |
| Realtime | Socket.IO | [APP-PP] /engine.io |
socket.medvidi.com |
| Single release train | Yes | [HDR] same last-modified | 2026-08-14 12:01:45 GMT |
| Multi-brand platform | Confirmed | [APP-PP] [REV-BBB] | 6 brands, default EZCare |
| Admin config model | Website×Service×State×Plan | [APP-ADM] nav | Multi-tenant by design |
| Letter templates | Admin entity + render | [APP-ADM] | ESA/CL letters |
| PostHog | Live, project 149642 | [APP-PP] | Session recording + flags |
| PHI masking in recordings | Implemented | [APP-PP] | 19 endpoints stripped |
| GA4 + Google Ads + Bing UET | Live | [MKT-GTM] | GTM-T7TBQ8C |
| Meta / TikTok pixel | Absent from GTM | [MKT-GTM] | Social profiles exist |
| Cross-domain attribution | GA4 linker | [MKT-GTM] | medvidi ↔ join |
| Service intent handoff | Not passed | [WEB] CTA hrefs | Portal supports ?service= |
| Site self-reported rating | 4.85/5, 89%, 33k+ | [WEB] /reviews/ | Frozen since ~Jun 2025 |
| Google reviews aggregate | 3.9/5, n=1,909 | [REV-TI] | 24% one-star |
| Trustpilot aggregate | 4/5, n=1,248 | [REV-TP] | Snippet only, weak |
| BBB complaints, 3 yr | 159 | [REV-BBB] | 58 in last 12 mo |
| BBB rating | A+, accredited 2025-03-07 | [REV-BBB] | Start date 2020-04-08 |
| Webinars surface | Abandoned | [WEB] [SM] | Last touched 2024 |
| Clinical entity | Medvidi Health, P.C. (CA) | [LEGAL] | "applicable Medical Group" |
3. Reconciliation notes
Reconciliation note — the review score. MEDvidi's own
/reviews/page says 4.85/5 with 89% five-star [WEB]; Trustindex's aggregation of 1,828 Google reviews plus 81 of its own says 3.9/5 with 24% one-star [REV-TI]; a Trustpilot snippet says 4/5 across 1,248 [REV-TP]. These are not the same measurement. The 4.85 figure is described on the page as "Our patients rated their providers" — an in-product post-visit rating of the clinician (pp:appointment:provider_rated[APP-PP]), asked of people who completed a visit. Public-platform reviews are volunteered by anyone, including people who never got a prescription. Resolved as: both are probably true of their own populations, and the gap between them is the finding — the clinical encounter rates well; the end-to-end service does not. Also resolved: the 4.85/89%/33k+ block has been byte-identical on the page from at least 2025-06-13 to 2026-08-18 [ARC], so it must be quoted as a mid-2025 hardcoded figure, never as current.Reconciliation note — ESA pricing. The ESA page's package card says "Full ESA Package — From $195 … An online 15-minute consultation … Issuance of the ESA letter" [WEB], but the same page's process section says the letter is issued only at a follow-up consultation 30 days after the initial appointment ("After an initial appointment, you will have at least 30 days to follow the received treatment plan. Then, during a follow-up video visit, a healthcare provider will assess your health dynamics and prepare an ESA letter if deemed appropriate") [WEB]. Resolved in favour of the process section, which is more specific and internally consistent with the two-price model: the realistic cost of an ESA letter is $195 + $159 = $354 across two visits and at least 30 days, and "From $195" is the price of the first step only. The word "From" is carrying a great deal of weight.
Reconciliation note — promo codes.
/promo-codes/asserts no discounts exist "to maintain transparent and fair pricing for all patients" [WEB]; the portal reads apromocodeparameter and stores it, and the admin console has promo-code CRUD [APP-PP] [APP-ADM]. Resolved as not a contradiction but a channel decision: no public codes, retained machinery, most plausibly used by the Care Team in save and win-back conversations. The page's real job is to rank for coupon-intent queries and defuse third-party fake-code sites. Whether codes are in fact issued is parked in §4.Reconciliation note — the "shipped GLP-1" complaints. Several 2026 BBB complaint narratives describe things MEDvidi's published model does not do: GLP-1 medication that "arrived melted and hot to the touch" (2026-07-29), automatic monthly billing for medication refills the patient never requested ($399.01, 2026-08-03; "They auto billed me...July 15", 2026-07-22), and a second month that "would jump to $350" (2026-07-15) [REV-BBB]. MEDvidi sends prescriptions to the patient's chosen pharmacy and sells visits, not shipped medication [WEB] [APP-PP]. Meanwhile MEDVi — a different company — sells compounded semaglutide by subscription at roughly $179 first month then ~$299/month with medication shipped to the door, and received an FDA warning letter in February 2026 for marketing misbranded compounded GLP-1s [COMP-MEDVI]; MEDvidi's own BBB profile carries the disclaimer that it "is a separate and unaffiliated company from any other similar-sounding entities, including MEDVI" [REV-BBB]. Resolved partially: the shipped-medication and monthly-auto-billing narratives most plausibly belong to MEDVi and are misfiled, while complaints that name a "$195 telehealth ADHD consult" are clearly MEDvidi's. Not fully resolvable from public sources — see §4. This is a good question for the CEO, because if a quarter of the BBB complaint volume is a competitor's, that is both a reputational tax and a brand-defence problem.
Reconciliation note — "book in a minute" versus the confirmation call. Marketing says "Appointments within 24 hours", "Booking or rescheduling visits in a minute", "No waiting rooms. No paperwork." [WEB]. The portal's own post-payment copy says a representative will phone to schedule/confirm and verify, and a second status says the Care Team will reach out once verification clears [APP-PP]; the refund policy contemplates "no suitable appointment times are available within a reasonable timeframe" as a refund reason [LEGAL]. Resolved as: both paths exist; the self-serve path is real (there are time-slot loading and selection events [APP-PP]) but a reviewed cohort is routed through a human. The share is unknown and parked.
Reconciliation note — "no membership or hidden fees". The weight-loss page asserts "No membership or hidden fees" [WEB], while the portal ships a full membership surface behind a launch flag and the refund policy defines $50 and $100 fees [APP-PP] [LEGAL]. Resolved as true-at-time-of-writing but now fragile: it is accurate that weight loss is sold per visit today, and it will become false the moment
Membership_Launch_Test_1graduates. A page claim that a feature flag can falsify is a content-governance defect.Reconciliation note — a PWA?
join.medvidi.com/manifest.webmanifestand/ngsw.jsonboth return HTTP 200 [HDR], which initially looked like an Angular service-worker PWA. Both in fact return the SPAindex.htmlwithcontent-type: text/html— nginx falls back for unknown paths. Resolved against the PWA claim; no installable-app claim is made here.
4. Open Questions / Parked
- What fraction of paid leads never reach a completed visit, and where do they die? The
status machine names at least six terminal or stalled states —
CLOSED_UNPAID,CLOSED_PAYMENT_OVERDUE,APPOINTMENT_EXPIRED,UNUSED_APPOINTMENT,REFUND,DISCHARGED[APP-PP] — andPP — Intake — Form Abandonedexists as an event. The rates are the whole business. Settled by: the PostHog funnel frompp:booking_form:purchase_succeededto visit completion, which the Data team already has. - What share of leads goes through the human confirmation call versus pure self-serve? Two statuses imply a manual routing step [APP-PP]. Settled by: CRM task volume by type divided by paid leads.
- What is the intake→verification rejection rate, and what happens to those patients'
$195?
verification_issues_pdmp_drugs,…_pdmp_medication,…_intake_otherexist as task types [APP-PP], and reviews describe being told "I don't qualify for treatment here" after paying [REV-TI]. Settled by: count of leads enteringWAITING_FOR_VERIFICATIONthat never reachAPPROVED, and the refund disposition of each. - Is
servicegenuinely dropped at the marketing→portal boundary, or does GTM rewrite the href at click time? The served HTML has barejoin.medvidi.com/signupon every CTA [WEB], and the portal supports?service=[APP-PP]; curl cannot observe runtime DOM mutation. Settled by: loading a service page in a browser and reading the finalhref, or by a PostHog breakdown ofservice_selectedconditioned on referrer path. - Is Persona actually the identity-verification vendor? The string
personaappears 15 times in the patient bundle and 14 in the admin bundle alongsidepassport/verificationandlead-passport[APP-PP] [APP-ADM], but the occurrences could be PostHog'smask_personal_data_properties. Settled by: one network trace of the intake ID-upload step, or asking. - Which WebRTC stack powers the video visit?
dctr.app/v/is a separate Angular app titled "MEDvidi Video" [HDR], but its bundle path could not be resolved without guessing, which this Area declined to do. Twilio Voice is confirmed for telephony [APP-PP] [APP-DOC]; video is unconfirmed. Settled by: the app's own network panel. - Which model provider serves the AI Scribe and Chart Review AI? No
openai,anthropic,deepgram,assemblyaiorwhisperstrings appear in any of the four public bundles [APP-PP] [APP-ADM] [APP-DOC] [APP-CRM] — inference is entirely server-side, which is the correct design and also opaque from outside. Settled by: asking, or by the BAA list. - Is the disclosed patient-portal AI chat actually shipped? The AI consent covers "authenticated patient portal chat" [LEGAL]; the portal route map has no chat route [APP-PP]. Could be a widget, could be disclosure ahead of shipping. Settled by: a look at the logged-in dashboard.
- Is the narcolepsy service live and sellable?
narcis a service code in the portal [APP-PP] and appears nowhere on medvidi.com [WEB] [SM]. Narcolepsy drugs are Schedule II/III/IV. Settled by: the adminservice×service-statetable. - What does Membership cost, what does it include, and is it live for anyone? No price
or benefit copy for membership appears in the public bundle — the portal fetches
membershipfrom the API [APP-PP]. Settled by: theservice-planrecords in admin. - Are promo codes actually issued today? Machinery yes, public stance no [APP-PP]
[WEB]. Settled by: the admin
/promo-codelist. - How much of the BBB complaint volume is MEDVi's, misattributed? See §3. Settled by: reading all 159 narratives and classifying by described product, or by BBB correspondence.
- What is the real time-to-first-appointment distribution? "Appointments within 24
hours" [WEB] versus "day 13 and still don't have it called in to the pharmacy"
[REV-TI], which is a different clock (Rx transmission, not booking). Settled by:
selected_time_slottimestamp minuspurchase_succeededtimestamp, p50/p90. - What is the eRx transmission failure rate? The clinician app tracks a
transmissionErrorCountand there is aDosespot — System error occurredevent [APP-DOC] [APP-ADM]. Settled by: that counter over time, and the size of the re-prescription task queue. - How many distinct chart-review rules exist, per condition and visit type? The API
exposes
protocol-rules-scoreswithreviewRuleId[APP-DOC]; the rule catalogue itself is server-side. Settled by: the adherence page. - Does anyone action
report-ai-mistake? The endpoint exists [APP-DOC]. Whether the reports feed an eval set is exactly the "AI Evals in practice" question the posting asks about [JD]. Settled by: asking the AI Clinic Track lead. - Which surfaces belong to "Core Track" versus "AI Clinic Track"? Hypothesis, labelled as such (§6). No public source names the tracks beyond the posting [JD]. Settled by: one question in the interview.
- Why is there no Meta or TikTok pixel in the GTM container when Facebook, Instagram and TikTok profiles are linked from the footer [MKT-GTM] [WEB]? Could be a second container, server-side tagging, or genuinely no paid social. A2's question; flagged here because it was found in A1's sources.
5. What this does NOT cover
- Anything behind the login wall. No account was created, no credential attempted, no consult purchased. Every statement about the portal, clinician app, CRM and admin console comes from public, unauthenticated static JavaScript assets and public HTTP headers. What a logged-in dashboard looks like — layout, copy, empty states, actual membership prices, the real intake question set — is unobserved.
- Host enumeration. Only hostnames that MEDvidi itself publishes (linked from its pages or named in its own public environment config) were requested. No port scanning, no directory brute-forcing, no subdomain sweeps, no API probing beyond the documented root.
- The API contract.
api.medvidi.comreturns 404 at root and no public schema was sought. Endpoint names quoted here come from the client bundles, not from calling the API. - Traffic, keyword and spend estimates. Volumes, CAC, conversion rates, channel mix → A2.
- Unit economics. Any inference from $195/$159 to revenue, LTV, margin or visit volume → A3. This Area deliberately stops at the price list and the fee schedule.
- The DEA regime and the 2026-12-31 cliff. The PHE page and the FAQ are quoted as product copy only; the regulation itself, its history and what actually changes → A4.
- Clinician supply, licensure counts, capacity, compensation and the ops org. The 35 team
profiles, the
finances/salaryroutes and the MSO/PC structure are noted where they surfaced in A1's sources and handed to A5 and A7. - The competitive set. MEDVi appears only to resolve a source-attribution problem, not as a competitor analysis → A6.
- Clinical judgement. Whether the protocols, the ASRS cut-offs, the 30-day ESA waiting period or telehealth stimulant prescribing are good medicine is out of scope by the Inquiry's own terms.
- Individual clinicians and named support agents. First names appearing in public reviews are quoted only as evidence about the service-recovery pattern. No person was researched.
- Non-US surfaces. None were sought; the regional Trustpilot domains used are locale mirrors of the same US profile.
6. What this means for a VP of Product
The first thing to say out loud in the room is that the surface is four apps and six
brands, not one website. If Ilia walks in describing medvidi.com, he is describing the
marketing veneer. The public environment config names PATIENT_APP, DOCTOR_APP, CRM_APP
and ADMIN_APP, deployed from one release train, against one API, on a platform domain called
dctr.app whose default brand is EZCare Clinic — with Mango Clinic, MMJ Doctor, ESAcare and
MDBerry in the same registry, and BBB independently listing EZCare and Mango as alternate
names of MEDvidi Inc. That reframes the job: this is a multi-tenant clinical operations
platform with a consumer front end, configured as Website × Service × State × Plan, and the
30-plus engineers make sense in that light in a way they do not if you think the product is a
WordPress site plus a booking form. The corresponding hypothesis about the posting's two
tracks — and it must be offered as a hypothesis — is that Core Track owns the patient
funnel and the Personal Portal (acquisition, booking, payment, intake, membership) while AI
Clinic Track owns the Doctor Cabinet and CRM (Scribe, Chart Review, adherence, peer review,
the receptionist and the task queue). The evidence for it is that the AI features are
entirely clinician- and ops-side in the code, and the patient bundle contains no AI at all
beyond a consent link. One question confirms or kills it.
The mechanical defect worth naming precisely is the step order: payment before intake, before verification, before the visit. This is not a bug; it is a deliberate, behaviourally sophisticated choice — sunk cost carries people through a long intake, and it stops clinician time being spent on unqualified leads. It is also the direct cause of the one-star cluster. When a patient pays $195, uploads their ID, completes the intake, waits for a PDMP review and then hears "you don't qualify here" or "we're referring you to another company", the company has converted a clinical screening decision into a consumer fraud perception. The Trustindex distribution is the receipt: 69.6% five-star and 24.0% one-star, with only 6.3% in the middle. A barbell like that is not a quality problem in the ordinary sense — it is two different journeys sharing one checkout. The tradeoff a VP has to actually make is explicit: move any qualification signal before the paywall and you lose revenue from leads you currently monetise before rejecting; leave it where it is and you keep buying one-star reviews and BBB complaints with money you already collected. The honest middle is a pre-payment eligibility check that is cheap to build and precise about what it excludes — state of residence, age, the handful of PDMP-visible patterns that reliably lead to declination, and the drugs the platform will never prescribe — plus a named, funded "declined after payment" refund path that does not require a 48–72-hour email exchange. Note what that costs: it will reduce paid initial visits. A VP who proposes it without saying so will be caught.
The second defect is that the longest, most failure-prone stretch of the journey is the one
the company contractually disowns. Between "prescription written" and "medication in hand"
sit DoseSpot transmission, EPCS signing, pharmacy acceptance of telehealth eRx (which "varies
from state to state"), stock availability, the 25-day refill floor, the up-to-72-hour provider
approval window and the explicit refusal to shop a controlled-substance script across
pharmacies. Every one of those is real and defensible. And the refund policy says: "Refunds
will not be issued if a pharmacy refuses to fill a prescription." So the company has built a
/report-pharmacy-issue route, a PHARMACY_ISSUE document type, an IVR deep-link on option
6, a clinician-side Prescription Issue Resolution module with PDMP in the loop, and a
patient-facing status literally called Prescription issue — and then told the patient the
money is gone. That is where "day 13, three different pharmacies, paid $195 for nothing"
comes from. The product answer is not a refund policy change; it is making the pharmacy hop
a tracked commitment with an SLA and a proactive owner — pharmacy-level fill-success data
already exists in the fill-status model, so the platform can rank pharmacies by observed
telehealth-eRx acceptance per state per drug and steer the patient before the script goes out,
rather than reacting after it bounces. That is a data product, it uses signals the company
already collects, and it converts the single largest complaint category into a differentiator.
It is also the highest-leverage thing in this Area.
The AI already shipped is better positioned than the posting implies, and the gap is
evaluation rather than capability. Chart Review AI is not a demo: it has per-rule scores,
protocol adherence and red-flag percentages per provider, protocols differentiated by
condition and by initial-versus-follow-up, chart assignment to named reviewers, a paginated
deviations view, an addendum workflow and — the detail that matters most — a
report-ai-mistake endpoint. That endpoint is a human-in-the-loop eval channel that already
exists in production. If nobody is turning those reports into a labelled eval set with a
tracked precision and recall per rule, that is the single cheapest high-credibility thing a
new VP can fix in the first month, and it maps one-to-one onto the posting's demand for "AI
Evals in practice". The same holds for the Scribe: there is an AI-mode toggle, a chart-save
conflict event and a per-appointment generation kill switch, which means clinician trust is
already being measured implicitly by toggle-off rate. Ask for that number. If it is high, the
Scribe is theatre; if it is low and falling, it is working.
Membership is the strategic question, and the company has been here before. In May 2022
MEDvidi sold three subscription tiers at $49, $199 and $219 with therapy and unlimited care
team messaging included. By December 2022 it was selling variable per-visit pricing from $25.
By November 2023 it was flat $195/$159 with a public page insisting it offers no discounts "to
maintain transparent and fair pricing". Today there is a fully instrumented membership surface
— cards, billing history, cancellation with a save-offer, reactivation — sitting behind
Membership_Launch_Test_1, plus a flag for a membership offer targeted specifically at people
who reschedule late. That history is the most useful thing in this Finding for a first
conversation with a CEO, because it means the right question is not "should we do
subscription?" but "what broke last time, and what is different now?" Two candidate
answers are visible from outside: last time the subscription bundled therapy, which the
company then exited entirely (49 homepage mentions in 2021, zero from 2024), so the bundle had
a cost line it could not control; and last time there was no legal forcing function, whereas
now the fact that a Schedule II prescription cannot be refilled and must be reissued every
30 days gives a monthly-cadence membership a genuine reason to exist that the patient can
feel. A VP who arrives with that framing is arguing about the business, not about a pricing
page.
What to leave alone. The $195/$159 price points, which have held for three years and are anchored on-site against a $400–500 in-person comparison. The drug-name information architecture, which is A2's asset and is clearly working. The video app, which is in-house and uninteresting. The 27 programmatic state pages. And the temptation to build a native mobile app: there is provably no iOS or Android app today, the patient product is responsive web, and nothing in the observable failure modes is caused by the absence of an app — the failures are payment-before-qualification and pharmacy hand-off. Building an app would be the most visible and least useful thing a new VP could do, and it should be on the cut list loudly and early.
Two smaller things worth a slide each. First, the free ASRS self-test: eighteen WHO-derived
items, scored client-side, presented to a self-selecting population of people who suspect they
have ADHD, with no email capture and no identifier — and a page last touched in October
2024. That is a lead magnet that magnetises nothing, and the fix is a week of work. Second,
the handoff: every CTA on every page points at a bare join.medvidi.com/signup while the
portal is built to read ?service=, ?promocode=, ?doctor_id= and ?slot=. Attribution
crosses the boundary via the GA4 linker; intent does not. A patient who read four thousand
words about Zepbound picks their service again from a blank list. Also on that theme: the pages
that govern money and failure — Payment Terms (2023-12-12), the pharmacy-issues FAQ
(2023-11-29) — have not been touched in nearly three years, while the acquisition pages were
updated four days ago. Content governance follows revenue attention, and in a regulated
cash-pay business that asymmetry is a liability as well as a bad experience.
Five questions this Area earns the right to ask. What percentage of paid initial visits
end without a prescription, and what happens to that money? What is the p50 and p90 from
purchase_succeeded to a completed video visit, and separately to a pharmacy-confirmed fill?
What is the AI-mode toggle-off rate in the Doctor Cabinet, and does anyone read the
report-ai-mistake queue? What killed the 2022 subscription, and what is different about
Membership_Launch_Test_1? And — the one that shows he did the work — how much of the 159
BBB complaints are actually MEDVi's, and who owns getting them reattributed?
Fourteen Areas · adversarially verified · nothing summarised away