Case study · manaarchive.com

How we built ManaArchive

ManaArchive is the Magic: The Gathering collection tracker Kingpost Software builds and runs itself. What it had to answer for collectors, traders and sellers, and the decisions that shaped the build.

ManaArchive's home page: a dark interface headed “Every copy, down to the printing”, with a card-grid illustration and a sidebar of Magic, Features, Guides and FAQ.
manaarchive.com

The problem

A card collection is not a list of card names. The same card exists in many printings, each copy has its own finish, condition and language, and every one of them is physically somewhere — a particular binder page, a particular box. What the collection is worth depends on exactly which printings are in it.

A collector who has already catalogued their cards in another app should not have to do it twice. And the copies they build decks from, trade and sell all come off the same shelves, so those tools cannot each keep a separate idea of what is owned.

Build decisions

Import against a local card mirror, and never guess

The way in is a ManaBox CSV export. Each row is matched against a local mirror of Scryfall's card data, and a row that will not resolve is held in a review queue instead of being admitted. A wrong match would carry the wrong printing, price and location into everything downstream, so an ambiguous row waits for a person.

Model the copy, not the card

Finish, condition and language are recorded on each holding rather than on the card, and each copy is placed in a container: a binder page and slot, or a labelled box. That is what lets the app say where a card is, not only whether it is owned.

Price each printing, and keep the history

Prices are refreshed from Scryfall nightly for every individual printing. A daily snapshot of the whole collection's value is stored alongside them, so the trend can be charted from what was recorded rather than reconstructed after the fact.

One search grammar across the whole inventory

A single query language — t:creature c>=WU set:mh3 tradebinder:true, with OR, parentheses, quoted phrases and exclusions — runs over everything a user owns, so a search learned in one place works in every other.

Decks, trades and listings share one inventory

The deck builder, the trade binder and marketplace listings all read from the same holdings. A deck shows what each card costs and which copies are already owned, trades run on friend codes and trade requests, and visibility is chosen per item: public, unlisted or private.

Selling stays in the seller’s hands

Pro accounts connect their own CardTrader and ManaPool seller accounts. Only inventory marked for sale is pushed out as live listings, and every sale is confirmed before a copy leaves the shelf.

Where it stands

ManaArchive is live at manaarchive.com, built and maintained by Kingpost Software LLC. Its Magic catalog can be browsed by anyone without an account, and the CardTrader and ManaPool integrations are part of Pro accounts.

The import pipeline, the nightly pricing and the marketplace connections are the same kind of work the studio takes on for clients as system integration. Running them on a product of its own is how Kingpost can talk about long-term maintenance from experience rather than principle.

  • TypeScript
  • React
  • Node.js
  • PostgreSQL