- chat-input: new "Add patient" pill (UserPlus) opens an intake dialog;
remounts it via a key each open for a fresh file # / cleared form. On
create it runs /patient <new#> so the record's cards open in the chat.
- add-patient-dialog: controlled Dialog + form — generated file # (with
regenerate), identity (name/age/sex/status/PCP), current vitals, and
repeatable allergies & medications. Save builds a Patient and adds it
to the store. Save disabled until a name is entered.
- lib/patients: generateFileNumber() (unique) + addPatient() (session
store; swap point for a real create API).
- patient-cards: graceful empty states (no labs / meds / problems /
visits / trend) so a brand-new sparse chart renders cleanly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Split the overloaded card into 7 single-topic cards (Summary, Vitals,
Labs, Medications, Problems, Allergies & alerts, Visits) so the
equal-height row is evenly filled instead of stretched-and-empty.
- Add a dependency-free inline-SVG shaded-area Sparkline; Vitals shows a
heart-rate trend and Labs a headline-lab trend, fed by new vitalsTrend/
labTrend series in the fixture.
- Lighten the chat input's two surfaces so it reads as a raised layer
above the new (lighter) page background.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Type `/patient <fileNumber>` to pull up a patient: a skeleton card set
appears, then fills in with summary, allergies & alerts, medications &
problems, and vitals/labs/visits — composed from existing Card/Badge/
Avatar/Separator/Skeleton primitives (no new design).
- lib/patients.ts: typed mock fixture + async getPatient() (swap point
for a real API later).
- components/chat/patient-cards.tsx: PatientResult (loading/ready/
not-found).
- chat-panel.tsx: discriminated-union message model, strict /patient
parse, async lookup with update-by-id, clinical heading.
- chat-input.tsx: relabel leftover coding-assistant controls to clinical
copy + clinical icons; layout/styling unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>