Project Info
This project did not submit a demo video on Devpost.
Inspiration
Our main goal was to be absolute academic weapons. To achieve this, we needed to have a clear vision of what we were going to be doing in our 4 college years. Now the idea has been famously developed by multiple UCSC students because the struggle is real and common, but why do we still feel so lost when we plan our courses? Find out why we stand out below.
What it does
Our website takes into consideration the prerequisites needed to advance in your course pathway. In the original UCSC course catalog, students struggle to organize their classes because of how separated information is. We made sure to have classes, respective prerequisites, and the calendar all in one page for simple, organized, and efficient planning. Additionally, these academic plans are often requested by academic advisors. So we added an ‘Export’ button that allows for various accessibility and sharing needs.
How we built it
We webscraped the UCSC Course Catalog to obtain data on all of the course information and prerequisites for each major. We learned and used ReactJS to build the full-stack website.We add interactive buttons, images, loading signs, drag and drop, and section-wise scrolling for seamless user experience.
Challenges we ran into
All of us had trouble setting up the environment for ReactJS (npm install, Node). We didn’t have experience with the level of debugging skills required, especially on niche systems like Ubuntu, different Mac versions, and Windows (we had all). Additionally, it was some of our first times using GitHub to collaborate on code, so we went through some pains of rewriting code we lost :0
Accomplishments we're proud of
Despite those hurdles, we learned so much in 2 days. ReactJS is so popular and widely used, but only 1 of our 4 teammates had introductory experience with it. Regardless, we took it upon ourselves to self-learn and communicate when we needed help.
What we learned
In team projects, work is often split up and done individually. However, our team had a great flow just by picking up tasks that needed to be done and grinding it out. The dynamics and skill distribution made the process much easier. This hackathon will go in the books as one of the best just because of our united eagerness to learn and create :)
What's next
Learn and use AI to auto generate a 4 year plan for the user. Utilize LLM to generate customized course recommendations . Have import functionality from csv data to populate the website planner. We also plan to add features that would show the description of each class.
UCSC Major Classes Planner (College Planner Webapp)
A React-based planner that helps UCSC students build a quarter-by-quarter 4-year plan. Search a major, drag & drop required courses into a calendar grid, view prerequisites, and export the plan to CSV.
Features
- Major search with dropdown and remote fetch of requirements/prereqs.
- Drag & drop schedule builder across Fall/Winter/Spring/Summer for 4 years.
- Course detail popups showing prerequisites.
- Export to CSV with a single click.
- GE palette for dropping GE requirements.
- Global app state via React Context.
Tech Stack
- Frontend: React 18, CRA toolchain, react-dnd, react-select, reactjs-popup.
- Utilities: papaparse (CSV), testing-library (dev).
- Styling: Plain CSS modules per component.
- Data source: REST endpoint
.../api/majors/<Major Name>returningrequirementsandprerequisites.
Project Structure
purrgod-college-planner-webapp/
├── README.md
├── package.json
├── public/
│ ├── index.html
│ └── manifest.json
├── src/
│ ├── App.js # App shell + providers
│ ├── Bar.js / Bar.css # Top bar + Export button
│ ├── Calendar.js / .css # Main layout (search + grid + side panels)
│ ├── ClassesList.js / .css # Major requirements list + prerequisite popup
│ ├── GEList.js / .css # GE “tiles” palette with popup
│ ├── GridComponent.js / .css# 4x4 quarter grid, drag & drop, CSV export
│ ├── MajorContext.js # Context for prereqs + indexing
│ ├── Search.js / .css # Major dropdown + fetch logic
│ ├── index.js / index.css
│ └── App.css
├── web.py, mon.py # Catalog scraper prototypes (BeautifulSoup)
└── tempCodeRunnerFile.py
Getting Started
Prerequisites
- Node.js 16+ and npm.
Install & Run
# install
npm install
# start dev server
npm start
# production build
npm run build
The app will open at http://localhost:3000/.
Usage Guide
- Search a major in the top search bar (e.g., “Computer Science: Computer Game Design B.S.”), then click Search.
The app fetchesrequirementsandprerequisitesfor the major and populates the Major Reqs panel. :contentReference[oaicite:2]{index=2} - Drag classes from the Major Reqs panel (left) or GE’s panel (right) into any quarter cell in the 4-year grid.
- View prerequisites: click a course in Major Reqs to open a popup with prereq info. :contentReference[oaicite:3]{index=3}
- Remove a class: double-click a class inside a grid cell to delete it from that cell. :contentReference[oaicite:4]{index=4}
- Export: click Export to CSV in the top bar to download
4-year-plan.csv. :contentReference
Key Components & Data Flow
-
Search.js
- Renders a searchable dropdown (react-select).
- On Search, calls
GET https://uscc-classes.osc-fr1.scalingo.io/api/majors/<Major Name>and updates context with:preReq(array/object mapping) andmajorIndexes(course→index).- Passes
requirementstoCalendarto render Major Reqs. :contentReference[oaicite:6]{index=6}
-
ClassesList.js
- Displays the fetched requirement list; items are draggable.
- Click opens a popup showing that course’s prerequisites from context.
-
GridComponent.js
- Maintains a 4 years × 4 quarters grid (16 cells).
- Supports drag-in from lists, move between cells, and double-click to delete.
- Provides
ExportButtonthat serializes the grid as CSV and triggers a download.
-
GEList.js
- Static set of GE codes you can drag into any quarter; includes popup scaffold.
-
MajorContext.js
- Holds
preReqandmajorIndexesfor cross-component access.
- Holds
Configuration Notes
-
The default data API is hardcoded in
Search.js. If you run your own backend, change:const apiEndpoint = `https://uscc-classes.osc-fr1.scalingo.io/api/majors/${selectedMajor.value}`;to your service URL.
-
CSV Export: The grid is flattened and exported with headers:
Year, Fall, Winter, Spring, Summer. Quotes in course names are escaped.
Optional: Scraping Scripts
web.pyandmon.pyare prototype scrapers built with requests and BeautifulSoup (andmon.pyincludes a MongoDB insert).
They target UCSC catalog pages to collectrequirementsandprerequisites. These scripts are not required to run the web app and should be used responsibly (rate limits, ToS).
Roadmap
- Add auth and per-user plan saving.
- Backend service for persistent plans and validated prerequisite graphs.
- Course conflict detection and unit load warnings.
- Printing and PDF export.
- Mobile layout improvements.
Analysis
View
Metric
- 33
- 10
- 9
- 6
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- HTMLIn code
- JavaScriptIn code
- PythonIn code
- ReactIn code
- MongoDBClaimed
5 of 6 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
34 KB
Source files
22
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
PurrGod/college-planner-webapp
29 files · 4.2 MB · @ 543ba9e
Structure
Application logic
20 files · 69%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- JavaScript46%
- CSS21%
- Python16%
- Markdown14%
- HTML3%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 14- @auth0/auth0-react
- @testing-library/jest-dom
- @testing-library/react
- @testing-library/user-event
- papaparse
- react
- react-dnd
- react-dnd-html5-backend
- react-dom
- react-scripts
- react-select
- reactjs-popup
- web-vitals
- +1 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.