RonanRx · Design Lead Recommendation · For founder approval

The patient dashboard is the chart, not the inbox.

One recommended landing that doubles as the secure PHI workspace and the surface worth opening — because until the messaging waiver is signed, the app is the only safe place a patient’s clinical detail can live.

Concept
The Standing Order
Surface
/patient/dashboard (post-OTP)
Spine
Concierge command center
Stack
Rails 8 · ERB · Tailwind · minimal Hotwire
Date
2026-06-25
01

Thesis: why opening the app beats waiting for a text

A text announces, then goes quiet. It cannot answer a question on demand, and right now it cannot legally hold the answer at all.

Three things only the web can give the patient. First, on-demand status: which stage their compounded prep is at, when it ships, when the next refill is due — the one recurring question a push notification can announce but never let you check anytime or act on. Second, synthesis: an outcome trend, a lab read in plain language, a completeness picture — things the patient cannot reconstruct in their head. Third, and decisively, the safe channel: until the patient signs the text-PHI messaging waiver (Consent kind text_messaging), clinical detail — allergies, current medications, weight — cannot travel by text. So the app is the single safe place to give that information and keep it current.

That regulatory wall is the wedge, not an apology. We make it the reason to log in, framed as patient-as-admin: you are the keeper of your own chart, and this is your command center. The required CRUD — allergies, meds, biometrics — stops being admin you owe the pharmacy and becomes visible progress you own.

The single feeling: relief and quiet authority. The patient lands and instantly knows three things — what is happening with their care, the one thing to do next, and that their record is complete and safe where it belongs. No chasing the care team. No wondering if a text got through.

02

The recommended landing

Spine: The Standing Order — a concierge command center. Summary before detail, one clear next action, calm and certain. Below is the surface as it actually renders, top to bottom, in the steady state.

ronanrx.com/patient/dashboard

Your Standing Order — Metabolic program

Confirm your allergy list before your next refill ships.

Review allergies
In review Being prepared Quality released Shipped Delivered
Lot traced Pharmacist released Refill by Jul 2 · 11 days of supply remaining

Your Health Record — the secure place for clinical detail

Allergies confirmed Current medications Add a recent weight

Your pharmacist checks every prep against your allergies. Edits are saved as a new version — nothing is overwritten.

Your check-ins — last six weeks

Energy is up across your last 4 entries.

A check-in opens this week. 20 seconds — reflect and tell your care team.

Messaging

Text updates off This is the secure place for your clinical details. Sign the messaging waiver to also get updates by text.
Sign the waiver

Rendered in Georgia/system sans for portability; production uses Fraunces + Inter per DESIGN.md. Status colors and chip rules are the project palette verbatim.

Modules, top to bottom

Each module names its real data source or marks it aspirational. Real ships on existing entities; Partial needs a presentation layer; New is a net-new patient-managed PHI surface.

A

One Thing First — the next-action hero

One full-width card resolving the whole account into a single prioritized action plus a glanceable program status line and a five-step fulfillment stepper. No score, no efficacy claim — logistics and participation only. The open is always rewarded with certainty.

Real Resolver over: PatientProgramEnrollment · RefillTask · OutcomeCheckIn · Shipment · profile gaps. Deterministic priority sort — no new model.

B

Your Health Record — the PHI workspace, reframed

A completeness ring expanding to guided, one-at-a-time section cards: Allergies, Current medications you take, Biometrics. Each carries a “why this matters” line and an instant non-judgmental confirmation on save (“Recorded — this goes to your care team”). Edits mint a new current version, never a raw mutable table. This is the dual-role linchpin: the ring is the engagement metric and the capture mechanic.

New Today: PatientGraph stores allergies/medications/vitals as versioned JSONB; net-new: patient-editable Allergy, self-reported Medication, longitudinal Biometric surfaces. ExtractedClinicalField pre-fills draft cards the patient confirms.

C

Your check-ins — today’s reflection + trend

When a cadence window is open, a fast 1–5 self-report with an optional note, then a gentle, skippable trend afterward and explicit forgiveness for missed days. Logging earns insight: the entry resolves into a line the patient wants to revisit. The recurring reason to return between refills.

Real Source: OutcomeCheckIn (score 1–5; cadence weekly/biweekly/monthly; status scheduled/sent/responded/missed) driven by the existing daily OutcomeCheckInJob.

D

Your prep & refills

Per program: current compounded prep, a re-readable “about your preparation” overview (how to take and store, freshness window, ingredient-batch provenance), days remaining, next refill date, and one primary action — Confirm / Adjust date / Pause. The “a text can’t hold this” artifact.

Real Source: Prescription · RefillTask · FormulaVersion. Trust chips gate on the computed QualityRelease.checklist_results["lot_traceable"] — never on released? alone. Days-of-supply is new.

E

Results, in plain language

Lab results surfaced with color-state and a “what this means for your program” note — not a raw PDF — placed prominently because viewing results is the single biggest portal login driver. The note is drafted by clinical agents and falls back to “review with your care team” when the LLM is unavailable.

Partial Source: LabOrder · LabResult (normal/abnormal). Optimal-range + retest-trend layer and the agent note are net-new; agents already fall back safely.

F

Messaging status & waiver unlock

A quiet card stating the current safe channel. Unsigned: “the secure place for your clinical details” with a single low-pressure offer to sign. Signed: “text updates on” with a three-year secure-record note. The waiver is a capability the patient grants — never a coercive gate, and the app is fully usable without it.

Real Source: Consent (kind text_messaging; status pending/signed/revoked; seal_state). Sign routes to the existing AuthorizationsController /a/* flow.

G

Your program timeline

A read-only arc of the real care relationship — prescription approved, prep compounded (honest “Lot traced” chip), shipped, delivered, check-in completed, refill due. Slow-burn proof of forward motion that raises switching cost without gamifying medication.

Real Source: Event activity feed + the fulfillment chain + OutcomeCheckIn.

03

Two states, one screen

The landing reads Consent(kind: text_messaging) and adapts. The unsigned state is the default safe path — never a degraded one.

Waiver unsigned

Text updates off

Instructive and protective. The app is the safe channel; data capture leads.

  • Health Record completeness ring sits high; profile gaps are the most common “one thing first”.
  • Copy reinforces: clinical detail can’t be texted yet — keep it current here.
  • One calm, low-pressure offer to sign the waiver to “also get updates by text.”
  • Any push/SMS nudge is content-free (“You have an update in the app”) — never clinical specifics.

Waiver signed

Text updates on

Reward and insight. Routine updates can flow over text, so the app becomes the deep-dive surface.

  • Hero leans into trend, next refill, and program status; the ring relaxes to a quiet “keep this current.”
  • Outcome trend and the “what’s working” read get more room.
  • Messaging card shows the three-year secure-record note instead of an unlock offer.
  • Profile nudges soften to maintenance, surfaced just-in-time (“confirm your weight before your refill”).
04

The next-action model

One deterministic resolver picks the single most prominent CTA by patient state. It is the hero, and it is what makes the open always pay off.

Patient stateThe one CTADriven by
New / profile incomplete “Add your allergies so your team has the full picture” PatientGraph section presence
Awaiting doctor approval “Your prescriber is reviewing — we’ll let you know” (reassure, no action) PharmacyOrder / DoctorApproval
In compounding “Being prepared — confirm your allergy list before it ships” CompoundingTask + profile gap
Shipped “Arriving Thursday — track it”, then “confirm you received the correct prep” Shipment (dispatched / in_transit)
Check-in due “Your check-in is open — 20 seconds” OutcomeCheckIn (scheduled / sent)
Steady-state refill “11 days of supply remain — confirm your refill” RefillTask (due_date)
All caught up “Everything’s on track” — surface the trend + timeline instead no open task → insight mode

Priority order, highest first: blocking profile gap → shipment exception → check-in due → refill due → shipment in motion → awaiting approval → steady. Ties break by recency. The resolver is pure Ruby over existing statuses.

05

Delight & motion

Tasteful and restrained, within the stack: no chart library, no JS animation library. Motion is CSS transitions, Hotwire frame swaps, and inline SVG.

Endowed progressThe ring never starts at zero — name, program, and enrolled date pre-fill as complete, so the profile reads half-finished and worth finishing.
Instant, non-judgmental saveEvery PHI entry returns a calm one-line payoff (“Recorded — this is what your care team reviews”) and the ring ticks up with a CSS transition. No confetti, no badge.
The trend draws inThe check-in sparkline eases its path on load (an SVG stroke-dashoffset animation, reduced-motion respected) with an emphasized endpoint — the reward surface, not decoration.
Honest trust chips“Lot traced” and “Pharmacist released” appear only when the release-gate computation is true. The reassurance is never a false attestation.
Forgiving streaksA missed check-in degrades to a soft, recoverable gap with “pick back up today” — never a red broken-streak alarm for a population that may genuinely be unwell.
Two tempos, one component setGender-adaptive theming and the unsigned/signed split shift surface tone only — same components, palette and tempo change. Subtle, not a different app.
06

Real vs. aspirational

For a truthful static mock: what wires to a shipped entity today, what needs a presentation layer, and which CRUD surfaces are net-new.

ModuleStatusBacking entityThe gap
One Thing First resolverRealexisting statusesnew view logic only, no model
Fulfillment stepper + trust chipsRealQualityRelease, Shipmentchip must gate on computed lot_traceable
Prep & refills cardRealPrescription, RefillTask, FormulaVersiondays-of-supply estimate is new
Check-in card + trendRealOutcomeCheckIn / OutcomeCheckInJobSVG trend is net-new UI over real data
Waiver-state landing switchRealConsent + AuthorizationsController /a/*adaptive copy is new; /a/* flow currently held for review
Program timelineRealEvent feedarc rendering is new UI
Labs readerPartialLabOrder, LabResultoptimal-range/trend + agent “what this means” note net-new
Allergies (editable)Newonly PatientGraph.allergies JSONB todayfirst-class patient-managed surface; AR-encrypted, audited, versioned
Current medications (self-reported)Newonly PatientGraph.medications JSONBdistinct from pharmacy Prescription; patient-confirmed only
Biometric time seriesNewPatientGraph.vitals is a signup snapshottimestamped, longitudinal, patient-entered; the natural first chart
Delivery-confirmation tapNewShipmentno patient-confirmation field today
07

Concept comparison

Five lenses were explored. The Standing Order wins because it carries the dual role best while staying calm and on-brand — but it borrows the strongest single mechanic from each.

ConceptRewardFeasibilityOn-brandBorrow
The Standing Order
concierge command center
The spine: status-since-last-visit hero + one next action.
The Daily Pulse
streak + trajectory
The forgiving consistency view — never streak-guilt.
Your Care Picture
outcomes verdict
Plain-language “what this means” on labs — no health score.
Your Health Picture
completeness-first
The completeness ring + “why we ask” microcopy.
Bench
telehealth program home
The re-readable “about your preparation” overview + delivery-confirm tap.
Why this one. The Daily Pulse and Care Picture both lean on a single hero number that drifts toward an efficacy or wellness “score” — a claim risk for a 503A service and an amber on-brand mark. The Standing Order keeps the verdict literal (plan status, next action, logistics), which is exactly the FDA-aligned, service-not-drug register the project locks in. It is also the most buildable: the spine, stepper, refill/shipment, check-in, and waiver switch are all real today.
08

Build path

Static HTML mock first — one file, the project palette and type, every chip honest — then wire modules to entities in three phases.

Phase 1 · ships now

The spine, on real data

One Thing First resolver, fulfillment stepper with honest trust chips, prep & refills card, check-in card + SVG trend, program timeline, and the waiver-state switch. All back onto shipped entities (RefillTask, Shipment, QualityRelease, OutcomeCheckIn, Consent). No new models. CSS/SVG ring and sparkline; no new dependencies.

Phase 2 · presentation layer

Labs reader + insight notes

Render LabOrder/LabResult with color-state, optimal-range, and retest trend; add the agent-drafted “what this means for your program” note (clinical agents stay in unavailable-safe fallback). Days-of-supply estimate. Delivery-confirmation tap on Shipment.

Phase 3 · net-new PHI surfaces

Patient-managed Allergies, Medications, Biometrics

The real lift and the dual-role linchpin. Route edits through a workflow service that mints a new current PatientGraph version (draft → current → superseded) — auditable, non-destructive. New PHI columns AR-encrypted like Patient, lookup-hash only where searchable, Event + PhiAccessLog on write, idempotent writes. Pre-fill draft cards from ExtractedClinicalField, patient-confirmed only — AI proposes, never asserts. Then the biometric trend chart and optional passive weight sync.

Guardrails throughout. Service-not-drug copy register, no efficacy claims, no composite health score, no software jargon. No PHI nudged over text in the unsigned state — pre-waiver push is content-free. Trust chips gate on computed lot_traceable. No raw mutable PHI tables; every edit is versioned and audited.