Design a Health Dashboard That Exposes Uncertainty and Connection Errors
A lab card says “No data,” but that phrase could mean no matching record, a disconnected source, a delayed refresh, a filter mismatch, or a request failure. Collapsing those states into an empty chart makes. . .

A lab card says “No data,” but that phrase could mean no matching record, a disconnected source, a delayed refresh, a filter mismatch, or a request failure. Collapsing those states into an empty chart makes uncertainty look like certainty. The interface needs two layers: what the source reports and what the application currently knows about that report. OpenAI’s July 23, 2026 announcement says Health in ChatGPT is rolling out on web and iOS to eligible logged-in US users age 18 and older. According tothe announcement, supported connections include medical records and Apple Health, while the dashboard can cover labs, medications, activity, sleep, and other health information. OpenAI states connected data and relevant conversations are not used to train foundation models or target ads. This article treats those as attributed statements and proposes a generic UI pattern, not a reconstruction of that interface. Give each card an evidence stateDo not make color carry the entire message. A card can use thisunexecuted TypeScript model:typeSourceState=|{kind:"current";observedAt:string;sourceLabel:string}|{kind:"stale";lastSuccessAt:string;sourceLabel:string}|{kind:"disconnected";sourceLabel:string}|{kind:"partial";available:number;expected?:number}|{kind:"error";retryable:boolean;reference:string};typeMeaningState=|{kind:"reported";display:string;unit?:string}|{kind:"missing";reason:"none_found"|"filtered"|"unknown"}|{kind:"unsupported";explanation:string};typeHealthCard={title:string;source:SourceState;meaning:MeaningState};Enter fullscreen modeExit fullscreen modeSourceStateanswers whether retrieval is trustworthy enough to display. MeaningStateanswers what can honestly be said about the value. Keeping them separate prevents a successful network response from implying interpretation and prevents an error from being shown as a zero. Semantic card structureSleepLast updated July 22 at 8:10 AM from connected source. 395 minutesreported durationWhat this card can and cannot tell youThis shows received data. It does not interpret its medical meaning. RefreshEnter fullscreen modeExit fullscreen modeUse the live region only for the result of a user-triggered refresh, not every background synchronization. Keep focus on the refresh button after success. On a nonretryable connection failure, move neither focus nor the user into a dead end: expose “Review connection” beside a plain-language explanation. Content matrixStateHeading textActionAnnouncementstale“Last updated…”Refreshonly after requested refreshdisconnected“Source disconnected”Review connectionannounce transition oncepartial“Some records unavailable”Show included rangedo not announce counts repeatedlyerror“Could not update”Retry when safeinclude retry resultmissing“No matching record found”Review filtersdistinguish from zeroA skeleton loader should reserve layout but must not expose fake values to assistive technology. Disable neither navigation nor disconnect controls while one card refreshes. If several cards fail together, provide a page-level summary with links to affected headings rather than repeating identical alerts. Keyboard and assistive-technology QAThis is a proposed matrix, not executed results:TransitionKeyboard checkScreen-reader checkVisual checkcurrent to staleaction remains reachablefreshness text is associatedicon plus text changesrefresh to errorfocus stays stableone concise status messageerror is near cardconnected to disconnecteddisconnect remains reversiblesource name is announcedno value shown as currentpartial to currentdetails state persistsheading structure unchangedchart does not jumpRecord browser, OS, zoom, contrast mode, and assistive-technology versions when running it. Test at 200% zoom and with CSS disabled to confirm source, freshness, value, and action remain in a sensible reading order. BoundariesThis pattern does not establish data accuracy, clinical significance, accessibility conformance, product availability, or how any specific service models errors. It does not define whether a value is healthy and should never style a medical conclusion from an AI-generated inference. OpenAI says Health in ChatGPT is designed to support rather than replace medical care, and not for diagnosis or treatment. The interface should preserve that boundary at the value, not bury it in a footer. AI assistance disclosure: This article was drafted with AI assistance and reviewed against the cited primary source.