A mobile app that helps users build good habits
Tools
XCode
Team
1 Designer/ Developer
My Role
Designer and Developer
Duration
3 weeks (Fall 2022)
Project Overview
I developed a new app to leverage my expertise and push beyond my current capabilities, using Xcode and SwiftUI. The app’s success was measured by its level of innovation, refinement, and user-friendliness. The primary goal was to create an exceptional application that would benefit users and make their lives easier. To achieve this, I designed the app to address a problem I encountered in my daily life and to cater to users’ needs.
I created a habit tracking app, called “Build Good Habits!”.
Goals
- to include features beyond my current skills,
- have it function properly,
- have it made easily comprehendible to a new user, and of course,
- have it look polished.
The Challenge
: to create a habit tracking app with unique functionality, compared to existing apps
Creating more than one reminder was key on this app, and certainly, the most challenging. At first, I thought about making a “New reminder” button below the first reminder by adding a new reminder entity in the database and a reminder view model, but after several trials and errors, I decided it just wasn’t working. For one, when the toggle switch was on, the first reminder option disappeared. Also, the new reminder button did not function. Even more so, I decided that the interface was not easily comprehendible.
Features
- Habit Tracking: The app allows users to track their daily habits and monitor their progress over time. Users can set goals and track their progress towards achieving them.
- Reminders: The app has a reminder feature that reminds users to complete their habits at a set time every day(or set days). Users can customize the reminders to suit their schedules and preferences. Notifications appear as they are set.
- Customization: The app allows users to customize their habits and personalize their experience. Users can set their own habits and goals, choose their own reminders, and customize the app’s appearance to suit their preferences. Includes: label, color, frequency, and reminders.
The Solution
I wanted to have one function to call the 3 reminders as that would clean up the code and not have as much running. I’ve learned that the less code, the better. But, in this case, I thought that having the function set up to have a “add reminder button” under the existing reminder when the toggle is turned on, would be an overkill for the design. I decided that it would be a more simplified interface if I added the extra reminders directly below the existing one when the toggle is switched, to keep with a consistent design and have less steps for a user to go through to create another reminder.
I deleted the reminder entity, kept with the habit entity, and added reminder attributes to the habit entity database. Then, I created attributes for the reminder: reminderText2, reminderText3, notificationDate2, and notificationDate3. I added these attributes as variables to the habit view model. I added in the extra reminders and notification date attributes and added ‘showtimepicker’ variables. When the extra reminders were hidden, I found that I was missing the highlighted code in the image below. The opacity added to the Stack was what made the reminders disappear and reappear according to the toggle on the right side of the edit habit view.
When encountering other solutions, such as notifications not popping up on the iPhone, I learned how to debug the app, step through it, and utilize breakpoints in the code to see how the app reacts. For one debugging session, I had an “aha” moment. It was not until I ran through each step in the notification process, and read the output in the console that stated the day in which the notification was set for that I realized, I was setting the notification for the wrong day, and my testing was not working due to that simple mistake. This may have been a less impactful step in the development of the app, but it has made a huge impact on me as a developer, now knowing how to communicate with my products to understand them better.
After applying the correct attributes, values, and style, I cleaned up the code and organized the layout with the new attributes built in with some additional modifications. This successfully built the app.
Results
In the end, I built out a functioning, polished, usable app. It includes a homepage with habits and ‘add new habit’ view. The functions include: editing existing habits, repopulating the habits based on recently viewed ones, a delete button, notification reminders, and more.
I learned of the relationship between entities and attributes, and how to set up notifications. I learned how to design with the goal of user comprehension above coding efficiency. Because in the end, the users are not impressed with how an app is written, but how it best serves them. I’m proud of how much I’ve learned through this and am excited to experience more with functions for future iterations and other projects.
The recording covers the basic functions of the app and a brief overview of my development journey.