Back

Select to view additional work

Featured Work

Live sports trivia platform — 7+ leagues, daily quizzes, global leaderboards.

YouKnowBall.org

Live Product · Solo Build · 2026

Next.jsReactSupabasePostgreSQLVercelCloudflareREST APIs

Problem

I want to work with sports data professionally. I needed real experience pulling live data from APIs and building something interactive with it.

Approach

Built a full-stack web app with Next.js on Vercel. Pulled live data from ESPN, MLB StatsAPI, NHL, Football Data, and balldontlie APIs. Used Vercel serverless functions to handle rate limits and CORS. Backed authentication and leaderboards with Supabase (PostgreSQL) and secure access policies. Wrote a custom question generator to produce balanced daily quizzes across leagues.

Result

Live at youknowball.org. Daily trivia and global leaderboards. Private group rooms. League specific modes for NFL, NBA, NHL, MLB, EPL, La Liga, and more. Timed College Mode. "Last Night" mode pulls game results from the night before.

Feature highlights

  • Daily Trivia with global leaderboards
  • "Last Night" mode with real game results from the night before
  • Timed College Mode
  • Private Group Trivia rooms
  • League specific trivia (NFL, NBA, NHL, MLB, EPL, La Liga, +)
  • Free Play for favorite teams

Inside the app

Daily home · game modes
Daily home · game modes
League trivia · pick a sport
League trivia · pick a sport
Answer reveal
Answer reveal
Global leaderboards
Global leaderboards

Home teams win 8% more often in close games. And other findings about NBA home court advantage.

NBA Home Court Advantage Analysis

Personal Project · Solo · 2025

PythonpandasmatplotlibseabornKaggle API

Hypothesis

I believe teams shoot significantly better at their home court. I wanted to see how big the home court advantage actually is across the NBA, and check how the Cleveland Cavaliers compare to the rest of the league.

Approach

Pulled an NBA dataset from Kaggle covering every game from 1946 to today. Used pandas to compare home vs. away win rates, shooting percentages, and defensive stats league-wide. Then filtered down to Cavaliers games and to clutch games (decided by 4 points or less) to see where the advantage really shows up.

Result

Home shooting was only about 1% better than away. I was right, but barely. The clutch numbers were the surprise. Home teams win about 8% more often when games are decided by 4 points or less. The Cavs are basically league average at home, slightly below in some spots.

Charts

Shooting % · home vs away (1946–present)
Shooting % · home vs away (1946–present)
Cavaliers · home shooting vs NBA average
Cavaliers · home shooting vs NBA average
Clutch games · Cavaliers vs league
Clutch games · Cavaliers vs league

Hospital Performance Dashboard in Excel

Self-Directed · Solo · 2025

ExcelXLOOKUPPivot TablesSlicersConditional FormattingHealthcare Data
Hospital Lookup
Performance Dashboard

Question

Can I take a real public health dataset and build an interactive Excel dashboard that lets someone look up any hospital in the country and see how it stacks up against state and national averages?

Hypothesis

I figured the data would show big regional differences in hospital quality and that ownership type would have a real effect on average ratings. I wanted to see if Veterans Health or non profit hospitals would outperform for profit ones.

Approach

Pulled CMS Hospital General Information data covering 5,432 hospitals across the country. Cleaned the data down to 19 useful columns and built a calculated Performance Score using the count of mortality, safety, and readmission measures where each hospital beat or trailed national comparisons. Set up a Hospital Lookup sheet with a dropdown of every hospital name, then used XLOOKUP to pull the full profile and AVERAGEIF to calculate state level benchmarks on the fly. Added conditional formatting so the comparison column lights up green when a hospital beats national averages and red when it falls below. Built a separate Performance Dashboard with four pivot tables (top hospitals, performance by state, ratings by state, performance by ownership type), KPI cards, and three slicers so the user can filter the entire dashboard by state, ownership, or hospital type.

Result

Veterans Health Administration hospitals came out on top with the highest average star rating (4.16), beating non profit and government hospitals across the board. Proprietary (for profit) hospitals had the lowest average rating at 2.80. Utah had both the highest average star rating and the highest performance score of any state, which surprised me. The dashboard also exposed something I would not have caught without the comparison view. Many hospitals that look strong on raw star rating actually trail on the more granular measure based scores, and the reverse is true too. Looking at multiple metrics together tells a stronger story than any one number on its own.

SQL portfolio: 10 queries solving real business problems.

SQL Business Problems Portfolio

Coursework · Solo · 2025

A collection of SQL queries I wrote to answer business questions against a university database. Things like “which students is each instructor teaching” and “which courses meet in location L509.” Each query starts with the problem in plain English, then solves it with SQL.

SQLOracle SQLJoinsAggregatesData Formatting
Problem · For each instructor, show how many students they teach and the average grade of those students.
SELECT
    i.first_name || ' ' || i.last_name AS instructor_name,
    COUNT(DISTINCT e.student_id) AS total_students,
    ROUND(AVG(g.numeric_grade), 2) AS average_grade
FROM instructor i
LEFT JOIN section sec ON i.instructor_id = sec.instructor_id
LEFT JOIN enrollment e ON sec.section_id = e.section_id
LEFT JOIN grade g ON e.student_id = g.student_id
GROUP BY i.first_name, i.last_name
ORDER BY instructor_name;
Problem · What courses is student #270 enrolled in? Show course name, section number, and enrollment date.
SELECT
    c.description,
    s.section_no,
    e.enroll_date
FROM course c
JOIN section s ON c.course_no = s.course_no
JOIN enrollment e ON s.section_id = e.section_id
WHERE e.student_id = 270
ORDER BY e.enroll_date, c.description, s.section_no;

Kent State Enrollment Dashboard

Which colleges at Kent State are gaining students, and which are losing them?

Coursework · Data Visualization · Solo · 2025

TableauData VisualizationKPIsEnrollment Trends
Kent State Enrollment Dashboard preview

I built this dashboard in Tableau for my Data Visualization class using Kent State enrollment data from 2017 to 2021. The goal was to give an administrator a quick way to see total enrollment, which colleges are growing or shrinking, and how each college has trended over time. The filters let you slice by campus, student level, gender, and year.

01

Three top line numbers at the top of the dashboard for total enrollment and how it changed from the year before.

02

A sorted bar chart showing which colleges gained or lost the most students, with green for growth and red for decline.

03

A trend chart over five years so you can tell if a college's change is a one year blip or a real pattern.

Instagram Engagement Analysis

Class Project · Solo · 2025

PythonpandasmatplotlibJSONInstagram Data Export

Hypothesis

I downloaded my own Instagram data and wanted to test if most of the people commenting on my posts are repeat commenters. I figured since my friends comment a lot, most of my comments would come from the same group of people.

Approach

Pulled my Instagram data export, which comes as JSON. Used pandas to turn it into a clean DataFrame, then counted how many times each user commented on my posts. Split users into one-time commenters and repeat commenters and compared them with a bar plot.

Result

I was wrong. Most of my commenters only commented once. They were mostly people I had been in group photos with, who commented on those specific posts and nothing else.

Hierarchical Clustering with AGNES and DIANA

Coursework · Solo · 2025

RAGNESDIANAHierarchical ClusteringUnsupervised LearningUCI Wine Dataset

Question

Which hierarchical clustering method gives the cleanest structure on the wine dataset, and which linkage strategy works best?

Hypothesis

I figured one of the AGNES linkage methods would come out on top since they each handle distance differently, but I wanted to see how the divisive method DIANA would stack up too.

Approach

Scaled the wine data first so the distances would be comparable across features. Ran AGNES with four linkage methods (single, complete, average, and Ward) and compared their agglomerative coefficients. Then ran DIANA on the same data to see how a divisive approach would handle it. Cut both trees at k=3 to compare cluster sizes side by side.

Result

AGNES with Ward linkage had the highest agglomerative coefficient, which made it the most cohesive method on this dataset. It also gave more balanced clusters of 69, 58, and 51 wines, while DIANA produced sizes of 91, 38, and 49. I don't think K-Means or DBSCAN would be a better fit here either since K-Means is sensitive to outliers and DBSCAN is built more for finding density. For this dataset, AGNES Ward was the right call.

World Happiness Report Dashboard

Coursework · Solo · 2025

Power BIData VisualizationWorld Happiness ReportMapsKPIs
World Happiness Report dashboard in Power BI

I built this dashboard in Power BI to explore the World Happiness Report and break down what factors drive happiness around the world. I started with the assumption that the happiest countries would be the ones with the strongest economies, but the data showed something different. The countries at the top of the rankings all scored well across the board on family, freedom, health, and economy together. It was not just money.

  • Global happiness map by country
  • Stream chart breaking down the four happiness factors across top ranked countries
  • Regional pie chart
  • Sortable country level table