Remote learning is hard, for many reasons. We can’t expect to solve all these problems with one silver bullet, so we homed in on one particular problem – staying organized.
If you go to UNC, then you are probably aware of the balancing act one must undertake to keep track of all of their assignments and deadlines. Email, Piazza, Sakai, GradeScope, course websites, the list goes on. It is quite the task to even keep up with your tasks! With deadlines and due dates constantly coming up from all these course sites, we decided to do something about it. We want to integrate all of these deadlines into one single intelligent dashboard. It is quite the task to even keep up with your tasks!
What it does
This is where CourseHub comes in. CourseHub is an intelligent and beautifully designed dashboard for you to manage all of the course deadlines and stay organized.
The CourseHub dashboard shows a view of all of your classes, and each user can add key information and links about each course, including the Sakai page, syllabus (to add to web scraping service), Piazza link (to add to web scraping service), and GradeScope (to add to web scraping service). We then compile all deadlines that were not previously submitted in an ordered fashion (decreasing order by dates) and filter for only current, non-past deadlines.
Users can add deadlines for assignments or exams that they have in each class, and mark them off for completion. Sound like a glorified checklist? Well, kind of. But this is where the power of technology comes in.
By entering the appropriate credentials, the user gives CourseHub permission to access their Sakai page and automatically scrape their course pages for all the assignments that are listed. The deadlines for these assignments will then be added to the corresponding course in the user’s CourseHub dashboard.
There is a list of times for each class (Lecture and Recitation) scraped from Sakai, and there is a day-by-day schedule of the individual's classes with buttons linking to the appropriate Sakai pages for assignments for each class.
Once the assignments are stored in the user’s account, the user may edit the specifics of the deadline in the event that something changes (todo). Deadlines can be viewed within CourseHub and we are planning on setting up CourseHub to use Google Calendar's API to export deadlines into personal calendars.
How I built it
We divided the project into two subprojects: a front end and back end web scrapping service.
We used React and Firebase Authentication, along with Firebase Cloudstore (to do) to handle the front end with 1. A sign-up page 2. A login page 3. A Home page where an individual can look at their deadlines and academic resources.
For the back end, we used Selenium within Python as a web scraping service. We hosted it on AWS Lambda and created an API for it to interact with our front end's data fetching.
Technologies used include React, Firebase Authentication, Firebase Cloudstore, AWS Lambda, and Selenium.
Challenges I ran into
We were having difficulties setting up the project within React initially. Afterward, we started having problems with Authentication and integrating Firebase within our front end.
While it is working now, we had to use Open Source code to do so and to support authentication. However, we did host the Firebase Project Authentication and had to change the handling of the user login/sign up.
We then had difficulties setting up the AWS Lambda host for our web scraping service. This took a long time to set up but we now have a fully working API. While our front-end is not yet fetching from this API, this is on our future to-do list.
Accomplishments that I'm proud of
We are proud of how this turned out. We all learned a lot of React (aside from the basics) and all learned how to web scrape using selenium. Setting up the AWS Lambda service was very difficult but extremely rewarding as well. The Firebase authentication was also incredible to learn and scale to user needs and login/signup/signout function along with React Routing.
In general, just building a project that is actually useful to not only us but a lot of other people at UNC and other schools is rewarding as it will actually help people stay organize and on top of their deadlines. We had an awesome time as a team and are definitely going back next year!
What I learned
We learned advanced React, the Firebase API, AWS Lambda, how to use Python Selenium for web scraping, and how to integrate all of these services and parts of the project into one cohesive architecture.
What's next for CourseHub
We want to add the following functionalities in the near future of CourseHub:
- have the front end fetch from our web scraping API on AWS Lambda
- integrate Firebase Cloudstore into our frontend to store data and let the user input manually the home page and delete assignments manually.
- let the user have a "refresh" button to fetch the most current deadlines and load them into the user's data on Cloudstore.
- check off/delete items
- make it look even prettier!