Work Case study

Cardhouse

A sports card portfolio tracker: what a collection holds, and what it is worth.

In development
  • Next.js
  • React.js
  • TypeScript
  • PostgreSQL
  • Prisma
  • Auth.js
  • Tailwind CSS
Role
Solo, design and build
When
Aug 2026 to Present
Status
Private repository · no public link yet

01

The Idea

A collection is a portfolio whether or not anyone treats it as one. Cardhouse tracks what a collection contains and estimates what it is worth from comparable sales, rather than from a single headline price.

02

Technical Decisions

A trimmed mean, not a median

Valuation uses a recency-weighted trimmed mean of comparable sales. A median returns a price that was actually observed, so a tight cluster of comps produces a flat, stepped chart that looks broken.

The data source never falls back silently

The market-data provider switch refuses to fall back from live data to the demo catalogue. A valuation that quietly changes source is worse than one that fails loudly.

03

Challenges

Sold prices are the hard part. eBay retired the completed-items search in February 2025, and the API that replaced it for sold data is a limited-release product that is not open to new individual developers. Active listings and image search are available; historical sale prices are not.

So the app is built against the real API surface that does exist, and every price in the current build comes from a demo catalogue that is labelled as such in the interface.

Nothing in the demo build is presented as a real market price. Live valuations wait on a sold-comp source that can actually be obtained.