Player frontend
The whole sportsbook, in one script tag.
It mounts into a div on your page — not an iframe — and carries its own styling. Your brand’s colours come from the backoffice at runtime, so a redesign is a setting rather than a release.
Everything on, sorted the way a bettor thinks
Event list
Live and upcoming side by side, grouped by sport and competition, with the two or three markets you chose as defaults priced right on the card — so the common bet takes one click, not three.
- Live events first, with the score and the clock as the feed sends them
- Default markets per sport, configured in the backoffice
- Prices flash green or red the moment they move
- Search across competitions and competitors

Every market on one event
Match view
The full market set for a fixture, grouped and collapsible, with handicaps and totals rendered as a player reads them rather than as the feed keys them.
- Markets grouped, with the popular ones open by default
- Handicap, total and competitor names substituted into every label
- Suspended markets shown as suspended, not quietly missing
- The same price movement indicators as the list

Where the promise is either kept or broken
Betslip
Singles, multiples and systems, with the stake, the potential return, and — the part most betslips get wrong — an honest account of what happened to the price between opening the slip and pressing the button.
- Odds tracked against the market, not frozen at selection time
- A moved price is shown before the bet is sent, not after
- “Accept changes” means the current price is used, not the old one
- Refusals explained: expired session, market closed, limit exceeded
- A held coupon reports back when the trader accepts, refuses or counters

What the player has running
Open bets
The player’s own coupons with their current state, updated as events settle, and cashout offered where your configuration allows it.
- Open and settled, with each leg’s own result
- Cashout where enabled, at the commission you set
- Counter-offers surfaced for acceptance or refusal

The part nobody demos
What happens when a bet does not go through.
Most of a betslip’s work is the unhappy path, and it is where a player decides whether to trust you. Every refusal here has a message behind it.
The price moved
Shown before the bet is sent. With “accept changes” on, the current price is what gets taken — not the one that was on screen a moment ago.
The market closed
Reported as a closed market, so the player knows to pick something else rather than wondering whether it worked.
The session expired
Told plainly, with a button to reload — rather than a generic failure the player reads as a rejected bet.
Over the limit
The coupon goes to a trader instead of being refused. The player sees it as pending, and hears back either way.
The trader countered
Different odds come back as an offer the player accepts or declines. Nothing is placed until they choose.
The wallet failed
Nothing is taken. The failure is logged per coupon in the backoffice, with an automatic retry and a manual resend behind it.
