Artifact Overview
This project was originally created for CS360: Mobile Architecture and Programming. It is an Android-based weight tracking app that allows users to log and monitor their weight over time.
For my CS499 Capstone, I selected this as my single artifact and enhanced it across all three core Computer Science domains.
Enhancement 1: Software Design & Engineering
I restructured the entire application using the MVVM (Model-View-ViewModel) architecture pattern. The code was modularized and organized into a repository layout for better scalability and testability. I improved state management and UI responsiveness by using LiveData and RecyclerView.
Enhancement 2: Algorithms & Data Structures
I implemented trend analysis algorithms including percent change calculations and integrated MPAndroidChart to graph recent weight entries. These enhancements turned raw data into meaningful visual feedback for the user, supporting decision-making.
Enhancement 3: Databases
I transitioned the app to use Room for local persistent data storage. This included creating DAOs, using LiveData observers, ensuring proper database normalization, and handling inserts, deletes, and updates securely.
Narrative: Software Design & Engineering
This artifact is an Android application I made last term in CS360. It was designed and developed to help users track their weight over time. It features user login, weight input, a dashboard display, and other various settings allowing for SMS notifications and goal tracking. For CS499, I decided to enhance this app to align it with modern design principles and industry standards.
To meet this, I restructured the entire app to follow a Model-View-ViewModel (MVVM) architecture. I also added persistent data storage using Room, implemented a responsive UI with LiveData and RecyclerView, redesigned the login flow, and fixed threading violations. I backed the dashboard with real-time database queries.
This enhancement aligns with the course outcome: “Demonstrate an ability to use well-founded and innovative techniques, skills, and tools in computing practices for implementing computer solutions.” I accomplished this through architectural refactoring, asynchronous DB access, improved maintainability, and stronger password/database security.
A major challenge I faced was resolving threading issues when accessing the Room database. Through ViewModels and Repository patterns, I learned to decouple UI and data logic. I also tackled issues in dynamically updating UI via LiveData, and refined the login and dashboard for a better user experience. Lastly, I considered input validation to secure user input and support password design decisions.
Narrative: Algorithms & Data Structures
For this milestone, I implemented two algorithmic enhancements to my Android weight tracking app. I added a line chart visualization using MPAndroidChart to graph the seven most recent weight entries, and I calculated percent change over the last seven entries to provide users with insight into their weight trends.
These enhancements required transforming database entities into chart-friendly data structures, dynamically computing percent change, and gracefully handling cases with fewer than seven entries. I also introduced the ability to delete weights, which meant syncing database updates with both the UI and LiveData observers.
This work aligns with the outcome: “Design and evaluate computing solutions that solve a given problem using algorithmic principles and computer science practices.” I demonstrated this by designing logic that balanced performance (with ordered queries) and accuracy (with post-processing for the chart and percentage).
One challenge was getting weights to display in proper chronological order. The DAO returned entries in descending order, so I had to reverse the list and ensure the X-axis labels matched the values. I also had to account for edge cases such as 0 or missing values and ensure the chart/text refreshed properly using LiveData. This reinforced my understanding of MVVM and reactive data design.
Narrative: Databases
As part of my enhancements, I upgraded the application to use the Room persistence library. This ensured type-safe and efficient database access, aligned with best practices in Android development. I defined DAO interfaces, normalized tables, and created asynchronous queries using Kotlin coroutines and LiveData.
I implemented deletion functionality, ensured update safety with proper transactions, and integrated Room seamlessly with the rest of the MVVM structure. This enhancement brought together database design, security, and app responsiveness.
This supports the course outcome: “Develop a security mindset that anticipates adversarial exploits in software architecture and designs.” I achieved this through input sanitization, secure DAO queries, error handling, and ensuring that updates were atomic and predictable. These changes made the app’s data handling far more resilient.
From the user’s perspective, the app now feels more stable and polished. From a technical standpoint, it mirrors real-world patterns in enterprise mobile development. The experience gave me confidence in building structured, safe, and scalable data layers within mobile apps.