An Android medication reminder prototype designed to help people stay on schedule with treatments and give family members visibility into dose intake.
Snapshot
Field
Details
Type
Mobile app prototype
Context
University project
Role
Developer on a student team
Year
2019
Status
Academic prototype
Main focus
Medication reminders, dose tracking, alarms, and family notifications
Overview
Pillbox (Sistema de Gestión de Suministro de Medicamentos) is an academic Android prototype built at Universidad Juárez Autónoma de Tabasco. The project explored how a mobile app could help people remember when to take prescribed medication, track remaining doses, and notify family contacts when a dose is due or completed.
The work followed a prototype-driven software lifecycle over roughly three months, from analysis and UML modeling through interface design, implementation, and usability testing. The original vision included a multiplatform app, but the delivered version focused on native Android with Firebase as the backend. I keep it in my portfolio because it shows an early, hands-on combination of product thinking, mobile UX, and real device integrations like alarms and cloud sync.
The problem
Managing medication schedules is harder than it sounds, especially when multiple medicines run on different timetables throughout the day.
People forget dose times when routines are busy or stressful.
Older adults are more likely to miss ingestion windows without reliable reminders.
Family members and caregivers often lack a simple way to know whether treatment is being followed.
Running out of medication mid-treatment creates another layer of risk that is easy to overlook.
Who it was for
Patients taking one or more prescribed medications on a schedule
Older adults who need clearer reminders for ingestion times
Family members who want to support or monitor a relative's treatment
Caregivers and nurses managing medication timing for multiple people
My role
I worked on Pillbox as part of a five-person student team under faculty supervision. We shared analysis, modeling, UI design, and Android implementation. My contribution centered on building and wiring core app behavior: Firebase-backed data for users, medications, reminders, and family contacts, plus the Android alarm flow that launches dose confirmation at the scheduled time. The app shipped under the package com.giusniyyel.pillboxapp, which reflects my ownership of a major slice of the implementation and documentation.
What the project does
Pillbox gives users a structured way to register medicines, schedule reminders, and confirm intake when an alarm fires. Remaining dose counts stay visible on the home list, and family contacts can be notified around medication events.
Sign in with a phone-based entry flow and Google authentication through Firebase
Register medications with name and quantity on hand
Create reminders tied to a medicine, time, and dose amount
Trigger system alarms that open a confirmation screen at the scheduled time
Swipe to delete reminders while canceling the matching AlarmManager entry
Store and load user, pill, reminder, and family data from Firebase Realtime Database
Notify registered family contacts around medication intake
Key features
Medication inventory
Users add medicines with a name and pill count so the app can show how many doses remain. The main list surfaces time until the next intake and remaining quantity per entry.
Scheduled reminders and alarms
Each reminder links a stored medicine to a chosen time and dose. Android's alarm APIs fire at the configured hour and route the user into a dedicated alarm activity.
I used a broadcast receiver so reminders could wake the UI even when the app was not in the foreground, which matched how real medication alerts need to behave on a phone.
Family contact notifications
Users register family members with name, age, and phone number. The app can alert those contacts around medication events so someone else can help enforce the schedule when the patient does not have or cannot use a device reliably.
Firebase-backed sync
User pills, reminders, and family records live under per-user paths in Firebase Realtime Database, with Google Sign-In for authentication.
I chose push keys so new medicines could be added without manual ID management, which kept the client simple during a short academic timeline.
Swipe-to-delete with alarm cleanup
Deleting a reminder cancels its pending intent and removes the Firebase record, so orphaned alarms do not keep firing after the user clears a schedule.
Technical approach
The app is a native Android project written in Java with Android Studio. Firebase Authentication handles Google sign-in, and Firebase Realtime Database stores structured data for users, pills, reminders, and family members. The data model was planned with an entity-relationship diagram covering four core entities (user, medication, reminder, family contact) and junction tables for user-family and user-reminder relationships.
Navigation was mapped early with hierarchy diagrams for medicines, reminders, and family flows. UML use cases covered viewing reminders, adding medicines, registering family, and confirming intake after a notification. Lists use custom adapters to bind Firebase downloads into list views showing medicine name, time, and remaining doses.
Reminder deletion coordinates Android AlarmManager, PendingIntent, and Firebase removal in one gesture:
java
@Override
public void onSwiped(@NonNull final RecyclerView.ViewHolder viewHolder, int direction) {
final int position = viewHolder.getAdapterPosition();
final ReminderClass object = adapter.getItem(position);
String reminderid = object.getId();
AlarmManager mAlarmManager = (AlarmManager)
getActivity().getSystemService(Context.ALARM_SERVICE);
Intent alarmf = new Intent(getContext(), PillReceiver.class);
PendingIntent mPendingIntent = PendingIntent.getBroadcast(getContext(),
Integer.parseInt(object.getAlarmid()),
alarmf, PendingIntent.FLAG_UPDATE_CURRENT);
mAlarmManager.cancel(mPendingIntent);
firebaseDatabase = FirebaseDatabase.getInstance();
data = firebaseDatabase.getReference("users").child(user).child("reminders");
data.child(reminderid).removeValue();
}
I treated alarm IDs and database IDs as a pair so local scheduling state stayed aligned with cloud records.
Quality was discussed against ISO/IEC 25000 themes (functionality, efficiency, portability, usability). Usability was validated with a 30-person survey on colors, field clarity, navigation, alarm presentation, and family-notification usefulness. Most respondents found the flows understandable and the alarm pattern acceptable for a first prototype.
Design decisions
The interface was designed in stages: logical flow diagrams, graphic mockups, and functional navigation maps before coding screens.
Phone number entry on first launch to anchor the user session before showing main features
A home screen listing upcoming medicines with time remaining and dose counts for quick scanning
Separate areas for medicines, reminders, and family management instead of one overloaded form
Swipe gestures on lists for delete actions, matching common Android patterns at the time
An alarm confirmation screen that shows medicine name and quantity before logging intake and notifying family
Challenges and tradeoffs
The general objective called for a multiplatform app, but the team delivered Android first to meet the semester deadline and access native alarm APIs reliably.
Coordinating AlarmManager, pending intents, and Firebase deletes required careful ID handling to avoid duplicate or ghost alarms.
Family notification flows added complexity to an already full feature set for a three-month student schedule.
Realtime Database structure was modeled relationally on paper, but implementation favored Firebase nesting paths that were faster to ship than a fully normalized SQL backend.
Usability feedback was positive overall, but survey charts also showed room to improve color choices and field clarity for some participants.
What I learned
Building Pillbox taught me how medication adherence apps combine quiet UX decisions with strict systems behavior. A missed alarm cancel or a stale Firebase record is not a cosmetic bug; it directly affects whether someone trusts the reminder.
I learned to pair Android system services with cloud persistence instead of treating alarms as UI-only state.
Documenting navigation, ER diagrams, and use cases upfront made implementation arguments shorter during team development.
Early usability testing with real respondents surfaced practical issues that code review alone would not catch.
Scoping a health app as an honest prototype helped me separate demo value from production-grade compliance and privacy work.
Current status
This project is no longer maintained and should be understood as an academic prototype from 2019. It was built for coursework at Universidad Juárez Autónoma de Tabasco, not as a published production health product. I keep it in my portfolio because it captures an early stage of my growth in Android development, Firebase integration, and user-centered design for sensitive everyday problems.
If I revisited this today
Replace the semester-scale Firebase tree with a clearer domain model and stronger security rules reviewed for health-adjacent data.
Add automated tests around alarm scheduling, cancellation, and reminder CRUD to prevent regressions in the core flow.
Ship accessibility improvements: larger type, high-contrast themes, and screen-reader labels validated with real users.
Re-evaluate family notifications with explicit consent, audit logging, and minimal data sharing.
Consider Kotlin, Jetpack Compose, and WorkManager or exact-alarm APIs aligned with current Android policy.
Pursue the original multiplatform goal only after the reminder engine and compliance posture are solid on one platform.