This is a Next.js + Python application designed to assist with class registration planning. Originally developed for SAIT (Southern Alberta Institute of Technology). It has the potential to support most class registration systems built on the Ellucian platform. As a starter project, it offers a solid foundation with room for improvement and additional features.
- Quick Class Search: Search by name or code in the top textbox with autocompletion.
- Class Combinations: Select desired classes and instantly view valid combinations.
- Visual Schedule & Availability: Displays a weekly schedule and seat availability, styled like the mySAIT registration platform.
- Instructor Ratings: Matches instructor ratings from RateMyProfessors (RMP).
Contributions and feedback are welcome!
- The
public/res/*.json
files contain 2025 Winter class data for demo purposes, sourced publicly from SAIT Course Offerings and RMP. - If no class combinations are displayed, it may indicate a time conflict or missing time data for some classes.
- RMP ratings rely on simple name matching, so errors may occur.
- For rapid development, JSON files store class data. A database could improve scalability, eliminating complex JSON manipulation in backend scripts (
P2
,P3
).
The frontend is built with Next.js, bootstrapped using create-next-app
. Key features include:
- Dynamic Rendering: The homepage (
app/page.js
) updates automatically with changes. - State Management: Uses Jotai for global and component-level state.
- Styling: Combines Tailwind CSS and custom CSS (
app/globals.css
), with components inapp/components/
.
- Install dependencies:
npm install # or yarn install # Star development server npm run dev # or yarn dev
Then open http://localhost:3000 to view the frontend.
The backend fetches, refines, and processes class data, generating dropdown menus and instructor ratings via external APIs.
- Data Fetching:
P1_getRawData.py
retrieves raw data from SAIT (or other Ellucian systems) and saves it locally. (backend/rawdata
) Adapted from ucrapi. - Data Refinement:
P2_refineRawData.py
processes raw data intoclass.json
. - Dropdown Generation:
P3_genDropdown.py
Creates dropdown optionsdropdown.json
from refined data. - CRN Generation and Instructor Info:
P4_genCRN.py
Generates course registration numbers (CRN) and instructor detailsinstructor.json
. P5_getRMP.py
(optional) Fetch and match professor ratings from RateMyProfessor usingRateMyProfessorAPI
. This is slow and should only be run when necessary.
- Set Up Virtual Environment:
cd backend python -m venv venv # Activate virtual environment (Windows) venv\Scripts\activate # Or on macOS/Linux: source venv/bin/activate
- Install Dependencies:
pip install -r requirements.txt
- Configure Environment Variables:
- Copy
backend/.env.sample
tobackend/.env
and update settings (e.g.,BASE_URL
,TERM_CODE
, etc.).
- Copy
- Run the Pipeline:
- Execute the main script to run the complete data fetching and processing pipeline:
python main.py
- This will sequentially run
P1_getRawData.py
, thenP2_refineRawData.py
,P3_genDropdown.py
andP4_genCRN.py
based on result ofP1
execution. Comment outP5
or execute it separately if necessary.
- Execute the main script to run the complete data fetching and processing pipeline:
P1
-P4
: Less than 10 minutes Data fetching, refining, and JSON generationP5
: Around 4 hours ~4 hours (RMP matching, due to slow API responses).RMP.json
is included so rerunning is unnecessary unless instructor data changes.
This starter application has significant potential for enhancements including:
- Dockerized environment with a database for class data.
- Enhanced UI/UX (e.g., filters for weekday or AM/PM, sorting by off-days or study days). Sorting by number of off-day, study day
- Calendar export (replacing SAIT’s deprecated Ellucian GO).
- Anonymous class planning accounts.
- Advanced error handling, logging, and TypeScript integration.
The final goal isto rival tools like searchNEU or notangles.