A mood tracking app to support your mental health and practice mindfulness
Our client, Christoph Matzka, noticed that people often see the past in just white and black colors. But there are more colors to our mood that determines how we feel about different situations and events in life. He decided to create a mood tracking app to let users evaluate their thoughts, emotions, and behavior in more detail. He asked us to build a native iOS app that would be a mobile mood journal for monitoring users’ moods and overall well-being. He provided us with the app’s design. The application would also allow people to improve and foster their mental health.
People would rather prevent diseases and monitor their health daily than get sick. There are many severe illnesses. Some of the ones that are trickiest and hardest to detect relate to mental health. According to the World Health Organization, mental disorders affect one in four people. It’s estimated that 300 million people globally are affected by depression. Mental diseases often begin with deviations in mood patterns. To manage anxiety and depression, one can keep a paper journal of moods. But this takes time, persistence, and consistency. People usually lack the motivation to write in a journal daily or reread what they’ve written to detect deviations. However, a wisely designed mental health app can help people keep track of their moods and make entries in less than five seconds. A mobile mental health application can translate the boring routine of keeping a handwritten journal into a gamified experience. What’s more, it can help people better manage their lifestyle choices, make informed health decisions, and work towards a better overall quality of life.
Developing the Moodistory app was both challenging and interesting for us. The app is written in Swift and uses a custom architecture due to design requirements. We used a mix of service-oriented architecture (SOA) and Model–View–ViewModel (MVVM) patterns in order to build the proper structure and manage data calculations. The flow is built around the mediator pattern with a flexible header container common to all screens and a dynamic center container for the main content. Both containers are synchronized for smooth bouncing and scrolling behavior.
The app needed to store large amounts of user data, such as entries, so we used Core Data as a native persistent framework. We implemented import, export, and sharing functionality with the third-party Groot library.
Data manipulations are common across the app and are featured mostly in the analytics section. In order to achieve the best performance, we applied custom build services, combining them with GCD multithreading programming, which resulted in asynchronous data manipulations and smooth UI interactions.
The most exciting part of the app is the animations. To enable beautiful and sophisticated transitions, we applied native approaches. The animated header is built with the ZCAnimatedLabel and a charming wave animation. What’s more, the app is full of custom views, buttons, controls, and switches. Due to its unique custom design, we didn’t use third-party libraries but instead built our own. This resulted in bug-free and flexible software design. For example, some custom animations are made in code, showing users a smooth smile transition from one path to another.
When users check in with the app, they’re asked how they’re feeling today. Then they need to draw a smile that rates how they’re feeling on a scale from 1 to 6, with 1 being the worst and 6 being the best.
The app offers users a fully customizable list of events so users can track how they spend their time. Instead of writing down what they do during the day, users can add details by choosing from more than 130 events in 9 categories including food, drinks, and activities (for instance, sports, work, and special occasions).
To keep mood data safe from unauthorized access, users can set up Face ID, Touch ID, or a passcode.
Users can look at their behavioral patterns at a glance. They can view their mood swings on a yearly, monthly, or daily basis, all displayed in a calendar view.
A flexible reminder system lets users set up reminders to make an entry at a time that suits them.
To make the app pleasing to look at, users can choose the colors they like in the app’s settings.
If a user is keen on the app and wants to share it with their family and friends, they can do so by tapping a heart. The App Store link can be sent to anyone through a messenger.