Tuckwall: A Catalog and Marketplace for Card Decks

Record collectors have Discogs: every pressing of every album, who owns it, what it last sold for. Deck collectors have scattered spreadsheets, forum threads and a few fan sites. Playing cards, tarot, oracle and Lenormand decks get reprinted, re-boxed, gilded, numbered and sold out, and there’s no single place that tells you which edition you’re holding or what it’s worth.

So last week I started Tuckwall, named after the tuck box a deck comes in and the wall collectors put them on. It’s live now in an invite-only beta.

The Tuckwall home page: Every deck, catalogued, with a search box, deck type chips and a fan of generated tarot covers

Decks and editions

Tuckwall follows the Discogs model: a deck is the design (the Rider-Waite-Smith, a Bicycle back), an edition is one printing of it (a publisher, a year, a box, a barcode). Each edition has a spec sheet, credits for the artists and makers, photos, who owns it and who wants it, listings and a price history built only from sales on Tuckwall itself.

An edition page: the 1JJ Swiss Tarot of 1831 with a public-domain photo from Wikimedia Commons, collection buttons, the market box and the spec sheet

Anyone can add a deck through a wizard, and anyone can fix one. Every change is a revision with a diff and a source: new contributors’ edits wait for a moderator, trusted ones go live and get patrolled afterwards. It’s how Discogs and Wikipedia keep a crowd-built catalog honest.

A catalog from open data only

An empty catalog is a hard sell, so Tuckwall starts with 1,119 decks and 1,256 editions. The easy way to get there would be to scrape the existing deck sites. I didn’t, and wrote it into the project’s rules so nobody (me included, or the AI writing the importers) does it later. Their work is their work.

Instead the catalog comes only from open sources:

  • Open Library (CC0): tarot and oracle decks are sold as books with an ISBN, so hundreds of them are there. Titles, publishers, years and barcodes, never the covers, which belong to the publishers.
  • Wikidata (CC0): famous decks, publishers, printers and artists.
  • Museums and Wikimedia Commons: historic decks from the Met, the Rijksmuseum and others, with 281 images that are public domain or CC licensed, each credited on the page.

Every imported fact keeps a link to where it came from, goes in as a revision like any user edit, and can be rolled back. About 600 records the importers weren’t sure about (two sources describing the same deck, a book that might not be a deck) wait in a review queue instead of going in blind.

The catalog grid: historic decks from museum collections, with filters for deck type, market and publisher

Most decks have no photo yet. Instead of a grey box they get a “photo wanted” tuck box with the logo, which is also an invitation to add the first one:

A deck without a photo: a plain tuck box with the Tuckwall logo and NO PHOTO YET, and an Add a photo button

Your wall

Signed in, you put the decks you own on your wall: sealed or opened, the condition of the cards and of the box, what you paid, which shelf it sits on. Your public page shows your shelves as rows of tuck boxes. There’s a wantlist, a value-over-time chart once sales come in, and CSV import and export, because every collector already has a spreadsheet.

A marketplace that never holds your money

Collectors trade, so there’s a marketplace: listings with a proper condition scale, a cart, offers with one counter-offer, orders, feedback and disputes. What it doesn’t do is take payments. The buyer pays the seller directly with PayPal Goods & Services, following the instructions on the order, and Tuckwall tracks everything around it: reminders, cancellation for non-payment, shipping, feedback.

That keeps Tuckwall out of handling other people’s money, which in the EU means a payment licence or a payment provider that carries one. The fee is 0% during the beta. Card payments with a commission can come later through Stripe Connect: the code already has a slot for a second payment provider.

The name made the logo: seven tuck boxes stacked two, three and two, so the wall reads as a hexagon, oxblood and ink around a gold centre.

Tuckwall on a phone: the logo in the header, the search and the deck type chips

How it’s built

Tuckwall is a TypeScript monorepo: Next.js for the site, a REST API with an OpenAPI spec for a future iOS app, Postgres, Redis and a worker for emails, image processing and the order timers. It runs on a 2 GB DigitalOcean droplet with Docker Compose and Caddy, and it’s watched by the same Beszel, Upptime and ops setup as the rest of my servers.

Releases don’t touch git on the server. The images are built on my Mac, compressed and copied over SSH, then the droplet migrates and restarts and the script waits for the health check. The server has no source checkout and no registry. The database started as a dump of the open catalog with no users in it, so the first account on the live site was mine.

I built it with Claude Code doing most of the typing. A product spec and a set of conventions came first, then up to eight agents worked in parallel on separate parts (catalog, contributions, collection, selling, buying, messaging, accounts, admin), each one reviewed and fixed before the next round. I steered, made the calls and caught what it got wrong: a review found a moderator could take over any account through the auth library’s admin endpoints, and on the first real email the mailer logged the SMTP password. Both are fixed, with tests. Behind it there are about 750 unit tests and Playwright runs of the ten flows that matter, from signing up with an invite to resolving a dispute.

Join the beta

The catalog is open to browse at tuckwall.com. Signing up needs an invite while I fill the gaps: if you collect decks, ask for one on the site or write to hello@tuckwall.com.