Setup instructions below final report.
StudyDash aims to enhance the day-to-day learning process by providing a dashboard of productivity tools that encourages the building of mastery through repeated, deliberate practice. These tools include a customizable Pomodoro timer, TODO list, habit tracker, Gantt chart, and spaced-repetition flashcard reviewer. Users are also able to create chat groups with one another to facilitate shared learning and communication.
HTML is used in the application in order to declare the structure of React components and pages, direct styling through class names, facilitate script execution through id assignment, etc. CSS and CSS frameworks are used to declare the styling for the entire application (e.g. aesthetic placement of UI elements, visual styling, coloring, etc.) JS (JavaScript) is the language used extensively throughout the project in order to declare the scripts and logic which facilitate the functionality of the entire application (e.g. asynchronous API calling, toggling the visibility of elements, database CRUD, etc.)
React is used in virtually all the application’s visual elements as most, if not all, are functional React components which make use of React paradigms such as re-rendering only certain components, as opposed to the entire page, on state change (e.g. when certain data has changed, when settings have changed, etc.) Redux is used extensively throughout the project as Redux thunks are used to asynchronously fetch data from APIs and the Redux store is used to store the general state of the application across React components. This allows, for example, for data sharing across components; avoiding simultaneous, identical API calls for the same data.
Node is used extensively throughout the project as it is the back-end, server environment used by StudyDash. Compared to something like a .NET Core server, Node is asynchronous and better suited for scalable applications which are designed to be fast, lightweight, and require two-way communication between server and client: like StudyDash! Express is used extensively throughout the project as it manages the backend API routing, requests, and responses through which nearly all CRUD in StudyDash operates.
MongoDB is used in the project as the database which stores all data that needs to persist (e.g. TODO tasks, daily habits, flashcards, etc.) Compared to SQL databases, NoSQL databases like MongoDB suit StudyDash well as the use cases for certain functionalities are frequently expanding, resulting in a similarly frequent change in data schemas. Such schema changes would be difficult to handle in SQL databases, which are typically more rigidly structured.
StudyDash uses a service/technology presented in this unit, Render, for building its front and backends and deploying them as a static site and web service respectively. This allows for our application to be used at the URL it has been deployed to (as opposed to running it locally from code): complete with communication with the application’s backend and a database. Compared to other services which offer web service and static site deployment, Render is relatively easy to use and, perhaps most importantly, free for our use case.
StudyDash has gone above and beyond in multiple categories. Of note is that the application features a particularly complex piece of technology — live user chat — that uses Socket.IO and Firebase for sending in-app and desktop notifications. Research on a complex spaced repetition algorithm was also done to expand on the user experience for flashcard review. The dates used in flashcard, habit, and TODO modules also change according to user timezone.
Expanding on the chat functionality with our second stretch goal (sharing of user assets) would definitely be on the list of next steps as it currently exists in a vacuum with little relation to the rest of the application (not to mention that users likely have other preferred methods of contacting each other, and allowing sharing of in-app assets would provide an incentive to use our chat). Our third stretch goal, gamification, would also be a good next step as well given that it would augment the learning experience by making it more enjoyable (and perhaps provide a more unique incentive to use the application compared to other productivity tool services). Aside from completing our remaining stretch goals, adding more productivity tools to the application would be prudent as the application, by virtue of its name, is designed to be a unified hub (dashboard) of many tools that aid in studying.
Annabelle completed the setup of virtually all major infrastructural aspects of the project including the initial repo (complete with a working copy of her UI proposal), Redux thunks and store, MongoDB connection, and deployment of the application’s front and back-ends through Render. In terms of functionality, she was responsible for, and implemented, user profile creation, user login authentication, the login screen, and the customizable Pomodoro timer. She also collaborated with Kush to implement user chat groups.
Kush was responsible for, and implemented, the flashcard reviewer and its subsequent usage of a spaced repetition algorithm and in-app/desktop notifications for chat group messages and invites. He also collaborated with Annabelle to implement user chat groups.
Peter was responsible for, and implemented, the TODO list and its accompanying calendar view. He also helped record the tasks that needed to be done for the coming iteration.
Alan was responsible for, and implemented, the daily habits tracker and its accompanying heatmap of habit completion. He also wrote the initial pitch/description and drew up the initial mockup for the overall application during the ideation phase.
Kenneth was responsible for, and implemented, the Gantt Chart and its integrations with the TODO list and habit functionalities. He was also responsible for writing the final report and documentation, recording meeting minutes, and directing/establishing the agenda for meetings.
Create a .env
file in ./server
with the following information:
MONGO_ATLAS_URL="<MONGO_DB-URL>"
PORT =8080
NODE_ENV ="development"
BASE_CLIENT_URL="http://localhost:3000"
BASE_SERVER_URL="http://localhost:8080"
and place the firebase.json
file, which can be found in our
Canvas group (PAKKA) files,
in ./server
as well.
The site will also require notification browser permissions for chat notifications to work (though you will be prompted to enable them in-app).
NOTE: Since StudyDash makes use of Firebase for notifications, it is not compatible with any browser other than Chrome or Edge. We are aware of this issue and have taken several measures to fix this — using Firebase's browser support check, and upgrading to Firebase's latest version to name a few. However, there are browsers that just don't support some API's used by Firebase and also some other browsers such as Safari that Firebase does not support.
The study application is for learners seeking to build mastery through deliberate practice by allowing users to set abstract goals which are associated with habits or tasks on a TODO list. The application will store user goals, habits, TODO lists, user statistics, and flashcards. Users will be able to use stored goals, habits, and TODO lists as previously discussed and user statistics to evaluate their progress and go through flashcards to review concepts. Some additional functionality to add or remove based on time constraints include allowing users to chat with each other, allowing users to form groups and share in-app resources, and adding gamification to make the learning experience more engaging.