← All cases
Case 011 Collection Tracking

Living Pokédex Tracker

Live — andrewwigman-001-site3.htempurl.com ↗

Completing a living dex means tracking caught, shiny and hidden-ability status for over 1,000 species — per save, per region — and spreadsheets collapse under that. Most trackers are single-user and re-fetch the same API data endlessly.

A multi-user web tracker that lays the dex out as in-game storage boxes of 30, with per-dex progress, shiny-hunt counters, team and stat tools, and shareable read-only trainer cards.

The living dex laid out as in-game storage boxes of 30, with caught/shiny toggles and per-dex progress bars.
Exhibit 011-A The living dex laid out as in-game storage boxes of 30, with caught/shiny toggles and per-dex progress bars.
The trainer dashboard — National Dex progress rings and an achievement track across catching, shiny-hunting and abilities.
Exhibit 011-B The trainer dashboard — National Dex progress rings and an achievement track across catching, shiny-hunting and abilities.
Completeness under every definition of “done” — living, shiny, hidden-ability and gender dexes, broken down by generation and rarity across all 1,025 species.
Exhibit 011-C Completeness under every definition of “done” — living, shiny, hidden-ability and gender dexes, broken down by generation and rarity across all 1,025 species.
Coverage
National dex to #1025 plus 10 regional dexes and alt forms
Box view
boxes of 30, infinite scroll, lazy per-box loading
Caching
L1 memory → L2 SQL → PokeAPI, each entry fetched once ever
Selection model
Windows-Explorer-style — marquee drag, Ctrl/Shift multi-select, bulk mark
Dependencies
one NuGet package (the SQL Server client)
Tests
43 xUnit test cases passing

Blazor Server (.NET 10) with hand-written SQL over ADO.NET and cookie auth (PBKDF2, 100k iterations); built feature-by-feature by agents with the caching tiers specified up front so every later page reused the same fetch-once pipeline.

An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.