OmniRecord — hack.msa Med Tech Track Submission

Inspiration

Sarah is 62, a librarian with Type 2 diabetes, hypertension, and a mother just diagnosed with breast cancer. Her health data lives in seven places — patient portal, Apple Watch, 23andMe, MyFitnessPal, AllTrails, Instacart, Peloton — and none of them talk to each other. The 15-minute appointment is where this data needs to show up, and it never does. When her cardiologist asks "how's the metformin going?", she can't answer, even though the answer is sitting in her wearables. We built OmniRecord because the unified patient record shouldn't be a 2035 problem. The data already exists. What's missing is a product that stitches it together and tells the person what it means — in plain English, ranked by impact, backed by real guidelines.

What it does

OmniRecord is a unified patient health record that pulls from seven data sources and turns the firehose into a short list of clinically-grounded insights, ranked by what actually matters today.

  • Hero moment. Sarah's dashboard shows that her metformin is working by overlaying A1C, fasting glucose, resting heart rate, and HRV against the day she started it. The drug working is visible, not inferred.
  • Web powerhouse. All of Sarah's data — labs, wearables, prescriptions, genetics, family history, nutrition, activity. Deep views for medications, timeline, genetics, family, and visit prep. The dashboard surfaces the mother's diagnosis and BRCA1 conversation above the metformin success story above the sleep crash above the drug-gene interaction.
  • iOS companion. A voice-driven daily-use app reading the same database. Core metrics, notifications, voice coach.
  • Clinically grounded. Every insight cites a source — CPIC, USPSTF, RxNav.
  • Live, not static. Vital tiles tick in real time, insight bodies stream token-by-token as Gemini writes them, and onboarding imports reveal as they land.
  • Visit prep. One tap before an appointment generates a brief: what changed, what to ask, which labs to request.
  • Private by design. All inference runs server-side; the client never sees raw genetic data, only impact-ranked outputs. No third-party analytics.

How we built it

  • Stack. Next.js 16 + React 19 + TypeScript for the web; Supabase (Postgres) as the shared source of truth across web and iOS; Tailwind v4 + shadcn/ui; Recharts; Gemini 2.0 Flash for insights; Vercel.
  • Data APIs. FHIR (R4) for clinical records — labs, visit summaries, prescriptions, problem lists — via a Fasten/Epic-style adapter. Terra API for wearables, normalizing Apple Health / Fitbit / Garmin / Whoop into a single vitals stream. 23andMe raw-data import for genetic variants, cross-referenced against CPIC pharmacogenomic guidelines. MyFitnessPal for nutrition, AllTrails for activity, Instacart for meal-plan-to-cart handoff, Peloton for workouts and guided meditation. Guideline content sourced from CPIC, USPSTF, and RxNav (NIH) for drug-interaction and drug-gene pair checks.
  • Architecture. One database, two repos, one patient. Every query is scoped by user id, so real auth slots in later as a rename rather than a refactor.
  • Liveness. Three mechanisms, each tied to a demo beat. (1) Supabase Realtime pushes new wearable readings into the dashboard as they arrive. (2) Server-Sent Events stream Gemini tokens for insight bodies and visit-prep briefs. (3) Progressive-reveal animations drive the onboarding counters and chart draw-ins.
  • Intelligence. A small rule layer ranks findings by impact and tags each with a guideline source before Gemini polishes the prose. The ranking is the product. Example: Sarah's CYP2C19 *2 variant + a proposed clopidogrel prescription resolves to a CPIC-flagged alternative, ranked above her nutrition trend for that week.

Challenges we ran into

  • Clinical correctness under streaming. Gemini streams token-by-token, and a half-rendered sentence can read as a wrong recommendation. We constrain the model with pre-computed rule-layer outputs so the prose can only dress up a pre-validated claim, never invent one. No hallucinated drug names, no hallucinated citations.
  • Ranking across incommensurable signals. Scoring a BRCA1 risk update against a three-week sleep crash against a drug-gene interaction has no shared unit. We built a severity × recency × actionability scorer and tuned it against Sarah's full timeline until the ordering felt like what a thoughtful PCP would surface first.
  • Liveness without gimmick. Realtime, SSE, and reveal animations can easily read as motion for motion's sake. Tying each one to a specific narration beat was the difference between polish and noise.
  • Two repos, one database, no auth yet. Keeping the web and iOS repos in sync on schema without a migrations framework, and without accidentally writing web-only assumptions into the shared DB, took discipline.

Accomplishments that we're proud of

  • Seven data sources, one record, one ranking. FHIR clinical records + Terra wearables + genetics + three lifestyle apps resolve to a single patient timeline with a single impact ordering. No consumer tool does this today — you pick a data silo and live in it.
  • One record, two products, one patient. Sarah is the same person on web and iOS, reading from the same insights.
  • Citations change the tone. Every insight names its source. One schema field, outsized effect on credibility.
  • The metformin chart. A1C, fasting glucose, resting heart rate, and HRV overlaid against the metformin start date — you can see the drug working. It's the demo's emotional center.
  • Liveness that earns its keep. Nothing important happens on a static page load.
  • Shippable in a hackathon window. One Next.js app, one Supabase project, two demo-ready repos.

What we learned

  • Unification is a product problem, not a data problem. The APIs exist. The hard part is ranking.
  • Citations change the vocabulary. The moment every insight had a source, the app stopped sounding like a wellness app and started sounding like a medical tool.
  • Liveness is a narrative device. It tells the viewer "this is happening now, not last Tuesday."
  • Cutting is faster than adding. The "out of scope" list saved more days than any feature we shipped.
  • Visit prep landed harder than the dashboard. People don't want to browse data — they want help at the 15-minute appointment. The wedge isn't "unified record," it's "visit copilot."

What's next for OmniRecord

  • Real integrations. Swap to actual OAuth against FHIR / HealthKit / 23andMe / MyFitnessPal / AllTrails / Instacart / Peloton.
  • Real auth. Supabase Auth, magic link, RLS on every table.
  • More personas. Oncology-in-treatment, post-MI rehab, pediatric asthma, pregnancy — each stresses a different corner of the rule layer.
  • Live guideline sources. Wire the CPIC / USPSTF / RxNav APIs so insights stay current as guidelines change.
  • Full voice layer. Close the loop on the iOS voice coach — Sarah asks a question, the same ranking answers aloud.
  • Clinician view. Read-only provider-side view, same data, different vocabulary.
  • Family mode. Opt-in shared family history so one relative's diagnosis updates everyone's risk picture.
  • Pilot with a primary-care clinic or chronic-care program. Clinicians want a pre-visit brief; patients want a post-visit one. Same product, two audiences, one ranking engine. HIPAA/BAA on Supabase and SOC 2 are the compliance milestones on the path there.

Built With

Share this project:

Updates