University alumni portal
Feb 2022 - Feb 2023 · In production
Developer, features end to end and the shared UI component set
The official alumni management system for Riphah International University, still in daily service today, built in Laravel and Vue as part of a small team.
- Laravel
- PHP
- Vue
- TypeScript
- Vuex
- MySQL
- Bootstrap
Overview
The official alumni management system for Riphah International University, still in service today. Laravel and PHP on the back end, Vue with TypeScript on the front.
The problem
The university needed an alumni system graduates would actually use and staff could administer. I joined an existing codebase partway through, as part of a small team of several developers.
What I built
Features I owned end to end, each from the database schema through the API to the interface:
- The alumni activity feed. Posts and comments: migrations for both tables including foreign key relationships and a per-post privacy setting, the models, the API controller, the client-side store module, and the components that render the feed
- Profile education and experience records
- The volunteering module
- Team management for administrators
- The jobs board, where alumni post and manage listings
I also built the shared UI component set the rest of the application uses: buttons, dropdowns, modals, pagination, search, tags, loaders and the profile layout.
Complexities tackled
Working inside someone else’s conventions. With several developers in one repository, matching the existing patterns matters more than personal preference. The cost of being right in a different style than everyone else is paid by whoever reads it next.
Permissions that fail visibly. A recurring class of bug was screens that hung on a loading spinner when the user lacked permission for the data behind them, because the failure path only handled errors and not refusals. Permission denied has to be a state the interface renders, not an exception it swallows.
Building the shared components at the right moment. Extract too early and you guess the abstraction wrong; too late and five screens have already reinvented it differently. The component set went in once several screens needed the same things and before the pattern set.
Data integrity in an institutional system. Real graduate records mean validation is not cosmetic: duplicate skill tags, events scheduled in the past, and seeder data leaking into what should be user content are all defects I fixed, and all of them are the kind that look trivial and embarrass the institution in front of its alumni.
Outcome
An institutional system rather than a demo: real graduate records, university staff using it daily, and still in production several years later.
Stack
Laravel, PHP, Vue, TypeScript, Vuex, MySQL, Bootstrap.
Working on something similar?
Tell me what you are building and what is in the way. I will tell you honestly whether I am the right person for it.
Last updated: