← back to work

Personal project, 2026

Rummy scoreboard

A scoreboard for Pool Rummy that keeps going with no network.

A mobile-first scoreboard for 101 and 201 Pool Rummy. Players share a link, claim a seat with a PIN, and see scores update in real time. Device tables run entirely in the browser, so a game keeps going with no network at all.

Source →

Three phones showing the home screen, a round in progress with four players, and the number pad for entering a score

How it works

The API hosts the table. Each player claims a seat with a four-digit PIN, and scores, eliminations and the winner reach every phone over WebSockets.

Device tables, with no network.

Choose “On this device” and the whole game runs in the browser: scoring, reopening a round, the winner screen, CSV export and rematch. The app is a PWA, so it opens offline once it has been loaded once.

A round in one run.

Tap a player and the number pad opens. Saving a new score jumps to the next seat that still owes one, until the round closes. A hardware keyboard drives the pad too.

Under the hood

One engine, two places.

The scoring rules live in a pure package used by both the API and the browser, so a device table resolves a round exactly the way the server would.

A database that needs no setup.

The API runs on embedded PGlite locally and PostgreSQL in production, through the same Drizzle schema.

Details

Built with
TypeScript, Fastify, Drizzle, PostgreSQL, WebSockets, Next.js
When
2026
Links