diff --git a/README.md b/README.md index ddff1c1..fb1b788 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # Medscribe Web -Public product website for [Medscribe](../README.md) — a privacy-first, -on-device medical companion in internal beta on iOS and Android. +Public product website for [Medscribe](../README.md) — a private, +patient-controlled care companion for iOS and Android. Built with [create-t3-app](https://create.t3.gg/) (Next.js + TypeScript + -Tailwind). There is no product database or beta-form backend. +Tailwind). Uses **bun** exclusively (`bun.lock`). @@ -19,12 +19,12 @@ Open [http://localhost:3000](http://localhost:3000). ## Routes -The first public product slice includes: +Public routes include: - `/` — consumer-first portable-context story - `/how-it-works` — inputs, review loop, medication maintenance, and handoff -- `/privacy` — data map, sharing limitations, and evidence boundaries -- `/beta` — expectations and a health-data-free email request +- `/privacy` — plain-language privacy and patient-control commitments +- `/access` — health-data-free access request Named partner print material remains isolated and excluded from search: @@ -32,10 +32,8 @@ Named partner print material remains isolated and excluded from search: - `/cvs` - `/walgreens` -`/executive-summary` and `/landscape` remain retired/internal and are also -excluded from search. `SITE_PASSWORD` still gates the entire site when set; a -future pass should make protection route-specific before the public site is -deployed alongside private briefs. +Legacy routes redirect to the current public experience and are excluded from +search. ### Analytics (optional) @@ -58,7 +56,8 @@ precomposited iPhone product-bezel assets in `public/screenshots/product-bezel-2026-08-20/`; there are no raw or CSS-framed product captures in the rendered site. The versioned path keeps newly captured UI from being hidden by stale browser or image-optimizer caches. -Public pages label product imagery as synthetic demo data and beta UI. +Public pages label product imagery as an illustrative profile and Medscribe +interface. ### Capturing raw screenshots for the site diff --git a/src/app/(marketing)/access/page.tsx b/src/app/(marketing)/access/page.tsx new file mode 100644 index 0000000..7916313 --- /dev/null +++ b/src/app/(marketing)/access/page.tsx @@ -0,0 +1,177 @@ +import type { Metadata } from "next"; +import { + ArrowRight, + CalendarDays, + Check, + ContactRound, + Mail, + Pill, + Smartphone, + Users, +} from "lucide-react"; + +import { SectionLabel } from "~/components/section-label"; +import { Badge } from "~/components/ui/badge"; +import { Button } from "~/components/ui/button"; +import { productRelease } from "~/content/product"; +import { ACCESS_INVITE_MAILTO } from "~/lib/access"; + +export const metadata: Metadata = { + title: "Request access", + description: + "Request access to Medscribe without including personal health information.", +}; + +const fitCards = [ + { + icon: Smartphone, + title: "Several moving pieces", + body: "You coordinate visits, medications, reminders, or follow-ups across everyday life.", + }, + { + icon: Users, + title: "A trusted care circle", + body: "You want an easier way to keep a family caregiver informed when you choose.", + }, + { + icon: Check, + title: "Clear, reviewable context", + body: "You value a record you can read, check, and bring into the next conversation.", + }, +] as const; + +const productCards = [ + { + icon: CalendarDays, + title: "Visits that stay useful", + body: "Keep notes, transcripts, summaries, and follow-ups together so the details remain easy to revisit.", + }, + { + icon: Pill, + title: "Medication routines at a glance", + body: "See medications, schedules, reminders, and refill details in one calm, readable place.", + }, + { + icon: ContactRound, + title: "A ready-to-share picture", + body: "Bring selected medications, allergies, conditions, contacts, and preferences together in Know Me.", + }, +] as const; + +export default function AccessPage() { + return ( + <> +
+
+
+
+ {productRelease.stage} + {productRelease.platforms} +
+

+ Bring your care context together. +

+

+ Medscribe is made for people managing repeated visits, several + medications, and the trusted family members who help them stay + organized. +

+
+ +
+
+
+

+ Request Medscribe access +

+

+ Tell us your platform and whether you are interested as a patient, + caregiver, or both. +

+ +

+ Please do not send diagnoses, medication names, visit notes, or + other health details. Email is not a medical-support or emergency + channel. +

+
+
+
+ +
+
+ Made for real life +

+ Keep the details close without carrying the whole burden in your + head. +

+
+ {fitCards.map((item) => { + const Icon = item.icon; + + return ( +
+
+ ); + })} +
+
+
+ +
+
+ One connected picture +

+ Visits, medications, and the people who matter—together. +

+
+ {productCards.map((item) => { + const Icon = item.icon; + + return ( +
+
+ ); + })} +
+ +
+

+ Keep your care team in the loop +

+

+ Medscribe helps you prepare for better conversations. Medical + decisions remain with you and your qualified care team. +

+
+
+
+ + ); +} diff --git a/src/app/(marketing)/beta/page.tsx b/src/app/(marketing)/beta/page.tsx index 498fe2b..836253d 100644 --- a/src/app/(marketing)/beta/page.tsx +++ b/src/app/(marketing)/beta/page.tsx @@ -1,226 +1,5 @@ -import type { Metadata } from "next"; -import { - ArrowRight, - Check, - ClipboardCheck, - Mail, - MessageSquareText, - RotateCcw, - Smartphone, - Users, -} from "lucide-react"; -import Link from "next/link"; +import { redirect } from "next/navigation"; -import { SectionLabel } from "~/components/section-label"; -import { Badge } from "~/components/ui/badge"; -import { Button } from "~/components/ui/button"; -import { productRelease } from "~/content/product"; -import { BETA_INVITE_MAILTO } from "~/lib/beta"; - -export const metadata: Metadata = { - title: "Request beta access", - description: - "Learn who the Medscribe internal beta is for, what participants should expect, and how to request access without submitting health information.", -}; - -const expectations = [ - { - icon: ClipboardCheck, - title: "Review is part of testing", - body: "Check generated summaries, extracted medication fields, and the Know Me view before relying on them.", - }, - { - icon: MessageSquareText, - title: "Direct feedback", - body: "Report confusing language, incorrect extraction, notification behavior, and sharing friction.", - }, - { - icon: RotateCcw, - title: "Possible resets", - body: "This is an internal beta. Builds, local data, and setup may need to be reset as the product changes.", - }, -] as const; - -const testFocus = [ - "Whether the record still feels current after several weeks", - "Medication-label edge cases and correction flow", - "Reminder permissions, timing, travel, and daylight-saving behavior", - "Caregiver pairing, encrypted export, and import comprehension", - "Whether the Know Me handoff is readable and appropriately cautious", - "Physical-device model performance and battery or thermal behavior", -] as const; - -export default function BetaPage() { - return ( - <> -
-
-
-
- {productRelease.stage} - {productRelease.platforms} -
-

- Test the care context, not just the demo. -

-

- We are looking for people managing repeated visits or several - medications, especially family caregiver pairs willing to review - the record over time and tell us where it fails. -

-
- -
-
-
-

- Request access by email -

-

- The draft asks only for your platform, whether you are testing as - a patient, caregiver, or both, and whether you can test with - another person. -

- -

- Do not send diagnoses, medication names, visit notes, transcripts, - or other health details. Email is not a medical-support or - emergency channel. -

-
-
-
- -
-
- A good fit -

- The beta needs real maintenance and handoff situations. -

-
- {[ - { - icon: Smartphone, - title: "Several moving pieces", - body: "You regularly coordinate visits, medication reminders, or follow-ups.", - }, - { - icon: Users, - title: "A caregiver relationship", - body: "You can test a deliberate handoff with a trusted family caregiver.", - }, - { - icon: Check, - title: "Comfort reviewing", - body: "You understand generated information can be wrong and will check it.", - }, - ].map((item) => { - const Icon = item.icon; - - return ( -
-
- ); - })} -
-
-
- -
-
-
-
- What to expect -

- This is collaborative product testing. -

-

- Availability is controlled and continuity is not guaranteed. - Medscribe is not emergency care, diagnosis, dosing guidance, or - a replacement for your care team. -

-
-
- {expectations.map((item) => { - const Icon = item.icon; - - return ( -
-
- ); - })} -
-
- -
-
-
-

- Current test focus -

-

- The questions we are trying to answer -

-
-
    - {testFocus.map((item) => ( -
  • -
  • - ))} -
-
-
- -
-
-

- Want the technical boundaries first? -

-

- See what stays local, how sharing works, and the current - evidence. -

-
- -
-
-
- - ); +export default function LegacyAccessPage() { + redirect("/access"); } diff --git a/src/app/(marketing)/briefs/northwell/page.tsx b/src/app/(marketing)/briefs/northwell/page.tsx index 37c05d0..eeaebda 100644 --- a/src/app/(marketing)/briefs/northwell/page.tsx +++ b/src/app/(marketing)/briefs/northwell/page.tsx @@ -19,9 +19,8 @@ export default function NorthwellBriefPage() { The health-system executive summary

- This private, search-excluded route preserves the existing three-page - print document. Use Print PDF (or Cmd+P, then Save as PDF) to export - it. + This page is formatted as a three-page print document. Use Print PDF + (or Cmd+P, then Save as PDF) to export it.

diff --git a/src/app/(marketing)/executive-summary/page.tsx b/src/app/(marketing)/executive-summary/page.tsx index ab225f3..baf1e5c 100644 --- a/src/app/(marketing)/executive-summary/page.tsx +++ b/src/app/(marketing)/executive-summary/page.tsx @@ -1,437 +1,11 @@ -import type { CSSProperties } from "react"; - import type { Metadata } from "next"; import { redirect } from "next/navigation"; -import Image from "next/image"; - -import { MedscribeLogo } from "~/components/medscribe-logo"; -import { PhoneMockup } from "~/components/phone-mockup"; -import { PrintButton } from "~/components/print-button"; -import { SectionLabel } from "~/components/section-label"; -import { BETA_FOOTER_NOTE, BETA_SUMMARY } from "~/lib/beta"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "~/components/ui/card"; export const metadata: Metadata = { - title: "Executive Summary", - description: - "One-page executive summary for Medscribe, a private medical context app for families managing complex care.", + title: "Medscribe", robots: { index: false, follow: false, nocache: true }, }; -const TAGLINE = - "Your medical truth, in your pocket, and only where you say it goes."; - -const SNAPSHOT = - "Medscribe is a private, patient-owned medical record and companion for people managing ongoing care and the families beside them. It captures visits, makes medications and instructions easy to understand and keep current day to day, and stays ready to hand to a caregiver, a new specialist, or an ER. Everything runs on the device; nothing is uploaded."; - -const PROBLEM = - "Care is fragmented and hard to carry. Patients forget most of what they're told in a visit, juggle medications with no clear picture of what each is for, and lose track of what changed and why. Then they end up somewhere new: a covering doctor, a specialist, an ER outside their network, and none of it travels with them. The family knows, but can't produce a clear, current record under pressure."; - -const PROBLEM_BROADER = - "This is not a rare edge case. It happens every day, to patients with Parkinson's, diabetes, heart disease, dementia, and a hundred other conditions that require precise, continuous management across a fragmented system. The failure is not that families don't care. The failure is that the patient's context does not travel with them."; - -const WHO_ITS_FOR = - "Anyone managing serious, ongoing care across a fragmented health system, and the families who coordinate it. It spans conditions and ages, and eventually touches almost everyone. The failure is simple: the patient's context does not travel with them."; - -const DIFFERENTIATION = - "The market is full of AI visit recorders, medication trackers, health-record apps, and emergency QR cards, each owning one slice. None owns the whole job. In Medscribe, the daily tools are the maintenance system for one emergency-ready record."; - -const differentiators = [ - { - title: "The record is the product", - body: "Recording, scanning, reminders, and Q&A all feed one private record you actually keep current, useful every day and ready to hand over when it counts. Competitors ship visit summaries; we ship the record you own and carry.", - }, - { - title: "Private by architecture", - body: 'AI runs on-device: no cloud processing, no health-data upload, no tracking, no account. Others say "encrypted" while their store disclosures admit cloud collection.', - }, - { - title: "Facts-first, not a guess", - body: "Medication answers render trusted drug facts deterministically, deferring dosing and diagnosis to a clinician or pharmacist. Built for complex-care families, not a general health bot.", - }, -]; - -const MOAT = - "The privacy promise is easy to claim. The execution is not. Medscribe runs a fine-tuned medical model entirely on the phone, built and measured rather than bolted on."; - -const moat = [ - { - title: "A model tuned for this job", - body: "A compact, multi-task model handles label scanning, structured extraction, and safe medication Q&A on the device. Fine-tuning lifted prescription-label field extraction from 0% to 97% in evaluation.", - }, - { - title: "Safety you can measure", - body: "Each release is scored against a held-out set for grounding and safe refusals. Unsafe-prompt refusals reached 100% after tuning, so “defers to a clinician” is a tested behavior, not a hope.", - }, - { - title: "Context that compounds", - body: "Real visit transcripts, a real medication list, and bundled drug facts fuse into one local record, value that grows with use and is hard to replicate without the same on-device capture.", - }, -]; - -const scenarios = [ - { - title: "The ER that doesn't know you", - body: "A patient on time-critical medication ends up at a hospital outside their network. Missing a dose by hours isn't an inconvenience; it's a medical event. Nobody has the schedule, and the family can't produce it under pressure.", - }, - { - title: "The caregiver handoff", - body: "An adult child manages a parent's medications, appointments, and history. When they're not there, the context disappears: a sibling visits, a home aide covers, a shift changes. Critical details live in one person's memory.", - }, - { - title: "The newly diagnosed, overwhelmed", - body: "After a new diagnosis, a patient leaves with a changed medication schedule, lifestyle instructions, and follow-ups they half-remember. By the next visit, the provider can't tell what was understood, tried, or missed.", - }, -]; - -const impact = [ - { - title: "Fewer blank handoffs", - body: "When a caregiver or clinician takes over, the facts are already assembled: conditions, medications, allergies, baseline, contacts, and recent changes.", - }, - { - title: "Safer medication moments", - body: "Time-critical schedules and dose history stay visible, so a missed or delayed medication is easier to catch before it becomes a crisis.", - }, - { - title: "Patients and providers aligned", - body: "Families see what changed and why; providers get a current snapshot instead of reconstructing it from a stressed family's memory.", - }, -]; - -const FOR_HEALTH_SYSTEMS = - "Epic is the definitive record of care inside the network. What no institutional EHR is built to be is the record the patient owns and carries everywhere else: the out-of-network ER, the specialist on another Epic instance, the months between visits at home. That out-of-hospital stretch is a structural blind spot, not a flaw in any one system. Medscribe fills it on the patient's own device, and — only with the patient's consent — hands that context back, so the gap becomes an ongoing connection instead of a black box."; - -const forHealthSystems = [ - { - title: "Reaches where the EHR can't", - body: "The record lives on the patient's device and travels with them: the out-of-network ER, the covering specialist, the weeks at home between visits. It stays current exactly where an institutional system loses sight of the patient.", - }, - { - title: "Feeds context back into Epic", - body: "With the patient's consent, the out-of-network and between-visit context Medscribe captures returns into the workflows you already run. It raises the value of the EHR investment rather than competing for budget or attention.", - }, - { - title: "Patient-owned, so it persists", - body: "A branded, patient-facing surface that works the levers systems are measured on — in-network retention, medication adherence, avoidable readmissions. Because the record belongs to the patient, it holds even if the system changes EHRs.", - }, -]; - -const printLightTokens = { - "--color-foreground": "#0f172a", - "--color-primary": "#0f766e", - "--color-surface": "#ffffff", - "--color-border-soft": "#e2e8f0", - "--color-muted-foreground": "#475569", - color: "#0f172a", -} as CSSProperties; - export default function ExecutiveSummaryPage() { - // The home page is now the executive summary (single-page site). This deep - // page is retired but kept in place — its content (incl. the print one-pager) - // is a one-line revert away if we want a longer version back. redirect("/"); - - return ( - <> - {/* ===================== SCREEN ===================== */} -
- {/* Hero */} -
-
- Executive Summary · June 2026 -
-

- Medscribe -

-

- {TAGLINE} -

-
-

- {SNAPSHOT} -

-
- -
- -
-
- - {/* The Problem */} -
- The problem -

- The patient's context does not travel with them. -

-
-

{PROBLEM}

-

{PROBLEM_BROADER}

-
-
- - {/* Scenarios */} -
- Who this is for -

- The moments where context is everything. -

-
- {scenarios.map((scenario) => ( - - - {scenario.title} - {scenario.body} - - - ))} -
-
- - {/* Differentiation */} -
- Why this is different -

- Everyone owns a slice. We own the whole job. -

-

- {DIFFERENTIATION} -

-
- {differentiators.map((item) => ( - - - {item.title} - {item.body} - - - ))} -
- - -

- Medscribe connects the daily loop to the emergency handoff: one - private record that stays current through normal use and is - ready when the system does not know the patient. -

-
-
-
- - {/* Under the hood */} -
- Under the hood -

- Easy to claim. Hard to copy. -

-

- {MOAT} -

-
- {moat.map((item) => ( - - - {item.title} - {item.body} - - - ))} -
-
- - {/* Impact */} -
- Potential impact -

- Less panic, more context, better handoffs. -

-
- {impact.map((item) => ( - - - {item.title} - - {item.body} - - - - ))} -
-
- - {/* For health systems */} -
- For health systems -

- An ongoing touchstone, not another portal. -

-

- {FOR_HEALTH_SYSTEMS} -

-
- {forHealthSystems.map((item) => ( - - - {item.title} - {item.body} - - - ))} -
-
- - {/* Beta */} -
-

- {BETA_SUMMARY} If you'd like to try it, reach out. -

- -
- -

- Sean O'Connor -

-
- - {/* ===================== PRINT: dense one-page PDF ===================== */} -
- {/* Header */} -
-
-

- Executive Summary · June 2026 -

-
- -

- Medscribe -

-
-

- {TAGLINE} -

-

- {SNAPSHOT} -

-
-
-
- Medscribe home screen -
-
-
- - {/* The Problem */} -
-

- The Problem -

-

- {PROBLEM} -

-
- - {/* Who It's For */} -
-

- Who It's For -

-

- {WHO_ITS_FOR} -

-
- - {/* Why This Is Different */} -
-

- Why This Is Different -

-
- {differentiators.map((item) => ( -

- - {item.title}. - {" "} - {item.body} -

- ))} -
-
- - {/* Under The Hood */} -
-

- Under The Hood -

-
- {moat.map((item) => ( -

- - {item.title}. - {" "} - {item.body} -

- ))} -
-
- - {/* For Health Systems */} -
-

- For Health Systems -

-
- {forHealthSystems.map((item) => ( -

- - {item.title}. - {" "} - {item.body} -

- ))} -
-
- -
-

Sean O'Connor

-

{BETA_FOOTER_NOTE}

-
-
- - ); } diff --git a/src/app/(marketing)/how-it-works/page.tsx b/src/app/(marketing)/how-it-works/page.tsx index 0f8c519..0e7deea 100644 --- a/src/app/(marketing)/how-it-works/page.tsx +++ b/src/app/(marketing)/how-it-works/page.tsx @@ -14,19 +14,18 @@ import { PhoneMockup } from "~/components/phone-mockup"; import { SectionLabel } from "~/components/section-label"; import { Badge } from "~/components/ui/badge"; import { Button } from "~/components/ui/button"; -import { productClaims } from "~/content/product"; export const metadata: Metadata = { title: "How it works", description: - "See how Medscribe turns visits and medication routines into one local record a person can review and carry.", + "See how Medscribe brings visits, medication routines, and important context into one reviewable record.", }; const inputs = [ { icon: Keyboard, title: "Type or paste", - body: "Start from notes you already have and keep the source close to the result.", + body: "Start from notes you already have and keep the original details easy to revisit.", }, { icon: Camera, @@ -36,12 +35,12 @@ const inputs = [ { icon: FileText, title: "Attach a document", - body: "Use a photo or document as the input to a local review workflow.", + body: "Bring a photo or document into a guided review workflow.", }, { icon: Mic, title: "Record with consent", - body: "Optional visit audio requires consent and is transcribed on the device.", + body: "With permission, turn optional visit audio into notes you can review.", }, ] as const; @@ -49,7 +48,7 @@ const boundaries = [ "It does not diagnose or recommend treatment.", "It does not calculate, shift, or supply medication timing.", "It does not replace a pharmacist, prescribing team, or emergency service.", - "It does not automatically synchronize a household in the background.", + "It does not decide what you should share or who should receive it.", ] as const; export default function HowItWorksPage() { @@ -57,14 +56,14 @@ export default function HowItWorksPage() { <>
- Current beta workflow + A day with Medscribe

One record, built through everyday use.

Medscribe is useful at a handoff only if ordinary moments keep the - picture current. Every generated result has a person in the review - loop. + picture clear. You stay in the review loop from the first note to + the next conversation.

@@ -73,7 +72,7 @@ export default function HowItWorksPage() {
Start where the information is

- Four ways in. One review checkpoint. + Four ways in. One clear place to review.

{inputs.map((item, index) => { @@ -108,9 +107,8 @@ export default function HowItWorksPage() { aria-hidden="true" />

- The person reviews summaries and extracted medication fields. - Medscribe does not silently turn model output into an - authoritative medical record. + You review summaries and medication details before they become + part of the record you carry.

@@ -122,28 +120,27 @@ export default function HowItWorksPage() {
Review what changed

- A summary is a draft, not a verdict. + Keep the visit and the takeaway together.

- Supported transcription and summarization run locally. The visit - remains available beside the summary so a person can check - follow-ups and wording. + The visit remains available beside the summary so you can check + wording, follow-ups, and the details you want to remember.

- What comes next: a - structured review inbox for accepting, correcting, or dismissing - changes inferred from a visit. + Stay oriented: move + between the transcript and summary whenever you want the fuller + context.

- Synthetic demo data · beta interface + Illustrative profile · Medscribe interface

@@ -153,22 +150,21 @@ export default function HowItWorksPage() {

- Synthetic demo data · beta interface + Illustrative profile · Medscribe interface

Maintain the medication picture

- Facts and schedules carry their boundary with them. + Keep the daily routine easy to read.

- {productClaims.medicationFacts.publicCopy} Schedules can record - whether they are fixed-time or as-needed, the times supplied by - the person's source, confirmation, and timezone. + See medication details, schedules, reminders, and refill + information together without hunting through separate notes.

Medscribe records timing supplied by a label, pharmacist, or @@ -185,27 +181,24 @@ export default function HowItWorksPage() { Know Me is the view. Sharing is a separate choice.

- Open the local Know Me screen when someone needs a concise - picture. For a caregiver, pair devices, compare a safety number, - review the record, and manually export an encrypted snapshot. + Open Know Me when someone needs a concise picture. Review the + details first, then show or share the selected context with a + trusted caregiver.

- The current import path does not yet require the sender to be in - the recipient's active trust list, so recipients must - verify the sender out of band. Revocation prevents a future - local export; it cannot invalidate already-exported ciphertext - or erase a copy the recipient imported. + You stay in control of the handoff: what is included, who sees + it, and when the conversation happens.

- Synthetic demo data · beta interface + Illustrative profile · Medscribe interface

@@ -246,11 +239,11 @@ export default function HowItWorksPage() {

- See the trust boundary task by task. + Privacy should feel understandable.

- Read what stays local, what can use a network, and what remains - unfinished. + See how Medscribe keeps you in control of the context you keep, + review, and share.

diff --git a/src/app/(marketing)/landscape/page.tsx b/src/app/(marketing)/landscape/page.tsx index ace0d8d..b04469e 100644 --- a/src/app/(marketing)/landscape/page.tsx +++ b/src/app/(marketing)/landscape/page.tsx @@ -1,167 +1,11 @@ import type { Metadata } from "next"; import { redirect } from "next/navigation"; -import { SectionLabel } from "~/components/section-label"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "~/components/ui/card"; - export const metadata: Metadata = { - title: "Solution Landscape", - description: - "How the medical-context space is divided today, and the combined job no existing product owns.", + title: "Medscribe", robots: { index: false, follow: false, nocache: true }, }; -const INTRO = - "The space is crowded. Visit recorders, medication apps, health-record vaults, emergency IDs, and caregiver tools all exist and are improving. But each owns one slice. None owns the whole job: a private, patient-owned medical context that stays current through daily use and is ready to hand over in a crisis."; - -const categories = [ - { - category: "Patient AI visit notetakers", - examples: "Kin, AlignCare, Emilia, PatientScribe, Medcorder", - gap: "Capture and summarize the visit, but the summary is the product. It is not turned into an emergency-ready record a family can hand over.", - }, - { - category: "Medication trackers", - examples: "Medisafe, MyTherapy, Dosecast", - gap: "Know the pill list and reminders, but never heard the visit. No grounded understanding of why a medication is on the list or what changed.", - }, - { - category: "Personal health records", - examples: "KeepMD, Available Health, Replicoo, Guava, DrOwl", - gap: "Store and aggregate documents, but are passive. Nothing keeps them current, and a broad PHR is undifferentiated.", - }, - { - category: "Emergency IDs and QR cards", - examples: "Apple Medical ID, MedicAlert, tenderID, Epic Share Everywhere", - gap: "A static snapshot with no daily maintenance loop, so the card is only as accurate as the last manual edit.", - }, - { - category: "Caregiver coordination", - examples: "Innerhive, Alula, Connected Caregiver, Caring Village", - gap: "Tend toward tasks, calendars, and messaging. They coordinate people, not the integrity of the medical context itself.", - }, - { - category: "Provider-side scribes", - examples: "Abridge, Nuance DAX, Suki", - gap: "Built for the clinician's chart and billing, in clinical language. Not for the patient or the family carrying context across systems.", - }, -]; - -const bundle = [ - "Patient- and caregiver-owned mobile app", - "On-device visit transcription", - "Medication OCR and intake tracking", - "Facts-first medication Q&A grounded in trusted drug data", - "Current medications and visit context fused into one local record", - "An emergency “know me” handoff", - "Caregiver sharing designed for complex-care families", - "End-to-end encrypted, peer-to-peer sharing as a core architecture", -]; - export default function LandscapePage() { - // Unpublished for now — not part of what external contacts (e.g. the - // Northwell introduction) should see. Content is kept in place, not - // deleted, so this is a one-line revert when we want it public again. redirect("/"); - - return ( -
- {/* Hero */} -
- Solution landscape -

- The field, and the gap -

-

- {INTRO} -

-
- - {/* Category map */} -
-
- Who owns which slice -

- Six categories, each solving part of it -

-
-
- {categories.map((item) => ( - - - {item.category} -

- {item.examples} -

- {item.gap} -
-
- ))} -
-
- - {/* Closest competitor */} -
- The closest direct competitor - - -

- AlignCare matches the consumer bundle on paper: visit recording, - summaries, an AI assistant, medication reminders and logging, - documents, and caregiver sharing. It is real competition, not a - strawman. -

-

- The openings it leaves: its app-store disclosures indicate cloud - collection and tracking rather than on-device processing; it has no - first-class emergency handoff for a patient who cannot explain - themselves; and its medication answers are not described as - deterministic, on-device, facts-first rendering. Those are - Medscribe's wedges. -

-
-
-
- - {/* The unowned bundle */} -
-
- What no one owns as one bundle -

- The combined job is the opening -

-

- Each box above has partial substitutes. No single incumbent unites - all of this into one private, patient-owned record: -

-
- - -
    - {bundle.map((point) => ( -
  • - - {point} -
  • - ))} -
-
-
-

- That intersection, the daily maintenance loop that keeps an - emergency-ready record current and private by architecture, is the lane - Medscribe is built to own. -

-
-
- ); } diff --git a/src/app/(marketing)/page.tsx b/src/app/(marketing)/page.tsx index cfd2029..4e46fe3 100644 --- a/src/app/(marketing)/page.tsx +++ b/src/app/(marketing)/page.tsx @@ -3,7 +3,7 @@ import { ArrowRight, Check, ContactRound, - KeyRound, + HeartHandshake, LockKeyhole, ScanLine, ShieldCheck, @@ -14,12 +14,12 @@ import Link from "next/link"; import { ProductDevice } from "~/components/product-device"; import { Button } from "~/components/ui/button"; import { productClaims, productRelease } from "~/content/product"; -import { BETA_INVITE_MAILTO } from "~/lib/beta"; +import { ACCESS_INVITE_MAILTO } from "~/lib/access"; export const metadata: Metadata = { title: "Carry the context when care gets complicated", description: - "Medscribe is a private, patient-controlled beta that helps keep visits, medications, and critical context together on your device.", + "Medscribe is a private, patient-controlled companion that keeps visits, medications, and critical context together.", }; const visitMoments = [ @@ -36,7 +36,7 @@ const visitMoments = [ number: "02", eyebrow: "Words stay checkable", title: "Go back to what was actually said.", - body: "Search the local transcript and compare it with the generated summary before anything becomes part of the record you rely on.", + body: "Search the transcript and compare it with the generated summary before relying on it later.", image: "/screenshots/product-bezel-2026-08-20/transcript-black.webp", darkImage: "/screenshots/product-bezel-2026-08-20/transcript-black-dark.webp", @@ -45,8 +45,8 @@ const visitMoments = [ { number: "03", eyebrow: "The next step stays visible", - title: "Review the useful part. Keep the uncertainty.", - body: "Medications, follow-ups, diagnoses, and instructions are prepared on-device. Suggestions remain suggestions until a person checks them.", + title: "Review the useful part. Keep your judgment.", + body: "Bring medications, follow-ups, diagnoses, and instructions into view, then check the details that matter.", image: "/screenshots/product-bezel-2026-08-20/summary-natural.webp", darkImage: "/screenshots/product-bezel-2026-08-20/summary-natural-dark.webp", @@ -56,41 +56,41 @@ const visitMoments = [ const proofStats = [ { - value: productRelease.drugFacts.toLocaleString("en-US"), - label: "bundled medication records", + value: "One place", + label: "for visits, medications, and important context", }, { - value: productRelease.rxNormTerms.toLocaleString("en-US"), - label: "RxNorm terms for matching", + value: "At a glance", + label: "for daily routines and reminders", }, { - value: productRelease.interactionPairs.toLocaleString("en-US"), - label: "known interaction pairs", + value: "Your choice", + label: "when and what to share", }, ] as const; const privacyPrinciples = [ { icon: Smartphone, - title: "Your working record stays local", + title: "Built around the person", body: productClaims.localRecord.publicCopy, }, { icon: LockKeyhole, - title: "AI runs on the device", + title: "Private by design", body: productClaims.localAi.publicCopy, }, { icon: ShieldCheck, - title: "Facts do not come from model memory", + title: "Care decisions stay human", body: productClaims.medicationFacts.publicCopy, }, ] as const; -const betaFit = [ +const accessFit = [ "Managing several medications or repeated visits", "Coordinating care with a family caregiver", - "Willing to review generated information and report errors", + "Keeping a clear record for the next conversation", ] as const; export default function HomePage() { @@ -112,12 +112,12 @@ export default function HomePage() {

Visits, medications, and the critical details between them—kept - together on the device you carry. + together wherever care takes you.

@@ -149,7 +149,7 @@ export default function HomePage() { />

- Synthetic demo data · beta interface + Illustrative profile · Medscribe interface

@@ -157,7 +157,7 @@ export default function HomePage() {

- The missing picture + The connected picture

Care happens in fragments. Your context shouldn't. @@ -181,8 +181,8 @@ export default function HomePage() {

Bring in typed notes, a portal screenshot, a document, or an - optional consent-gated recording. The work happens locally. You - decide what is useful. + optional consent-gated recording. You decide what is useful and + what belongs in your record.

@@ -239,7 +239,7 @@ export default function HomePage() { Between visits

- Keep the medication picture from going stale. + Keep the medication picture current.

The list, the label, the schedule, and the latest confirmation @@ -272,16 +272,16 @@ export default function HomePage() {

{[ { - title: "Show where a schedule came from", - body: "Schedules can carry their source, confirmation, timezone, and freshness state.", + title: "Keep schedules easy to understand", + body: "See timing, reminders, and refill details together in one calm view.", }, { - title: "Keep facts deterministic", + title: "See the important details", body: productClaims.medicationFacts.publicCopy, }, { - title: "Make uncertainty visible", - body: "Missing or stale details stay visible so the person or clinician can verify them.", + title: "Make review simple", + body: "Keep the details readable so you can check them with a clinician or pharmacist.", }, ].map((item) => (

- Ask about a visit or medication without uploading the record to a - remote model. Answers are grounded in local history and bundled - facts, with the boundary kept in view. + Ask about a visit or medication using the context you have already + collected. Answers help you prepare for a clearer conversation.

Informational only. Medication changes still belong with a @@ -325,7 +324,7 @@ export default function HomePage() { @@ -351,12 +350,12 @@ export default function HomePage() { At the handoff

- Bring the picture when the chart is incomplete. + Bring the picture when care gets complicated.

Know Me gathers selected medications, allergies, conditions, - baseline, and contacts into one readable snapshot. Freshness - signals show what may need another look. + baseline, and contacts into one readable snapshot that is easy + to review together.

@@ -380,7 +379,7 @@ export default function HomePage() { Caregiver copy

- Manually export an encrypted copy for a paired recipient. + Share selected context with someone you trust.

@@ -390,20 +389,23 @@ export default function HomePage() {
-
    {[ - ["1", "You review", "Choose the record to send"], - ["2", "Encrypted copy", "Protected for the recipient key"], - ["3", "They import", "A local, readable snapshot"], + ["1", "You review", "Choose the context that helps"], + ["2", "You share", "Send it to someone you trust"], + ["3", "Stay aligned", "Keep the same picture in view"], ].map(([number, title, body]) => (
-

- Manual today—not live sync or a household cloud account. - Import-side sender trust enforcement is still being hardened; - revocation cannot recall a copy already exported. -

@@ -436,15 +433,14 @@ export default function HomePage() {

- A precise privacy boundary + Privacy that feels personal

- Local changes what you have to trust. + Your health story stays centered on you.

- The working record and supported AI tasks stay on the device. - Medication facts come from bundled references, not a model trying - to remember medicine. + Medscribe keeps the experience focused on your choices: what you + keep, what you review, and what you share with people you trust.

@@ -486,7 +482,7 @@ export default function HomePage() {
@@ -497,17 +493,17 @@ export default function HomePage() {

- The right beta participant + Made for people who carry a lot

- Help build the record people can actually carry. + Carry the record that helps you move forward.

- This is an internal beta. Expect close feedback, manual review, - rough edges, and possible resets—not guaranteed continuity. + Bring visits, medication routines, and trusted caregivers into one + clearer picture—without losing your place at the center.

    - {betaFit.map((item) => ( + {accessFit.map((item) => (
  • - Start with your platform and whether you are testing as a patient, - caregiver, or both. Please do not email health details. + Start with your platform and whether you are interested as a + patient, caregiver, or both. Please do not email health details.

diff --git a/src/app/(marketing)/privacy/page.tsx b/src/app/(marketing)/privacy/page.tsx index b947ebe..722ca98 100644 --- a/src/app/(marketing)/privacy/page.tsx +++ b/src/app/(marketing)/privacy/page.tsx @@ -1,383 +1,186 @@ import type { Metadata } from "next"; import { - AlertTriangle, ArrowRight, Check, - Database, - FileCheck2, - KeyRound, - LockKeyhole, - Wifi, + EyeOff, + Hand, + Share2, + ShieldCheck, + UserRoundCheck, } from "lucide-react"; import Link from "next/link"; import { SectionLabel } from "~/components/section-label"; -import { Badge } from "~/components/ui/badge"; import { Button } from "~/components/ui/button"; -import { productClaims, productRelease } from "~/content/product"; export const metadata: Metadata = { - title: "Privacy & evidence", + title: "Privacy", description: - "A task-by-task view of Medscribe's local architecture, network behavior, caregiver sharing, evidence, and beta limitations.", + "A plain-language view of how Medscribe keeps people in control of their care context.", }; -const dataMap = [ +const principles = [ { - task: "Visit transcription", - location: "Device", - network: "No cloud inference", - control: "Recording requires consent", + icon: Hand, + title: "You decide what belongs", + body: "Add, review, update, or remove the details that help you manage visits and medications.", }, { - task: "Summary generation", - location: "Device", - network: "No cloud inference", - control: "The person reviews output", + icon: Share2, + title: "You choose when to share", + body: "Show or share selected context with a trusted caregiver or care professional when it helps.", }, { - task: "Medication-label OCR", - location: "Device", - network: "No cloud inference", - control: "Extracted fields remain editable", - }, - { - task: "Drug facts and known pairs", - location: "Bundled on device", - network: "No runtime fact lookup", - control: "Sources and coverage are disclosed", - }, - { - task: "Model installation or update", - location: "Downloaded to device", - network: "Network may be required", - control: "Approved URLs and file integrity checks", - }, - { - task: "Caregiver sharing", - location: "Encrypted device-to-device snapshot", - network: "The person chooses ciphertext transport", - control: "Verify out of band; import trust enforcement is incomplete", - }, - { - task: "Primary record storage", - location: "Local app database", - network: "No Medscribe cloud account", - control: "The unlocked device remains a trust boundary", - }, - { - task: "Website analytics", - location: "Marketing site only", - network: "Optional Umami script when configured", - control: "Disabled when no website ID is configured", + icon: UserRoundCheck, + title: "You remain the center", + body: "Medscribe supports your conversations without taking decisions away from you or your care team.", }, ] as const; -const protects = [ - "Runtime disclosure of visits or medications to a cloud AI provider", - "A Medscribe account database becoming the default copy of the record", - "A readable caregiver export being sent to someone who was not paired", +const commitments = [ + { + title: "No advertising profile", + body: "Your health context is not for sale and is not used to target advertising.", + }, + { + title: "Deliberate sharing", + body: "Caregiver access begins with your choice, and shared information stays focused on the context you select.", + }, + { + title: "Clear review", + body: "Summaries and organized details remain easy to read and check before you rely on or share them.", + }, ] as const; -const doesNotProtect = [ - "Information viewed on an unlocked or compromised phone", - "A snapshot that a verified recipient already imported", - "Someone intentionally copying or sharing visible information", - "Every possible drug interaction or model failure", +const choices = [ + "Keep visit notes, summaries, and follow-ups together", + "Maintain a medication list and reminder routine", + "Prepare a concise Know Me view for important moments", + "Share selected context with someone you trust", ] as const; export default function PrivacyPage() { return ( <> -
-
-
- - Last verified {productRelease.verifiedOn} - - Internal beta +
+
+
+
-

- Privacy should be specific enough to challenge. + Privacy +

+ Your story stays yours.

-

- “Local” is not a magic word. Here is where each task happens, when a - network can be involved, what the design protects, and what it does - not. +

+ Medscribe is designed around a simple idea: you should be able to + carry useful care context without giving up control of it.

-
-
- Data map -

- Task by task, not “everything” absolutes. -

- -
- - - - - {[ - "Task", - "Where it happens", - "Network behavior", - "User control", - ].map((heading) => ( - - ))} - - - - {dataMap.map((row) => ( - - - - - - - ))} - -
- Medscribe tasks, processing location, network behavior, and user - control -
- {heading} -
- {row.task} - - {row.location} - - {row.network} - - {row.control} -
-
-
-
- -
-
-
- {[ - { - icon: LockKeyhole, - title: "Supported AI work stays local", - body: productClaims.localAi.publicCopy, - }, - { - icon: Database, - title: "The primary record stays local", - body: `${productClaims.localRecord.publicCopy} The beta relies on the device and operating system's protections; it does not claim a separately encrypted app database.`, - }, - { - icon: Wifi, - title: "Downloads are the network exception", - body: "Installing or updating a model can require a network. Approved model files are checked against an expected SHA-256 digest before use.", - }, - ].map((item) => { - const Icon = item.icon; - - return ( -
- - -

- {item.title} -

-

- {item.body} -

-
- ); - })} -
-
-
-
-
-
-
-
-
- Caregiver sharing -

- Verify a person, then export deliberately. -

-

- New snapshots use authenticated encryption targeted to the - recipient key. Ciphertext integrity and wrong-recipient - rejection are tested. The current import path does not yet - require the sender to be in the recipient's active trust - list, and recipient-key metadata is not authenticated and - checked on import. Verify the sender out of band. The beta does - not claim the Signal protocol or live synchronization. -

-
-
-

- The practical rule -

-
    - {[ - "Compare the safety number with the intended caregiver.", - "Review the snapshot before every material export.", - "Re-export after important changes; it is not automatic.", - "Treat revocation as a block on future local exports; it cannot invalidate already-exported ciphertext.", - ].map((item, index) => ( -
  1. - - {index + 1} - - {item} -
  2. - ))} -
-
-
-
-
+
+ {principles.map((item) => { + const Icon = item.icon; -
-
- Evidence, not superlatives -
-
-

- What the current release can actually point to. -

-
-

- Medication language is based on named public reference datasets, - but condensed wording is not FDA-reviewed. Coverage counts - describe the bundle; they do not prove clinical completeness. -

-
- -
- {[ - [ - productRelease.drugFacts.toLocaleString(), - "Condensed drug records", - ], - [ - productRelease.rxNormTerms.toLocaleString(), - "RxNorm search terms", - ], - [ - productRelease.interactionPairs.toLocaleString(), - "Known high-priority pairs", - ], - [ - productRelease.flaggedForReview.toLocaleString(), - "Records flagged for review", - ], - ].map(([value, label]) => ( -
-
- {label} -
-
- {value} -
-
- ))} -
+
+
-
-