As juniors and seniors in high school taking many honors and AP classes, we often stay up late finishing homework, thus making us less productive the next school day. Sometimes, this heavy workload is due to a teacher assigning lots of homework on one day and failing to consider the other assignments that their students might have from other classes. Thus, we wanted to create a program that informs teachers of the assignments (and respective times for each assignment) that have already been assigned to each student in their class, thus allowing them to decide on what type of homework (if any) that they should assign their students for that day.
What it does
AssignHub is a website that informs teachers of each of their students' respective workloads, thus allowing them to make assignment decisions that will balance the homework load for their students. First, the teacher will log onto the site with their username and password, and then, the teacher will see a list of the classes they teach. Inside each of these classes is a dropdown of all the students in that class, and once the teacher clicks on one of their students, he will be able to see all the assignments, and suggested completion times for each assignment, for that specific student. Based on this student's workload, along with the average student workload in that class for that specific day, the teacher can decide on whether to add or remove an assignment. Thus, the program will allow teachers to better balance out the homework load for their students.
How we built it
For the user interface, we used HTML and CSS, and we merged this frontend to a Python backend using Flask. The Python backend consists of several classes, including Teacher, Student, and School, and we worked on integrating these classes with a SQL database to save the students' information. Unfortunately, we were not able to completely integrate the SQL database into the backend and merge the backend with the frontend, but the frontend still acts as an accurate display for the intended program.
Challenges we ran into
When we first began the project, we had trouble determining how we would store the students' assignments within the Python backend. Based on our knowledge of Object-Oriented Programming, we knew that we could arrange the possible objects (Student, Course, Assignment, Teacher, and School) in many different ways and formats, which unfortunately caused us to spend too much time figuring out the optimal way to store data. We eventually decided on Teacher, Student, and School classes along with a SQL backend, but though we made each of the individual pieces, we were unable to merge everything together.
In addition, we ran into challenges with merging the HTML and CSS frontend with Flask. AssignHub was actually our first project using Flask with HTML and CSS, and we originally thought that we would be able to integrate separate HTML and CSS files directly into the Flask app, but we realized that we needed specific HTML and CSS formatting for Flask. Along with the inability to decide on an efficient data structure quickly, this reformatting process slowed us down.
Accomplishments that we're proud of
Our front-end developers, Sam and Antong, did not know much HTML or CSS before this project. Still, they were able to create a solid website and login page, accomplishments that they are very happy out. In addition, Ivan, one of our back-end developers, had never used SQLite before, yet he was still able to learn some of the SQLite library and implement a prototype for our back-end data storage. Lastly, our other back-end developer, Noah, was able to learn a little SQLite and refresh his knowledge of Python through organizing the Student, Teacher, and School classes, and therefore allowing for the Teacher to access their students' assignment data.
Because this was our first hackathon working as a group, and the first hackathon for two of our members, we are very proud that we were able to put something together, even though it is not entirely complete.
What we learned
In addition to the more technical knowledge stated above, we also learned a few more nuggets of knowledge.
1)Become more familiar with languages and their implementations before hacking When we came into this hackathon, we did not have a strong understanding of the languages and programs (HTML, CSS, SQLite, Flask) that we used during the hackathon. Thus, we sacrificed hacking time for language-learning time. In the future, we will be more well-versed with the languages and programs that we plan to implement for the hackathon.
2)Delegate and form roles After brainstorming, we decided that figuring out the data storage first would be best. However, everyone focused on accomplishing this task rather than only the back-end people. With only so much time for the hackathon, we have to make sure that everyone is working on their individual piece of the project right after the brainstorming phase. Eventually, we assigned everyone roles for this project, and we will make sure to do that before we begin each hackathon project in the future.
What's next for AssignHub
Although we were able to create some back-end usability and a front-end for the project, we were unable to completely integrate the two pieces. As such, we plan to finish setting up the SQLite database and integrating the frontend and backend. We also hope to provide more analysis tools for teachers on their students' assignment data, allow teachers to change between different schooldays (and their students' respective workload for that day), and display student extracurricular activities along with their assignments to better balance student workloads.