All case studies
01 · Web appLive demo

A system for a poker club

Club website, game sign-ups, a host console and a screen for the room. The whole evening, from announcement to season standings, without group chats, spreadsheets or a stopwatch.

BEST HAND club home page with the next game and a sign-up button
Club home page on a phone — name, “Next game” and “Sign in” buttons
how it works · poker.borewsha.com
  1. Who uses it
    • Playera phone — nothing to install from a store
    • Hosta laptop and a phone at the table
    • Owneradmin panel on a computer
    • The rooma TV with the clock
  2. Club website
    • Pages and screenswhat players, the host and the room seeNext.js · PWA
  3. Club server
    • Rules and mathssign-ups, payments, points, rating, change logJava · Spring Boot
  4. Where data lives
    • Databaseplayers, games, paymentsPostgreSQL
    • Event photosfor post-game reportsS3
    • Emailreminders for playersSMTP

The problem

At a sport poker club, the evening rests on the host. Sign-ups happen in a group chat, arrivals go into a notebook, blinds are timed with a stopwatch, and season points get tallied in a spreadsheet late at night. One wrong cell, and a month later nobody remembers who’s in what place.

I wanted to put all of that into one system that’s easy to use right at the table. For players — from a phone, for the host — with one hand, for the room — on a TV. Meanwhile the owner sees money, debts and ratings without counting anything by hand.

The club in the demo is made up, but everything works for real. Every two hours a simulator with bots runs a full game: sign-ups, seating, knockouts, payments and results. Drop by any time and some game will be in progress. In the sandbox you can try being the host or the owner yourself.

How an evening goes

  1. Step 1.OwnerAnnouncePublishes a game: time, prices, number of seats. It shows up in the schedule right away.
  2. Step 2.PlayerSign upSigns up from a phone and gets a number. Early birds get bonus chips; when seats run out, there's a waiting list.
  3. Step 3.HostCheck-inScans the QR code on the player's phone. Buy-in, discount and bonus fill in by themselves.
  4. Step 4.The roomPlayThe TV shows blinds and the clock. The host records knockouts and table moves from a phone.
  5. Step 5.HostPaymentsYou see who paid what and who still owes. A debt won't get lost before the next game.
  6. Step 6.EveryoneResultsPlaces, points and rating are calculated automatically. Season standings and a photo report go up on the club site.

Key decisions

01

Three taps, tops, for the host

Checking a player in, selling a re-entry, recording a knockout — every frequent action takes no more than three taps. A knockout is confirmed with a swipe so it can't happen by accident.

Trade-off: the phone only handles short tasks. Payments, leagues and finishing the game stay on the computer.

02

Bad Wi-Fi doesn't ruin the night

If the room loses connection, the host's phone keeps knockouts and table moves and sends them once it's back online. Tapping twice won't create a second knockout.

Trade-off: you can't start or pause the clock offline. Game time runs on the server, otherwise the screens would drift apart.

03

The clock can't be knocked off

The blind level isn't ticking in a browser — it's calculated from the start time and pauses. Restart the laptop or let the phone die, and the TV still shows the right time.

Trade-off: you can't skip a level or edit blinds mid-game. That was left out of the first version on purpose.

04

History can't be quietly rewritten

Prices, season rules and bonuses are locked in at the moment of the game. A result can only be fixed with a correction and a reason, and it stays in the log.

Trade-off: there's no "just change the number" — every fix takes a couple of extra clicks and an explanation.

Numbers

of work — from an empty repository to a live demo
4 days
across 36,000 requests to the schedule and standings — 200 per second
0 errors
server response time for 95% of those requests
≤ 42 ms
host actions reached 70 screens connected at the same time
36 of 36

*The test server had 2 cores and 1 GB of RAM. Two 90-second runs were made; the worse result is shown.

Stack

  • Java 21
  • Spring Boot
  • PostgreSQL
  • Next.js
  • TypeScript
  • PWA
  • Docker
  • Playwright
  • k6

Want this for your club?

Tell me how your evenings work — poker, mafia, board games or quizzes. I'll tell you what fits, how long it takes and what it costs.

Discuss a project