I’m a Statistics & Data Science and Computer Science student at Connecticut College and a sports analytics builder focused on turning raw data into tools teams can actually use. My work combines statistical modeling, software engineering, and on-ice perspective: I’m the author/maintainer of nhlscraper, an R package for collecting, cleaning, modeling, and visualizing NHL/ESPN data; I’ve built expected-goals models, interactive dashboards, and D3 visualizations to study shot quality, player value, and tactical decision-making; and I’ve applied that toolkit professionally as a Data Analyst Intern at HockeySkytte. I’m especially interested in hockey data infrastructure, probabilistic modeling, player evaluation, and decision tools that help move analysis from “what happened?” to “what should we do next?”
🏒 nhlscraper | R / C / Developer Tools
nhlscraper is an R package I built to make NHL data easier to access and analyze with a lightweight, reproducible, and well-documented workflow. It scrapes, cleans, and visualizes data from the NHL and ESPN APIs, and I expanded coverage by reverse-engineering 50+ NHL EDGE endpoints through developer tools. The package has been inducted into the SportsAnalytics CRAN Task View, surpassed 3,500 downloads, and is supported by a pkgdown documentation and tutorials. It has since been referenced in academic papers (example), adopted in college course materials (example), and shared across statistics blogs (example) worldwide.
🏒 rentosrink | Python / R
Rento’s Rink is my ongoing hockey analytics “lab,” built as an interactive Streamlit app that now lets 650+ users explore skater and goalie shot profiles, free-agent contract scenarios, and forward/defense/goalie xG rankings with downloadable cards and data exports. Under the hood, I built a six-partition expected-goals pipeline that scores 241K+ shot events with a hybrid XGBoost/LightGBM model suite, expanding beyond shot geometry into pre-shot movement, game-state context, biometrics, and shift/rest workload features, and I documented a leakage-safe contract model that turns 4,200 historical contracts from 1,655 skaters into scenario-based term and AAV% forecasts. The project also includes R-based scraping and refresh pipelines, GitHub Actions plus Selenium uptime tooling for the Streamlit deployment, and a replay-tracking pass detector that infers completed passes from NHL EDGE goal-window data.
🏀 NBAxP | JavaScript / R
NBAxP is a project where I turned raw NBA shot data into an interactive “shot value map” for each team. I scraped and cleaned ~700,000 shots, built an expected-points model using shot context, and visualized results by court region in a D3-powered dashboard with interactive filters and hover tooltips for team-to-team comparisons.
🏒 HALO Hackathon 2026 | R
This submission focuses on a coaching-facing question in established 5v4 offensive-zone power-play play: how can we quantify quality beyond xG by measuring whether a unit creates and actually attacks exploitable mismatches? To answer that, I engineered Attempted Exploited Mismatch per State (AEM/state), a metric that combines threat modeling for puck-carriers and non-carriers with coverage geometry and a 1.5-second decision window. I then validated the metric against team outcomes, showing that AEM/state remained positively associated with PP goals/60 and added explanatory value beyond xG/60 alone. The project also examined how those mismatches are created by analyzing short puck-movement progressions, finding that most lift came from concise 2–3 event chains rather than long, harmless circulation.
