This app exists because I needed it
My wife is a kidney transplant recipient. Her daily medication schedule involves immunosuppressants that must be taken at precise times, at precise doses, and tracked against lab results — eGFR, creatinine, tacrolimus trough levels — that shift the clinical picture every few weeks. I'm managing hormone therapy myself, which adds its own set of weekly and bi-weekly schedules.
Every medication app I tried made the same assumptions: daily doses, single user, maybe a reminder. None of them handled weekly, bi-weekly, or monthly intervals without workarounds. None of them connected medication logs to lab results. And almost all of them required a cloud account — which, for sensitive health data, felt like a trust trade I wasn't willing to make.
So I built Dose Diary on weekends. The design decisions came directly from lived experience, not from user personas.
2
Real users who shaped every design decision — my wife and myself
≥85%
Adherence rate Dose Diary tracks — clinical standard for kidney patients
0
Cloud accounts required — all data stays on device
The App Store has hundreds of medication trackers. None of them are for patients managing serious illness.
Most medication apps are designed for the general population: once-daily pills, simple reminders, maybe a refill alert. They're fine for the majority of users. But kidney transplant recipients, dialysis patients, and people on complex hormone therapy protocols exist at a different level of complexity — multiple drugs with different intervals, vitals that need logging before and after dialysis sessions, lab panels that need to be compared across months, not days.
The existing solutions forced these users to either use an app that was too simple to be useful, or a clinical system that was too complex and cold to be sustainable in daily life. There was no middle ground: an app with consumer-quality UX built specifically for the clinical depth these patients needed.
Generic apps
- Daily-only scheduling — no weekly or bi-weekly intervals
- No lab result tracking or trend analysis
- No dialysis session management
- Cloud-first — health data leaves the device
- No adherence rate calculation
- One-size UX for a highly varied patient population
Dose Diary
- Flexible intervals: daily through monthly, fully configurable
- Lab tracking with 30/60/90-day trend analysis
- Dialysis session scheduling with pre/post vitals logging
- Local-only storage — SwiftData, no account required
- ≥85% adherence tracking — clinical standard for CKD
- Separate modes for medication, kidney, and HRT workflows
Three non-negotiable principles before writing a single line of code
Privacy is not a feature — it's the architecture
Health data is among the most sensitive data a person generates. I made the decision early that Dose Diary would never send data to a server. Everything uses Apple's SwiftData framework and stays on device. No account creation, no sync, no telemetry tied to health behaviour. Ad support through Google AdMob is transparent and opt-outable. This wasn't a compromise — it was the founding constraint that shaped everything else.
Design for the worst day, not the average day
Patients managing kidney disease or post-transplant recovery have hard days. The UI needs to work when someone is fatigued, stressed, or in a clinical environment. That means large touch targets, clear hierarchy, no cognitive load for the logging interaction — the most frequent action in the app. One tap to log. Confirmation visible immediately. No buried menus for the daily workflow.
Bilingual from day one, not as an afterthought
My wife reads Vietnamese more comfortably than English in medical contexts. Language switching had to be instant, complete, and available at the system level — not buried in settings. Dose Diary supports English and Vietnamese with a single toggle in the app settings, with all clinical terminology translated accurately, not just approximated.
Two modes, one system — medication management built for clinical complexity
The core medication system supports scheduling at any interval from daily to monthly. Each medication has its own timing rules, meal-time relationships, and stock tracking. Reminders are tied to meal times rather than arbitrary clock times — which matters clinically, because most immunosuppressants are taken at consistent meal-relative intervals rather than strict hours.
Flexible Scheduling
Daily, weekly, bi-weekly, monthly intervals — fully configurable per medication, not a fixed preset list
One-tap Logging
Log a dose in one tap with automatic timestamp; confirmation visible immediately on the today screen
Camera Scanning
Scan a prescription label to auto-populate medication name, dosage, and schedule — reducing setup friction
Stock & Refill Alerts
Track remaining supply; automatic notification when stock falls below a user-set threshold
Home Screen Widget
Today's medications visible on the home screen; tap to log without opening the app
Adherence Analytics
Per-medication adherence rate calculated against the ≥85% clinical standard for chronic kidney disease
The design goal for the daily logging screen was zero hesitation. If a patient wakes up, opens the app, and has to think about what to tap — the design has failed.
Kidney Mode — the feature that makes Dose Diary different
Kidney Mode is a dedicated layer built for dialysis patients, transplant recipients, and anyone managing CKD. It extends the base medication system with clinical workflows that no general medication app attempts. The design challenge was making these features feel like a natural part of the same app — not a bolt-on clinical tool that broke the experience.
Dialysis Scheduling
Three-times-weekly session scheduling with automatic reminders; tracks session start, end, and duration
Pre/Post Vitals
Blood pressure and weight logged before and after each session; automatically attached to session records
Lab Panel Tracking
eGFR, creatinine, potassium, hemoglobin, phosphorus, bicarbonate — logged per exam date and trended over time
Period Reports
Side-by-side comparison of two exam dates with color-coded trend indicators; exportable as PDF for physician sharing
Schedule Scanning
Photograph a printed dialysis schedule from a clinic and auto-populate the session calendar
Post-session Wellness
5-point emoji-based wellbeing rating logged after each session — simple enough to complete while still fatigued
The HRT Reference Library sits alongside Kidney Mode as a separate informational layer: medically-cited guidance on hormone therapies drawn from WPATH, UCSF, and Endocrine Society sources. It's not a feature for tracking — it's a place for patients to access reliable clinical information without leaving the app or opening a browser.
6
Lab markers tracked with 30/60/90-day trend analysis
Exportable kidney reports formatted for physician review
EN · VI
Full bilingual support with instant language switching
What I learned building something for people I love
Building an app where you are also the primary user changes every decision. There's no ambiguity about whether a feature is needed — you know, because you've felt the absence of it. And there's no tolerance for friction in the daily logging flow, because you experience that friction every morning.
What surprised me was how much the privacy constraint simplified the architecture. Removing cloud sync eliminated an entire class of problems: sync conflicts, latency, authentication flows, data breach liability. The SwiftData model is clean and fast. The app launches instantly. There's no onboarding because there's nothing to sign in to.
The other thing I learned: designing for edge cases first produces better general design. Every interaction pattern I designed for a fatigued dialysis patient — large targets, minimal steps, immediate confirmation — made the app better for everyone. The clinical context was a forcing function for the kind of design rigour that consumer apps often skip.