React + Firebase
MyCardTracker
I built a full-stack collection management platform for trading card collectors. Real-time PSA valuations, purchase and sales tracking, tax-ready invoicing, and a built-in marketplace.
- Type
- Web Application
- Timeline
- 2024–Present
- Stack
- React 18, TypeScript, Firebase, Chart.js, Stripe
- Live site
- mycardtracker.com.au
Spreadsheets, then three apps, then this
I collect graded trading cards. Mostly Pokémon, but also some NBA and other sports. Over the past couple of years, my collection grew to the point where I was spending real money on it, and I had no good way of tracking what I owned, what I paid, or what anything was worth now.
I tried spreadsheets. I tried a few existing apps. Nothing did what I needed. Most collection trackers are built for casual hobbyists, not for someone who treats their cards as investments. I wanted to see my total portfolio value in real time, track profit and loss per card, log purchase invoices with seller details, record sales with tax estimates, and eventually list cards for sale without having to retype everything into Facebook Marketplace.
So I built it myself.

Collection Tracking
The core of the platform is the collection view. Every card is stored with its name, set, year, grading company, grade, serial number, population data, and images. The dashboard shows the total amount paid, current market value, profit, daily change, and overall ROI at a glance.
Cards are displayed in a visual grid with their PSA slab images and current values. You can search by name, set, or serial number, and filter by category, grade, or collection. I built it so you can organise cards into custom collections like “Base Set Holos” or “Japanese Promos” and track each one separately.
Card Details and Value History
Clicking on any card opens a detail view with the full slab image, a value history chart tracking price over time, and a financial summary showing what you paid versus what it’s worth now. The chart pulls data from PSA and PriceCharting, so the valuations update automatically. There’s also a direct link to view the card on the PSA website for verification.

Adding Cards
Adding a new card follows a three-step wizard. You can either upload images of the card (the system reads the slab details automatically) or enter a PSA serial number to look up the card directly from PSA’s database. The lookup pre-fills all the card details: name, set, grade, population, and certification number. From there you just add your purchase price and any notes, and it goes straight into your collection.

Purchase and Sales Tracking
This is where it goes beyond a simple collection tracker. Every purchase is logged as an invoice with the date, seller name, total amount, and which cards were included. The Purchases tab gives you a full overview: total spent, number of cards purchased, average cost per card, and how many different sellers you’ve bought from. You can search invoices, download them as PDFs, and keep everything organised for tax time.

Sales and Tax Tracking
The Sold tab works the same way but from the other direction. Every sale is recorded with the original investment, what you sold it for, the profit or loss, and how many days you held the card. The platform automatically calculates estimated tax payable based on your profit, which is a big deal for collectors in Australia who are selling through an SMSF or running a small business on the side.
You can filter by financial year, export to JSON, and see your total profit across all sales at a glance. Each invoice tracks multiple cards if they were sold as a batch, with individual profit breakdowns.

The Marketplace
One of the biggest frustrations as a collector is listing cards for sale. You’ve already got all the data in your collection tracker, but to sell a card you have to manually retype everything into Facebook Marketplace or eBay. I built a marketplace directly into MyCardTracker so users can list any card from their collection with one click. All the data carries over automatically.
The marketplace has browse, search, and filter functionality. Each listing shows the card image, PSA grade, price, and location. There are tabs for browsing all listings, managing your own, and a built-in messaging system so buyers and sellers can negotiate without leaving the platform.

Multi-Currency Support
A lot of card collecting happens internationally. You might buy a card in USD from a US seller, another in JPY from a Japanese auction, and sell locally in AUD. Most trackers force you to convert everything manually, which means your purchase prices drift every time the exchange rate changes.
MyCardTracker stores every price in the currency it was originally transacted in. Your purchase price in USD stays in USD. Your AUD sale price stays in AUD. The platform handles all the conversions for reporting, so your financial data stays accurate regardless of FX fluctuations.
Mobile Experience
The platform is fully responsive. The dark-mode interface works on desktop and mobile, and I specifically designed the mobile experience for when you’re at a card show or a store and need to quickly check what you own, what you paid, or what something is currently worth.


Is there a business in it?
It has Stripe billing, Firebase auth and the architecture to run properly as a subscription product for collectors here and overseas. Every feature in it exists because I wanted it myself first, which is probably why it works. Whether that turns into a business is the part I have not proven yet.
Where it got to
- $350K+
- Collection Value Tracked
- 445+
- Cards Managed
- 204%
- ROI Tracking
- 83+
- Purchase Invoices
- Multi
- Currency Support
- SaaS
- Ready
Those are my own numbers, not a client's. 445 cards, around $350K at current valuations, 83 purchase invoices logged. Worth reading them as what the app tracks rather than as a performance claim, since a collection is only ever worth what the market says this week. The part that actually changed for me is that I know what every card cost, what it is worth this morning, and where I stand on tax if I sell. I could not have told you any of that from a spreadsheet.
What it runs on
React 18 and TypeScript, Firestore behind it, Firebase Auth for accounts. The part that makes it useful rather than just another spreadsheet is the PSA and PriceCharting integration, because that is what keeps valuations live instead of something you remember to update.
Chart.js draws the value history. Stripe runs the subscription tiers. Leaflet handles the location side of the marketplace, and React PDF generates the invoices, which sounds like a detail right up until July.