What?
Together with a friend we made a schedule app for MyX. We called it xrooster because MyX is from a company called Xedule, which is somewhat close to Xrooster when you translate it to Dutch.
The app shows your school schedule in a clean and simple way.
The app has a schedule page, an extra info tab for each lesson, a search page and a settings page.
You can also look up any class or teacher and see their schedule. This is very useful when trying to find a teacher when you need to ask something.
The app works for multiple schools which can be found here.
Why?
Our school used an app called Eduarte to show our schedules. We had to use it every day, but we did not like it.
The login was buggy and only worked with a workaround, and the schedule was only a list. We show it nicely in a calendar view (see picture 1).
The original app also didn't have any customization at all.
And most importantly, the original app had no offline mode. So having slow or no internet would mean you can't see your schedule.
How?
The app is made with Flutter, making it easy to develop on Linux and Windows and release to Android and iOS.
The first thing we did was look at how Eduarte works. We hoped to find an API we could use, but it doesn't have one because it uses server-side rendering.
At first we debated using a tool to scrape the data from the plain HTML file. But we found that too hard and it didn't work great.
But then we heard from a teacher that Eduarte gets its schedule from MyX.
So when we started looking at the requests in devtools we saw api calls. (yay!)
By following what the devtools showed us we wrote a bit of documentation on the APIs ourselves and used that.
With a bit of a hacky login system using Microsoft login and copying a token from the url bar in an integrated webview browser it worked!
We also added an offline mode, which shows an old cached version of your schedule when you don't have an internet connection.
The app is build for both Android and iOS by Github workflows and is automatically released when both finish building.
Android is used by some people and the iOS version remains untested since it requires sideloading.
Gallery:

Fun fact!
While working on this project I found a security vulnerability in our school's website.
It allowed every student to see the schedules and grades of other students by just replacing the email address in the api url.
These email addresses could easily be found in Microsoft Teams.
I reported this to the school and they fixed it within a couple of days.
They even gave me a gift card as a thank you.