Skip to content
Labib Al Karim
← All work

Live at mavtrack.com

MavTrack

A GPA, graduation, and scholarship tracker that tells a student whether they're on track across all three at once.

Role
Designer & engineer
Client
Personal product
Year
2026
Stack
React, Vite, Supabase, Postgres, Row Level Security, Vercel

The problem

To know where they stand, most students check three places that don't talk to each other: a grade portal with no projections, a degree audit with no what-if scenarios, and a scholarship award letter they read once and never check again.

The question that actually matters is whether you're safe on your GPA, your graduation requirements, and your scholarship's conditions all at the same time. No existing tool answered that.

What I built

  • Live GPA tracking, both cumulative and per semester, computed from every course entered.
  • Graduation progress against requirement categories the user defines (major, minor, gen-ed, elective), so a double major or an added minor is new data rather than a redesign.
  • Scholarship compliance: enter a scholarship's real GPA and credit-hour minimums to get an ongoing On track, Watch, or At risk status.
  • A what-if planner that projects a hypothetical semester's effect on GPA and scholarship standing without touching the real record.
  • Real accounts, so the same data follows the student to any device.

Engineering decisions

Security lives in the database

Every table uses Postgres Row Level Security policies keyed to auth.uid(). The database itself guarantees that a user can only read or write their own rows, whatever the frontend does, so there's no backend server to get wrong.

Derived numbers are never stored

GPA, degree progress, and scholarship status are recalculated from raw course data on every read. A cached number can never drift out of sync with the record it came from.

A buffer instead of pass/fail

Scholarship status is judged against a margin above the minimum, not a flat threshold. A student sitting right at a 3.0 should see a warning before they lose funding, not after.

What-if data is disposable on purpose

The hypothetical semester lives in one scratch row per user instead of the relational model. It's throwaway by design, so it doesn't need the structure of real records.

Outcome

Deployed on Vercel at a custom domain, with automatic deploys on every push to main and a user guide written for students rather than developers.

Next project

SigEp Texas Kappa