wanessalabs games production August 24, 2026

Blackjack

Blackjack that grades every decision against basic strategy, with a chart generated from the same table the coach reads. Play, coached, or drill.

ReactTypeScriptTailwindVitestCloudflare Pages
Coached mode. Ask before you act and the coach answers in a sentence, and that hand stops counting toward your accuracy.
Coached mode. Ask before you act and the coach answers in a sentence, and that hand stops counting toward your accuracy.
The drill deals twenty situations and grades each one. A wrong answer gets the reason, not a scolding.
The drill deals twenty situations and grades each one. A wrong answer gets the reason, not a scolding.
The chart on a phone. Nothing here is typed out: every cell is read from the table the coach uses.
The chart on a phone. Nothing here is typed out: every cell is read from the table the coach uses.

The craps trainer that shipped two days before this one will tell you what to bet. It will never tell you that you were wrong, because craps has no single right answer to be wrong against. Blackjack has one for every hand you can be dealt, so this is the first game on the hub that grades you.

What It Is

A six-deck shoe, dealer stands on soft 17, naturals pay 3:2, double after split allowed, up to three hands. Three surfaces over one engine: a table you play, a coached mode that grades each decision against basic strategy, and a drill that flashes twenty situations and builds per-category accuracy.

No account, no network calls during play, no ads. The chips are practice chips and you can reset them whenever you like.

The Cheat Sheet Cannot Disagree With The Coach

The strategy chart in the app is not typed out. Not one cell of it.

A printed blackjack chart runs to a few hundred cells, and the usual way to ship one is to transcribe it. Transcribe a few hundred cells and you will get one wrong, and the one you get wrong will be a cell the coach grades correctly, so the app will tell the player two different things about the same hand and only one of them will be right. The player has no way to know which.

So the chart reads the same three tables the coach reads, and renders what it finds. Even the row grouping is derived rather than asserted: a printed chart shows “13-16” as one line because those four rows happen to be identical, so the code compares the cells and collapses the ones that match. A rules variant that splits that group renders it split, instead of lying about it.

The rules themselves are one object with every field stated and none inferred, for the same reason. A chart built for a dealer who stands on soft 17 is wrong at a table where the dealer hits it, on several cells. A rules object that could be half-specified would let a caller grade you against the wrong chart and never notice.

A Shoe Is A Permutation, Not A Tape

The dice games on this hub get their determinism from a tape: the face is a function of the seed and the roll index, so any roll can be recomputed on its own and re-rendering cannot disturb the sequence. That trick does not survive contact with cards. Dice are drawn with replacement and cards are not, so a shoe is a permutation and cannot be computed one position at a time.

The property gets bought a different way. The whole permutation is a pure function of the seed and the shuffle count, the cursor is explicit state, and nothing else in the game consumes randomness at all. Asking the coach a question draws nothing. Re-rendering draws nothing.

Running out of cards throws rather than reshuffling. A shoe that quietly reshuffled itself mid-hand would change the composition a counting player had been tracking, silently, which is the bug a counting trainer would exist to teach against. Reshuffling happens at the cut card, between hands, and the shoe already hands back every card that has come out, in order, because a running count is a fold over that list and I would rather not touch the engine again when I build it.

The Verdict Is A Fact, And It Still Does Not Scold

Poker Friday on this hub deliberately does not grade you, because poker has no single correct play and a confident grade would be an opinion wearing a uniform. Blackjack does have one, so this coach is allowed to say that a play was wrong.

What it is not allowed to do is make you feel bad about it. Every verdict comes with a sentence explaining the hand, and the sentences live in a data file of templates rather than anywhere near the logic, so the copy can be rewritten without touching a single thing that is tested for correctness. “Sixteen is the worst hand in the game. Two hands starting on 8 are worth more than one hand on 16, even against a ten.” The engine returns an id and the prose is looked up.

The coach is the same code the chart is. Ask it what to do, ask it why, ask it how to play, ask it what you have been getting wrong, and every answer is a sentence wrapped around something the engine already returned. It does not compute one number of its own.

Two things it refuses to answer, by design. It will not give you a probability, because this game has no bust probability, no dealer-outcome distribution, and no expected value anywhere. The strategy table knows that hard 16 hits against a ten, not how often that busts. Simulating the dealer to produce a percentage would create the second, private model this whole design exists to prevent, and typing a published figure in from memory is the same failure with extra steps. It will also not offer you a second-best play, because the chart carries one letter per situation and there is no runner-up to report.

And asking costs you something. Reveal the answer before you act and that decision does not count toward your accuracy figure, because an accuracy figure that includes the hands you looked up is not measuring anything.

The Drill Deals A Hand The Real Game Would Not

In a real shoe, ten-valued cards come up four times as often as any other, so the dealer shows a ten far more than anything else. The drill deals upcards uniformly instead.

That is on purpose, and it is the difference between a simulator and a trainer. A drill exists to cover the chart. A realistic distribution would spend most of a twenty-question set on the ten column and leave the rare columns, which are exactly the ones people get wrong, unpractised.

The categories are weighted by what you are worst at, with one rule worth stating: unknown beats bad. A category you have barely attempted drills at full weight, ahead of one measured at 60 percent, because not knowing is a better reason to ask than a number is. And a category you have perfected still comes up sometimes, so a set stays a whole chart rather than a list of your current faults.

Chips Are Not Coins, Structurally

The hub has a coin economy. This game touches it in exactly one file, and a test asserts that by name.

Coins buy a seat, once, for ten of them, and the chips at the table never convert back. That is Poker Friday’s model and it is here for an arithmetic reason: basic strategy runs about half a percent under even. A coached table paying coins per hand would therefore be a faucet, where a player who did what the coach said would grind the ledger upward at close to zero risk. Per-hand coin wagering was proposed and rejected on that number.

Coins do move, in one direction, for mastery. Finish a set, 15. Get 18 of 20, 25. Have a hundred decisions graded without looking any of them up, 25. Reach 80 percent across hard totals, soft totals and pairs with at least twenty attempts in each, 50. A clean twenty, 50. Every one of those is a grant and none of them is a gate. Nothing in this game is locked, priced, or withheld.

The engine cannot reach the wallet even if someone later wants it to. The purity test that bans the clock and the random number generator from the engine directory bans the coin ledger in the same list.

Two Things That Would Have Broken Quietly

The game reports no wins, deliberately. It never calls the hub’s completion hook at all, because there is nothing here to complete. Without a flag saying so, the hub’s Completionist unlock would have counted a game that can never be won and become permanently unreachable for everybody, with nothing failing anywhere to say why.

Imported normally, this game took the hub’s main chunk to 2,087,078 bytes against the service worker’s 2 MiB precache limit. That is 10,074 bytes of headroom for the entire hub, and the build exited 0. Nothing failed and nothing warned. The next person to add anything, to any game, would have been the one who broke the build, and they would have had no idea why. Loading it lazily moves 39,582 bytes into its own chunk and puts about 49 KB back. Craps went the same way for the same reason, and Chinese Checkers after it, so it has stopped being an incident and is now a rule.

Filed By What It Is For

It sits under Casino Trainer, next to craps, rather than under Card games, which is where a game made of a 52-card deck plainly belongs. A section called Card games tells you the shape of the object. A section called Casino Trainer tells you why you would open it. Poker Friday moved across at the same time, and a test pins the placement so it does not drift back on somebody’s tidy-up.

What Is Not Done

331 tests across 19 files cover this game, all passing.

None of that is a counting trainer, which does not exist yet, though the shoe already exposes what one would need. Surrender is not offered, though the rules object carries the key so the table can grow the category without a new axis. Insurance is graded when it comes up and never appears in the drill. There is no online play, no leaderboard, no daily, and no resume of a hand in progress.

Live at games.wanessalabs.com/games/blackjack.

Development timeline

1 logged update on 24 Aug 2026.

  1. Learn blackjack with a coach that grades every handlaunch

    Play a shoe against the dealer and ask the coach what basic strategy says, any time, for free. Coached mode gives every decision a verdict and a reason. Or drill the chart twenty hands at a time and watch your accuracy per category.

Written from the release notes published with each update, not afterwards. See every project →