Skip to content
Real-time platformWeb platform

Thunderpick

Three things change at once (the odds, the bet slip and the wallet), and the product is only trustworthy if a user never catches them disagreeing.

Thunderpick: the live site
Our role
Frontend engineering on the real-time surfaces
Timeline
Ongoing engagement
Team
Lead engineer, two frontend engineers

Real-time

Odds and match state

streamed, not polled

Crypto

Wallet and payouts

crypto-first balances

2

Product surfaces

sportsbook and in-house casino

01

The problem

Nothing on the page stays still

Real-time is not a feature of this product, it is the product. Odds move, matches progress, balances change, and all of it happens while the user is mid-decision.

That breaks the usual request-and-response model completely. It also creates the real risk: if the bet slip, the wallet and the live market disagree for even a moment, the user has watched the platform contradict itself about their money.

02

What we did

Build the front end around a stream

The client is React and Next.js with Tailwind, built around streaming updates over WebSockets rather than fetching on interaction. Python services sit behind it.

Most of the difficulty is consistency under motion: keeping the bet slip, the wallet balance and live market data agreeing with each other while all three are being updated independently, and keeping the interface responsive at that update rate rather than re-rendering the page every time a number moves.

  • WebSocket-driven state rather than request-and-response
  • Bet slip, wallet and market data reconciled against a single source of truth
  • Render work scoped so a changing odd does not re-render the page
  • Crypto wallet balances and payouts
  • Sportsbook and in-house casino on one front end
03

The outcome

A platform that holds together while it moves

Odds, match state and balances stream live across the sportsbook and casino, with the bet slip and wallet staying consistent through the update rate.

What it is built on

Frontend

  • React
  • Next.js
  • TypeScript
  • Tailwind CSS
  • Zustand

Real-time

  • WebSockets
  • Redis

Backend

  • Python
  • FastAPI
  • Celery
  • PostgreSQL
  • Docker

What we learned

  • 01

    When the data never stops moving, the architecture question is not how to fetch it but how to reconcile it. Pick one source of truth and make every surface read from it.

  • 02

    Scope your re-renders early. On a streaming interface, the naive approach is fine in development and unusable at production update rates.

Next step

Tell us what you are trying to build.

Thirty minutes with the engineer who would lead the project. You will leave with an opinion on what to build, what to skip, and roughly what it costs, whether or not you hire us.

2 build slots open · Next start: early next month

What happens next

  1. 1You send a few lines about the product and the deadline
  2. 2We reply within one working day with times
  3. 3A 30-minute call, no deck, no sales script
  4. 4A written summary and a ballpark range within 48 hours