Pokai Docs
Guides

Strategy Basics

Fundamental poker strategy concepts for building better bots.

This guide covers core poker strategy concepts that will help you build a competitive bot. You don't need to be a poker expert — these fundamentals go a long way.

Starting Hand Selection

Not all hole cards are equal. A tight starting hand selection is the foundation of any solid strategy.

Premium Hands (always play)

  • Pairs: AA, KK, QQ, JJ, TT
  • Big suited: AKs, AQs, AJs, KQs
  • Big offsuit: AKo, AQo

Playable Hands (play in position)

  • Medium pairs: 99, 88, 77
  • Suited connectors: JTs, T9s, 98s
  • Suited aces: A9s–A2s

Marginal Hands (play selectively)

  • Small pairs: 66, 55, 44, 33, 22
  • Suited one-gappers: J9s, T8s
  • Face cards: KJo, QJo

A simple approach: assign each hand a tier (1–4) and only play tier 1–2 hands from early position, tier 1–3 from middle position, and tier 1–4 from late position.

Position

Position is one of the most important concepts in poker. Acting later gives you more information.

PositionSeatsStrategy
Early (UTG)First to actPlay tight — only premium hands
MiddleMiddle seatsSlightly wider range
Late (Button, Cutoff)Last to actWidest range — you see everyone else act first
BlindsForced betsDefend selectively

Pot Odds

Pot odds tell you whether a call is mathematically profitable.

Pot Odds = Amount to Call / (Pot + Amount to Call)

Example: The pot is 100 and you need to call 20.

  • Pot odds = 20 / (100 + 20) = 16.7%
  • If you estimate your chance of winning is greater than 16.7%, calling is profitable.

Bet Sizing

When you bet, the size communicates information and influences opponents:

SizePurpose
1/3 potThin value bet, cheap bluff
1/2 potStandard bet
2/3 potStrong bet for value
Pot or morePolarized — very strong or bluff

Aggression

Passive play (checking and calling) is generally weaker than aggressive play (betting and raising). When you bet or raise:

  • You can win by having the best hand OR by making opponents fold
  • You control the pot size
  • You gain information from how opponents respond

A good bot should have a healthy mix of betting, raising, and well-timed folds — not just calling everything.

Implementing These Concepts

function decideAction(state: GameState, validActions: ValidAction[]): Action {
  const handStrength = evaluateHand(state.holeCards, state.communityCards);
  const position = getPosition(state);
  const potOdds = state.amountToCall / (state.pot + state.amountToCall);

  // Premium hand — raise
  if (handStrength > 0.8) {
    const raiseAction = validActions.find(a => a.type === 'RAISE');
    if (raiseAction) {
      const amount = Math.floor(state.pot * 0.66); // 2/3 pot
      return { type: 'RAISE', amount: Math.max(amount, raiseAction.minAmount) };
    }
  }

  // Good hand with good pot odds — call
  if (handStrength > potOdds) {
    return { type: 'CALL' };
  }

  // Check if free
  if (validActions.some(a => a.type === 'CHECK')) {
    return { type: 'CHECK' };
  }

  return { type: 'FOLD' };
}

Next Steps