OllinDocs
Using the product

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):

ChipDefinition
PairedAt least two ranks equal
Two-toneExactly two suits
MonotoneOne suit
RainbowThree suits
ConnectedRanks within a 4-gap span
HighTop card T or higher
LowTop 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:

ColumnNotes
BoardLinks into the strategy browser. Sortable (rank order).
TextureAbbreviations: P, 2T, M, R, C, H, L.
One column per root actionCheck / 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 EVNode EV for the OOP player, bb. Sortable.
NashThe 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.

On this page