Slate
The game board got the same treatment the Props and Arb pages did: clicking a game now opens a full market board beside the list instead of navigating away, and everything above the slate — a Market Pulse hero, a marquee of top edges and a three-deck filter card — collapsed into one command bar. Underneath that, the cards themselves stopped lying by omission: every price on a card now carries its own EV, and the number a card shows is the best edge on that side rather than the longest price, which on alternate lines are routinely not the same bet. The top-EV pill became the bet. And for Sharp users, the line-movement chart gained a band underneath it plotting Pinnacle’s limit over time — how much the sharpest book in the market is willing to be held to the number every EV figure on the page is measured against.
- 01New Feature
The Game Board — A Panel Instead Of A Page
Clicking a game used to be a route change: the slate unmounted, a separate page loaded, and comparing two games meant a there-and-back trip each time. The board now opens in place. On a wide screen it docks as a permanent column beside the list and swaps contents as you move down the rows; below that width the same panel arrives as a bottom sheet. It carries the part you act on — the market tabs, the line ladder, the Best Bet ticket, and the per-book tape with its own charts and bet buttons. The market strip is hoisted to the top of the panel, so the markets are the first thing in the rail rather than something you scroll a board to reach. What stays on the routed page is what a narrow rail would only duplicate: the breadcrumb, Share, the game switcher, the KPI strip and the sharp meter. That page is still there, still answers its own URL, and is one button away from the panel. The odds board also goes full-bleed, matching the other trading surfaces.
- 02Improvement
One Command Bar, Not A Screen Of Chrome
The page opened with a "Market Pulse" hero — title, subtitle, grid backdrop, a four-cell counter block and a marquee of the top edges — stacked on a three-deck sticky filter card. Together they cost most of a screen before the first game was visible, and the marquee was the same list as the cards beneath it, which were already sorted by edge. All of it is now one bar under a single hairline: sport tabs, market chips, every filter, and the live counters moved to the right where they cost nothing. Clear Filters appears only when the slate is showing a subset, carries the number of active filters, and animates in as the board narrows. On a phone the filters live in a drawer, and a filter that empties the board can no longer hide the control that emptied it. Two filters nobody was using were removed outright.
- 03Improvement
Every Price On A Card Now Shows Its Edge
A card printed six prices and one EV number, and the six prices were the longest ones available. That is the right answer on a single line and the wrong one across alternate lines, where a shorter price on the line Pinnacle actually quotes routinely beats a longer price on a line nobody can grade. Each cell now carries the EV of the exact book and line it is showing, and the play a cell picks follows the edge rather than the price — falling back to the best available quote, with no EV beside it, when nothing in the market can be graded at all. The headline pick follows the same rule: lines with no Pinnacle reference are no longer ranked on the placeholder zero the engine stamps them with, which used to let an ungradeable alternate line outrank a genuinely priced one and put a headline on a card that neither its own cells nor the detail panel would ever show.
- 04Improvement
The Top-EV Pill Is The Bet
The pill on each card named the book behind the best edge and then made you go find it. It now carries that book’s betslip link directly, so the card’s headline play is one click from the slate. Books that publish no link — and any case where your own book filters move the pick off the card’s headline book — keep the plain, unclickable pill rather than sending you somewhere you were not looking. A related fix: the pill rendered as a button, advertised the link with an arrow, and then handed every click to the card’s own click overlay behind it. It now sits above that overlay, so pressing it opens the book instead of the detail panel.
- 05New Feature
Pinnacle Limit History Under The Movement Chart
The line-movement chart tells you where a number went. It now also tells you how hard the sharpest book was willing to be held to it: a band beneath the price plot charts Pinnacle’s limit over time, on its own scale, for Sharp subscribers. A rising limit is a confidence signal — Pinnacle taking more at the number every EV figure on this page is measured against. Observations are heartbeat-paced rather than tick-paced, so a flat band means the size was watched and did not move, never that we stopped looking, and the band never extends past the last line still live. Peer-to-peer size was deliberately left off: a survey of the live table put Novig, ProphetX and BetOpenly at a ~$100 median against a $2k-median house limit, and charting them together forced a second scale that flattened both. Books quoting in another currency, or in an unidentified one, are excluded rather than mixed in — the app does no FX. Non-Sharp readers, and markets Pinnacle does not quote, simply see the price chart, unchanged and unbroken.
- 06Improvement
One Best Bet Ticket, One Book Row, Everywhere
The Best Bet ticket existed as three copies across the Board and the Tape, and the strip under every book row — size, Slip, Bet — existed as six, across the game board, both Tape layouts, the prop panel and the prop detail page’s desktop and mobile variants. They were the same components and they had already drifted, so a fix to one quietly missed the rest. Both are now single components, matching the props ticket: three bands of fixed height so the board does not jump as the edge moves between markets, with size anchored to the right edge of every row so it stays scannable as a column. Book rows also gained a small price trace, showing where each book’s number came from rather than only where it is — a book that drifted into an edge reads very differently from one that has held its number all morning.
- 07Improvement
Game Links Land On The Board, Not A Dead End
Every in-app route to a game — the dashboard’s EV Spotlight and upcoming games, the steam and reverse-line-movement feeds, sharp signals, AI POD picks, and the links in alert emails and push notifications — used to open the standalone game page, where the only way onward was back. They all now open the board with that game docked in the panel, and they name the side and line they fired on, so the panel opens on the selection you clicked rather than on whatever edge happens to lead by the time the page loads. A deep-linked game is pinned onto the page even when your saved market and book filters would normally hide it, so a link never lands on a board that does not contain the thing it pointed at — and the next refresh returns you to your normal slate. Signals on games that have already started still go to line history, since the board only serves games yet to commence.
- 08Fix
Movement Charts No Longer Freeze At The Moment You Opened Them
The line-movement popup fetched its history once and then held it — as prices updated behind it on the Odds Screen or the Arb board, the chart underneath stayed at the shape it had on open. It now refreshes with its host’s prices, including on fallback polling. The cache behind it was the other half of the problem: movement and line-history responses were cached under keys with no notion of generation, so a fresh request could be served an entry written before the last ingestion. Both are now stamped with a version that the ingestion job advances after each game’s snapshot commits, and the limit band shares the price chart’s expiry so the two can never render mismatched spans of the same x-axis.
- 09Fix
Forced Refreshes That Quietly Returned Old Data
A forced refresh could attach itself to a request that was already in flight — one started before the odds update that prompted the refresh — and return its result as if it were new. Forced requests now bypass both the memo and any in-flight call, and a superseded request can no longer write its stale result into the cache on the way out.