TeachAssist
TeachAssist is a mobile client for York Region's student portal (ta.yrdsb.ca) — a fast, private way to check marks, analyze performance, and be notified the moment a grade drops. Completely on-device.
- 5,000+ downloads
- 4.9★ Google Play
- 4.6★ App Store
Background
The idea for this started as all good ideas do; from inconvenience. I had just moved over from my iPhone to an android and was looking for an app to view my grades.
Imagine my frustration when I opened the Play store and found not a single app for teachassist.
I scoured shady APK sites, looking for an app that still worked, but alas, to no avail. I'd have to use that god awful teachassist website.

I got so tired with how the site looked, I decided to just build my own teachassist app.
Engineering the portal
YRDSB grade system has no public API (at least, not anymore), so the app authenticates and scrapes the same HTML endpoints a browser hits, then parses course and assessment tables into a typed model.
The teachassist website works by using a GET request, putting your plaintext username and password in the URL. Now, I'm no security consultant, but that doesn't seem like the most secure method of sign in...
Adding insult to injury, the two cookies used for authentication (session_token and student_id) aren't HTTP-only. See: XSS attack. Oh, and logout script logout.php does nothing.
.....
Moving on, I mapped the login flow, session cookies, and the quirks of how weights and formative marks are encoded, and hardened the parser against the inconsistent markup different schools and courses return.

Sessions, caching & offline
Credentials live only in the device keychain; a session layer transparently re-authenticates when cookies expire and backs off on failures. Parsed results are cached so the app opens instantly and still works with no signal, reconciling against the server on the next successful fetch (which happens on app start and when manually refreshed).
Notifications & course modelling
A lightweight diff between the cached and freshly-scraped mark sets drives local push notifications when something changes. The local edit button allows users to predict how new courses will affect their mark, as well as editing existing assignments to see what could have been.
Careful consideration was put in to make sure these features abided by teachassist's confusing weighting system.

Design
Since this app was initially designed for Android, the app embodied Material Design. This meant unified color palletes, view shadows, the works. Though, as the app matured and support was released for iOS, I moved to a more platform agnostic design language, and later added support for Liquid Glass.
The layout for the app stemmed from what I, as a student, wanted out of an app.
What's my overall average? What did I get on my last assignment? How much did my grade change?
These questions should be answered by the app in 2 seconds or less. Not by me combing the app with a fine tooth comb looking for the magic number I need.
A large problem with previous teachassist apps was that grade information was presented in a pretty terrible way. Tiny fonts, a rainbow of colors, not enough colours, nonsensical numbers, and inconsistent formatting and app design.

This kind of design language needed divine intervention and pixie dust to fix.

These 2 screenshots display the exact same information. Crazy what good design can do for you, right?
More info
If you really want to get into the weeds on this project, click here.
If your eyes glazed over most of what was written, click here.