Arcade Express
Arcade Express is a modern and lean treatment of classical games — 23 of them, in the browser, with no ads and no subscription. Chess, Go, Sudoku, Tetris, Hashiwokakero, Othello, Peg Solitaire and the rest, each written from scratch rather than wrapped.

Signing in. The game icons drift, flee the cursor and collide; click one and it pops.
How it is paid for
The arcade sells credit, not a subscription. You top up a card and each game draws it down.
- One charge per game, per visit, taken at your first move. Opening a game and looking at it costs nothing, and refreshing mid-game never charges twice.
- Priced by weight — 5c for a sandbox like Game of Life, 10c for a quick round of Snake, up to 25c for Chess or Go against a real engine. A game is worth what a sitting of it is worth.
- Nothing expires. Credit does not rot and nothing auto-renews.
This replaced a flat A$5-per-month pass, which mispriced both ends: A$5 was absurd for someone who wanted two games of Snake, and far too little for someone playing daily. Every new account gets 50c unasked — enough to decide whether to stay.

The catalogue, in its densest view. Each tile carries its price; anything the card cannot cover is dimmed but still clickable, because the server is the authority on what you can afford, not the browser.
Details worth knowing
- Sign in however you like — email and password, or Google, GitHub or Microsoft. One button both registers and signs in, and a social identity links onto an existing email account rather than forking a second one.
- Referral codes are shaped
INITIALS + 4 digits—AB3331— so a code is recognisably yours when you say it out loud. Worth A$10 to both sides; the referrer is paid once the person they referred spends real money. - Native apps. A Flutter rewrite, 22 games in Dart, with WebSocket multiplayer. Bought once in the store, no in-app purchases, and it holds no account at all — so “pay once, play forever” is structurally true rather than a promise.
- Multiplayer is four-digit room codes over a WebSocket, with no accounts needed on either end.
Under it
React and Express, deployed as a single container behind Caddy. State is a flat file, deliberately — the whole thing fits in 512 MB. The money path is one module with a documented atomicity invariant, which is cheaper to reason about than a database would have been at this size, and is written so the swap is a one-file change when it stops being.
The train motif is the pun in the name made literal; the icon’s wheels are complex-log domain colourings, which is the sort of thing you do when nobody is stopping you.
Pointers
- arcade.express — the arcade.