BruinPlan

UCLA Course Planning & Prerequisite Tracking Platform

Technologies Used

SvelteTypeScriptPuppeteerCytoscape.jsPythonGemini API
BruinPlan main dashboard showing course planning interface
BruinPlan's main dashboard with interactive course planning and prerequisite visualization

Project Overview

BruinPlan is a comprehensive web and mobile application that enables UCLA students to plan their quarterly schedules and track prerequisites across their entire degree program. The platform addresses a critical need at UCLA where students often struggle to navigate complex degree requirements and prerequisite chains.

I built BruinPlan because I struggled with enrollment and course planning, too. The cluttered registrar's website made understanding degree requirements a hassle. I initially planned to build BruinPlan just for myself and my two majors, but released it to the public after scraping the necessary data for all 130+ majors at UCLA.

Key Statistics

14,000+
courses tracked across all UCLA departments
130+
majors supported with complete prerequisite mapping
1500+
unique users planning their academic careers
11
Corrected errors reported by users
Interactive prerequisite graph showing course dependencies
Interactive prerequisite visualization using Cytoscape.js

Technical Architecture

Data Collection Pipeline

The foundation of BruinPlan is a robust data collection system built with Puppeteer, Python, and Google Gemini API. This system:

  • Scrapes course information from the UCLA registrar's website
  • Normalizes data across different formats and departments and saves as JSON
  • Implements rate limiting and error handling for reliability
  • Processes over 14,000 courses and their complex prerequisite relationships

Frontend Implementation

The user interface leverages Svelte and TypeScript for:

  • Real-time automatic prerequisite validation
  • Drag-and-drop quarterly planning interface
  • Responsive design for desktop and mobile
  • Interactive graph visualizations with Cytoscape.js
BruinPlan mobile interface showing responsive design
Mobile-responsive design ensuring seamless planning on any device

Technical Challenges & Solutions

Challenge 1: Data Collection at Scale

Problem

UCLA's internal API course is not open to the public. UCLA's course catalog contained over 14,000 courses across 130+ majors, in various formats and locations.

Solution

Reverse-engineered UCLA website. Built a robust scraping system with error handling, rate limiting, and data validation.

Data Collection Pipeline

graph TD A[Subject Areas List] --> B[Subject Areas JSON] B --> C[Course Lists] C --> D[AI Prerequisite
Recognition] D --> E[Courses Database] B --> F[Majors List] F --> G[Major Requirements] G --> H[AI Requirement
Formalization] H --> I[Major Requirements
Database] E --> J[BruinPlan
Unified Database] I --> J style A fill:#f9d5e5,stroke:#333,stroke-width:3px,rx:15,ry:15,color:#000 style B fill:#ffd6ba,stroke:#333,stroke-width:3px,rx:15,ry:15,color:#000 style C fill:#f6a6b2,stroke:#333,stroke-width:3px,rx:15,ry:15,color:#000 style D fill:#f3b0c3,stroke:#333,stroke-width:3px,rx:15,ry:15,color:#000 style E fill:#f2c6de,stroke:#333,stroke-width:3px,rx:15,ry:15,color:#000 style F fill:#a8e6cf,stroke:#333,stroke-width:3px,rx:15,ry:15,color:#000 style G fill:#b2f7ef,stroke:#333,stroke-width:3px,rx:15,ry:15,color:#000 style H fill:#cce2cb,stroke:#333,stroke-width:3px,rx:15,ry:15,color:#000 style I fill:#d6eadf,stroke:#333,stroke-width:3px,rx:15,ry:15,color:#000 style J fill:#d5f5e3,stroke:#333,stroke-width:3px,rx:15,ry:15,color:#000

Automated pipeline for collecting and processing UCLA's course and major requirement data

Challenge 2: Complex Prerequisite Logic

Problem

Course prerequisites often involve complex conditional logic (AND/OR relationships, choose N from M, recursively nested choices, etc.) that needed to be parsed and visualized.

Solution

Developed a canonical JSON format for prerequisite chains, then created a graph-based visualization using Cytoscape.js to make dependencies clear.

Challenge 3: Performance Optimization

Problem

Loading large amounts of data, rendering large course graphs, and handling real-time prerequisite validation could cause performance issues.

Solution

Implemented efficient algorithms including modified topological sorting for prerequisite chains and optimized rendering techniques for large datasets.

Performance optimization demonstration
Smooth performance with large datasets

Future Enhancements

Planned improvements include:

Real-time seatcount tracking

to show course availability

AI-powered validation

to catch errors a rule-based system might miss

Professor rating integration

for better course recommendations

Predictive analytics

for quarterly difficulty predictions

BruinPlan represents the intersection of data engineering, user experience design, and educational technology. By solving a real problem faced by tens of thousands of students, it demonstrates how technology can democratize access to information and improve academic outcomes.

David Kahdian

Builder. Problem solver.

Connect

© 2025 David Kahdian. Built with SvelteKit and Tailwind CSS.