If you've ever helped a family member manage their medications, you know how surprisingly tricky it is. Multiple pills at different times of day, and the nagging question: "Did I already take that one?" becomes a daily source of anxiety.
After trying several apps from the App Store and finding them either too complicated or missing exactly what I needed, I decided to build my own using Rork. What I ended up with turned out far more useful than I expected — and the whole process took a single afternoon.
Here's what we'll build:
- Medication registration (name, timing, dosage)
- Daily check-ins with a visual indicator (taken / not yet)
- Reminder notifications at custom times (morning, noon, evening)
- A history log with calendar view
This works on both iOS and Android, with zero lines of code written by hand.
Starting with the Medication List Screen
Open Rork and create a new project — the name doesn't matter, so "Medication Tracker" works fine. The key to getting a solid first result is writing a specific prompt rather than a vague one.
Here's the opening prompt I used:
Build a medication management app.
Screens:
- Home screen: today's medications listed with a checkbox for each (taken / not yet)
- Add medication screen: form to enter medication name, timing (morning/noon/evening/bedtime), and dosage
- History screen: past medication records displayed as a calendar or list
Design: clean and readable, with larger text for accessibility
Data storage: local storage using AsyncStorage
Don't aim for perfection on the first pass. Get something running, then iterate from there.
Fixing the Check-off Behavior
When testing in the Rork Companion app, I noticed that checking off a medication made it disappear from the list. That's not ideal — you want to see which ones you've taken today, especially if you're tracking multiple pills at once. Disappearing items make it hard to verify you haven't missed anything.
Here's the follow-up prompt to fix this:
Update the home screen behavior:
Current: checked medications disappear from the list
New behavior: checked medications remain visible with a strikethrough and lighter gray color
Add: a "Reset today's check-ins" button so users can clear all checks manually
Auto-reset: when the app is opened on a new day, all checkboxes should reset automatically
The "auto-reset on new day" logic involves storing the last open date in AsyncStorage and comparing it on launch. The code Rork generates typically looks like this:
// On app launch, compare today's date with the stored last-open date
const checkDateReset = async () => {
const lastDate = await AsyncStorage.getItem('lastOpenDate');
const today = new Date().toDateString();
if (lastDate \!== today) {
// New day detected — reset all check states
await AsyncStorage.setItem('medicationChecks', JSON.stringify({}));
await AsyncStorage.setItem('lastOpenDate', today);
}
};This small piece of logic makes a big difference in daily usability. For a deeper look at how Rork handles local data storage, check out Rork Local Storage Guide — AsyncStorage, MMKV, and SQLite Compared.
Adding Reminder Notifications
This was the part that impressed me most. Using Expo's local notification system, you can schedule daily reminders at exact times — all without any external service or backend.
Add medication reminder notifications.
Requirements:
- Each medication can have its own notification time (e.g., 8:00 AM, 12:00 PM, 9:00 PM)
- Notifications repeat daily at the specified time
- Tapping a notification opens the app
- Notifications can be toggled on/off per medication
Use: expo-notifications
One thing to verify: on iOS, local notifications require explicit user permission. Rork usually includes this, but it's worth confirming the permission request runs on first launch:
// Request notification permissions on first launch
const requestPermissions = async () => {
const { status } = await Notifications.requestPermissionsAsync();
if (status \!== 'granted') {
Alert.alert(
'Notifications Disabled',
'To receive medication reminders, please enable notifications in your device settings.'
);
return false;
}
return true;
};Important: local notifications don't work in the iOS simulator. You'll need to test on a physical device. For device testing setup, see the Rork Companion App Testing Guide.
For an in-depth look at local notifications with Expo, the Complete Guide to Expo Local Notifications covers scheduling, channels, and edge cases.
Building a Calendar-Style History View
I started with a simple list for the history screen, but quickly realized it wasn't giving me the at-a-glance view I actually wanted. A calendar that shows adherence at a monthly level is much more motivating.
Change the history screen to a calendar view.
Requirements:
- Monthly calendar display
- Day fully completed (all medications taken): green indicator
- Day partially completed: yellow indicator
- Day with no medications taken: red indicator
- Days with no record: no indicator
- Tapping a day shows a detail view: which medications were taken and when
Rork typically uses react-native-calendars for this, which integrates cleanly with Expo projects and requires no additional native setup.
There's a subtle psychological benefit here: seeing a streak of green days makes you not want to break it. It's the same principle behind habit tracking apps, but applied to medication adherence. For more on this design pattern, the Habit Tracker App Tutorial explores how to build motivation directly into the UI.
Handling Many Medications with Tabs
Once my parent had six or seven different medications in the list, the home screen started feeling overwhelming. Adding timing-based tabs solved this quickly.
Add tabs to the home screen.
Tabs: "All", "Morning", "Noon", "Evening", "Bedtime"
Each tab shows only medications for that timing
Auto-select the tab closest to the current time when the app opens
The "auto-select by current time" detail is what makes this genuinely useful rather than just decorative. If it's 8:30 AM, the Morning tab opens automatically — no need to think about which tab to check.
Testing Checklist Before Sharing with Family
Before handing this off to anyone else, go through these checks on a real device:
Core functionality
- Can you add a medication and see it appear in the list?
- Does the strikethrough appear correctly when checking a medication?
- Does data persist after closing and reopening the app?
- Does the check-in reset when you change the date? (Test by temporarily changing your device date)
Notifications
- Do notifications arrive at the scheduled time? (Real device only)
- Does tapping the notification open the app?
- Does disabling a notification actually stop it from arriving?
Data integrity
- When you delete a medication, are its scheduled notifications also cancelled?
- If you reinstall the app, does the data survive? (AsyncStorage typically persists through reinstalls)
For a production version that syncs across multiple family members' devices, you'd want to connect to a backend like Supabase. But if privacy is a concern — and it should be with health data — keep data local until you've thought through the privacy implications carefully.
Unexpected Requests from Real Users
After sharing the app with my parent, the most popular feedback was about medication photos. Pill names alone aren't always enough to tell medications apart — especially for someone who didn't choose the medications themselves. Adding photo support took one prompt:
Add a photo field to the medication registration screen.
Users should be able to pick from their camera roll or take a new photo.
Show a small thumbnail next to each medication name in the list.
This is where building your own app has a real advantage over using off-the-shelf solutions. You can add exactly what your specific users need, not what some product team decided was good enough for the average person.
Where to Go from Here
The version we've built is a solid personal tool. Where it goes next depends on what you want to do with it.
If you're thinking about putting it on the App Store, medication tracking is a category with stable, ongoing demand — particularly among caregivers for elderly parents. It's a meaningful problem space, and a well-designed app stands out.
If sharing between family members is the priority, connecting to Supabase for real-time sync would let a caregiver check remotely whether a medication was taken — no more check-in phone calls.
The most useful next step right now: use it yourself for a week. Even if it's just for vitamins or supplements. Living with the app will generate a list of small improvements that no amount of planning would have surfaced. That's the feedback loop that turns a first prototype into something genuinely good.