Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/giridharrnair/profstatsutd

📚 Source code for the ProfStats UTD chrome extension, a quick and easy way to view UT Dallas professor ratings and grade distributions.
https://github.com/giridharrnair/profstatsutd

chrome-extension gin gin-gonic go golang ratemyprofessors react sqlite utd utdgrades vite vitejs-react

Last synced: about 1 month ago
JSON representation

📚 Source code for the ProfStats UTD chrome extension, a quick and easy way to view UT Dallas professor ratings and grade distributions.

Awesome Lists containing this project

README

        

ProfStatsUTD


Screenshot

[![Chrome Web Store](https://img.shields.io/badge/Featured_on-Chrome_Web_Store-cce7e8?style=for-the-badge)](https://chromewebstore.google.com/detail/profstats-ut-dallas/doilmgfedjlpepeaolcfpdmkehecdaff)

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.

## Frontend Overview

[![Vite](https://img.shields.io/badge/Powered_by-Vite-646CFF?style=for-the-badge&logo=vite)](https://vitejs.dev/)
[![React](https://img.shields.io/badge/Powered_by-React-61DAFB?style=for-the-badge&logo=react)](https://reactjs.org/)
[![Chakra UI](https://img.shields.io/badge/Styled_with-Chakra_UI-319795?style=for-the-badge&logo=chakra-ui)](https://chakra-ui.com/)
[![Axios](https://img.shields.io/badge/HTTP_requests_with-Axios-009688?style=for-the-badge&logo=axios)](https://www.npmjs.com/package/axios/)

The front end ensures a streamlined interface with features like backend performance optimization, client-side validation for data accuracy, and [CRXJS](https://crxjs.dev/vite-plugin/) for Chrome extension hot module reloading during development.

### Deployment

GitHub Actions automates staging on the Chrome Web Store upon new Github version releases, utilizing the [Chrome-Webstore-Upload-Action](https://github.com/fregante/chrome-webstore-upload). While manual review submission is required, the uploading process is fully automated.

## Backend Overview

[![Go](https://img.shields.io/badge/Powered_by-Go-00ADD8?style=for-the-badge&logo=go)](https://golang.org/)
[![Python](https://img.shields.io/badge/Powered_by-Python-3776AB?style=for-the-badge&logo=python)](https://www.python.org/)
[![SQLite](https://img.shields.io/badge/Database-SQLite-003B57?style=for-the-badge&logo=sqlite)](https://www.sqlite.org/index.html)
[![Docker](https://img.shields.io/badge/Containerized_with-Docker-2496ED?style=for-the-badge&logo=docker)](https://www.docker.com/)
[![Azure](https://img.shields.io/badge/Hosted_on-Azure-0089D6?style=for-the-badge&logo=microsoft-azure)](https://azure.microsoft.com/en-us/)

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.

### 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](https://github.com/acmutd/utd-grades/tree/master/raw_data) repository

### Deployment

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.

## Local Development

Make sure you have the following software installed on your machine:

- Node.js
- Golang
- Python

### Steps:

1. **Clone the repository:**

```bash
git clone https://github.com/GiridharRNair/ProfStatsUTD
```

2. **Navigate to the project directory:**

```bash
cd ProfStatsUTD
```

3. **Install dependencies:**

```bash
npm run install-packages
```
> This command installs the dependencies for the go backend and the react frontend

4. **Start the server and extension concurrently:**

```bash
npm run dev
```
> This project uses the `concurrently` npm package to run the server and extension concurrently

5. **Enable Developer Mode in Chrome:**

- Navigate to `chrome://extensions/`.
- Enable Developer Mode.

6. **Load the extension:**

- Unpack the `dist` folder.
- Start using the extension for seamless testing and development.

Please feel free to open an issue or submit a pull request if you have any suggestions or feedback.