Skip to content

aleguy02/graph-uf

Repository files navigation

socialify image

GraphUF

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.

Table of Contents

  1. Local Setup
  2. Collaboration Workflow
  3. Server Setup
  4. Data Processing
  5. Disclaimers

Local Setup

Prerequisites

  • Python 3.13.x
  • Docker
  • Linux-based OS (preferred, but not required)
  • Flask and project dependencies (installed later)

Quickstart

  1. Clone the repository

    git clone https://github.com/aleguy02/COP3530-project3.git
    cd COP3530-project3
  2. 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 up

Collaboration Workflow

We use a feature branch and pull request (PR) workflow.

  1. Clone the repository

    git clone https://github.com/aleguy02/COP3530-project3.git
    cd COP3530-project3
  2. Set up a virtual environment

    python -m venv .myenv
    source .myenv/bin/activate   # Linux/Mac
    .myenv\Scripts\activate      # Windows
  3. Install dependencies and pre-commit hooks

    pip install -r requirements.txt
    pre-commit install
  4. Create a .env file

    • Copy example.env to .env in the root directory.
    • Update environment variables as needed.
  5. 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)
  6. Ensure you are passing the tests (update the tests only if necessary)

    python -m pytest
  7. Commit and push changes

    git add .
    git commit -m "Commit message"
    git push origin <your-name>/<branch-description>
  8. 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.

Server Setup

!! 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 run

Data Processing

Scraping UF SoC Data

Have 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.sh

Streamlining JSON Data (Linux)

Sometimes 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.json

If 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

Disclaimers

  • 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

About

See where a class can take you with GraphUF

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •