initial commit
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
import type { Metadata } from "next";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
|
||||
import { PrintButton } from "~/components/print-button";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Medscribe Executive Summary",
|
||||
description:
|
||||
"One-page executive summary for Medscribe, a private medical context app for families managing complex care.",
|
||||
};
|
||||
|
||||
const proofPoints = [
|
||||
"iOS TestFlight build",
|
||||
"Visit capture and local transcription",
|
||||
"Medication OCR, reminders, and history",
|
||||
"Search and grounded medication questions",
|
||||
"Emergency-ready profile direction",
|
||||
"Full founder ownership",
|
||||
];
|
||||
|
||||
const sections = [
|
||||
{
|
||||
label: "Problem",
|
||||
title: "Families hold the context care teams need most.",
|
||||
body:
|
||||
"In complex care, the real story often lives outside the chart: what normal looks like, which medication is time-critical, what changed after the last visit, and who can explain it under pressure. Portals store records, but families still perform the handoff from memory.",
|
||||
},
|
||||
{
|
||||
label: "Product",
|
||||
title: "A private context layer for the person, not the institution.",
|
||||
body:
|
||||
"Medscribe keeps visits, medications, baseline, allergies, contacts, reminders, summaries, and questions under the person they belong to. The goal is not another medical inbox. It is the family-held record that makes someone easier to understand when care gets complicated.",
|
||||
},
|
||||
{
|
||||
label: "Wedge",
|
||||
title: "Emergency-ready, caregiver-centered, private by architecture.",
|
||||
body:
|
||||
"The market has AI scribes, medication trackers, caregiver portals, and EHR-adjacent tools. Medscribe's wedge is the portable layer families control before an institution is ready: current context, source trails, time-critical medication visibility, and on-device AI where possible.",
|
||||
},
|
||||
];
|
||||
|
||||
const opportunities = [
|
||||
{
|
||||
title: "B2C",
|
||||
body: "A caregiver app for families managing aging parents, chronic illness, disability, or high-friction medication routines.",
|
||||
},
|
||||
{
|
||||
title: "IP / partnership",
|
||||
body: "A private family-context layer that could matter to care navigation, home health, senior care, pharmacy, or patient-engagement platforms.",
|
||||
},
|
||||
{
|
||||
title: "Impact",
|
||||
body: "Fewer blank handoffs, safer medication moments, and more confident advocates when someone cannot fully speak for themselves.",
|
||||
},
|
||||
];
|
||||
|
||||
export default function ExecutiveSummaryPage() {
|
||||
return (
|
||||
<main className="mx-auto max-w-[8.5in] px-4 py-6 sm:px-6 print:p-0">
|
||||
<div className="print-hidden mb-5 flex items-center justify-between gap-4">
|
||||
<Link
|
||||
href="/"
|
||||
className="text-sm font-medium text-muted-foreground underline-offset-4 hover:text-foreground hover:underline"
|
||||
>
|
||||
Back to site
|
||||
</Link>
|
||||
<PrintButton />
|
||||
</div>
|
||||
|
||||
<article className="summary-sheet relative overflow-hidden rounded-lg border border-border-soft bg-surface px-8 py-7 shadow-[0_12px_40px_rgba(15,23,42,0.08)] print:h-[10.5in] print:rounded-none print:border-0 print:px-[0.34in] print:py-[0.3in] print:shadow-none">
|
||||
<header className="relative z-10 grid gap-6 border-b border-teal-900/10 pb-5 lg:grid-cols-[minmax(0,1fr)_190px] print:grid-cols-[minmax(0,1fr)_1.45in] print:gap-4 print:pb-3">
|
||||
<div>
|
||||
<p className="text-[11px] font-semibold tracking-[0.2em] text-primary uppercase print:text-[8.5px]">
|
||||
Executive Summary
|
||||
</p>
|
||||
<h1 className="mt-2 font-serif text-5xl leading-none font-semibold tracking-tight text-foreground print:text-[28px]">
|
||||
Medscribe
|
||||
</h1>
|
||||
<p className="mt-2 font-serif text-2xl leading-tight font-semibold tracking-tight text-foreground print:text-[16px]">
|
||||
Be known when care gets complicated.
|
||||
</p>
|
||||
<p className="mt-4 max-w-2xl text-base leading-relaxed text-slate-700 print:mt-2 print:text-[10px] print:leading-[1.45]">
|
||||
Medscribe is a private medical context app for families managing
|
||||
complex care. It helps the people closest to a patient keep the
|
||||
living record current: medications, baseline, visits, contacts,
|
||||
allergies, emergency facts, and the source trail behind what changed.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="flex justify-center lg:justify-end print:justify-end">
|
||||
<div className="h-[360px] w-[166px] overflow-hidden rounded-[24px] border-[6px] border-slate-950 bg-white shadow-[0_18px_45px_rgba(15,23,42,0.18)] print:h-[2.9in] print:w-[1.34in] print:rounded-[18px] print:border-[4px] print:shadow-[0_10px_22px_rgba(15,23,42,0.16)]">
|
||||
<Image
|
||||
src="/screenshots/home.png"
|
||||
alt="Medscribe home screen"
|
||||
width={1206}
|
||||
height={2622}
|
||||
priority
|
||||
unoptimized
|
||||
className="h-full w-full object-cover object-top"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section className="relative z-10 grid gap-4 py-5 md:grid-cols-3 print:gap-2 print:py-3">
|
||||
{sections.map((section) => (
|
||||
<div key={section.label} className="space-y-2 print:space-y-1">
|
||||
<p className="text-[11px] font-semibold tracking-[0.16em] text-primary uppercase print:text-[8px]">
|
||||
{section.label}
|
||||
</p>
|
||||
<h2 className="font-serif text-xl leading-tight font-semibold tracking-tight text-foreground print:text-[12px]">
|
||||
{section.title}
|
||||
</h2>
|
||||
<p className="text-sm leading-relaxed text-slate-700 print:text-[8.8px] print:leading-[1.38]">
|
||||
{section.body}
|
||||
</p>
|
||||
</div>
|
||||
))}
|
||||
</section>
|
||||
|
||||
<section className="relative z-10 grid gap-4 border-t border-teal-900/10 py-5 md:grid-cols-[0.95fr_1.05fr] print:gap-3 print:py-3">
|
||||
<div>
|
||||
<p className="text-[11px] font-semibold tracking-[0.16em] text-primary uppercase print:text-[8px]">
|
||||
Current State
|
||||
</p>
|
||||
<h2 className="mt-2 font-serif text-2xl leading-tight font-semibold tracking-tight text-foreground print:mt-1 print:text-[14px]">
|
||||
Built enough to show, focused enough to sharpen.
|
||||
</h2>
|
||||
<p className="mt-2 text-sm leading-relaxed text-slate-700 print:text-[8.8px] print:leading-[1.38]">
|
||||
Medscribe is owned and built by Sean O'Connor. Bucknell
|
||||
MedTech Entrepreneurial Fellows contributed market discovery and
|
||||
pitch feedback; they are not founders, owners, or the technical
|
||||
team. The near-term product spine is an emergency-ready profile
|
||||
that can travel with the family across fragmented care settings.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-2 sm:grid-cols-2 print:grid-cols-2 print:gap-1.5">
|
||||
{proofPoints.map((point) => (
|
||||
<div
|
||||
key={point}
|
||||
className="rounded-md border border-teal-900/10 bg-white/78 px-3 py-2 text-sm font-medium text-slate-800 print:px-2 print:py-1.5 print:text-[8.4px]"
|
||||
>
|
||||
{point}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="relative z-10 grid gap-3 border-t border-teal-900/10 pt-5 md:grid-cols-3 print:gap-2 print:pt-3">
|
||||
{opportunities.map((item) => (
|
||||
<div
|
||||
key={item.title}
|
||||
className="rounded-lg bg-teal-950 px-4 py-3 text-white print:rounded-md print:px-2.5 print:py-2"
|
||||
>
|
||||
<h2 className="font-serif text-lg font-semibold tracking-tight print:text-[11px]">
|
||||
{item.title}
|
||||
</h2>
|
||||
<p className="mt-1.5 text-sm leading-relaxed text-white/78 print:text-[8.4px] print:leading-[1.32]">
|
||||
{item.body}
|
||||
</p>
|
||||
</div>
|
||||
))}
|
||||
</section>
|
||||
|
||||
<footer className="relative z-10 mt-5 flex flex-col gap-2 border-t border-teal-900/10 pt-4 text-xs text-slate-600 sm:flex-row sm:items-center sm:justify-between print:mt-3 print:pt-2 print:text-[8px]">
|
||||
<p>Sean O'Connor / Founder, full owner</p>
|
||||
<p>Private complex-care context / iOS TestFlight</p>
|
||||
</footer>
|
||||
</article>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import "~/styles/globals.css";
|
||||
|
||||
import { type Metadata } from "next";
|
||||
import { Instrument_Sans, Playfair_Display } from "next/font/google";
|
||||
|
||||
import { ScreenBackground } from "~/components/screen-background";
|
||||
import { SiteFooter } from "~/components/site-footer";
|
||||
import { SiteHeader } from "~/components/site-header";
|
||||
|
||||
const instrumentSans = Instrument_Sans({
|
||||
subsets: ["latin"],
|
||||
variable: "--font-instrument-sans",
|
||||
});
|
||||
|
||||
const playfair = Playfair_Display({
|
||||
subsets: ["latin"],
|
||||
variable: "--font-playfair",
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Medscribe — be known when care gets complicated",
|
||||
description:
|
||||
"A private, emergency-ready medical context app for families managing complex care. Keep visits, medications, baseline, allergies, and caregiver handoffs current on device.",
|
||||
icons: {
|
||||
icon: [
|
||||
{ url: "/favicon.ico", sizes: "any" },
|
||||
{ url: "/favicon.svg", type: "image/svg+xml" },
|
||||
{ url: "/favicon-32x32.png", sizes: "32x32", type: "image/png" },
|
||||
{ url: "/favicon-16x16.png", sizes: "16x16", type: "image/png" },
|
||||
],
|
||||
apple: [{ url: "/apple-touch-icon.png", sizes: "180x180", type: "image/png" }],
|
||||
},
|
||||
openGraph: {
|
||||
title: "Medscribe",
|
||||
description:
|
||||
"Be known when care gets complicated. Private medical context for families managing complex care.",
|
||||
type: "website",
|
||||
},
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{ children: React.ReactNode }>) {
|
||||
return (
|
||||
<html lang="en" className={`${instrumentSans.variable} ${playfair.variable}`}>
|
||||
<body className="min-h-screen">
|
||||
<ScreenBackground />
|
||||
<SiteHeader />
|
||||
<main>{children}</main>
|
||||
<SiteFooter />
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,348 @@
|
||||
import {
|
||||
AlertTriangle,
|
||||
ChevronRight,
|
||||
ClipboardList,
|
||||
HeartPulse,
|
||||
Lock,
|
||||
Mic,
|
||||
Pill,
|
||||
Shield,
|
||||
Users,
|
||||
} from "lucide-react";
|
||||
|
||||
import { FeatureShowcase } from "~/components/feature-showcase";
|
||||
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 {
|
||||
Card,
|
||||
CardContent,
|
||||
CardDescription,
|
||||
CardHeader,
|
||||
CardTitle,
|
||||
} from "~/components/ui/card";
|
||||
|
||||
const quickActions = [
|
||||
{
|
||||
icon: HeartPulse,
|
||||
title: "Know Me card",
|
||||
meta: "Baseline, conditions, allergies",
|
||||
featured: true,
|
||||
},
|
||||
{
|
||||
icon: Pill,
|
||||
title: "Time-critical meds",
|
||||
meta: "Schedules caregivers can trust",
|
||||
},
|
||||
{
|
||||
icon: Mic,
|
||||
title: "Visit capture",
|
||||
meta: "Consent-gated, on-device",
|
||||
},
|
||||
{
|
||||
icon: Users,
|
||||
title: "Caregiver handoff",
|
||||
meta: "One current shared truth",
|
||||
},
|
||||
];
|
||||
|
||||
const pillars = [
|
||||
{
|
||||
icon: ClipboardList,
|
||||
title: "Keep the record current",
|
||||
body: "Capture visits, scan labels, and keep conditions, medications, allergies, contacts, and caregiver notes in one portable record.",
|
||||
},
|
||||
{
|
||||
icon: AlertTriangle,
|
||||
title: "Make the critical context obvious",
|
||||
body: "The emergency view prioritizes the facts clinicians need fast: baseline, time-critical meds, active conditions, allergies, and who to call.",
|
||||
},
|
||||
{
|
||||
icon: Shield,
|
||||
title: "Stay private by architecture",
|
||||
body: "Transcription, OCR, and medication chat run locally. No cloud AI processing. Sharing should be explicit, revocable, and encrypted.",
|
||||
},
|
||||
];
|
||||
|
||||
const impact = [
|
||||
{
|
||||
title: "Fewer blank handoffs",
|
||||
body: "When a caregiver is overwhelmed, the important 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: "More confident families",
|
||||
body: "Caregivers can see what changed, where it came from, and what still needs a clinician or pharmacist instead of guessing from memory.",
|
||||
},
|
||||
];
|
||||
|
||||
export default function HomePage() {
|
||||
const today = new Date().toLocaleDateString("en-US", {
|
||||
weekday: "long",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
});
|
||||
|
||||
return (
|
||||
<div className="mx-auto max-w-6xl space-y-14 px-4 py-8 sm:px-6 sm:py-12 lg:space-y-20 lg:py-14">
|
||||
|
||||
{/* Hero */}
|
||||
<section className="grid items-center gap-8 lg:grid-cols-[minmax(0,1fr)_minmax(230px,280px)] lg:gap-14">
|
||||
<div className="space-y-6">
|
||||
<div className="animate-fade-in-up space-y-4">
|
||||
<SectionLabel>Private complex-care context</SectionLabel>
|
||||
<h1 className="font-serif text-4xl leading-[1.05] font-semibold tracking-tight text-foreground sm:text-5xl lg:text-6xl">
|
||||
Medscribe
|
||||
</h1>
|
||||
<p className="max-w-xl font-serif text-3xl leading-tight font-semibold tracking-tight text-foreground sm:text-4xl">
|
||||
Be known when care gets complicated
|
||||
</p>
|
||||
<p className="max-w-xl text-base leading-relaxed text-muted-foreground sm:text-lg">
|
||||
Medscribe is a private medical context app for families managing
|
||||
complex care. It keeps visits, medications, baseline, contacts,
|
||||
allergies, and emergency facts ready before the chart catches up.
|
||||
</p>
|
||||
<p className="text-sm text-muted-foreground">{today}</p>
|
||||
</div>
|
||||
|
||||
<div className="animate-fade-in-up-delay-1 flex flex-wrap gap-3">
|
||||
<Button asChild size="lg">
|
||||
<a href="/executive-summary">
|
||||
Read executive summary
|
||||
<ChevronRight className="size-4" />
|
||||
</a>
|
||||
</Button>
|
||||
<Button asChild variant="outline" size="lg">
|
||||
<a href="#features">See how it works</a>
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div className="animate-fade-in-up-delay-2 flex flex-wrap gap-2">
|
||||
<Badge variant="success">On TestFlight</Badge>
|
||||
<Badge variant="outline">iOS</Badge>
|
||||
<Badge variant="outline">Emergency-ready</Badge>
|
||||
<Badge variant="outline">No cloud AI</Badge>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="animate-fade-in-up-delay-3 flex justify-center lg:justify-end">
|
||||
<div className="flex w-fit items-start justify-center">
|
||||
<PhoneMockup
|
||||
src="/screenshots/home.png"
|
||||
alt="Medscribe home dashboard"
|
||||
priority
|
||||
width={190}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Strategic spine */}
|
||||
<section className="animate-fade-in-up space-y-5">
|
||||
<SectionLabel>The story</SectionLabel>
|
||||
<div className="grid gap-6 lg:grid-cols-[minmax(0,0.9fr)_minmax(0,1.1fr)] lg:items-start">
|
||||
<div className="space-y-3">
|
||||
<h2 className="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">
|
||||
Be known before the handoff breaks
|
||||
</h2>
|
||||
<p className="max-w-xl leading-relaxed text-muted-foreground">
|
||||
A daughter remembers the medication schedule. A spouse knows what
|
||||
normal looks like. A specialist mentioned a change three visits ago.
|
||||
In a crisis, those details are scattered across people, portals, and
|
||||
memory.
|
||||
</p>
|
||||
</div>
|
||||
<div className="rounded-lg border border-border-soft bg-surface p-5 shadow-[0_1px_4px_rgba(0,0,0,0.05)]">
|
||||
<div className="flex items-start gap-3">
|
||||
<HeartPulse className="mt-0.5 size-5 shrink-0 text-primary" />
|
||||
<div className="space-y-2">
|
||||
<h3 className="font-serif text-xl font-semibold tracking-tight">
|
||||
One current story
|
||||
</h3>
|
||||
<p className="text-sm leading-relaxed text-muted-foreground">
|
||||
Medscribe gives the family a private place to keep that context
|
||||
alive: current meds, timing, baseline, allergies, recent visit
|
||||
summaries, emergency contacts, and the source trail behind each
|
||||
fact.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-4">
|
||||
{quickActions.map((action) => {
|
||||
const Icon = action.icon;
|
||||
|
||||
return (
|
||||
<Card
|
||||
key={action.title}
|
||||
className={`card-hover ${action.featured ? "border-primary/20 bg-primary text-white" : ""}`}
|
||||
>
|
||||
<CardHeader className="gap-3">
|
||||
<div
|
||||
className={`flex size-10 items-center justify-center rounded-[10px] ${
|
||||
action.featured ? "bg-white/18" : "bg-primary-light"
|
||||
}`}
|
||||
>
|
||||
<Icon
|
||||
className={`size-5 ${action.featured ? "text-white" : "text-primary"}`}
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<CardTitle className={action.featured ? "text-white" : ""}>
|
||||
{action.title}
|
||||
</CardTitle>
|
||||
<CardDescription
|
||||
className={action.featured ? "text-white/72" : ""}
|
||||
>
|
||||
{action.meta}
|
||||
</CardDescription>
|
||||
</div>
|
||||
</CardHeader>
|
||||
</Card>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Interactive feature showcase */}
|
||||
<section id="features" className="animate-fade-in-up scroll-mt-24 space-y-5">
|
||||
<div className="space-y-2">
|
||||
<SectionLabel>The record</SectionLabel>
|
||||
<h2 className="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">
|
||||
The pieces that keep the story current
|
||||
</h2>
|
||||
<p className="max-w-2xl text-muted-foreground">
|
||||
Visits, medications, reminders, search, and questions all point toward
|
||||
the same outcome: a record the family can trust when the stakes rise.
|
||||
</p>
|
||||
</div>
|
||||
<FeatureShowcase />
|
||||
</section>
|
||||
|
||||
{/* Privacy */}
|
||||
<section id="privacy" className="animate-fade-in-up scroll-mt-24 space-y-6">
|
||||
<div className="space-y-3">
|
||||
<SectionLabel>Why this is different</SectionLabel>
|
||||
<h2 className="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">
|
||||
Built for the family record, not another cloud inbox
|
||||
</h2>
|
||||
<p className="max-w-2xl text-muted-foreground">
|
||||
The crowded space already has visit recorders, medication apps, and
|
||||
caregiver portals. Medscribe's wedge is the private, portable
|
||||
context layer families control before an institution is ready.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-4 md:grid-cols-3">
|
||||
{pillars.map((pillar) => {
|
||||
const Icon = pillar.icon;
|
||||
|
||||
return (
|
||||
<Card key={pillar.title} className="card-hover">
|
||||
<CardHeader>
|
||||
<div className="flex size-10 items-center justify-center rounded-[10px] bg-primary-light">
|
||||
<Icon className="size-5 text-primary" />
|
||||
</div>
|
||||
<CardTitle>{pillar.title}</CardTitle>
|
||||
<CardDescription>{pillar.body}</CardDescription>
|
||||
</CardHeader>
|
||||
</Card>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
|
||||
<Card className="border-primary/15 bg-primary-light/40">
|
||||
<CardContent className="flex items-start gap-4 pt-5">
|
||||
<Lock className="mt-0.5 size-5 shrink-0 text-primary" />
|
||||
<p className="text-sm leading-relaxed text-foreground">
|
||||
All AI models run on your device. No health data is uploaded for
|
||||
processing. The medication chatbot stays in drug-information
|
||||
territory — it defers dosing and diagnosis questions to your
|
||||
clinician or pharmacist.
|
||||
</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
</section>
|
||||
|
||||
{/* Screenshot strip */}
|
||||
<section className="animate-fade-in-up space-y-6">
|
||||
<SectionLabel>What travels with them</SectionLabel>
|
||||
<div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
|
||||
{[
|
||||
{ src: "/screenshots/emergency-record.png", label: "Emergency record" },
|
||||
{ src: "/screenshots/appointment-summary.png", label: "Visit summary" },
|
||||
{ src: "/screenshots/medications.png", label: "Medication list" },
|
||||
{ src: "/screenshots/chat.png", label: "Medication questions" },
|
||||
].map((shot) => (
|
||||
<Card key={shot.src} className="card-hover overflow-hidden">
|
||||
<div className="flex min-h-[270px] items-start justify-center bg-surface-soft p-4">
|
||||
<PhoneMockup src={shot.src} alt={shot.label} width={112} />
|
||||
</div>
|
||||
<p className="border-t border-border-soft px-4 py-3 text-center text-sm font-medium text-muted-foreground">
|
||||
{shot.label}
|
||||
</p>
|
||||
</Card>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Impact */}
|
||||
<section id="impact" className="animate-fade-in-up scroll-mt-24 space-y-6">
|
||||
<div className="space-y-3">
|
||||
<SectionLabel>Potential impact</SectionLabel>
|
||||
<h2 className="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">
|
||||
Less panic, more context, better handoffs
|
||||
</h2>
|
||||
<p className="max-w-2xl text-muted-foreground">
|
||||
The goal is simple: make the person easier to understand at the exact
|
||||
moment their care team has the least context.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-4 md:grid-cols-3">
|
||||
{impact.map((item) => (
|
||||
<Card key={item.title} className="card-hover">
|
||||
<CardHeader>
|
||||
<CardTitle>{item.title}</CardTitle>
|
||||
<CardDescription>{item.body}</CardDescription>
|
||||
</CardHeader>
|
||||
</Card>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* CTA */}
|
||||
<section className="animate-fade-in-up">
|
||||
<Card className="overflow-hidden border-primary/20 bg-primary text-white">
|
||||
<CardHeader className="gap-4 sm:flex-row sm:items-center sm:justify-between">
|
||||
<div className="space-y-2">
|
||||
<CardTitle className="text-white">Try Medscribe on iOS</CardTitle>
|
||||
<CardDescription className="text-white/75">
|
||||
The app is live on TestFlight. Reach out for an invite if
|
||||
you're managing medications, visits, or emergency context for
|
||||
someone you love.
|
||||
</CardDescription>
|
||||
</div>
|
||||
<Button
|
||||
asChild
|
||||
size="lg"
|
||||
variant="outline"
|
||||
className="border-white/30 bg-white text-primary hover:bg-white/90"
|
||||
>
|
||||
<a href="https://soconnor.dev">
|
||||
Request an invite
|
||||
</a>
|
||||
</Button>
|
||||
</CardHeader>
|
||||
</Card>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user