All work
EnKeep, 2026, private alpha

All Your Health Records in One Place

EnKeep is a personal health record for people coordinating several conditions and care teams at once. It keeps lab reports, imaging, vitals and care plans in one place, and it keeps every value the way the source reported it.

Role

Founder and product designer, end to end. Built with AI coding tools.

Timeline

August 2026 to present

Platform

Web app, desktop and mobile web

Status

Private alpha

Fig. 00Home, a lab report, and Trends with the LDL history. Sample data throughout.
01

Overview

AI does one job today: it reads an uploaded lab report into draft values. Nothing is saved until the person checks it.

02

Why I Built This

Looking up an old lab test, keeping track of appointments, and staying on top of care plans and the activities that go with them is harder than it should be. Whether I’m helping a family member or managing my own labs, appointments and longevity goals, it all feels fragmented.

I also built EnKeep to keep growing as a design engineer: working in front-end frameworks, building a backend, learning to make a bridge app that brings in Apple HealthKit data, and setting up multi-factor authentication for security.

Fig. 01Before: patient portal screenshots, a PDF, and a notes app, with personal details blurred.
03

The Problem

Health information for one person lives across portals, PDFs and paper. Existing tools fall into two camps:

  • Disease dashboards organize around one condition and hide everything else.
  • AI health assistants summarize freely, which makes it hard to tell what the lab said from what the AI said.

Sam, a fictional persona I created to stress-test the design, is managing cancer surveillance, vascular risk after a TIA, high blood pressure and prediabetes at the same time. He needs one record he can trust, and help keeping up with it.

Principles

01Keep the source. Every value shows where it came from.
02One record, many plans. A reading can serve two care plans without being copied.
03AI organizes. It never becomes a new source of health facts.
04Describe, don’t diagnose. Trends say what the records show, not what they mean.
04

Starting in Grayscale

I built the first prototype in grayscale so every review was about the product model, not colors. It was a working, clickable web app before any visual design existed.

Fig. 02The four grayscale screens: Today, Trends, Care Plans, and Health Record.

4.1One phase became many plans

The first Today screen showed a single “current phase.” Blood pressure and HbA1c sat next to colorectal cancer surveillance, as if they were related. They weren’t.

I explored three directions:

  • A. One dominant plan. Clear, but made everything else look secondary. Rejected.
  • B. A plan switcher. Focused, but hid the other plans. Kept as a pattern inside a plan.
  • C. A portfolio of plans. Every plan visible, each with its own goals, owners and schedule. Selected.
Fig. 03Three care-plan directions: one dominant plan, a plan switcher, and a portfolio of plans.

4.2Plans reference records, they don’t own them

A question during design, “Within each care plan are labs, vitals, etc.?”, showed the risk of copying the same reading into every plan. Now a plan points to records in the Health Record. One blood pressure reading supports both Vascular risk and Metabolic health, and unlinking a plan never deletes the record.

Fig. 04One blood pressure record referenced by two care plans, with the Add or link sheet.

4.3From grayscale to color

My first color pass on Care Plans was built from scratch, and it drifted from what the grayscale had already worked out. I rebuilt it from the grayscale version. From then on, the rule was: the grayscale is the structure, and the color version reskins it.

Fig. 05The same Care Plans and Health Record screens, in grayscale and in color.
05

Design Decisions

5.1AI in a loop, not a chat box

Once the record screens were complete, people were still doing the hard part themselves: finding facts, comparing them and deciding what to do. A chat box was the obvious answer, and I set it aside. A blank prompt hides what the AI looked at and what it changed.

Instead, AI works in a loop: observe → explain → propose → confirm → update. EnKeep calculates the numbers, AI explains only what those numbers support, and the person confirms any change.

The first slice compared two periods of blood pressure readings, showed every reading behind the comparison, and turned it into an editable question for a doctor. The first shipped AI job is narrower still: reading a lab report.

  • Permission is asked at the first upload. “Not now” still saves the file.
  • Each value shows the page it came from.
  • The person checks every value before anything is saved.
Fig. 06The loop, then the import flow: upload, confirm the extracted details, and the saved report.
Fig. 07The first-upload permission sheet, on desktop and phone.

5.2A report library and a watch list

My first version put lab reports inside Trends. That mixed two jobs: reading one report in full, and watching a few numbers over time. I split them.

  • Health Record is the library. Each report stays whole, the way the lab grouped it.
  • Trends is the watch list. Only the results you pin show up, plus a few pinned by your care plans, like LDL for vascular risk.
Fig. 08Health Record with the Lipid panel open, next to Trends with LDL pinned.

5.3Kept exactly as printed

Values are stored as text, exactly as the lab printed them, including entries like “<0.5” and “SEE NOTE”. The lab’s own test name is kept beside the readable one.

Color is reserved for the clinical signal. High and Low get color, and everything else stays gray. When a report printed no flag, EnKeep says “Not flagged,” not “Normal,” because the lab didn’t say normal.

Fig. 09LDL 109 mg/dL, flagged High against a reported range under 100. The range and the flag both come from the lab.

5.4Corrections leave a trail

Reading a PDF isn’t perfect, so people can fix values later. A correction never overwrites the original. It saves a new version with an optional reason, and “Corrected by you” stays gray so it never competes with a High flag.

Fig. 10A corrected value with its history open: original value, correction, reason, and date.

5.5Show the inputs or refuse

Anything EnKeep calculates shows what it was calculated from. When an input is missing, it says so instead of guessing: “Can’t calculate yet. Needs 9 lab values. You have 8. Missing: C-reactive protein.”

Fig. 11The Longevity card when an input is missing.
06

Building It

I designed in pen.dev and built with AI coding agents, with a written handoff file so each session picked up where the last one ended. Three decisions shaped the build.

  • Right-sized backend. I planned to start on Medplum, a full healthcare data platform. For a small alpha with no hospital connections, that was more cost and upkeep than it was worth. EnKeep uses a standard Postgres database instead and keeps a clean path to healthcare data standards for later.
  • A contract changed the design. Oura’s API terms don’t allow its data to be sent to an AI model. EnKeep can chart Oura data, but it’s blocked from AI on purpose, and the product says so.
  • A closed alpha is still real health data. Before inviting anyone: individual accounts, a plain-language consent note, access limited to named accounts, and delete that means gone for good.

What’s built

  • Web app in React, one design across desktop and phone widths.
  • Sign-in shared with a companion iOS app that brings in Apple HealthKit data.
  • Storage in three tables: reports, results, and earlier versions of each result. The uploaded file isn’t kept.
Fig. 12The backend tables, with example values.
Fig. 13Design to build: a pen.dev board next to the shipped screen.
07

Outcome

EnKeep is live as a private alpha. AI reading is on for my account, and my lab reports now save to the account instead of one browser.

200+

Commits in about ten weeks, designed and built solo

Next: invite the first tester, then “Explain this result,” the next AI job, kept just as narrow.

Fig. 14The launch video.