Tuckwall: A Catalog and Marketplace for Card Decks
- published
- · 5 min read
- tags
- #web #typescript #development #self-hosted #claude
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.
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.
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.
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:
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 logo
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.
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.