Joseph Gorak

Interactive Mood Analysis Website

Trackmymoodfor.me is a database driven website developed through the scrum team framework. As product owner, I was in charge of bringing the ideas of the project to life and leading the vision in collaboration with the scrum master. The goal was to create an application where users can log their moods while studying and receive feedback and analytics based on their data.

The image below shows the main design for the website. The home page a user is able to create subjects which can be utlized for their mood entries for analysis. These subjects would be based off the courses or topics they are studying. The user can then proceed to begin as study session. This is done by creating a mood entry, where they enter their current mood and energy levels, with the subject and any possible notes. After studying, they can finish the entry by inputing their final mood and energy level. After a collection of these entries, they can move to the analytics page to retrieve statistical analysis and feedback to improve their sessions.

I was directly involved in the development of the main page and analytics page, with complete implementation of the schedule. As I focused on the main table, I wanted to ensure the user can have full control over viewing their data. This table allows them to filter and sort their entries by subject, mood, and energy levels. They also have the ability to further interact with the table through editing either the subject or notes. All other data is locked in as this is time-based or mood-based data that should not be changed to produce better insights on their feelings.

Main page for trackmymoodfor.me

Database and Back-end Design

As I was involved in developing the database, it is important to focus on the design and implementation. As this is a user-based experience, most of the database revolves around the user. This is found with the user-account, which has a one to many relationship with many of the aspects of the website. A singular user can make multiple subjects, mood entries, schedule components, and earn badges. The initial concept for the project focused only on subjects and mood entries. With bi-weekly meetings with the shareholder, we were introduced new ideas and topics such as a schedule for time-based analysis in studying. Also, gamification to enhance user interactivity. This meant the design for the database had to be scalable and robust. As every aspect utilizes a user_id, this allowed the scalability and deployment of the database to be flexible.

The design for the database ensures normalization and foreign keys to promote security. Thoughtful design was put into place and testing made to ensure that the product is safe and secure to minimize bugs and breakage. The back-end design uses Object-Relational Mapper (ORM) which maps the below database design into C# for implementation in .NET and Blazor. Utilizing these libraries with .NET also enhances security as it has implementation to protect against SQL injection attacks to keep the database safe and secure. As noticed in the user_account, the passwords are encrypted with a salt and pepper hashing approach to ensure further security. The project is based on a tri-system appraoch with a front-end, back-end and shared service. The front-end sends requests to the shared service which communications with the back-end. Using the (ORM) system, these requests can communicate with the database to retrieve, add, remove, or edit data.

Diagram showing database relationship

Lessons Learned

This website was the biggest development project I have had so far in my career. The biggest takeaway I have gained was utilzing scrum and agile methodologies to produce a product. My team had daily meetings with weekly retrospectives and planning meetings. I learned a lot about arranging a team and bringing the project vision to life through assigning tasks, helping less-experienced team members, and ensuring project flow. Whenever the project was at a standstill or began to slow, we discussed ways to improve our approach to weekly sprints.

Developmental skills, I greatly improved in everything back-end. As I was involved with every aspect of the website, there was a lot that I have not experienced before. This involved the communication between the database to the backend, as well as how that was influenced by the front-end design and the tri-service communication with front-end, back-end, and shared service. As I was directly responsible to developing the database, I learned how the database directly relates to the back-end design. This was also my first project utilizing the full potential of github, so I learned a lot about handling pull requests, reviews, and having more dynamic collaboration with teammates.

This project also offered an opportunity to not only develop a full interactable database, but also work with data and produce analytics. Through brainstorming with the team, we discussed rather than overloading the user with data and graphs, we had high focus on user experience. We discussed what few graphs would be most beneficial for the user to view. These involved their mood over time per subject, hours spent per subject, and a mood-trend graph. This trend graph would take the difference before and after sessions for a user's mood or energy per subject, and calculate whether they tend to feel better or worse after studying certain topics.

Lastly, this was my first fully implemented deployed website. There was a lot to learn, but I gained many skills in website design and development. This involved html, css, and how these interact with C# through .NET. We created a mascot, Kapi the Moodybara, which is a capybara who changes color based on her mood. We discussed ways to implement her throughout the website.

Skills Learned:

  • Scrum practices and agile methodologies
  • Traditional back-end design and functionality
  • Database normalization, functions, and design
Back