Table Talk
ArchivedSeptember 1, 2022
The Flutter frontend for the card game platform — connected to Firebase Firestore for real-time game state. The flagship game: Setback, a trick-taking card game with bidding, trump selection, and strategic discarding. A deep dive into the rules of Setback and why traditional card games are perfect candidates for digital adaptation.
Purpose
Built the Flutter frontend for the Table Talk card game platform, backed by Firebase Firestore for real-time state sync. The primary game was Setback — a trick-taking game I grew up playing that has enough strategic depth to be compelling digitally but is simple enough to explain in a few paragraphs.
Stack
What I Learned
- Setback (also called Pitch or High-Low-Jack) is a trick-taking card game for 2-4 players. The four scoring points in each round are: High (whoever plays the highest trump card), Low (whoever plays the lowest trump card), Jack (whoever captures the Jack of trump), and Game (whoever captures the most card points, where 10s=10, Aces=4, Kings=3, Queens=2, Jacks=1). Each round, these four points are contested. First team to a target score (typically 11 or 21) wins.
- The deal and bidding flow: deal 6 cards to each player (some variants deal 9). Starting left of the dealer, each player bids how many points (1-4) they think they can win, or passes. The highest bidder names trump suit. In some variants, the dealer can "steal" the bid at the current price. Bidding is the strategic crux — overbid and you go set (lose your bid amount), underbid and you leave points on the table.
- The discard round is where Setback gets tactically interesting. After trump is named, players discard all non-trump cards and draw back up to 6. The dealer gets the remaining cards from the deck and can build their hand from all of them — a significant advantage. This creates strategic tension: the dealer position rotates, so the advantage is shared, but the current dealer has the best information and the most options.
- The discard strategy is where depth emerges. You must discard non-trump, but you might also strategically discard trump to manipulate what is in play. If you hold the 2 of trump (guaranteed Low point), discarding it means the 3 becomes the new Low — potentially giving Low to an opponent who thought their 3 was worthless. If you hold a lone Jack of trump without support cards, you might lose it in a trick to someone with higher trump. Sometimes discarding the Jack is better than risking its capture.
- Firestore real-time listeners make card game state synchronization elegant: the game document contains the full game state (deck, hands, trick pile, scores, whose turn it is), and every client listens to changes on that document. When a player plays a card, the client writes the move to Firestore, a Cloud Function validates it (authoritative server), updates the game state, and all clients receive the update simultaneously through their listeners. The latency is acceptable for turn-based games (sub-second).
- Modeling card game state in Firestore required careful document design: hands are stored as arrays of card objects (suit + rank), but each player should only see their own hand. Firestore security rules can restrict field-level access, but the simpler approach is a subcollection per player with their private hand, and a shared document for the public game state (trick in progress, scores, whose turn, trump suit). The private/public split mirrors the physical reality: your hand is hidden, the table is shared.
Key Insights
- Traditional card games are perfect candidates for digital adaptation because the rules are battle-tested over centuries. Setback has been played for generations — the rules are balanced, the strategy is deep, and the social dynamics (reading bids, playing off your partner) are well-understood. You do not need to design a game. You need to implement one that already works.
- The dealer advantage in Setback (getting to choose from the remaining deck) is a game design pattern worth studying: rotating asymmetric advantage. Each round, one player has a structural advantage, but the advantage rotates so everyone gets it equally over time. This pattern appears in board games (first-player advantage with rotating start), sports (home-field advantage with alternating venues), and business (taking turns leading meetings). Fairness does not require symmetry — it requires equal access to asymmetry.
- Card games encode discrete strategic decisions in a way that makes them perfect state machine exercises. Each game phase (deal → bid → discard → play tricks → score) is a state. Each player action within a phase is a transition. The rules constrain which transitions are legal. This is why card games keep appearing in this project timeline — they are a natural fit for the way I think about software: state machines with rules.
- Table Talk as a concept — a platform for playing traditional card games on your phone with friends — remains a gap in the market. Most mobile card games are either solitaire variants, casino games, or collectible card games (Hearthstone, MTG Arena). The space for "play the card games your grandparents taught you, but on your phone when you are not in the same room" is underserved. The concept persists in the Hot Potato Games pipeline.
This post was composed through a conversation between Brett Owers and Claude Code (Anthropic). The content reflects Brett's recollection of each project and the lessons drawn from it. Some details may be approximate or omitted — the purpose is to paint an honest picture of a software engineer's development over time, not to serve as a precise historical record.