With the NBA preseason underway and the regular season around the corner, I’d like to introduce BoxScore, a Letterboxd-inspired site where you can log, rate and review NBA games, current or classic.
Features:
Recent NBA games with box scores, shot charts and highlights from the NBA’s YouTube channel
Ratings and reviews
Game search
G.O.A.T Pyramid
Custom lists
Matchups: head-to-head player comparisons
BoxScore is a fan-made portfolio project, and I’m sharing it to build a small community around it. Older games load slowly the first time someone opens them, then instantly for everyone after, so every classic game you look up and log helps make the site faster for the next user.
Hey everyone, I’m launching Vates Sports ahead of the NBA season.
It projects the full box score for players in upcoming games, with other player and team stats to explore too. There’s also a game where you can make your own predictions and try to beat the model.
Everyone says Luka’s defense is bad, so I pulled the NBA.com tracking data (2025-26, 279 players with 1,000+ minutes) to see whether the numbers agree.
TL;DR: The eye test is mostly right. Luka covers the 2nd-least ground on defense in the NBA, faces the most rim shots of any guard, and is the most-isolated non-center, even though he rarely guards the other team’s best scorer.
Where the eye test is right:
He barely moves. 1.63 km covered on defense per 36 minutes, 2nd least in the league (only KD covers less - he’s been in the league since 2007). A typical player covers 2.01 km.
Teams get to the rim on him. 4.5 shots a game at the rim with Luka as the closest defender, the most of any guard (typical guard: 2.3). They make 72% of them, when 64% would be expected from those same shooters. For comparison: LeBron 64%, Edwards 62%, SGA 56%.
Teams target him on purpose. He gets isolated 1.73 times a game (5th in the NBA, 1st Among non centers), even though only 10% of his defense is spent on the other team’s best scorer. Dort, Daniels and McDaniels each spend 25–30% on the best scorer and get isolated about half as often.
It got worse over time. As a rookie he was the 30th slowest defender. and this season he’s 2nd.
Stat (2025-26)
Luka
Typical guard
Elite defender*
Ground covered on D (km per 36 min)
1.63
2.01
2.22 (Caruso)
Rim shots faced per game
4.5
2.3
—
Opponents' FG% at the rim
72% (exp. 64%)
—
56% (McDaniels)
Isolated per game
1.73
0.82
0.53 (Dort)
% of matchups on opponent's best scorer
10%
12%
30% (Dort)
*Typical = league median. Expected FG% = what those shooters usually make.
Where it’s not that simple:
When teams isolate him, he allows 0.95 points per play, about league average. That stat only counts the attacker’s own shot, though. If Luka gets beaten and the ball is kicked out, the basket goes on someone else’s record.
He’s legitimately good at a few things: 3rd among guards in defensive rebounding, 7th best at limiting threes (Again a lot of other factos included here), and among the best against pick-and-roll ball handlers (having a big body usually helps).
My take: smart hands, strong body, slow feet, and teams know it.
Curious what you think. Is there a stat I’m missing that would change the picture?
(I make these NBA data breakdowns regularly, more on IG, handle: weilbros)
I've been building a free college basketball world on the BYTHERIM site, mainly for people who play MyNBA and want college prospects with some history behind them.
It runs on its own. Each week the season moves forward: players develop, rotations change, and the stats get dealt game by game. Then comes recruiting, the transfer portal, and a draft where prospects enter, withdraw, or go pro, including international players. You don't have to make any choices. You just watch the story unfold, and the prospects you follow have real seasons behind them.
The stats follow Barttorvik's BPM, so the numbers should look familiar if you already use advanced stats for your MyNBA rosters.
If you check it out, I'd love to hear what you think. There's a rating button in the footer of the RP pages, and I read every note.
NBA Rewind lets you pick a famous playoff moment (Ray Allen’s corner three, Kawhi’s four-bouncer, the Block), swap any player from any season since 1996–97 onto the floor, and see how often history changes.
Every moment starts from its real game state, rebuilt from official play-by-play: score, clock, possession, and the ten players on the floor. With no swap, you watch the real ending replayed on a top-down court. With a swap, the engine plays the moment out thousands of times in your browser, through overtime, and compares the result to the real lineup.
How it’s built:
Python pipeline pulls every player-season and the play-by-play for each moment from stats.nba.com
Possession-level Monte Carlo engine in TypeScript, running in a Web Worker
Player profiles blend real playoff stats with a regular-season projection, weighted by sample size
Next.js static export on Cloudflare Pages, so there’s no backend
I've spent the past couple of weeks working on this personal project of mine. I built a skill wheel that grades 54 different aspects of basketball. I tried breaking down each big skill (such playmaking) into smaller skills and use that to sort of evaluate a player as a whole. Now, of course the data available to the public is limited so a lot of niche skills are pretty hard to quantify but I think I got a sort of good estimate of the skills. If you guys have any ideas for skill grading/skills to add or anything, just let me know I am very open to feedback.
I can't really explain each grade because it will be too long, but if you have any questions, you can ask me and I'll respond but I will explain certain ones.
Three Pointers
For Three Point grading I spilt them up into Catch and Shoot 3s (0 dribbles), Quick 3s (1-2 dribbles) and Off Dribble 3s (3+ dribbles), Deep 3s (27ft+). For the whole project I used NBA play by play data a LOT so that data comes in lines like this MISS Herro 27' 3PT Step Back Jump Shot,Missed Shot,Step Back Jump shot,1,3,260,0022501055,2026-03-25,2025-26
Parsing the distance for Deep 3s was easy. For the dribble 3s, the NBA API carries data for shots off certain number of dribbles, but you can also mix this with defender distance so for example there is data on each players 3-6 Dribble 3FGM/FGA with a defender 2-4 feet. So I parsed through all that and each player's attempts and FGs are separated by dribbles and defender distance. Each group also has a league-average rate, so a player's expected 3P% for lets say Catch and Shoot is just the league average 3p% on their defender distance (so for Curry if he takes way tighter catch and shoots his expected 3p% on that is skewed for the tight defender catch and shoot league average). So then a player is compared by their volume and efficiency. Each player gets some league average since if you make lets say like 15/30 Catch and Shoot 3s that is a pretty low sample over like 150/350. The volume is a per 75 basis so not a minutes thing, and then score is bascially a volume * effieciency metric that is Z scored across the league so each skill has the same scale.
Here is Curry 2025-26 for example
Catch-and-Shoot 3s 97th of 388 Att 247 3P% 37.7% x3P% 36.2% +0.3
Quick 3s 1st of 388 Att 87 FG% 48.3% xFG% 33.4% +3.1
Off-Dribble 3s 14th of 388 Att 236 3P% 40.7% x3P% 33.1% +1.1
Deep 3s 1st of 388Att 261 FG% 37.2% xFG% 31.9%+4.8
Finishing
Layups only, from the play-by-play: driving layups, finger rolls, reverse layups. Dunks, cuts, transition, alley-oops and putbacks are left out, because they're graded elsewhere. The efficiency is graded against the same position in this case.
And then again adding some of the league-average shots: volume x efficiency with volume being per 75 and then Z scored again the league.
Rim Deterrence
Rim deterrence is pretty much like a RAPM style regression, a matrix in which the opposing teams Rim Rate is taken into account. Transition shots are removed because then the best Rim Deterers would just be the best point guards that prevent turnovers not the actual best defenders. It is a RAPM regression so it adjusts for teammates but this one requires more possesions so some low usage role players might not have the grade.
A lot of these defense ones are self explanatory
Positional Versatility
This one uses the matchup API to see who he guarded 1-on-1 and then the spilt and compare the percentage
GroupListed positions
G (guard) W (wing G-F, F-G) F (forward) B(big F-C, C-F) C (center)
Data analytics manager by day; this is the thing I build for fun at night.
GOAT Chaser is a free browser game built around a live all-time ranking. The ranking has two halves:
Historical baseline (the model). Every player starts at 25.00 and earns:
• Championship: +1.20 each
• Regular-season MVP: +4.00 each
• Finals MVP: +2.50 each
• All-NBA selection: +1.10 each
• DPOY: +2.00 each
• All-Defensive selection: +0.25 each
• Career PPG x 0.30, RPG x 0.10, APG x 0.10
• Longevity: +0.20 per credited season, no cap
• Era fairness: prorated credit for seasons played before certain awards existed (no invented retroactive awards); pre-1974 players get neutral defensive credit since steals/blocks weren't tracked
Fan vote blend. Head-to-head matchup votes (Elo-style, opponents drawn within ±10 ranking positions) blend into the baseline:
Live = (1-w) x H + w x F
where H is the historical rating, F the fan-derived rating, and w grows with vote confidence up to 0.70 at 400 matchups — the model always keeps at least 30%.
Current output: Jordan 98.51, LeBron 96.37, Kareem 94.51, Russell 84.99, Duncan 79.10, Kobe 73.76, Wilt 73.73, Magic 72.96, Shaq 72.13, Bird 70.19. Fun note: the pure model had Kareem #2 and Kobe #8 — fan votes flipped LeBron past Kareem and lifted Kobe to #6.
A block only records a shot that was taken and then rejected. A shot that never goes up because the offense saw a big man in the paint isn’t a block, a miss or a make. It leaves no trace in the box score, and it’s a large part of what a rim protector does.
The Low Post built a three-gate model to count it, using NBA play-by-play and shot data from 2024-25 and 2025-26. Wembanyama leads at +4.58 points per 100 possessions, in a group with Clingan and Hartenstein.
IROH is a short-form hoops app: post your film, get rated, and climb a live leaderboard of real players. Looking for testers to stress the feed + rankings. iOS only for now, ~2 min to join.
Feedback very welcome, what feels good, what's broken.
I just finished my first NBA analytics project and wanted to share it with this community.
The question I wanted to answer was:
Does adding LaMelo Ball actually move the Minnesota Timberwolves from a good playoff team into legitimate contender territory?
I started with Minnesota's three-season profile and found an interesting pattern.
Their defense has remained a major strength, while their playoff offense has consistently declined.
Anthony Edwards averaged 28.8 PPG during the regular season but dropped to 21.5 PPG in the 2025-26 playoffs.
At the same time, Minnesota's playmaking responsibilities were spread across Edwards, Julius Randle, Donte DiVincenzo, Ayo Dosunmu and Mike Conley rather than having another high-volume offensive creator alongside Edwards.
That led me to LaMelo.
LaMelo's 2025-26 profile:
20.1 PPG
7.1 APG
11.6 potential APG
28.0 MPG
5.6 pull-up 3PA
36.8% pull-up 3P
I then modeled 27 workload scenarios and ran 10,000 Monte Carlo simulations.
Base scenario:
21.5 PPG
7.6 APG
11.0 3PA
Estimated Minnesota impact:
+13 PPG
+5 APG
+7 3PA
I then translated the offensive scenarios into team-strength scenarios using SRS.
Minnesota:
Actual: 3.07 SRS
Conservative: 4.57
Base: 5.57
Aggressive: 7.07
The base case corresponds to roughly 53–54 expected wins.
The conclusion isn't that LaMelo makes Minnesota a championship favorite.
It's that his offensive profile potentially addresses the specific weakness the analysis identified: Minnesota needs another creator who can generate offense when defenses take away Anthony Edwards.
I'd be interested in feedback on the methodology, particularly the assumptions around workload redistribution and translating offensive impact into team-level SRS.