Inspiration
This project was inspired by chrome extensions that make school life so much easier, as well as MDex. We wanted to make an app that would help students, both at Michigan State and at UofM, stay on top of things while also staying involved.
What it does
Our project is an android/ios application that acts as a helpful dashboard for MSU/UofM students. On the front page, the application displays the weather (including temperature and % precipitation) as well as the upcoming tasks for canvas or for d2l. When you click on an assignment it takes you to a separate page with the assignment description and a url to the assignment. On the next page we have an events tab, where we display many upcoming school events for the student to browse through and get involved. On the next page we have a classes search tool, where we can filter/sort all classes offered at either MSU/UofM in order to find the perfect class for you. In settings, we can toggle between MSU functionality and UofM functionality.
How we built it
We build the application using react-native and expo, so it is able to be easily deployed on Android and IOS. We got the weather related information by getting the latitude and longitude from the phone and then using the open-meteo API with the location information. The upcoming canvas assignments were taken by using the canvas api and filtering out completed/past assignments. The upcoming d2l assignments were taken by automatically scraping the students calendar after they log in. The events were taken by web scraping the .ical file for the school's upcoming events and then conveniently displaying them in a scroll view after mapping the information. In a similar fashion, the courses information was displayed by storing the course information locally and then querying it and filtering it/sorting it before mapping and displaying the information to the screen. The settings page was created by having a toggle at the top that changed between canvas (uofm) functionality and d2l (MSU) functionality. We then made areas to either login (d2l) or input a canvas api token.
Challenges we ran into
One big challenge we ran into was d2l not having an API. We thought it would be a shame to not have upcoming d2l events displayed, so we wrote our own javascript program to automatically scrape the information after the user logs in to easily display on the front page later. It seems simple, but it was a long script as we had to manually parse all of the text and then map them to containers to display.
Accomplishments that we're proud of
Some accomplishments we are proud of is getting the app to work for both MSU and UofM students. It was a step towards bridging the gap between the schools. We are especially proud of the manual d2l scraping we managed to do as it was initially quite tough to try to get the information without an api.
What we learned
We learned many things. For one, it is great to have a file for global variables as it makes it easier to sync certain things across scenes. For more general things, we learned that it is best to thoroughly plan. For this hackathon, before splitting off into our own we first clearly stated what the input and what the output to our parts of the program would be so that there would be no confusion. The extensive planning saved a lot of time in the long run and made the collaboration much easier.
What's next for MaizeGreen
Beyond cleaning up the interface more and fixing tiny bugs, there are a couple goals in mind:
- Have an event recommendation model that learns off of events you are interested in to recommend more (weighs them more heavily in the events tab)
- Have some sort of bus integration
- Speed up the program more. Currently we have not implemented lazy loading.
- Include more images and make the UI better looking
- Have some functionality with course enrollment. In particular, push notifications when a class opens for enrollment. etc.
Built With
- canvas
- csv
- d2l
- expo.io
- javascript
- npm
- open-meteo
- python
- react
- react-native
- typescript
- webscraping
Log in or sign up for Devpost to join the conversation.