The F5's Most Underrated Player of 2025
Plus a Q&A with the creator of plaintextsports.com, the best website in the world
Welcome to another edition of The F5. Here’s what’s on the docket this week:
First, the folks at Basketball Reference lent me their player pageview data so that I could hand out my annual Most Underrated Player of the Year award
Then, I did a Q&A with the creator of my favorite website — plaintextsports.com
The F5’s Most Underrated Player of the Year
The simplest explanation for what makes a player underrated is being better than what the consensus thinks. Impactful on the court, but overlooked off the court is a good way to describe it. Players that aren’t talked about on podcasts, don’t win awards, and won’t sign big contracts, but still make their team better whenever they’re in the game.
Figuring out who helps their team win can be as simple as looking some of the most popular all-in-one impact metrics.
Figuring out what the consensus thinks about each NBA player is tricker. To do so, I reached out to folks at Basketball Reference to ask for the pageviews of every player on their site since the start of the 2024-25 season. Basketball Reference is one of the most popular websites in the world for all things NBA, so it stands to reason that player pageviews might be a good proxy for the amount of attention each player has gotten this season.
The less attention a high performing player has received, the more underrated they are.
The chart below is how I like to look at the data. Each player’s Basketball Reference pageviews are logged on the x-axis while their impact is plotted on the y-axis. In this chart, I’m using Estimated Plus Minus (EPM) from Taylor Snarr’s website dunksandthrees.com for player impact.
In most cases, the better a player is, the more hits their player page gets. Shai Gilgeous-Alexander and Nikola Jokic have two of the most trafficked pages on Basketball Reference this season and for good reason. EPM has both players in a league of their own in terms of on-court impact. That puts them in the top right quadrant of the chart.
At the other end of the spectrum is a guy like DaQuan Jeffries. He’s an end-of-the-bench player in Charlotte and has had little impact when he’s been on the court this year. His player page on Basketball Reference has also been one of the least visited. That puts him in the lower left quadrant of the chart.
Meanwhile, the players in the top left quadrant are the ones I’m interested in. This is where the NBA's most underrated players live. Above average impact players with below average notoriety.
When I ran this exercise back in 2021, De’Anthony Melton graded out as the best player you’ve never heard of. At the time, Melton was a bench player in Memphis that punched way above his weight. He might have even repeated as The F5’s Most Underrated Player of the Year if he hadn’t torn his ACL earlier this season.
But when I looked at the data this time around, a different player emerged. EPM painted him as one of the 100 most impactful players this season. But it wasn’t just EPM. So did DARKO, the most trusted advanced metric among NBA executives. The same was true when I looked at how he graded out in LEBRON and xRAPM.
Meanwhile, his pageviews on Basketball Reference were among the lowest of anyone that’s played real minutes this season. Which is surprising given he plays in one of the biggest media markets and for one of the league’s marquee franchises.
The Boston Media Mafia clearly has some work to do because The F5’s Most Underrated Player of the Year goes to Luke Kornet.
The seven-foot center is in his seventh year in the NBA and is having the best season of his career. Kornet has already played more minutes this season than in any other season because injuries and mysterious illnesses have sidelined Kristaps Porzingis for more than half his games.
The top line numbers aren’t going to blow you away. Kornet is averaging just five points a game. He has more games where he’s put up a donut than games with ten or more points. Meanwhile, only Nicolas Batum has a lower usage rate than Kornet among players with at least 1,000 minutes played.
But those numbers don’t come close to capturing Kornet’s impact. When he’s on the court, the Celtics are, to put it bluntly, beating the piss out of opponents. They have a +12.2 Net Rating when Kornet plays — that’s the highest mark among any player in the Celtics’ rotation.
It goes without saying that Kornet benefits from playing next to All-Stars like Jayson Tatum and Jaylen Brown. But Kornet’s the exact kind of no fuss, low-usage player that teams should surround ball-dominant players with. He brings out the best in Tatum especially, which shows up not only in their team’s Net Rating when they share the court, but also in more specific ways as well.
For example, this year, any Celtics possession that features a Tatum/Kornet pick and roll averages 1.33 points, according to Second Spectrum tracking data. The only pick and roll pairing more potent than that is Jamal Murray and Nikola Jokic.
So yes, Kornet looks good in part because he’s surrounded by All-Star talent. But that’s not the only thing the impact metrics are capturing when they suggest he’s been one of the best bench Bigs this season. There’s a reason why less sophisticated metrics, like PER, which just rely on stats from the traditional box score, also think Kornet has been a productive player this season.
For instance, even though Kornet doesn’t take many shots, he makes the most of the ones he does take. His 69 percent True Shooting is nice, even for a Center who lives off putbacks, tip ins, and lobs.
Kornet came into the league as a stretch five, but since arriving in Boston he’s quietly reinvented himself as a bruiser that feasts on shots inside the restricted area. He’s all but abandoned his three-point shot since joining the Celtics and it’s resulted in a dramatic increase in his scoring efficiency. His career is playing out like the reverse of Brook Lopez’s: fewer threes and more dunks.
Additionally, Kornet has been a monster on the offensive glass. He has 144 offensive rebounds this season, which is 60 more than anyone else has on the Celtics. His knack for creating second chance opportunities gives Boston a counter punch and forces opposing coaches to think twice before going small unless they want to surrender the battle on the boards.
Kornet has found a way to standout in Boston’s high three-point happy offense by turning into one of the league’s best offensive rebounders, especially on missed shots from beyond the arc. All of Boston’s wings are threats to pull-up off the dribble so when Kornet’s man steps up to defend the pick and roll, a wide open lane is created for Kornet to crash into. As of this writing, Kornet is ninth in total three-point offensive rebounds despite playing half as many minutes as everyone else in the top ten.
But Kornet’s true calling card comes on the defensive end where he’s sneakily been one of the NBA’s best rim protectors for several years now. Since breaking into Boston’s rotation in 2022-23, Kornet has allowed opponents to shoot just 54 percent within six feet of the basket when he’s the closest defender. That’s ninth best among all players that have defended at least 500 such shots over that time span. For context, Rudy Gobert is a four-time Defensive Player of the Year and he’s just one spot above Kornet on this list. Not bad for a guy whose better known for defending the three-point arc than the rim.
It’s hard to say how much Kornet will play in the postseason if Porzingis is fully healthy. But there are signs that suggest that Kornet is not just a regular season gimmick. Mazulla has experimented with playing Kornet next to Porzingis and it’s proven to be effective in small stretches. In the 108 minutes that the Celtics have played that double big lineup, they’ve outscored opponents by a whopping 24 points per 100 possessions.
Another reason I’m bullish on Kornet’s viability in the playoffs is that everyone in the Celtics’ path for a back-to-back championship has a double big lineup that they depend on:
The Magic are comfortable playing any combo of Goga Bitadze, Wendell Carter Jr., and Jonathan Issac.
The Heat start Kel’el Ware next to Bam Adebayo.
The Knicks have been playing Karl-Anthony Towns next to Mitchell Robinson since Robinson came back from injury.
The Cavaliers, the Celtics most likely opponent in the Eastern Conference Finals, have Evan Mobley and Jarrett Allen.
Meanwhile, the Oklahoma City Thunder, the team that’s favored to make it out of the West, play two seven-footers in Chet Holmgren and Isaiah Hartenstein.
So if Joe Mazzulla wants Kornet on the court he’ll have no trouble finding someone for him to match up with.
Kornet won’t be the hottest free agent name this summer. But he’s one of the ones I’m most interested in. Unless Boston makes dramatic moves this offseason to shed salary, The Green Kornet will likely be wearing a different color jersey next season. If you’re a team like the Lakers that’s in desperate need of a viable starting center on the cheap, then you’ll be hard-pressed to find a better option than Luke Kornet.
A Refreshing Q&A With Paul Martinez, Creator of plaintextsports.com
At the end of all my Q&As I ask the person I’m interviewing what’s one thing they can’t live without during the NBA season. My answer to that question is plaintextsports.com.
It’s just a website that provides sports scores in plain text, but I can’t live without it.
The ESPN App is for 80-year-olds while the Real sports app is for 8-year-olds. Plaintextsports is for everyone else.
Paul Martinez created plaintextsports in 2021 when he got tired of waiting for the ESPN app to load just so he could check the score of a Packers game. Now his site has scores for the NFL, NBA, MLB, NHL, Soccer (domestic and international) as well as college football and basketball.
There’s no signup required, no ads, no eggplant emojis. Just box scores delivered as quickly and efficiently as possible. I look at it, conservatively, 100 times a day.
I emailed back and forth with Martinez about building Plaintextsports, Bucks basketball, and JSON files.
This Q&A has been lightly edited for length and clarity
F5: What's the backstory to plaintextsports? When and why did you decide to create it?
PM: I was watching the Packers-Rams Divisional Round playoff game in January 2021 on a farm in southwest Wisconsin, and our rabbit ears TV connection was going in and out, and an old boombox radio was just playing static. I tried following on my phone, and got frustrated by ESPN GameCast freezing and becoming unresponsive, loading bar stuck firmly in place. Somehow, despite the miracles of modern technology, I couldn't find out whether Davante Adams had picked up the third down, but I sure saw a lot of ads for the Zach Snyder cut of Justice League.
One of my brothers and I had discussed the idea before, a website that literally just tells you the score and time and that's it: "GB 25 - LA 18 Q4 11:21". A few days later, back in San Francisco, working remotely and bored out of my mind, I started working on a basic prototype for the NBA. I quickly expanded the scope to show box scores and play-by-play, and the game flow graph of "dots" that everyone loves. (The "2 dots = 3 points" part baffles everyone, though, to my delight.) A month later I launched plaintextsports.com on /r/nba, where the post got over 600 upvotes in four hours, but then got taken down for self-promotion!
Clearly the idea held promise, and so I started adding more and more features. NHL came soon after, then college basketball and March Madness. MLB followed, and by May I had added multi-day support, so you could see what games were scheduled for tomorrow, and also go back to see yesterday's games. I made an ad for a contest and won $100.
That summer, I quit my job in San Francisco and went home for a month as my beloved Milwaukee Bucks advanced to the NBA Finals for the first time in 47 years. I went to all three Finals home games, and spent every timeout chanting "Bucks in Six!" and refreshing plaintextsports to see how many points Giannis and Khris had scored. As I've gotten older, it's gotten harder to find the time to follow my hometown teams, and I've dreaded the day a fair-weather fan accusation carries real weight, but that July, after spending over a hundred hours building something to help follow all my teams, I felt I had earned my fair share of the confetti falling from the rafters.
It has only continued to grow from there. I've added standings, and schedules, and now support 8 different leagues (NFL, NBA, MLB, NHL, MLS, WNBA, NWSL, Premier League), plus the Champions League, the Euros, and the World Cup. One of the highlights of running the site occurred during the 2022 World Cup, when I noticed half of my traffic was mysteriously coming from South Africa. It turned out an aggregator of low-data-usage sites had added PTS to their app. While the poor-internet-access aspect had certainly been part of the original design, I had long been using it as my daily driver just because it's snappier and more information dense than other websites, but it was heartening to know that it still fulfilled its original mission, and provided real value to people halfway around the world.
Is there anything specific that inspired the design behind plaintextsports? I'm familiar with wttr.in, which is like plaintextsports but for weather. I’m wondering if there was something specific that inspired you to make it plain text based.
The name came from that original idea of a website that just had the score and nothing else. Everything else followed naturally from the idea of "plain text sports".
The phrase "plain text" implies a fixed width font, representing pure data. (Though, much to the chagrin of Hacker News commenters, the site is actually HTML and CSS.) I came up with the basic look of scores in boxes on the first day, and it's never changed since. That's not to say I don't spend any time on design—I actually have to think carefully about layouts. I designed it to be mobile first, and it turns out I can only fit 45 characters on the screen, which isn't a lot to work with! I'm annoyed that "Valkyries", the name of the new Golden State WNBA team, is 9 characters long, while previously the longest team name was 7 characters. I have to reshuffle everything!
Despite the bare-bones appearance, there's a lot of information packed into each page. It's efficient design, not minimalist design. And I'm not just mechanically dumping data—there are a lot of small usability details I'm proud of. For the NBA, the play-by-play combines related plays, so a shot attempt and a block, or a turnover and a steal are presented as a single item, rather than two separate ones. The NBA Cup standings combine results with point differentials and dates of upcoming games. I show how many team fouls each team has in a quarter, and whether or not they're in the bonus, which I've never seen on any other website!
That being said, obviously a large part of the design is still about what isn't there. There are no photos or videos, and that's obviously because those require more data. But also there aren't any tracking scripts phoning home every time you click a link. There aren't ads taking up half the screen, tempting you with boosted odds on a four-team parlay. There it's not just about making the site faster, but it's about making it a better human experience. I'm not trying to make any money off of this, I just want to help you follow your team.
Why a website? I really like that it's a website and not an app that I have to download, but I'm interested to hear why you chose to go the website route.
The main reason is I know how to build websites and write HTML and CSS, while I don't know how to build an iOS or Android app.
I like to view plaintextsports as a utility, an essential service, and there's a disadvantage to an app: it's less accessible. It's not much use if you're out on a hike with poor internet reception and your friend says, "Oh, you should download this app!" (N.B. the opening scene of the ad.) And I don't just check it from my phone—I use it on my laptop too, and at work. It comes in clutch if ESPN is blocked on the office wifi!
Also you can save links to websites to your home screen on both iOS and Android, and then it's just as good!
Can you give me an ELI5 how the site works? Where does the data come from and how is it delivered so quickly to the user?
The primary reason the site is so fast is that every page is a single, tiny, self-contained HTML file. You will never open the site and see a loading animation because there's no additional data to load. The entire homepage, which shows the live scores for almost every game that day, is less than 10kb. In contrast, ESPN makes over 400 requests for over 10mb of data over 5 seconds. On a slow connection, that could easily be 15 seconds, and then you might have to click again to find the score you care about!
I've architected the site to separate the presentation of the scores from the fetching of the data. The website itself is just static HTML files that get served very quickly by Amazon Web Services (AWS). Meanwhile, I have a separate server that regularly fetches the latest data, renders new pages, and updates the files in AWS.
The two lines at the top of each page reflect the two steps in this process:
The first time is when your browser fetched the page, and the second time is when the server fetched new data and uploaded it to AWS. These are useful in a couple ways. First, if you refresh the page, and the "Data loaded" line hasn't changed, then you know there isn't any new information. Second, if you go back to a tab that you had opened, you can immediately tell whether or not the page has automatically refreshed by whether the "Page loaded" line says "~5 seconds ago" or "47 minutes ago".
A benefit of this architecture is that the site itself never goes down, even if the server fetching scores crashes. If it does, all of the pages stop updating, but they're still accessible, and at the top you'll see something like "Data loaded: 4 hours ago". Every page updates at least every 20 minutes (and every minute or two while a game is live) so if you see this, that means something is broken. It's a sad day when I see this at 2pm while I'm at work, unable to fix it.
At the end of the day, I publish a "final" version of each page, which swaps out the header at the top, and indicates that the page is not going to be updated again that day
As for the data itself, where the data powering Plain Text Sports comes from is a Proprietary Trade Secret.
(PS for the more technically inclined: the site is an S3 bucket that is published using CloudFront, AWS's CDN. I run a Ruby process in a Docker container on AWS Fargate that spawns a bunch of threads for each league and game, fetches data, renders the new pages, and then uploads them to the S3 bucket.)
What are some of the notable challenges of working with so many different sports leagues? I'm sure you had to familiarize yourself with a lot of different ways to present the box score, which by itself can be a challenge. I saw you and some guy arguing once about how to present baseball box score stats, which made me laugh a little.
Do you know how many brackets I've drawn?
Those are so satisfying, but annoying to build. Obviously leagues have different numbers of teams, but then some have multi-game series, some have dynamic brackets (still haven't done NFL). March Madness has the First Four. The stupid MLS had single game 8-9 wild card matches, then a best-of-three first round, and the rest is single matches again! I haven't bothered with that one either.
There are so many small differences between leagues, and from a software engineering perspective it's a great exercise in implementing useful abstractions that can be reused across multiple leagues, but still support all their various quirks. I'm particularly proud of the boxes on the home page, which dynamically expand and contract based on the specific league, the status of individual games, and even the local time zone. That is one system that supports dozens of different configurations and was very fun to build. On the other end of the spectrum, I gave up on generalizing the brackets long ago, and I just copy and paste from an old one whenever I muster up the strength to tackle a new one.
Since I'm constrained to 45 columns, things that seem like they should be the same for each league have to be heavily customized, like the schedule pages. I sometimes have to sacrifice details if the league has teams with really long names, or if there can be ties.
Some leagues just have weird events, like the NBA's Play-in Tournament and the NBA Cup, or the NWSL's now defunct in-season Challenge Cup, or how Premier League teams also play in the Champions League and the Europa League. Most leagues are "date" based, so you can go back and see games on any random date, but then the NFL is week-based, and I used a similar format for Champions League and Europa League tournament rounds. (Those tournaments also switched from eight small groups to a single giant group this year. That took up a few hours of a weekend.)
Since I don't have a single data source, often two leagues in the same sport may have different levels of support. The NBA and the WNBA use different data sources, so even though they look similar, it's mostly two separate implementations. I manually augment the NBA play-by-play data to include counts of personal and team fouls, but I'd have to reimplement that to do the same thing for the WNBA.
There are almost 1300 commits in my git repository. I care about getting as many small details right as I possibly can.
Does maintaining plaintextsports cost enough money to where one day you have to worry about how to pay for it? In other words, will it always be ad-free or at some point will you have to start thinking about how to monetize it?
It currently costs around ~$60-70 a month to run. I get at least that much value from the fun of building and using it and the occasional thanks and praise from internet strangers, so I don't mind the cost. I like to call it "my gift to the world".
I'd never try to turn it into a business. I have enough trouble getting people to use it—I once got a sign with a QR code confiscated at a Giants-Brewers game—I can't imagine getting people to pay for it. It'd make the site more complicated (and maybe slower!), and if it started making money, that'd make it stressful because I'd always want it to make even more money. I don't want that, and it's not worth it.
I've used PTS as a platform in the past, and could imagine doing so again in the future to promote something that matters to me, but I won't destroy the purity of the site just to make a quick buck. Even something like referral links for tickets, which would seem mutually beneficial, feels icky. And as for sports betting ads, over my dead body!
Okay, I have to hear the QR code story at the Giants-Brewers game. What happened?
Haha, I made a sign and went to the game to cheer on the Brewers, and also to hand out plaintextsports stickers. Games are slow moving, and crowds are sparse in the upper deck, so I tried to find people that looked friendly, and made a quick pitch—this is when I learned that I'm a really poor salesman. I slid over a few sections down the first base line, striking out more often than not. Eventually one of the ushers called me over and asked what I was doing. I explained that I wasn't with any company, just trying to tell people about my neat site, but he said that wasn't allowed. I said I'd stop, but he said he couldn't trust me, so if I wanted to keep the sign I'd have to take it to Guest Services, and he had to WALK WITH ME down there. Humiliating.
To add insult to injury the Giants scored as soon as I got back to my seat, but we held on for the W.
The next day I tried my luck again in the lower section, and converted some USF college kids who replaced their "Let's Go Gi-ants" chants with "Plain Text Spo-orts!", which was good fun. Still have the sign. (The other side says "WAY faster than ESPN".)
What's on the horizon for plaintextsports? Are there things you plan to add? I saw that you recently added a way to view stats by half and quarter, which is neat.
Yes! The per-quarter and per-half box scores were very fun to add. I hope you're enjoying them.
I might add an ASCII batter box with pitch locations for baseball for this upcoming season.
I once made a mock-up of how a personalized scoreboard would work, but never built it. That could be neat, but I don't think many people would use it. (I already have a version of this for major geographic areas here, but no one knows about it because it's not linked anywhere.)
The most likely new leagues/events would be the FA Cup and the EFL Cup, and support for La Liga. I already have access to this data, but need to work on integrating it; maybe for next year.
Currently I have scores for college football and college basketball, but no box scores or play-by-play because there are so many games and that's too much data to fetch and publish. It'd be neat to be able to support that and do it just for Top 25 and bowl games/March Madness.
Adding support for additional sports is a lot of work, and involves a long tail of handling rare edge-cases. This is especially true for non-team sports where I'd have to design everything from scratch. Tennis is often requested, but I'd only launch with both the men and women's tours at the same time, which potentially doubles the upfront work. I hear F1 often too, but I don't follow it. I did have golf early on, but then my data provider stopped working, and I don't care about golf enough to find an alternative, so it's pretty unlikely to come back anytime soon.
Are there things you wish you could add to plaintextsports but fall outside the scope of what's possible with the way you’ve designed the site?
It is definitely harder to find teams without the logos. I once tried experimenting with longer team names, but some people did not like it.
Team rosters with players' averages would be useful, but the tables would need to spill past my 45 column limit, and making them sortable would be tricky.
Let's talk Bucks basketball. Why aren't Dame and Giannis better?
Man, I will readily admit it: I do not know ball. I cheer when Giannis dunks, and Dame hits a step-back, and it feels like a gut punch when we give up a late 4-point play, but I don't have the slightest semblance of understanding of basketball strategy. I was very sad when we traded Khris.
What's one thing you can't live without during the NBA season? Can be anything you want to plug outside of PTS. A blog, a podcast, a stat you like to look at. Anything you want.
I spend a lot of time digging through JSON data, so I wrote jless to make that easier, and I literally use it every day. Outside of sports my life is a mix of tech and finance, and I've enjoyed recently subscribing to Stratechery, a tech newsletter by Ben Thompson, noted Bucks fan.
For more interviews, visit The F5’s Q&A archive. I’ve done interviews with the creators of EPM, DARKO, LEBRON, xRAPM as well as ESPN’s Dean Oliver, Kevin Pelton, and more.