# PersonOverview

> The composed player overview — everything a consumer popup or a statshawk-web public marketing page needs to render one player, in a single cacheable read: identity (incl. the optional, source-attributed bio enrichment — position/height/weight — which is never load-bearing: a consumer renders a likeness-free fallback from name/team/position/sport), the current team, the phases/measures the person actually recorded that season, the materialized season aggregate, and a context-rich game log capped to the most recent [`PERSON_OVERVIEW_GAME_LOG_CAP`] entries.

The composed player overview — everything a consumer popup
or a statshawk-web public marketing page needs to render one player, in a
single cacheable read: identity (incl. the optional, source-attributed bio
enrichment — position/height/weight — which is never load-bearing:
a consumer renders a likeness-free fallback from name/team/position/sport),
the current team, the phases/measures the person actually recorded that
season, the materialized season aggregate, and a context-rich game log
capped to the most recent [`PERSON_OVERVIEW_GAME_LOG_CAP`] entries.

Pure composition over the existing per-endpoint reads ([`person_profile`],
[`person_capabilities`]' registry filter, `/stats`' [`SeasonStatsView`],
[`person_game_log`]) — no new store surface.

**Kind:** object

| Field | Type | Required | Description |
|---|---|---|---|
| `capabilities` | `PhaseCapabilities[]` | yes | The phases this person actually recorded this season, each with its full registry measure inventory — the same presence-filtered projection `/capabilities` serves. Empty when the person has no data in scope. |
| `competition` | `CompetitionId` | yes | The competition the overview is scoped to. |
| `game_log` | `PersonGameLogEntry[]` | yes | The context-rich game log for `(competition, season)`, most recent LAST (the same order as `/game-log`), capped to the most recent [`PERSON_OVERVIEW_GAME_LOG_CAP`] (30) entries. |
| `person` | `Person` | yes | The assembled person profile. Every bio enrichment field is optional. |
| `season` | `SeasonYear` | yes | The season actually served (the requested one, or the resolved default when the request omitted `season`). |
| `season_stats` | `SeasonStatsView` | yes | The materialized season aggregate, phase-namespaced — the same shape `/stats` serves (`{}` when the person has no data this season). |
| `sport` | `SportId` | yes | The competition's sport — whose phase registry shapes the stats below. |
| `team` | `null \| TeamRef` | no |  |

**Used by:** [ApiResponsePersonOverview](/docs/reference/data-model/envelope/ApiResponsePersonOverview.md)
