GraphUF is a web tool that helps students see not just what a class requires, but what a class enables. When planning your schedule, it’s hard to know which future opportunities a course will unlock — the official UF site only shows prerequisites, not the courses that depend on it.
With GraphUF, you can select any course and instantly see every class it leads to, including indirect ones (prerequisite-of-a-prerequisite). You can even enter the classes you’ve already taken, and GraphUF will filter results to show you which courses you're closer to unlocking. This makes it easy to discover hidden pathways and plan strategically for your academic goals.
- Python 3.13.x
- Docker
- Linux-based OS (preferred, but not required)
- Flask and project dependencies (installed later)
-
Clone the repository
git clone https://github.com/aleguy02/COP3530-project3.git cd COP3530-project3 -
Run the app in a container
!! WAIT !! If this is your first time running the app, you need to get all the data from UF's Schedules API. See Data Processing.
docker compose upWe use a feature branch and pull request (PR) workflow.
-
Clone the repository
git clone https://github.com/aleguy02/COP3530-project3.git cd COP3530-project3 -
Set up a virtual environment
python -m venv .myenv source .myenv/bin/activate # Linux/Mac .myenv\Scripts\activate # Windows
-
Install dependencies and pre-commit hooks
pip install -r requirements.txt pre-commit install
-
Create a
.envfile- Copy
example.envto.envin the root directory. - Update environment variables as needed.
- Copy
-
Create a branch
git branch <your-name>/<branch-description> git checkout <your-name>/<branch-description>
<your-name>→ your name (e.g.,ale)<branch-description>→ short, hyphen-separated description (e.g.,fix-visual-bug,refactor-tests,create-graph-api)
-
Ensure you are passing the tests (update the tests only if necessary)
python -m pytest
-
Commit and push changes
git add . git commit -m "Commit message" git push origin <your-name>/<branch-description>
-
Open a pull request
- Go to the repository’s GitHub page.
- Click Compare & pull request when prompted.
- Add a description (optional; Coderabbit can auto-generate one).
- Submit the PR for review.
!! WAIT !! If this is your first time setting the app up, you need to get all the data from UF's Schedules API. Luckily, there's a few scripts that do this for you. See Data Processing for more information on how to do this.
flask runHave your virtual environment enabled and dependencies installed. scrape_soc.py will take roughly 40 minutes to execute, depending on your connection. It should be outputting hints live, so if you are running the script but not seeing output in your terminal, something went wrong.
python scripts/scrape_soc.py
python scripts/clean_soc.py(Optional) Verify duplicates were removed:
./scripts/verify_cleaned.shSometimes in development, you'll want to be able to glance only at the important data. Run the following command to create a streamlined file only keeping {code, name, prerequisites} for each course:
jq '{courses: [.courses[] | {code, name, prerequisites}]}' src/json/soc_cleaned_semester.json > src/json/streamlined_soc.jsonIf you only want to keep courses with prerequisites:
jq '{courses: [.courses[] | select(.prerequisites != "") | {code, name, prerequisites}]}' src/json/soc_cleaned.json > src/json/streamlined_soc.json- Some courses list special prerequisites such as instructor permission or graduate student status — these are ignored for now.
- AND/OR prerequisites are currently treated the same for simplicity.
- This tool is not officially supported by UF. We encourage you to independently verify the validity of results.
Made with ❤️ by Alejandro Villate, Kevin Pugliese, and Michael Pierre-Canel