This is an SOA app and needs both this repo (front end) AND (back end) in order to be fully functioning.
This project is built to satisfy the requirements of the Turing School of Software and Design's Consultancy Project. Students come up with their own idea for an application and build it as a group project.
OnTrack is a web application to help users improve productivity as well as mental health.
The application is designed for users who have executive dysfunction or related disorders which often have symptoms such as:
- Easily overwhelmed
- Forgetfulness
- Difficulty making decisions
Such symptoms also often lead to low self esteem and depression, due to difficulty maintaining relationships and a healthy lifestyle.
Registered users have the ability to input items on their to-do list. In addition to standard chores, users can put in restful "tasks" and tasks related to personal hobbies.
Users are prompted to complete one task at a time. This helps avoid decision paralysis by letting the app tell the user what to do next, and reduces overwhelming feelings caused by seeing a long list.
Possible edge case users:
- People applying to jobs who want a streamlined way to keep track
- Used as a project planner for work / way for people to timeblock their workday
See feature documentation for more info(Work in Progress)
- Rails 7.0.6
- Ruby 3.2.2
To get a local copy, follow these simple instructions
- Fork the Project
- Clone the repo
git clone [email protected]:ontrack-2305/ontrack_fe.git
- Install the gems
bundle install
- Create the database
rails db:{create,migrate}
- RAILS CREDENTIALS STEPS
Run this command to open your credentials file:
EDITOR="code --wait" bin/rails credentials:edit
Add your API key to the credentials file, formatted something like this:
GOOGLE_CLIENT_ID: hg39874yt1vfh394uhi
GOOGLE_CLIENT_SECRET: 934786012394687
You can then call on this API key anytime like this!:
Rails.application.credentials[:GOOGLE_CLIENT_ID]
Rails.application.credentials[:GOOGLE_CLIENT_SECRET]
- For more details, read the Google docs: https://developers.google.com/accounts/docs/OAuth2
- Put your Client ID after `GOOGLE_CLIENT_ID:`
- PUT you CLIENT SECRET after `GOOGLE_CLIENT_SECRET:`
- Run Tests in the terminal to verify everything was set up correctly
$ bundle exec rspec
- All tests should be passing
- Run Rails Server from the terminal to verify page is loading
$ rails s
- Open a web browser and navigate to
http://localhost:5000
- The welcome page should display
- Note: To be able to have full functionality of the site you will also need to setup the backend repo, setup instructions can be found here: OnTrack Back end repo
- Create your Feature Branch
$ git checkout -b feature/AmazingFeature
- Commit your Changes
$ git commit -m 'Add some AmazingFeature'
- Push to the Branch
$ git push origin feature/AmazingFeature
- Open a Pull Request
New users may register in one of two ways.
- With Google OAuth
- Click the "Log In With Google" button on the Login page, and authorize the app for whatever permissions are preferred.
- Create a local account
- Click the "Create an Account" button on the Login page and fill in the form fields for first name, last name, email, password, and password confirmation. Then click "Create Account".
Returning users may then log in through the "Log In With Google" button or by inputting their email and password on the Login Page and clicking "Log In".
Upon logging in, users will be redirected to their dashboard page. The dashboard page has five buttons in the top left corner, each with alt tags displaying functionality if the user hovers over them. The house brings user back to dashboard, the + allows a user to add a task, the notepad allows users to view their task index (where they can also edit their tasks), the door allows users to logout, and the light switch allows users to toggle between light and dark mode.
Users are then prompted to select a mood icon that represents their current mood, and the dashboard will populate with a task list tailored to that specific mood. If the user is happy, they will get more chores added to their list on top of their mandatory daily tasks. If a user is sad, they will only have to complete their mandatory tasks, then they will be prompted to do only restful tasks if they so choose. If they are in a mediocre mood, there will be a divvying of hobby and rest tasks after mandatory tasks are completed. At any point the user can change their mood and the task list will regenerate accordingly.
Located on the dashboard as well is a calendar icon. When the user clicks this icon, they can see the next three national holidays coming up as well, as an option to integrate their google calendar (if they are signed in with Google Oauth). If they choose to integrate their google calendar, upcoming calendar events for the next two weeks will be displayed on their dashboard.
When the user navigates to the tasks/new page, there is a form to add a new task. The user has three options after they fill out a task. As a preliminary step, they can generate a suggested breakdown of the task (powered by AI) that will autopopulate the notes section. Otherwise, they can save the task and navigate back to the dashboard or they can save the task and continue to add more tasks.
When the user navigates to the /tasks page, they see all their tasks listed as well as the ability to select from any combination of three filters, one each for frequency, priority, and category. Users can clear and reset those filters at any point. Also, each task is shown as a link to its show page. If the user clicks on a task, they have the option to edit, generate an AI breakdown of the task, or delete the task.
t.string "email"
t.string "token"
t.string "google_id"
t.string "first_name"
t.string "last_name"
t.string "refresh_token"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Use of time_needed attribute;
- Can calculate user's time spent on certain activities and report them after a certain point of time. Ex: "You've spent 80 hours learning guitar this year!"
- AND/OR, the back end algorithm that chooses daily tasks will max out at a certain limit. Ex: User is given tasks that will take two hours total on bad days.
- This attribute currently exists in the front end Task poro and the back end schema, but functionality to make use of it has not been integrated at this time
- Upcoming birthday notifications
- Screen reader friendly
- Refactor to have all tables on the back end
- Users can choose which holidays they care to be reminded about, especially for different countries and religions
- Link holidays and events to people: "Mother's Day, send Mom something"
- Language translation
- Standalone app
- Task templates for common tasks
- Allow users to customize text colors and backgrounds - Promotes inclusivity for color blindness
- "I'm bored" feature that can suggest new hobbies or activities based on previous user input
- User-customizable recognition of when they complete a task, such as:
- AI-generated congratulations or motivational message
- A fun sound
- Confetti animation
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- The intended users of OnTrack are individuals with executive dysfunction or related disorders. Our design choices prioritize their unique needs and challenges.
- While our primary user base includes individuals with executive dysfunction or related disorders, we recognize that these users may belong to diverse identity groups. We are dedicated to ensuring inclusivity for all.
- We understand that factors such as internet connectivity and device compatibility can impact access. We are actively working to minimize these barriers to ensure a wider reach. By maintaining a web application users can use public access such as libraries to use our product.
- Given more time, we plan to collaborate closely with our intended users through interviews, surveys, and usability testing to continually improve and tailor the application to their evolving requirements.
- To prevent misuse of our product, we would like to implement reporting mechanisms and community guidelines. We are committed to maintaining a safe and welcoming environment for all users.