-
Notifications
You must be signed in to change notification settings - Fork 0
Shiny Tracking
My Collection at /shinies is a personal checklist for logged-in users: record every shiny you have caught, in which form, with which costume, and from which event. The page shows what you own and what is still missing.
Log in and open the Collection page to track your own shinies. Three tabs split the view:
- All Shinies: the full dex with your caught entries highlighted
- Caught: only what you own, with catch dates shown as "time ago", inline editing, and a remove button
- Missing: everything you have not caught in any form yet
Regional forms (Alolan, Galarian, Hisuian, Paldean) whose shiny is released in GO appear as their own cards, sorted right after their base species: Growlithe and Hisuian Growlithe are separate checklist items with independent caught state, counts, and sprites. Searching a region word ("hisuian") filters to those cards. The unique counter counts species and region pairs, so both Growlithes count separately.
Alternate battle formes are tracked the same one-card-per-form way: the Therian formes of Tornadus, Thundurus, and Landorus, the Attack, Defense, and Speed formes of Deoxys, the Origin formes of Giratina, Dialga, and Palkia, and Sky Shaymin each get their own card and caught state alongside their default forme.
Click a Pokemon and fill in the add modal:
- Form: Normal, Shadow, or Purified
- Region: fixed by the card you clicked; adding from the Hisuian Growlithe card records a Hisuian entry. Region is stored separately from form, so a Shadow Alolan catch is representable.
- Method: wild, egg, raid, research, evolution, photobomb, trade, or GO Tour
- Costume: an autocomplete picker whose suggestions are now data driven per species, it offers only the costumes that this Pokemon actually received in GO (checked against real game assets) rather than a short generic list. Leave blank for an uncostumed catch.
- Event: freeform text with autocomplete covering major events (GO Fest 2018 through 2026, GO Tour Kanto, GO Tour Johto, GO Tour Hoenn, GO Tour Sinnoh, GO Tour Unova, Community Day, and others). Leave blank when not event-specific.
True duplicates are allowed, you can record the same species, form, costume, and event more than once if you caught multiples.
The shiny grid shows one card per species you own. When you own more than one entry for a species, a blue xN badge appears in the top-left corner of that card (for example, x3 if you have three records for Pikachu). Costumed entries show the actual costumed sprite, Party Hat Pikachu displays with its hat, Nightcap Snorlax displays with the cap, rather than the plain base shiny sprite. Costumed sprites now render for every eligible Pokemon rather than a handful, including Party Hat Venusaur, the GO Fest Sun Crown and Moon Crown Eevee and Pikachu, and a large batch of the real Pikachu costumes; a few sprites that pointed at the wrong art were corrected in the process.
Entries in the Caught tab show a subtitle line below the Pokemon name when any extra fields are set. The subtitle joins the set fields with a middle dot (form · costume · event), so an entry might read "Shadow · Party Hat · GO Fest 2025". The form badge is omitted when it is Normal; costume and event are omitted when blank.
Each entry can be edited inline: click the edit button to update the form (dropdown), region (dropdown, shown only for species that have shiny regional forms in GO), method (dropdown), costume (autocomplete dropdown filtered to costumes available for that species, Pikachu shows its regional caps and Lucha Libre; Snorlax shows Night Cap; etc.), or event (autocomplete dropdown). The region selector exists precisely so entries logged before regional support can be retroactively marked with their form; saving swaps the row to the correct regional sprite and moves the caught badge to the right card. A remove button deletes the entry entirely. A counter in the tab header tracks how many unique species and region pairs you have collected.
The Evolve button is region aware: a Galarian Meowth offers Perrserker (not Persian), an Alolan Rattata evolves into an Alolan Raticate, Galarian Slowpoke offers Galarian Slowbro or Slowking, and species whose base form cannot evolve in GO (base Qwilfish, base Linoone, base Mr. Mime) offer nothing until their entry is marked with the right region.
The 9 most recent shiny catches appear on a trainer's public profile page, below the achievements section. Each entry shows the shiny sprite (costumed or regional where applicable), the Pokemon name (prefixed with its region, e.g. "Hisuian Growlithe"), and any region, Shadow, or Purified badge. This section is visible to anyone who can view the profile.
To opt out, open Settings and enable Hide shiny collection under Privacy. When enabled, the shiny section does not appear on your public profile and the public collection endpoint returns an empty result.
The full collection is still accessible separately. When another trainer's profile is public and they have not hidden their collection, their complete shiny collection is shown on their trainer profile page, reached by clicking their card in the Trainer Directory.
Shiny availability (which Pokemon are released shiny and through which methods) comes from PoGoAPI (pogoapi.net/api/v1/shiny_pokemon.json), refreshed server side and delivered with the rest of the cached game data; see Data-Sources. Because PoGoAPI has stopped tracking some newer shiny releases, a locally curated supplement (internal/pogodata/fallback/shinies_supplement.json) is merged over the upstream data in memory; supplement entries always win and survive every refresh. The collection page is ts/shinies.ts.
Which regional forms exist per species (and their PokeAPI variant sprite ids) is a hand maintained table kept in two mirrored files: ts/shared/regionalForms.ts for the browser and internal/handlers/regional.go for the server. A unit test checks the species names against the shiny data so the mirrors cannot drift apart silently. Region aware evolution targets live in REGIONAL_EVOLUTION_NEXT in ts/shared/evolutions.ts.
Costumes are data driven from two sources. A curated per-species override list pins the costumes and sprite art for specific Pokemon, and a shared-costume table covers the event costumes that were handed out to many species at once (Party Hat, the GO Fest crowns, and so on), each entry carrying an explicit eligibility list of which Pokemon received it. Those eligibility lists are generated from the live pokemon-go-api asset tree, so the picker offers a species only the costumes that actually exist for it in the game files, and the grid can resolve a real costumed sprite for every eligible Pokemon.
Sprites and audio come from PokeAPI: grid sprites use the PokeAPI GitHub sprite repository directly (the shiny variant lives under sprites/pokemon/shiny/, and costumed variants live under their own subdirectory paths). The modal's normal vs shiny pair, the Pokedex flavor text and genus, and the cry audio URL are fetched on demand from the PokeAPI REST API by ts/shared/pokedex.ts, which caches every response in memory for the session. Sprites that 404 simply hide themselves.
Your collection is stored per account through the /api/shinies endpoints: GET lists your entries, POST adds one (pokemon_id, form, region, method, costume, event_tag), PUT /api/shinies/{id} updates it, and DELETE /api/shinies/{id} removes it. The region value is one of the four geographic forms (alolan, galarian, hisuian, paldean), one of the battle formes that reuse the same field (therian, origin, attack, defense, speed, sky), or empty for the original form; any unrecognized value is rejected. The evolve endpoint also accepts the target region so regional lines stay consistent. All mutating calls carry the CSRF token from the page's meta tag.
Duplicate records are permitted, there is no unique constraint that would block recording the same (user, pokemon, form, costume, event) combination twice. Each row gets its own ID and can be edited or removed independently.
A separate public endpoint, GET /api/shinies/of/{username}, returns another user's collection when their profile is public and their collection is not hidden. It returns an empty array otherwise. The response includes sprite_url (shiny variant, resolved server side) in addition to the standard fields. See API-Reference for the full endpoint list and Accounts-and-Roles for how accounts work.
Repository | Live site | hailsDotGO is a fan-made project, not affiliated with, endorsed by, or connected to Niantic or The Pokémon Company. Game data comes from community sources credited on the Data Sources page.
Start Here
Features
- Raids and Counters
- DPS Calculator
- IV Calculator
- PvP IV Ranker
- Events
- Shiny Tracking
- Trainer Directory
- Raid Finder
- Social Features
- Trust and Awards
- Bug Reports
- Player Reports
- Store
- Accounts and Roles
- Admin Guide
Self-Hosting
Development
Translations