The Tells Board answers "what does this opponent tend to do." The Threat Board answers "who drives those tendencies, and how do they match up against Tampa Bay this week." This isn't a claim that these grades are universally better than a service like PFF — it's a much narrower one: how much a player matters against Tampa Bay specifically, this season.

Threat — the headline number

Threat answers one question: "how much should Tampa Bay worry about this player this week?" It is a percentile, not a standardized grade — where this player's raw projected weekly impact ranks among eligible positional peers (below-threshold players are labeled LOW PROJECTED ROLE and excluded from that ranking population so a bench player can't distort real starters' ranks). Threat 92 means roughly top-8%-level among relevant weekly peers — not "8 points below elite."

It is explicitly not a weighted average of Quality, Role, and Matchup (that was the v1 formula, since replaced). Instead it's computed in raw expected-value units first:

ProjectedImpact = ProjectedOpportunities × ExpectedValuePerOpportunityVsTB

— summed across every opportunity type a player has (an RB sums rushing and receiving value separately, for example) — and then converted to a percentile. A high-volume average player can outrank a low-volume elite one if he's projected to produce more total positive value, exactly like real usage does.

Quality, Matchup, and Projected Role

Each carries its own A/B/C confidence, not one badge for the whole card:

The grading scale

Quality and Matchup are both 0–100 standardized grades (50 = average performer / neutral matchup, each 15 points ≈ one standard deviation) — but they answer different questions, so each has its own label. Threat is not a standardized grade at all: it's a percentile — where this player's projected weekly impact ranks among eligible positional peers, including projected opportunity. A Threat of 92 means roughly top-8%-level among relevant weekly peers; it is not "8 points below elite."

Quality — "how good has he been?"

GradeMeaning
90-100Elite
80-89Very Good
65-79Above Average
45-64Average Range
30-44Below Average
0-29Poor

Matchup vs Tampa Bay — "better or worse than average?"

GradeMeaning
80-100Very Favorable
65-79Favorable
45-64Neutral / Mixed
30-44Unfavorable
0-29Very Unfavorable

Threat — "how worried should TB be this week?"

PercentileMeaning
90-100Elite Weekly Threat
80-89High Threat
65-79Above-Average Threat
40-64Moderate Threat
20-39Low Threat
0-19Minimal Projected Threat

Projected Role is shown in football units (carries, targets, dropbacks, snaps) — not another 0–100 grade — because "how much will he play" is more useful as a number of touches than a standardized score. Confidence (A/B/C) is tracked separately for Quality, Matchup, and Threat, since the evidence behind each can differ even for the same player.

Small-sample shrinkage

Every raw metric is blended toward a same-season league prior before being z-scored, weighted by how much sample the player actually has. A receiver who caught 3 passes in Week 1 doesn't get a 96 grade — his number gets pulled hard toward league average until his sample grows.

What gets a full player grade, and what doesn't

Grading only goes as deep as the publicly available data supports. Rather than invent precision nobody can verify, the Threat Board uses three tiers:

Personnel Quality vs. Unit Performance

Every unit shows two separate team-level numbers that are allowed to disagree: Personnel Quality is a roster estimate — the Role-weighted average of the individual players' Quality grades (only meaningful for QB/RB/WR/TE/Edge/Interior DL; null for OL/LB/Secondary, since no individual rollup is invented there). Unit Performance is what the team has actually produced on the field this season. For OL, Linebackers, and Secondary, Unit Performance is context-adjusted — it compares each team's outcome (pressure rate, run-stuff rate, EPA allowed) against what a league-average unit would have produced facing that exact same mix of situations (pass-rusher count, box count, pressure presence), not the raw leaguewide rate. A team with good personnel can still have below-average results, and vice versa — that gap is itself information.

The "why he matters" bullets and evidence plays

Narrative bullets are generated from plain string templates driven by the same computed facets, in five fixed slots — role, primary strength, primary weakness, Tampa Bay relevance, and a confidence/sample warning — each filled only when the data actually supports it. A weakness bullet is never invented when nothing is actually below league average, and a candidate is never selected from a metric family (e.g. two different efficiency stats) that's already been used by another bullet. Every eligible player card also gets up to six automatically selected evidence plays — matchup-relevant positive and negative plays plus a recent representative play of each — chosen by the same completeness/relevance logic, not hand-picked. None of this is written or polished by a language model; the numbers decide the grades and the bullets, not the other way around.

Top Threats and Attack Points

Top Threats simply ranks every graded player by Threat. Attack Points — where Tampa Bay can attack this opponent — is restricted to claims the data can actually support: a weak Offensive Line or run-defense Matchup at the unit level, or a skill-position player whose own projected value against TB is directly measured and negative. Consistent with the rest of the board, an Attack Point is never an individual lineman, linebacker, or defensive back blamed without attribution data.

What's deliberately not in v1

Slot/outside alignment, per-route data for non-targeted receivers, run-concept classification (zone/gap/power), and individual defensive-back coverage assignment aren't available in any publicly ingested source used here, so no facet claims to measure them. A licensed hand-charted dataset (e.g. Fantasy Points) could add these later — the underlying schema already records a source per fact so that becomes additive, not a rewrite.

Versioned history

The first time a given week's matchup is published, it's saved as an immutable official snapshot. Any later refresh — a data update, a model change — is saved as a new numbered revision, never overwriting the original. That's what makes an honest postgame audit possible later: seeing exactly what was believed and when, not just the latest belief.