all work

~/work/chipzy

Chipzy

An all-in-one platform for running real, live poker games: tables, tracking, equity, and settlement in one place.

role
Solo: design, backend, frontend
timeframe
2024 → ongoing
status
● active · private repo
stack
React · FastAPI · MongoDB · WebSockets · n8n · WhatsApp API
ai
Gemini recaps, hand analysis, RAG hand coach
hosting
PWA, served via ngrok for home games

01The problem

A home game is easy right up until it ends. Everyone counts their chips, someone adds up the buy-ins, and the two numbers don't match. A stack gets miscounted, a rebuy goes unrecorded, chips walk off with someone who left early. What follows is a group chat, a calculator, and a final number nobody fully trusts.

Paying up made it messier. Some players hand over cash on the spot, others transfer later, so "who owes whom" is never one clean list. Debts carry between nights. And on the odd trip abroad the game runs in another currency, while everyone still thinks in shekels.

Chipzy started as a C# console app I wrote for my own games, grew into my software engineering final project, and kept growing because we kept using it. The goal became one app that could run the game and close the books: deal the hands, track every session, and settle the night exactly.

Live three-handed poker table mid-hand with community cards, pot, player stacks, and bet chips
Live table: real-time seats, community cards, pot, and per-player bets, with every client synced over WebSockets.

02The approach

The core is a real-time table engine. A FastAPI backend holds authoritative game state; clients sync over WebSockets so every seat sees chip movement, blinds, and actions instantly. An admin can correct the table mid-hand, because real home games have real fat-finger moments.

When a game ends, the result imports straight into a cash session, so playing and bookkeeping are one flow instead of two apps. Each session then feeds a permanent record: profit and loss per player across months, who you have played the most, and which debts are still open from previous nights.

  • Chip discrepancy solver. When the count is off, the app proposes a resolution (spread proportionally across each winner's win, among other rules) and shows exactly what it adjusted, instead of leaving the table to argue about it.
  • Cash-aware settlement. Mark who is paying in physical bills, down to the denominations, and the remainder resolves into the fewest possible transfers.
  • Debts in one currency. Play a session abroad in euros or dollars and every debt still lands in your own default currency, so the running balance between friends stays in one unit.
  • Equity tools for quick in-the-moment analysis across NLH, PLO4, and PLO5.
  • Game organizing over WhatsApp via n8n: send invites to the group where games actually get arranged, collect who is in, and post the results back when the night is done.
  • An AI layer on Gemini that writes persona-driven recaps of a night and coaches saved hands street by street with RAG, grading each decision and naming the biggest leak.

03The most configurable table I could build

Every home game has house rules, and the apps I tried all forced their own. So the table creation screen exposes everything: twelve poker variants, dealer's choice, bomb pots and Chocoloko as votable special games, straddles, run-it-multiple-times, time banks, join fees, and per-table timer behaviour. Set it up the way your table actually plays.

All configurable table settings

Blinds & chips

  • Small blind, big blind, and optional ante
  • Default starting chips per player
  • Tie chips to a currency, with a chips-per-unit ratio, so the table can be saved as a real cash game
  • Ten currencies: ILS, USD, EUR, GBP, JPY, CNY, KRW, RUB, AED, ASD

Game type: 12 variants

  • NLH, Short Deck
  • PLO4, PLO5, PLO6, Hi-Lo Omaha
  • Pineapple, Crazy Pineapple, Lazy Pineapple
  • Tahoe, Irish, Watermelon
  • Dealer's choice: the dealer picks the variant from a pool before each hand

Special games

  • Players vote to switch to a special variant once per orbit
  • Optional "every button" mode so any dealer can propose, skipping the rotation
  • Pool: PLO4 Bomb Pot, PLO5 Bomb Pot, Chocoloko
  • Per-player ante and a decision timer for the vote

Run it multiple times

  • All-in players vote to run the board 2 to 3 times and split the pot by equity
  • Optional no-time-limit mode that waits for every all-in player to vote

Straddles

  • Allow a voluntary blind raise (2x BB and up) before cards are dealt

Timers

  • Action timer: per-turn shot clock with auto check/fold on timeout
  • Clock timer: let players "call the clock" on whoever is in the tank, with a configurable duration
  • Pause between hands, so the table can review the result before the next deal
  • Showdown review window: how long revealed hands stay on screen
  • Time bank: spend a TIME token to extend a turn instead of auto-folding
  • Leave-seat delay: pressing Leave starts a countdown and frees the seat only once the hand finishes

Joining & fees

  • Require admin approval to join, or let anyone with the link sit straight down
  • Join / return fee: dead money added to the pot on a player's first hand after joining a running game, or after returning from a sit-out where they missed hands
Chipzy table creation screen showing blinds, chips, game type, special games, run-it-multiple-times, straddles, timers, joining, and join fee sections
One screen, nine sections of table configuration, set before the first hand is dealt.

04Architecture

Authoritative state on the server, thin real-time clients, and an AI layer that reads what the app already recorded:

seeds recorded gameAI Layer · Gemini

Game recap note

Hand analysis

RAG hand coach

n8n WhatsApp invites

Spot training

Game History

Browse history

Cash games

Tournaments

Key hands

Tools

Equity Calculator
NLH · PLO4 · PLO5

Game planner page

Stats & milestones

Debt management

Live Online Tables

Real-time WebSocket play
create · quick play · join

Voice commands

Save key hand

Settle & finalize

Add & Track Games

Add New Game

Cash game
live session or finished

Tournament
template or new

Chip discrepancy solver

User

Login / Sign up

Home

The full app flow. Drag to pan, or use the +/− controls (⌘/Ctrl + scroll) to zoom.

05Closing the books

This is the part the app was born for. A real eight-player night: the chip count came up short, so the solver spread the shortfall proportionally across the winners and showed each adjustment. Two players paid in cash, which the settlement takes into account, and the rest resolved into a minimal set of transfers. The recap at the bottom is generated by the AI layer.

End of game results: eight players with adjusted profit and loss, a resolved chip discrepancy, cash-marked settlements, and an AI-written recap
A real night, anonymized: chip discrepancy resolved, cash payments accounted for, nine transfers, one AI recap.
Live session tracker with per-player buy-ins, timestamps, and running totals, plus clock, seats, and chip-count tools
Live session tracking: every buy-in and rebuy logged per player as the night unfolds, with built-in tools for the game clock, the seat map, and a chip counter.

06Where it stands

Chipzy is in real use. My friends and I run live and online home games on it as a PWA. It is the project that taught me the most about real-time state, keeping clients honest against a single source of truth, and the unglamorous edge cases that only surface once actual money is on the line.