◀ Channel guide
CH 02CH ▶

Channel 2 · Stat sheet

KNOW
THE W

A live WNBA stats site for new fans. Look up a player, compare two of them side by side, and read the advanced numbers without fighting the menus.

Open knowthew.net ↗
SEG 1

Head to head

Two real careers, side by side. Pick a season on each side. The advanced numbers count up and the bars show who leads.

Nneka OgwumikeLos Angeles, Seattle
Courtney VanderslootChicago, New York
2016LAS
VS
2020CHI
PER GAME
ADVANCED

These are real career numbers from the frozen Basketball Reference tables the site's own tests use (the repo's test-data folder), bundled into this page. Nothing here calls a live API. The live site pulls fresh data.

SEG 2

The starting twelve

An August 2026 audit of the balldontlie WNBA API found data the site wasn't showing. Twelve features came out of it. All twelve shipped, one at a time, each with its own tests and a live check.

  1. Site reworkTeams and Standings pages, a real homepage, new nav
  2. Off / Def / Net rating + PIEOn the Advanced tab
  3. Clutch splitsA new player tab
  4. Scoring distributionDashboard
  5. UsageDashboard
  6. DefenseDashboard, including Defensive Win Shares
  7. Team Four FactorsOn the Team Stats page
  8. Team shot chartWhere each team shoots from
  9. Shot-zone leadersLeague-wide leaderboards by zone
  10. Per-game advanced statsClick a Game Log row to expand that game's full advanced breakdown
  11. Injury reportStatus pills on player pages and team rosters, plus a notification job
  12. Betting oddsSpread and total under the game time on the team schedule
SEG 3

Game film

Screens from the live site.

SCREENSHOT PENDING
Player page, Advanced tab
SCREENSHOT PENDING
Compare tool with the playstyle radar
SCREENSHOT PENDING
Team schedule with odds and injury pills
SEG 4

Why I built it

Most stat sites hand you a wall of menus and tables. KnowTheW is built for someone who just started watching the WNBA and wants to look up a player, see how good she is, and compare her to someone else.

It started in April 2026 on ESPN's public endpoints. The data layer now sits behind a swappable provider contract, and balldontlie supplies the advanced stats, injuries and odds. Claude writes graded scouting reports from the numbers.

The hard part was trusting the numbers. In one case Defensive Win Shares showed 0.15 where the real season total was 6.01. Catching that kind of bug is most of the work.

How it's builtstack · architecture · hard problems
React 18ViteNode.jsExpressMongoDB AtlasHerokuballdontlie APIESPN statsClaude APInode:testESLint

Architecture

  • Express serves the built React app and a JSON API from one Heroku app.
  • All outside data goes through a SportsDataProvider contract, so a source can be swapped without touching the routes.
  • MongoDB caches upstream responses so repeat visits are fast.
  • Pushing to origin/master deploys to Heroku. npm run check (lint plus tests) is the gate before every commit.
  • Notification jobs for game starts and injury changes are built and tested behind internal routes.

Problems worth mentioning

  • Defensive Win Shares divided by games played. A per-game API mode quietly divided a season total, so a player showed 0.15 instead of 6.01. The fix switched to totals, and the cache version was bumped alongside the value change so stale rows could not keep serving the old number.
  • The API's team field lies about history. It returns a player's current team for every past season. A Franchise Leaders page was built, caught on this, and withdrawn before it shipped.
  • A full database stopped a backfill. The free Mongo tier filled up mid-run. Every cache write now checks a 400 MB storage guard first.

456 commits · 60 test files · public repo