tfpdev
Part 26 chapters · live

And thenNorthwind gets paid.

Then Harbor, the studio's client portal, starts taking invoice payments. Every way that money can go missing gets a chapter here.

Six chapters, all running on a real database: a hundred payments against one balance, one payment tapped twenty times, a refund that goes out twice, books that stop adding up. Each time you break it first, then switch on the version that holds.

You press the buttons. The numbers in the black box are what visitors have done to it so far.

Meet Northwind →
8 games · break it in the browser

These are toys. The real versions hit a real database.

The same bugs as the chapters, small enough to break in a few clicks. The chapters run them against Postgres with real transactions, real locks and the SQL on screen.

01ConcurrencyArticle →

Double-spend

A $100 balance. Fire payments at it faster than it can count.

Never existed$0
02IdempotencyArticle →

Retry storm

The phone lost signal and retried. The customer bought one ticket.

click to buy
Buy one ticket. The signal is bad.
03Money mathArticle →

Ten cents

Add 10¢ a thousand times in floating point. Count how often the total is wrong.

click and hold to pour
Drop a dime in the jar. Then another.
04State machineArticle →

Refund twice

The button was disabled in the UI. The API was not.

click to refund
Pay first. Then have both agents refund.
05LedgerArticle →

The scale

Two UPDATEs. The server dies between them.

click to pay $30
Pay a few times. Then crash.
06ConcurrencyToy only

Two workers

The payout job was slow, so someone ran a second copy.

click to run the job
$300 due to six people. Run the job.
07Money mathArticle →

Split the bill

$100 three ways. Where does the last cent go?

click to split
Split the bill. Watch the last cent.
3 ppl
08WebhooksArticle →

Late mail

Providers deliver events late, twice and out of order. You pick the order.

click an envelope
Deliver envelopes in any order. Make the paid order look unpaid.
Next · Part 3 →And then Northwind gets paid in crypto.Then a new client asks to pay in USDC, a digital dollar. The studio says yes, and starts paying its freelancers the same way.