ProfStats is a handy Chrome extension with 100+ users, merging professor ratings and grade distributions at the University of Texas at Dallas for simplified access to course information for students.
The front end ensures a streamlined interface with features like backend performance optimization, client-side validation for data accuracy, and CRXJS for Chrome extension hot module reloading during development.
GitHub Actions automates staging on the Chrome Web Store upon new Github version releases, utilizing the Chrome-Webstore-Upload-Action. While manual review submission is required, the uploading process is fully automated.
Utilizing the Golang Gin framework, the backend fetches ratings from the Rate My Professor GraphQL API and queries aggregated grade distribution from an SQLite database.
The database is dynamically generated by a Python script in db_setup
before the backend server is started, using only Python's standard library and the grade distributions in raw_data
.
Note
The grade distributions in raw_data
are from the UTD Grades repository
Dockerized and deployed on the Azure Web App Service after running the Python scripts that generate and test the SQLite database, using GitHub Actions for CI/CD.
Make sure you have the following software installed on your machine:
- Node.js
- Golang
- Python
- Air (for Go hot reloading)
-
Clone the repository:
git clone https://github.com/GiridharRNair/ProfStatsUTD
-
Navigate to the project directory:
cd ProfStatsUTD
-
Install dependencies:
npm run install
This command installs the dependencies for the go backend and the react frontend
-
Start the server and extension concurrently:
npm run dev
This project uses the
concurrently
npm package to run the server and extension concurrently -
Enable Developer Mode in Chrome:
- Navigate to
chrome://extensions/
. - Enable Developer Mode.
- Navigate to
-
Load the extension:
- Unpack the
dist
folder. - Start using the extension for seamless testing and development.
- Unpack the
Please feel free to open an issue or submit a pull request if you have any suggestions or feedback.