finish up marketing push for northwell
This commit is contained in:
+104
-48
@@ -1,4 +1,4 @@
|
|||||||
import { HeartPulse, Layers, ShieldCheck } from "lucide-react";
|
import { HeartPulse, Layers, ShieldCheck, Users } from "lucide-react";
|
||||||
|
|
||||||
import { PhoneMockup } from "~/components/phone-mockup";
|
import { PhoneMockup } from "~/components/phone-mockup";
|
||||||
import { SectionLabel } from "~/components/section-label";
|
import { SectionLabel } from "~/components/section-label";
|
||||||
@@ -15,8 +15,13 @@ import {
|
|||||||
const fit = [
|
const fit = [
|
||||||
{
|
{
|
||||||
icon: Layers,
|
icon: Layers,
|
||||||
title: "Complements Epic — doesn't compete",
|
title: "Complements Epic, doesn't compete",
|
||||||
body: "Different question. Epic answers “what does Northwell know about this patient?” Medscribe answers “what does the patient carry everywhere else?” With the patient's consent, the out-of-network and between-visit context it captures flows back into the workflows Northwell already runs — raising the value of the Epic investment rather than competing for it.",
|
body: "Different job. Epic is the record of care inside Northwell. Medscribe is the patient-owned layer beside it, holding what Epic can't reach: the non-Epic care, the between-visit context, the emergency handoff. With the patient's consent, that context flows back into the workflows Northwell already runs, raising the value of the Epic investment rather than competing for it.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Users,
|
||||||
|
title: "Keeps patients active in their own care",
|
||||||
|
body: "Reminders and refills the app sets for them, dose tracking, and, between visits, questions routed back to their own care team rather than out to a search engine. Low-friction by design, because a tool the patient actually uses is what turns into adherence, engagement, and in-network follow-through, the things Northwell is measured on.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: HeartPulse,
|
icon: HeartPulse,
|
||||||
@@ -26,7 +31,7 @@ const fit = [
|
|||||||
{
|
{
|
||||||
icon: ShieldCheck,
|
icon: ShieldCheck,
|
||||||
title: "Private by architecture",
|
title: "Private by architecture",
|
||||||
body: "The sensitive work — transcription, medication questions, building the record — runs entirely on the device, not the cloud. No health data sent to a server for AI processing, no new inbox to breach, no BAA to negotiate.",
|
body: "The sensitive work (summarizing visits, answering medication questions, building the record) runs entirely on the device, not the cloud. No health data sent to a server for AI processing, no new inbox to breach, no BAA to negotiate.",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -34,7 +39,7 @@ export default function HomePage() {
|
|||||||
return (
|
return (
|
||||||
<div className="mx-auto max-w-5xl px-4 py-10 sm:px-6 lg:py-14">
|
<div className="mx-auto max-w-5xl px-4 py-10 sm:px-6 lg:py-14">
|
||||||
{/* Phone floats right on sm+; prose sections wrap around it like a newspaper column */}
|
{/* Phone floats right on sm+; prose sections wrap around it like a newspaper column */}
|
||||||
<div className="animate-fade-in-up-delay-1 mx-auto mb-8 flex justify-center sm:float-right sm:mx-0 sm:ml-8 sm:mb-4 lg:ml-10">
|
<div className="animate-fade-in-up-delay-1 mx-auto mb-8 flex justify-center sm:float-right sm:mx-0 sm:mb-4 sm:ml-8 lg:ml-10">
|
||||||
<PhoneMockup
|
<PhoneMockup
|
||||||
src="/screenshots/home.png"
|
src="/screenshots/home.png"
|
||||||
alt="Medscribe home screen"
|
alt="Medscribe home screen"
|
||||||
@@ -44,17 +49,33 @@ export default function HomePage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="space-y-10 lg:space-y-12">
|
<div className="space-y-10 lg:space-y-12">
|
||||||
{/* Hero */}
|
{/* Origin */}
|
||||||
<section className="animate-fade-in-up space-y-5">
|
<section className="animate-fade-in-up space-y-5">
|
||||||
<SectionLabel>Executive summary · Northwell Health</SectionLabel>
|
<SectionLabel>Executive summary · Northwell Health</SectionLabel>
|
||||||
<h1 className="font-serif text-4xl leading-[1.05] font-semibold tracking-tight text-foreground sm:text-5xl lg:text-6xl">
|
<h1 className="text-foreground font-serif text-4xl leading-[1.05] font-semibold tracking-tight sm:text-5xl lg:text-6xl">
|
||||||
Be known when care gets complicated
|
Be known when care gets complicated
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-base leading-relaxed text-muted-foreground sm:text-lg">
|
<div className="text-muted-foreground space-y-4 text-base leading-relaxed sm:text-lg">
|
||||||
Medscribe is a private, patient-owned medical record that lives on the
|
<p>
|
||||||
patient's phone — and stays with them exactly where Epic
|
A grandfather with three adult children, each living twenty to
|
||||||
can't follow.
|
fifty minutes away. None able to be at every appointment. No
|
||||||
|
shared, current view of his medications, his visits, or what had
|
||||||
|
changed.
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
Then came the emergency. A fall. A hospital that did not
|
||||||
|
understand his condition. Some of his medications were
|
||||||
|
time-critical. They were administered incorrectly, his decline was
|
||||||
|
misread, the wrong path was taken, and he passed six weeks later.
|
||||||
|
The clinicians were not negligent. The system was blind to who he
|
||||||
|
was, and no trustworthy picture of him existed to hand over.
|
||||||
|
</p>
|
||||||
|
<p className="text-foreground font-medium">
|
||||||
|
Medscribe is the private, patient-owned record built for that gap:
|
||||||
|
the whole picture, held by the patient, ready to hand over the
|
||||||
|
moment the chart in front of you doesn't have it.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
<div className="flex flex-wrap gap-2">
|
<div className="flex flex-wrap gap-2">
|
||||||
<Badge variant="success">On-device · no cloud AI</Badge>
|
<Badge variant="success">On-device · no cloud AI</Badge>
|
||||||
<Badge variant="outline">Emergency-ready</Badge>
|
<Badge variant="outline">Emergency-ready</Badge>
|
||||||
@@ -69,28 +90,57 @@ export default function HomePage() {
|
|||||||
<h2 className="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">
|
<h2 className="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">
|
||||||
A medical record the patient owns and carries
|
A medical record the patient owns and carries
|
||||||
</h2>
|
</h2>
|
||||||
<p className="leading-relaxed text-muted-foreground">
|
<p className="text-muted-foreground leading-relaxed">
|
||||||
Current medications, allergies, baseline, visit summaries, and an
|
Current medications, allergies, baseline, visit summaries, and an
|
||||||
emergency “know-me” record — kept current through everyday
|
emergency “know-me” record, kept current through
|
||||||
use, and ready to hand to a caregiver, a new doctor, or an ER in seconds.
|
everyday use, and ready to hand to a caregiver, a new doctor, or an
|
||||||
Everything runs on the device. Nothing is uploaded.
|
ER in seconds. Everything runs on the device. Nothing is uploaded.
|
||||||
</p>
|
</p>
|
||||||
|
<div className="border-primary/30 space-y-2 border-l-2 pl-4">
|
||||||
|
<p className="text-foreground text-sm font-medium">
|
||||||
|
How the record stays current (live in beta today)
|
||||||
|
</p>
|
||||||
|
<ul className="text-muted-foreground space-y-1.5 text-sm leading-relaxed">
|
||||||
|
<li>
|
||||||
|
<span className="text-foreground">Visit summaries: </span>type
|
||||||
|
or paste notes, import MyChart and portal after-visit summaries
|
||||||
|
from a screenshot, or attach photos and documents; optional
|
||||||
|
consent-gated audio recording for patients who want it. Any path
|
||||||
|
feeds the same on-device summary.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<span className="text-foreground">Medication management: </span>
|
||||||
|
pill-bottle label recognition, reminders, and on-device Q&A
|
||||||
|
grounded in FDA drug facts
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<span className="text-foreground">Emergency handoff: </span>a
|
||||||
|
know-me card and encrypted caregiver sharing, patient-controlled
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p className="text-muted-foreground text-sm leading-relaxed">
|
||||||
|
Structured MyChart / FHIR export import is on the roadmap:
|
||||||
|
import-and-own, not write-back.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* The gap Epic can't close */}
|
{/* The gap Epic's own tools can't close */}
|
||||||
<section className="animate-fade-in-up space-y-3">
|
<section className="animate-fade-in-up space-y-3">
|
||||||
<SectionLabel>The gap Epic can't close</SectionLabel>
|
<SectionLabel>Where the picture breaks</SectionLabel>
|
||||||
<h2 className="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">
|
<h2 className="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">
|
||||||
The record that leaves the building with the patient
|
Epic knows what Epic sees
|
||||||
</h2>
|
</h2>
|
||||||
<p className="leading-relaxed text-muted-foreground">
|
<p className="text-muted-foreground leading-relaxed">
|
||||||
Epic is Northwell's system of record — the definitive account of
|
MyChart is excellent inside the Epic walls. It puts the chart on the
|
||||||
care inside the network. What no institutional EHR is built to be is the
|
patient's phone, links their Epic portals through MyChart
|
||||||
record the patient owns and carries everywhere else: the out-of-network
|
Central, and lets them share with a caregiver or a provider. What no
|
||||||
ER, a specialist on a different Epic instance, the weeks at home between
|
institutional record can be is the whole picture: the urgent care,
|
||||||
visits. That out-of-hospital stretch is a structural blind spot — the
|
the community specialist, the facility that isn't on Epic; the
|
||||||
system loses sight of the patient the moment they leave, and often only
|
changes between visits; the context a patient keeps themselves. Epic
|
||||||
learns what happened when they return, worse.
|
aggregates Epic. And when it matters most, at an out-of-network ER,
|
||||||
|
or when the patient can't generate a share code, the record
|
||||||
|
that's actually there is the one they already carry.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -100,17 +150,20 @@ export default function HomePage() {
|
|||||||
<h2 className="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">
|
<h2 className="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">
|
||||||
No one else owns the whole job
|
No one else owns the whole job
|
||||||
</h2>
|
</h2>
|
||||||
<p className="leading-relaxed text-muted-foreground">
|
<p className="text-muted-foreground leading-relaxed">
|
||||||
The market is full of single-purpose apps — visit recorders, medication
|
Existing Electronic Health Record (EHR) systems owns the
|
||||||
trackers, record vaults, emergency-ID cards, caregiver portals. Each owns
|
institutional view, and every institutional tool stops at its own
|
||||||
one slice. None keeps a private, patient-owned record that stays current
|
walls. Around them, the market is full of single-purpose apps: visit
|
||||||
through daily use, is ready to hand over in a crisis, and runs entirely on
|
notetakers, medication trackers, record vaults, emergency-ID cards.
|
||||||
the patient's own device. Medscribe is that combination — and no
|
Each owns one slice. None holds a private, patient-owned record that
|
||||||
existing product has it.
|
spans every system, Epic and non-Epic alike, stays current through
|
||||||
|
daily use, and is ready to hand over in a crisis, all on the
|
||||||
|
patient's own device. Medscribe is that combination, beside
|
||||||
|
Epic, not instead of it.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Why it fits Northwell — clear float so the card grid spans full width */}
|
{/* Why it fits Northwell: clear float so the card grid spans full width */}
|
||||||
<section className="animate-fade-in-up clear-both space-y-6">
|
<section className="animate-fade-in-up clear-both space-y-6">
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<SectionLabel>Why it fits Northwell</SectionLabel>
|
<SectionLabel>Why it fits Northwell</SectionLabel>
|
||||||
@@ -118,15 +171,15 @@ export default function HomePage() {
|
|||||||
Built to strengthen the Epic investment, not compete with it
|
Built to strengthen the Epic investment, not compete with it
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid gap-4 md:grid-cols-3">
|
<div className="grid gap-4 md:grid-cols-2">
|
||||||
{fit.map((item) => {
|
{fit.map((item) => {
|
||||||
const Icon = item.icon;
|
const Icon = item.icon;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card key={item.title} className="card-hover">
|
<Card key={item.title} className="card-hover">
|
||||||
<CardHeader>
|
<CardHeader>
|
||||||
<div className="flex size-10 items-center justify-center rounded-[10px] bg-primary-light">
|
<div className="bg-primary-light flex size-10 items-center justify-center rounded-[10px]">
|
||||||
<Icon className="size-5 text-primary" />
|
<Icon className="text-primary size-5" />
|
||||||
</div>
|
</div>
|
||||||
<CardTitle className="text-lg">{item.title}</CardTitle>
|
<CardTitle className="text-lg">{item.title}</CardTitle>
|
||||||
<CardDescription>{item.body}</CardDescription>
|
<CardDescription>{item.body}</CardDescription>
|
||||||
@@ -139,28 +192,31 @@ export default function HomePage() {
|
|||||||
|
|
||||||
{/* Who's behind it + the ask */}
|
{/* Who's behind it + the ask */}
|
||||||
<section className="animate-fade-in-up">
|
<section className="animate-fade-in-up">
|
||||||
<Card className="overflow-hidden border-primary-button/20 bg-primary-button text-white">
|
<Card className="border-primary-button/20 bg-primary-button overflow-hidden text-white">
|
||||||
<CardHeader className="gap-4">
|
<CardHeader className="gap-4">
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
<CardTitle className="text-white">Who's behind it</CardTitle>
|
<CardTitle className="text-white">
|
||||||
|
Who's behind it
|
||||||
|
</CardTitle>
|
||||||
<CardDescription className="leading-relaxed text-white/80">
|
<CardDescription className="leading-relaxed text-white/80">
|
||||||
Sean O'Connor built Medscribe after watching his own family try
|
Sean O'Connor, a Bucknell computer science and engineering
|
||||||
to hold this together for his grandfather — the record scattered
|
graduate, built Medscribe after watching his own family try to
|
||||||
exactly when it mattered most. Bucknell computer-science engineer;
|
hold this together for his grandfather, when the record
|
||||||
the app is live in beta on iOS and Android today.
|
scattered exactly at the moment it mattered most. It is live in
|
||||||
|
beta on iOS and Android today.
|
||||||
</CardDescription>
|
</CardDescription>
|
||||||
<CardDescription className="leading-relaxed text-white/80">
|
<CardDescription className="leading-relaxed text-white/80">
|
||||||
The ask is a short conversation about whether an out-of-hospital,
|
The ask is a short conversation about whether a patient-owned
|
||||||
patient-owned context layer — one that feeds Northwell's Epic
|
record that spans the systems Epic can't reach, and feeds
|
||||||
investment rather than competes with it — is worth exploring
|
that context back into Northwell's Epic, is worth
|
||||||
together.
|
exploring together.
|
||||||
</CardDescription>
|
</CardDescription>
|
||||||
</div>
|
</div>
|
||||||
<Button
|
<Button
|
||||||
asChild
|
asChild
|
||||||
size="lg"
|
size="lg"
|
||||||
variant="outline"
|
variant="outline"
|
||||||
className="w-fit border-white/30 bg-white text-primary-button hover:bg-white/90"
|
className="text-primary-button w-fit border-white/30 bg-white hover:bg-white/90"
|
||||||
>
|
>
|
||||||
<a href={BETA_INVITE_MAILTO}>Start the conversation</a>
|
<a href={BETA_INVITE_MAILTO}>Start the conversation</a>
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
export function SiteFooter() {
|
export function SiteFooter() {
|
||||||
return (
|
return (
|
||||||
<footer className="print-hidden border-t border-border-soft bg-surface/70">
|
<footer className="print-hidden border-t border-border-soft bg-surface/70">
|
||||||
<div className="mx-auto flex max-w-6xl flex-col gap-4 px-4 py-10 text-sm text-muted-foreground sm:px-6 sm:flex-row sm:items-center sm:justify-between">
|
<div className="mx-auto flex max-w-5xl flex-col gap-4 px-4 py-10 text-sm text-muted-foreground sm:px-6 sm:flex-row sm:items-center sm:justify-between">
|
||||||
<div>
|
<div>
|
||||||
<p className="font-serif text-base font-semibold text-foreground">Medscribe</p>
|
<p className="font-serif text-base font-semibold text-foreground">Medscribe</p>
|
||||||
<p className="mt-1 max-w-md leading-relaxed">
|
<p className="mt-1 max-w-md leading-relaxed">
|
||||||
Be known when care gets complicated.
|
Be known when care gets complicated.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div className="sm:text-right">
|
||||||
<p>
|
<p>
|
||||||
Built by{" "}
|
Built by{" "}
|
||||||
<a
|
<a
|
||||||
@@ -18,6 +18,9 @@ export function SiteFooter() {
|
|||||||
Sean O'Connor
|
Sean O'Connor
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
<p className="mt-1 text-xs text-muted-foreground/80">
|
||||||
|
© {new Date().getFullYear()} Hadlock Holdings LLC
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -6,15 +6,18 @@ export function SiteHeader() {
|
|||||||
return (
|
return (
|
||||||
<header className="print-hidden sticky top-3 z-50 px-3 sm:px-6">
|
<header className="print-hidden sticky top-3 z-50 px-3 sm:px-6">
|
||||||
<div className="relative mx-auto max-w-5xl">
|
<div className="relative mx-auto max-w-5xl">
|
||||||
<div className="flex h-14 items-center justify-between gap-4 rounded-full border border-border-soft/80 bg-canvas/82 px-4 shadow-[0_10px_30px_rgba(15,23,42,0.08)] backdrop-blur-md sm:px-5">
|
<div className="relative flex h-14 items-center rounded-full border border-border-soft/80 bg-canvas/82 px-4 shadow-[0_10px_30px_rgba(15,23,42,0.08)] backdrop-blur-md sm:px-5">
|
||||||
<Link
|
<Link
|
||||||
href="/"
|
href="/"
|
||||||
className="flex items-center text-foreground transition-opacity hover:opacity-80"
|
className="relative z-10 flex items-center text-foreground transition-opacity hover:opacity-80"
|
||||||
aria-label="Medscribe home"
|
aria-label="Medscribe home"
|
||||||
>
|
>
|
||||||
<MedscribeLogo className="h-7 w-[88px]" />
|
<MedscribeLogo className="h-7 w-auto" />
|
||||||
</Link>
|
</Link>
|
||||||
<span className="text-xs font-medium tracking-[0.14em] text-muted-foreground uppercase">
|
<p className="pointer-events-none absolute inset-x-0 text-center font-serif text-lg font-semibold tracking-tight text-foreground">
|
||||||
|
Medscribe
|
||||||
|
</p>
|
||||||
|
<span className="relative z-10 ml-auto hidden text-xs font-medium tracking-[0.14em] text-muted-foreground uppercase sm:inline">
|
||||||
Executive summary
|
Executive summary
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user