Gradeient

Storytime!

Around a year ago, a student at another high school in my district launched an app called Grademelon, an easy-to-use alternative to the clunky StudentVUE platform MCPS officially uses. GradeMelon had a lot of features many students actually needed, and that StudentVUE lacked, like the ability to input hypothetical grades to see how upcoming assignments might affect GPAs. Almost overnight, it spread like wildfire.

Unfortunately, a few months after its release Edupoint (the company that the district licenses StudentVUE from) made sweeping changes to their API, making Grademelon unusable. Seeing the void it left behind among my friends, and as a Grademelon user myself, I decided I'd like to try reverse-engineering the new StudentVUE API and developing a working alternative.

The reverse-engineering process

Unfortunately, because I don't have a professional license for BurpSuite, my sessions can't be saved, meaning I don't have any cool screenshots of intercepted packets to show. You'll have to trust me here!

The first step of developing an app like this was attempting the (questionably-legal?) task of cracking the new StudentVUE API. The original system relied on the XML-based SOAP architecture, but after intercepting network traffic with BurpSuite, I discovered that the new API—what bricked GradeMelon—was REST-based.

This felt like a small victory, but I unfortunately spent the next week making virtually zero progress. Despite poring over every (and I mean every) intercepted packet for hours on end, I couldn't find my Holy Grail: a clean JSON payload containing grades and assignments. Just like those European explorers in history class chasing the fabled Northwest Passage, I was convinced a tidy JSON output had to exist. Just like the real Northwestern Passage, it didn’t. Bad news. That meant I’d have to resort to web scraping—parsing the raw HTML of the page itself. Not ideal, but it was the only viable path forward.


Building the app + some thoughts

I designed the app in Figma and built it using SwiftUI and XCode. This was my first major SwiftUI (and iOS development) project, and I'm really, really, proud of how it turned out.

The screen on the left is the classes view, the first thing you see after logging in. It shows all your courses along with their letter grades, percentages, and a user-selected icon and color for each course.


Originally, I planned to automatically assign icons and colors to each class based on keywords—“Chemistry” would get a green beaker, “English” a red notebook, and so on. But I abandoned that idea pretty quickly after realizing how particular, and frankly, stubborn, people can be about their personal color-coding systems (anyone who uses blue for English is just wrong, though).

The screen on the right is the detail view for each class. It displays individual assignments and their grades, and allows you to click on an assignment to input your own hypothetical grade.

year

2024

tools/medium

Figma

SwiftUI

BurpSuite