University team project / Reviews platform · Case Study

Faculty Reviews

Course and instructor reviews for IBA Karachi students: a Flutter app and a React web app over one Node.js and MongoDB API.

RoleThree-person university team
My partAPI, Flutter app, most of the web app
TimelineFeb 2024 to Sep 2024
Shape2 clients · 1 API
API50 endpoints · 6 models
In-app nameAcademiQ
Instructor directory with search in the React web app
The Brief

Honest reviews, one per student per course.

Students choosing courses rely on word of mouth. Faculty Reviews gives them structured ratings and discussion, with rules that keep it fair: one rating per student per instructor and course, and moderation built in.

Sign-up with a 5-digit ERP number; bcrypt-hashed passwords and 10-day tokens
Four 0-to-5 ratings per instructor per course, limited to one per student by a compound unique index
Threaded, optionally anonymous comments with upvotes and downvotes, one vote per user
A discussion feed with text search over posts, and saved comments, instructors and courses
User, Moderator and Admin roles enforced by the API
Architecture & Stack

Two clients, one role-checked API.

Clients
Flutter appRiverpod · dio
React web appRedux Toolkit · MUI
API
ExpressJWT auth · role checks · 50 endpoints
Data
MongoDBMongoose · 6 models
Stack
Mobile
FlutterRiverpoddio
Web
React 18Redux ToolkitMUI 5Formik
Backend
Node.jsExpress 4JWTbcrypt
Data
MongoDBMongoose 8
Key Decisions
01Role checks live in the API (User, Moderator and Admin middleware on the routes), not only in the clients
02One rating per student, instructor and course, enforced by the database with a compound unique index
03Per-user vote lists on comments, so nobody can vote twice
04Comments and posts are soft-deleted, so moderation is reversible
Walkthrough

Inside the product.

Screenshots from a local run on fictional demo data.

Web app · React
Instructor profile with department and courses
Instructor profile and courses taught
Discussion post with two replies and votes
Discussion thread with comments
Mobile app · Flutter
Instructor ratings for attendance, grading, workload and learning
Four-part instructor ratings
Student reviews of an instructor with vote counts
Student reviews with votes
Discussion feed with posts, votes and reply counts
Discussion feed with votes and replies
A post with two replies
Post thread with replies
New post form with visibility and anonymous toggle
New post, with visibility and anonymity
Login screen with an ERP number
Sign in with an ERP number
50API endpoints
6Data models
11Flutter screens

Built in a three-person team: I wrote the API, the Flutter app and most of the React web app.

Next project

Voice AI Patient-Intake Agent

→