Skip to content
StreakDeck
Data sources

Where the numbers come from

Every stat on StreakDeck traces back to a public source. This page lists those sources, explains how raw data gets shaped into the metrics you see (park factors, wRC+, xwOBA), and shows when the current build was put together.

Sources

We pull from six public feeds. Each one is read-only on our side: no source ever gets a request that changes its data, and no private or paywalled feed is mixed in.

MLB Stats API

Site

Schedule, results, lineups, box scores, and play-by-play. The backbone of every game page. Refreshed during the season so live games update without a full rebuild.

Baseball Savant / Statcast

Site

Pitch-by-pitch data including exit velocity, launch angle, barrels, and pitch type. Powers the contact-quality numbers on every player page and the xwOBA on contact metric.

FanGraphs

Site

Advanced stats and the season wOBA weights used to compute wRC+. We use the public FanGraphs Guts page weights, refreshed at the start of each season.

Lahman database

Site

Historical season totals, postseason results, and franchise records going back over a century. The archive uses Lahman for anything pre-2008.

Open-Meteo

Site

Free weather forecasts and historical observations. We pull a single conditions snapshot per game (temperature, wind, precipitation) using the venue coordinates and game time.

The Odds API

Site

Pre-game moneyline and run-line odds. Snapshot taken a few hours before first pitch and pinned to the game page as a record of where the market sat going in.

Park factors

Hitters in Coors Field do not face the same conditions as hitters in Petco Park. To compare them fairly, every player's wRC+ is park-adjusted using a per-venue, per-year runs factor (and a separate factor for home runs). A value of 1.00 means league average. Higher than 1.00 means the park inflates the dimension, lower than 1.00 means it suppresses it.

We use three-year-trailing factors from public Baseball Reference tables, cross-checked against the FanGraphs Guts park factor exports. Each per-player page surfaces the home-venue multiplier so you can see what was adjusted away.

Most extreme hitters' parks
VenueRunsHRAVG
Coors Field1.161.101.09
Great American Ball Park1.051.171.01
Fenway Park1.040.921.06
Yankee Stadium1.031.160.99
Citizens Bank Park1.031.121.01
Most extreme pitchers' parks
VenueRunsHRAVG
T-Mobile Park0.950.940.96
Tropicana Field0.960.950.97
Petco Park0.960.990.97
Oracle Park0.970.910.99
Citi Field0.980.940.99

Values shown are for the most recent fully-played season in the source tables. Parks not in our table fall back to a neutral 1.00, so they neither help nor hurt their players in wRC+.

Build manifest

These numbers describe the exact build you are reading right now. If something looks stale, this is where to check first.

Built at (UTC)
2026-05-29 19:54:50Z
Source commit
06d4af7
Package version
0.1.0
Season covered
2026
Hot DB last refreshed
2026-05-29 17:32:56Z
Archive DB last rebuilt
2026-05-23 18:41:14Z

Stats library

All sabermetric formulas live in a single, dependency-free module and are the same on every page. The formulas (slashLine, wRC+, xwOBA on contact, platoon splits, barrel rate, hard-hit rate, average exit velocity) are documented in the open source src/lib/stats/README.md with the exact equations and sources used. wRC+ uses FanGraphs wOBA weights and park factors as described above. xwOBA on contact uses a launch-speed / launch-angle bin model from the MLB barrel definition.

Refresh cadence

  • Production hot DB: refreshed every hour during the regular season. Picks up completed games, finalized box scores, and live pitch data.
  • Archive rebuild: the static site you are reading is re-rendered on every successful hot DB refresh, so the Archive lags live data by at most one hour.
  • Cold archive DB: rebuilt at the end of each season when the previous year's pitch data moves from hot to cold. Otherwise immutable.
  • Pre-game inputs: weather, lineups, and odds snapshot a few hours before first pitch and pin to the game page. They do not get rewritten after the game starts.