Family view
One solved spot, 184 flops — boards gallery, arriving ranges, and the aggregate flop report.
/study/{spotId} is one solved heads-up spot: a context strip (depth, line,
positions, pot, effective stack, SPR) with its preflop lineage, over three
tabs.
Boards tab
The gallery of all 184 canonical flops, sorted high-to-low (A-high boards first). Each tile shows the three cards and a mini stacked bar of the root action mix — the OOP player's range-wide strategy on that flop. Clicking a tile opens the strategy browser for that board.
Texture filter chips narrow the gallery; active chips intersect (a board must match every selected texture):
| Chip | Definition |
|---|---|
| Paired | At least two ranks equal |
| Two-tone | Exactly two suits |
| Monotone | One suit |
| Rainbow | Three suits |
| Connected | Ranks within a 4-gap span |
| High | Top card T or higher |
| Low | Top card 9 or lower |
Chips with zero members hide; each chip shows its member count.
Preflop tab
Both arriving ranges as 13×13 charts — the same ranges the preflop tree
computed on the other side of the bridge. The OOP chart carries a
solver weights badge: cell fills are true reach weights.
IP weights: uniform (v0)
The IP chart may instead carry an amber "IP weights: uniform
(v0)" badge. The v0 root extraction cannot recover IP reach weights
from the sealed producer data, so the IP range is served
membership-only — every combo in the range at uniform weight 1.
Treat it as "which hands are here", not "how often". Real IP weights arrive
with the tree tier. On the wire this is meta.ip_weights_uniform on every
NodeDocument of the family (see
the
contract).
Aggregate tab — the flop report
A texture summary strip (per texture: member count, mean action mix, and the aggregate bet frequency) over a sortable table of all 184 boards:
| Column | Notes |
|---|---|
| Board | Links into the strategy browser. Sortable (rank order). |
| Texture | Abbreviations: P, 2T, M, R, C, H, L. |
| One column per root action | Check / Bet 25% / Bet 55% / … / All-in — the range-wide frequency on that board. Sortable, so "which boards get bet 80% most" is one click. |
| OOP EV | Node EV for the OOP player, bb. Sortable. |
| Nash | The board solve's exploitability, % of pot. Sortable. |
Where the aggregate comes from
There is no aggregate endpoint on the API yet (open question:
/v1/families/:fam/aggregate). In live mode the app builds this report
itself by fanning out over the per-board endpoint with bounded concurrency
(12 at a time), cached for an hour per board. Boards whose documents fail to
fetch render as em-dashes — gaps are shown, never fabricated. If the family
detail itself fails, the tab says so and the Boards tab keeps working.