Welcome to the repository for the CS 2200 Office Hours queue. This is a system designed to run a queue on a Raspberry Pi that can be projected onto a screen for students and TAs to see. Since the system is a bit more complex than previous queue systems, most of the setup and descriptions of how the queue works will be explained below.
To deploy this queue on a device running a Unix-based OS, follow these instructions:
- Install Node.js and
npm. The Node.js version should be 22 or higher. - Clone this repository onto the device.
- From the root of the repository, run:
./deploy.sh
If you are running a Windows device, then you will have to run the development setup ;)
Below are the basic steps to install this repository for development:
- Install Docker and Bun (npm also works, but Bun is considerably faster for installation).
- Clone this repository onto your device.
- In the backend folder, copy the contents of
env.templateinto a new file named.env. - Add the data files. For this project, there are 3 csv files that need to be placed into the
backend/datafolder:student.csv(containing student data),ta.csv(containing TA data), andnames.csv(for anonymous name data). All files can be named anything as long as the appropriate paths are assigned properly in the.envfile. For example, by default the file for the anonymous names isfoods.csv, which contains a list of 100 random food ingredients. - To start the server, run the following instruction from the root of the folder:
docker compose up
The repository is a monorepo containing 2 Docker containers orchestrated using docker compose. The frontend folder
contains a React frontend, run and built using Vite, using frontend components from
shadcn/ui. All of the frontend components are stored in the components folder.
The backend folder is an Express backend server that uses better-sqlite3 to run a local sqlite instance where all of the data is persisted. This allows the data to be persisted across frontend reloads and provides isolation between sensitive student and TA data from the frontend (although this isn't necessary for this iteration of the project).
Both the frontend and backend locally use Bun as the package manager, although in order to support nodemon for backend
hot reloads, and to avoid having to install too many packages in the backend Docker container, the backend Docker uses
npm to install instead.
Below are the tasks that still need to be done to improve this project:
- Remote dequeuing for TAs
- Add TA pictures for On-Duty TAs
- Easier queue manipulation for TAs
- Backend route API documentation
- Backend API tests for correctness and edge cases