~/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.

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

04Architecture
Authoritative state on the server, thin real-time clients, and an AI layer that reads what the app already recorded:
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.


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.