--- # nuzlocke-tracker-b9oj title: Implement Dupes Clause & Shiny Clause Enforcement status: completed type: feature priority: normal created_at: 2026-02-07T20:03:12Z updated_at: 2026-02-07T20:07:50Z --- Add enforcement for duplicatesClause and shinyClause rules: - Dupes Clause: Grey out Pokemon in encounter modal whose evolution family is already caught - Shiny Clause: Dedicated Shiny Box for bonus shiny catches that bypass route locks ## Checklist - [x] Migration: Add is_shiny column to encounters table - [x] Backend model + schema: Add is_shiny field - [x] Backend: Shiny route-lock bypass in create_encounter - [x] Backend: Evolution families endpoint (GET /pokemon/families) - [x] Frontend types + API: Add isShiny fields and fetchPokemonFamilies - [x] Frontend: Dupes Clause greying in EncounterModal - [x] Frontend: ShinyEncounterModal + ShinyBox components - [x] Frontend: RunEncounters orchestration (split encounters, duped IDs, shiny box) - [x] TypeScript type check passes