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
Full-stack web app
MavTrack
React · Vite · Supabase · Postgres
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