Prop Screener
Filters props by league, market, odds, hit rate and bookmaker — and the bug where the fetch wrote the URL instead of reading it.
/prop-screener/[view] · src/composed/prop-screener
The general screener. League picker, board query, watchlist — the same three parts as the 100 Club, with the filter set opened all the way up.
The bug only this board had
fetchProps called setCurrentPage(page) from inside the request. So the
URL was written by the fetch rather than the fetch being keyed off the URL: the
address and the data could disagree for the length of a round trip, and a failed
request left the page number pointing at a page nobody was on.
It is now keyed off the URL in one direction only — the page number is an input to the key, never an output of the response.
The general rule
A response may not write the address bar. If the URL is the input to a key, then anything the response sets is a second source of truth for the same fact, and the two disagree exactly when a request is slow or fails — which is when a reader is already confused.
Filters
Every one of them is in src/components/filters/propscreener-filter.tsx, which
is the complete set and what FullToolFilters mounts. See
Conventions for why a filter reachable only from
the top bar is a bug.
Prop Hunter
Ranks player props against their own history to surface mispriced lines, behind a two-line composed file that is deliberately two lines.
100 Club
Props hitting at 100% over the selected window — the one board with a right rail of its own, and a watchlist that stopped being a second copy of server state.