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 ↗- 12/12data-expansion features shipped
- 456commits since April 2026
- 60automated test files
- 2002earliest season in the all-time leaders
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.
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.
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.
- Site reworkTeams and Standings pages, a real homepage, new nav
- Off / Def / Net rating + PIEOn the Advanced tab
- Clutch splitsA new player tab
- Scoring distributionDashboard
- UsageDashboard
- DefenseDashboard, including Defensive Win Shares
- Team Four FactorsOn the Team Stats page
- Team shot chartWhere each team shoots from
- Shot-zone leadersLeague-wide leaderboards by zone
- Per-game advanced statsClick a Game Log row to expand that game's full advanced breakdown
- Injury reportStatus pills on player pages and team rosters, plus a notification job
- Betting oddsSpread and total under the game time on the team schedule
Game film
Screens from the live site.
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
Architecture
- Express serves the built React app and a JSON API from one Heroku app.
- All outside data goes through a
SportsDataProvidercontract, so a source can be swapped without touching the routes. - MongoDB caches upstream responses so repeat visits are fast.
- Pushing to
origin/masterdeploys 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