
Pokemon TCG Tracker
A full-stack Pokemon TCG collection manager built with Next.js, TypeScript, and MongoDB. Users can browse the complete English card database, track their collections with per-card quantity management, monitor set completion progress, and explore every card through a regional Pokedex organized by generation.
01 — Overview
The app revolves around three core modules. The card browser lets users explore the full Pokemon TCG card catalog organized by expansion sets, with filtering and search. The collection manager enables users to add and remove cards with quantity tracking, view completion progress per set, and filter by owned or missing cards. The Pokedex module organizes all 1025 Pokemon by their regional generation, from Kanto through Paldea, and lets users click into any Pokemon to see every TCG card featuring it across all sets.
02 — Motivation
There are similar apps out there, but none of them offered the full feature set I was looking for. Some lacked key functionality, others locked useful features behind a premium paywall. My main goal was to solve my own pain points as a collector, so I thought: why not build a platform for myself and add exactly the features I had been searching for? That's how Pokemon TCG Tracker was born. I'm also building my own Pokedex and have collected around 650 out of 1025 Pokemon so far, and still growing! The Pokedex view is a good example of a feature born from that goal — most tools only let you browse by expansion set, but I wanted to approach my collection from the Pokemon side too, making it easy to find every printing of a favorite Pokemon across decades of sets.
03 — How it works
Card data is imported from a public dataset into MongoDB with idempotent scripts that handle both card documents and expansion metadata. The frontend uses Next.js App Router with server actions for data fetching and collection mutations. Collection updates use React 19's useOptimistic for instant UI feedback, with server-side revalidation keeping data consistent. The Pokedex module matches cards by their national Pokedex number, falling back to name matching when needed, and the card detail page surfaces related printings from other sets.
