I've been collecting video games for years, and like most collectors, I'd tried everything: spreadsheets that became outdated the moment I closed them, manually checking prices across a dozen different marketplaces, bookmarking games I wanted only to forget about them entirely. The existing tools either felt bloated with features I didn't need or were too simplistic to be useful. So I built Shelfware—a collection tracker that actually works the way I think about my games.
What It Does
At its core, Shelfware handles the basics well: catalog your collection with barcode scanning, track Complete In Box status, manage region variants, and import existing data from CLZ if you're migrating. Daily price updates pull from multiple marketplaces so you can see what your collection is actually worth without hunting around.
The more interesting piece is The Arcanum—a recommendation engine that learns your taste through ratings and builds a profile of what you're likely to enjoy. It surfaces games through what I call the Crystal Ball: suggestions based on your collection patterns, not just generic popularity lists. As you rate more games, it gets better at understanding your preferences.
There's also a practical feature for when people ask what games you want: generate a shareable link that shows AI-curated recommendations of games you don't own but would probably like. No account needed on their end, no spoiling surprises by checking your wishlist. You can revoke the link whenever you want.
How It's Built
The architecture needed to handle several distinct problems: fast collection management, heavy data aggregation from multiple gaming APIs and marketplaces, and machine learning inference that doesn't sacrifice performance.
I split it into focused layers: Symfony and PostgreSQL handle the core API and collection data. The recommendation engine and price prediction models run on Python with PyTorch—keeping the ML pipeline separate from the web stack made it easier to iterate on the models without touching the main application. Tailwind CSS for the web interface, and a React Native app for mobile access and barcode scanning when I'm actually out hunting for games.
The data aggregation piece was the real challenge: normalizing game information across different APIs that all structure their data differently, dealing with inconsistent naming conventions, and keeping everything synchronized without hammering external services.
Privacy Approach
Your collection data stays yours. The recommendation engine doesn't share or sell anything—it just learns from your ratings to make better suggestions. Shareable links for gift-givers can be revoked anytime, and nothing requires creating accounts or handing over more data than necessary.