React · FastAPI · PostgreSQL
MLB Pitch Analyzer
Full-stack explorer for 2025 MLB pitch data, built as a Washington Nationals software engineering assignment.
Overview
This was the take-home for a Washington Nationals software engineering internship. The data was a season of 2025 pitch-level records; the brief was to make something a person would actually want to click through.
The backend is FastAPI with SQLAlchemy 2.0 and Pydantic v2 over Neon Postgres. Two endpoints do the work: one lists the featured pitchers, one returns a pitcher's summary. That summary is a GROUP BY over pitch type that rolls up count, usage share, velocity, horizontal and vertical break, spin rate, and where the ball went afterwards — exit speed and launch angle. Nulls are common in batted-ball columns, so the aggregation handles them rather than dropping rows. Indexes on pitcher and date, and on pitcher and pitch type, keep it quick.
The front end is React and Vite with Tailwind. I wrote the 3D carousel myself instead of pulling a library, positioning each card with x = sin(angle) × radius and z = cos(angle) × radius on a 700px radius, then driving scale, opacity and grayscale off depth so the back of the ring recedes properly. It auto-rotates slowly and pauses on hover. The cards flip on hover to a second face, and search filters the roster live with an autocomplete dropdown.
The detail page pairs the aggregate table with a pie chart of pitch usage, which is the one view that makes a pitcher's repertoire obvious at a glance.