Trading card anatomy¶
The PigPro trading card is the single player surface across the whole app. Clicking any player name or PigPro score pill โ on /draft-analytics, /lineup, /waivers, /offseason-intel, /players, the dashboard, the draft board โ opens the same card, backed by the same endpoint (/api/pigpro/card/<identifier>).
Layout¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ foil border colored by tier
โ โโโโโโ โ
โ โ โ RB โญโโโโโโโโโฎ โ
โ โ H โ Player Name โ 8.33 โ โ โ PigPro score ring
โ โ S โ TEAM ยท 26 y ยท 4 yrs โฐโโโโโโโโโฏ โ
โ โโโโโโ PRIME โ โ tier strip
โ PRIME โ+0.3 โ โ tier label + ฮ7d
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ PROJECTED CEILING FLOOR โ
โ 276 345 207 โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ ๐ฏ COMPONENT BREAKDOWN โ
โ ML Projection 27.6% โโโโโโโโโโ 9.61 (+2.65) โ
โ ADP Value 23.0% โโโโโโโโโโ 9.86 (+2.27) โ
โ VOR 18.4% โโโโโโโโโโ 9.74 (+1.79) โ
โ Consistency 9.2% โโโโโโโโ 7.22 (+0.66) โ
โ Boom Potential 9.2% โโ 1.89 (+0.17) โ
โ Usage 8.0% โโโโโโโโ 7.80 (+0.62) โ
โ Situation 2.3% โ
โ Recent News 2.3% โโโโโ 5.00 (+0.12) โ
โ โ
โ ๐ CONTEXT โ
โ League ADP: 10.0 (drafted 2x, rd 1) โ
โ NFL Draft: 2020 ยท R1 ยท #22 overall โ
โ Combine: 4.51s 40 ยท 205 lb โ
โ โ
โ ๐ 30-DAY TREND โ
โ [sparkline SVG] โ
โ โ
โ Updated 2026-04-19 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Hero section¶
Foil border¶
The outer border uses a CSS linear-gradient that shimmers subtly. Color is keyed to tier:
- Gold (
#f59e0b โ #fbbf24 โ #fef3c7) โ Tier 1 / PRIME (score โฅ 7.5). - Silver (
#94a3b8 โ #cbd5e1 โ #e2e8f0) โ Tier 2 / CHOICE (5.5 โ 7.5). - Bronze (
#92400e โ #d97706 โ #fcd34d) โ Tier 3 / SELECT (3.5 โ 5.5). - Gray (
#334155 โ #64748b) โ Tier 4 / RESERVE (< 3.5).
Headshot¶
Pulled from nflverse_rosters.headshot_url. If null, falls back to an initials circle colored by position (QB blue, RB green, WR amber, TE red, K cyan, DEF gray).
Identity strip¶
- Position โ colored strip (matches card's position color).
- Name โ the player's full name (
nflverse_player_ids.name). - Meta line โ team abbreviation (amber), age (years), years_exp, height (feetโinches), weight (lb). Any of these that are null are simply omitted.
Score panel¶
- PigPro ring โ big radial gradient gold circle with the 0โ10 score to 2 decimal places. Score font size is 20px inside a 72ร72 ring.
- Tier strip โ PRIME / CHOICE / SELECT / RESERVE. Capitalized, 9pt, white on tier color.
- Recommendation pill โ same label as the tier (PRIME / CHOICE / SELECT / RESERVE), colored by tier.
- ฮ7d โ change in pigpro_score versus 7 days ago. Green โฒ for positive, red โผ for negative, dash for flat. Requires at least 7 days of snapshot history; shows nothing until we've had 7 days of nightly
pigpro-scoringruns.
Stats strip¶
Three big numbers. All in PPR points.
| Field | Source | Notes |
|---|---|---|
| PROJECTED | player_projections.projected_points |
White. Total PPR we expect this season. |
| CEILING | player_projections.ceiling_score |
Green. 1.25ร projected. |
| FLOOR | player_projections.floor_score |
Gray. 0.75ร projected. |
Component breakdown¶
Eight rows, one per component (v1.1 Hybrid). Each row shows:
- Label โ human-readable ("ML Projection", "Recent News", etc.).
- Weight โ the weight as a percent, to match the formula.
- Fill bar โ
width = value / 10 ร 100%, gradient from position color to gold. - Value (contribution) โ the 0โ10 value, and in parentheses the contribution to the final score (
value ร weight ร position_multiplier). The contributions sum to the PigPro score.
The contribution math is live
These numbers are read directly from player_projections.model_features (JSONB) for the latest scoring run โ they're not retroactively computed in the browser. If the formula changes, restart pigpro-scoring and the cards update on the next refresh.
Context section¶
Only shown when there's data in at least one row.
- League ADP โ live Yahoo ADP from
adp_records(source='yahoo'), refreshed daily by theyahoo-adp-persistCronJob. Shows mean pick number, average round, and percent drafted. - NFL Draft โ year, round, overall pick. Pulled from
nflverse_player_ids.draft_*fields. - Combine โ 40 time, weight, vertical, broad jump, cone, shuttle. Only recent classes have data (2024 onward in our table).
News impacts¶
If the news-digest CronJob has extracted recent news for this player, up to 3 items show here. Each row:
- Direction badge โ color-coded left border (green positive, red negative, gray neutral).
- Magnitude score (0โ1).
- One-sentence reason (what the LLM said the news means).
- Date.
During offseason quiet periods (like right now, April 2026) this section may be empty. During season with actual beat-writer news, it lights up.
30-day sparkline¶
SVG polyline of the last 30 snapshots of this player's pigpro_score. Each daily pigpro-scoring run adds one row to pigpro_score_history; we plot them chronologically. Y-axis auto-scales to the player's own range, so a consistent-high player looks flat (by design โ they ARE consistent).
If fewer than 2 snapshots exist (brand-new player, or first week of the tool), the section shows "No history yet โ check back after a few daily snapshots."
Footer¶
- College (left) โ pulled from
nflverse_player_ids.college. - Updated date (right) โ
players.pigpro_updated_at. Typically same-day sincepigpro-scoringruns every morning.
How to open a card¶
| Surface | Trigger |
|---|---|
/draft-analytics |
Click the PigPro score cell (colored pill) in the Player Database table. |
/lineup |
Click the player's name OR PigPro pill. |
/waivers |
Click anywhere on the pickup card. |
/offseason-intel |
Click the expand arrow on a Player Focus List row; the inline expand shows subscores, clicking the name opens the full card. |
/players (Player Hub) |
Click any player name or player card. |
/draft, /draft-visualizations, dashboard |
Same โ any element with data-player-name attribute. |
All surfaces share one JS module (static/js/pigpro-card.js) and one CSS file (static/css/pigpro-card.css). A legacy bridge catches any lingering openPlayerCard() / openPlayerCardByName() call sites and routes them to the same card.
Want more on the card?¶
See the formula for why the component weights are what they are, and the API reference for the exact response shape.