Course Web App

React SPA + Spring Boot API delivering historical grade insights, newest-first course history views, and CI/CD-backed reliability.

About This Project

Project Overview

UCSB Course Web App enabling rich search of courses, instructors, and locations, with authenticated personal schedules and historical insights. Built as a modern React SPA talking to a Spring Boot API backed by PostgreSQL plus MongoDB, with CI/CD pipelines keeping releases production-ready.

Role & Team

  • Led UI development and partnered on backend work within a 6-member Agile squad using weekly sprints, PR reviews, and shared coding standards.
  • Focused on data visualization, search UX, and ensuring temporal data remained correct across features.

Tech Stack

  • Frontend: React, React Query, React Bootstrap, Recharts, Storybook, Jest with React Testing Library, ESLint.
  • Backend: Spring Boot, JPA/Hibernate, PostgreSQL, MongoDB-backed course collections, RESTful APIs, Jacoco, Pitest.
  • DevOps: GitHub Actions pipelines covering unit tests, coverage thresholds, formatting checks, mutation testing, and Storybook builds.

Key Contributions

  • Built the historical grade visualization embedded on the course details page, keyed off course IDs and grouped by quarter plus instructor.
  • Ensured course history views present newest quarters first across course, location, and instructor searches, aligning UX expectations with real data.
  • Added targeted unit tests and Storybook stories to protect tooltip formatting, grouping logic, data completion, and sorting behaviors.

Historical Grade Data Visualization

  • Goal: Help students compare grade distributions by quarter and instructor when deciding how to enroll.
  • Backend integration: Added the GET /api/gradehistory/search endpoint, GradeHistory JPA entity and repository, the UCSB grade ingestion service, and a scheduled upload job plus factory that upserts CSV data without duplicates.
  • Frontend UI: Grouped API results by yyyyq and instructor, rendering compact bar charts with Recharts, filling missing grade categories with zeros for stable axes, and ordering recent quarters first.
  • Tooling: Crafted a tooltip formatter that surfaces both percentages and counts, and mocked ResponsiveContainer in tests to eliminate flaky chart rendering.

Quarter Ordering Fix

  • Pre-sorted section arrays before rendering course, location, and instructor history tables so newest quarters always surface first.
  • Expanded test suites to assert sorted inputs for each table, preventing regressions across the three views.

Quality & CI/CD

  • Maintained React tests, Storybook stories, backend unit coverage, and Pitest mutation checks within GitHub Actions to keep both codebases deployable.
  • Enforced formatting and linting guards while coordinating PostgreSQL and MongoDB persistence changes through the pipelines.

Impact

  • Delivered an intuitive, production-ready workflow for evaluating grade histories, improving course selection decisions for students.
  • Unified quarter ordering across major history pages, ensuring the freshest data is front-and-center every time the app renders.

Course Details Before vs. After

Refreshed the course details page by layering in grade history context, richer instructor insights, and newest-first ordering so students immediately see what changed over time.

Before Redesign
Original UCSB course details page with a single static table and no visual context.
Static table-only view made it hard to spot historical grade trends or compare instructors.
After Redesign
Updated UCSB course details page showing the grade history bar chart and newest-first sorted sections.
Integrated grade history visualization and sorted results surface the most recent, relevant data right away.

Technologies Used

ReactReact QueryReact BootstrapRechartsStorybookJestSpring BootPostgreSQLMongoDBGitHub Actions