~/austinmula
MediTrack
Mobile ApplicationLive

MediTrack

An offline-first React Native wellness tracker covering medication adherence, symptom logging, and mood check-ins. Health data never leaves the device — I cut cloud sync and about a third of the codebase to make that a real claim instead of a vague compromise.

The problem

People managing a chronic condition track three related things - doses taken, symptoms flaring, how they actually feel, usually across three different apps or none. Health data is also as sensitive as personal data gets, yet most trackers want an account before you can log a single pill.

Building too much, then cutting

The first version had six tabs, fifteen database tables, and services for fitness, vitals, appointments, water intake, meals, and a sync queue for a backend that didn't exist. It demoed well and wasn't usable, the daily loop was buried behind half-features.

I committed a snapshot, then deleted just about a third of the codebase.

Dropping cloud sync was the call I hesitated over longest and the one that clarified everything: no accounts, no auth, no conflict resolution, no server and a vague compromise became a real claim. Your health data never leaves your phone. The constraint became the feature.

Rebuilding, then a design pass

The three surviving features got depth: medication scheduling with adherence tracking, symptom logging with severity and body parts, and mood check-ins with a journal and meditation timer. Architecture stayed flat, one service per domain over typed SQLite helpers, no state library.

I rebuilt the visual layer from tokens up: light/dark palettes behind a useTheme() hook, named gradient presets, a shared component set, then every screen.

Shipping

Three EAS build profiles, then the bugs that only appear on a real device — all three the same class: error paths that reported success.

The worst: Android 12 requires a user-granted SCHEDULE_EXACT_ALARM permission. Without it, scheduling a reminder threw, my code logged to a console nobody reads, and the app looked like the reminder was set. Every modern Android user would have silently received no medication reminders, the app's single most important function. The fix made it a user-facing alert that deep-links to the right settings page.

Also fixed: a Promise.all over four independent fetches, where one failure took down all four state updates; and a clearAllData referencing deleted tables, rolling back the transaction while reporting success.