v0.1.3a -- IV Calculator, trainer avatars, shiny evolution, and mobile API
What's New
IV Calculator (/iv)
- Manual tab: search for any Pokémon by name (form-aware -- Alolan, Galarian, Hisuian variants appear as distinct entries); enter CP, HP, and stardust cost; set trainer level (pre-filled from your profile when logged in); optionally set Pokémon Status (Normal / Shadow / Purified / Lucky) and the calculator normalises the displayed dust cost back to the standard bracket automatically
- Screenshot tab (logged in): upload a PNG/JPEG of the stats screen and the backend extracts CP, HP, dust, name, status, and appraisal stars automatically -- two-pass CP extraction plus arc-scan fallback; three-strategy name detection; Lucky/Shadow/Purified status from keywords and dust inference; gap-based star detection with rainbow hundo recognition; an editable extraction card lets you correct any field before or after calculating
- My Box tab (logged in): save IV results to a personal Pokémon box (up to 3000 entries); view, note, and delete saved spreads
- Supports levels 1.0--51.0 and CP up to 50,000 (Mega Pokémon)
- Requires Tesseract OCR installed on the server for the Screenshot tab; see Getting Started for setup
Trainer Avatars
- 101 new Classic (Showdown) sprites: named characters including villains (Giovanni, Cyrus, Ghetsis, Lysandre, Lusamine, Guzma, Rose, Volo), rivals, N, champions, gym leaders by region, Elite Four members, professors for every generation, and playable characters with outfit variants
- 86 new pokeemerald-expansion (FRLG-style) sprites: Kanto gym leaders, Elite Four, Prof. Oak, Team Rocket grunts, and 60+ trainer class variants; bundled locally under
static/sprites/pex/ - Searchable combobox replaces the old dropdown: type to filter with smart ranking (exact → starts-with → contains), sprite thumbnails, cross-set search, and "researcher"/"professor" tag aliases
Admin: Sprite Lock Management
- New Trainer Avatars tab in the admin panel: set per-sprite rank requirements (6 tiers: unlocked / Trusted+ / Content Creator+ / Tester+ / Moderator+ / Admin only)
- Professor sprites are auto-locked to Trusted+ server-side regardless of the table
- The
/settingsavatar picker filters to only sprites the requesting user's rank can access - New DB table:
sprite_locks(migration 37)
Shiny Collection: Evolution Tracking
- Evolve button on each row in the Caught tab: single-path evolutions confirm inline; branching evolutions (e.g. Gloom → Vileplume or Bellossom) show a sprite picker
- A new Evolved tab lists all shinies that have been evolved through the app
- Evolved entries show a chip label and a subtle visual treatment on your public trainer profile
evolved_atcolumn records when each evolution was applied (migration 38)- New Go Pass catch method added (alongside Wild, Egg, Raid, Research, Evolution, Photobomb, Trade, GO Tour)
Mobile Companion API (/api/mobile/v1)
- Session-authenticated versioned API for a companion mobile app; Bearer token auth (same session token as the web cookie)
- Push notifications for raid events (match found, lobby cancelled, 30-second confirm warning); Android via FCM, iOS via APNs -- silently disabled when credentials are absent
- Endpoints mirror web equivalents: auth, profile update, game data, raids, IV Calculator, Pokémon box, Raid Finder
- See API Reference for the full endpoint list
Trainer Level and Shiny Enhancements
- Trainer level field in Settings (1--51); pre-fills the IV Calculator and OCR trainer-level param automatically
- Shiny costume tracking: record costume variants (e.g. Party Hat Pikachu); shown on your collection and public profile
- Event tag: tag shinies to a specific in-game event for filtering
Other Changes
- DPS target comparison: compare a moveset's DPS against all current raid bosses at once
- Awards: per-award configurable minimum rank required to grant (Admin panel → Awards)
- Admin tab bar wraps to a second row on narrow screens instead of clipping off-screen
- Fixed large PNG upload timeouts (ReadHeaderTimeout replaces ReadTimeout)
- Upgraded Pokémon GO level cap to 51 across IV Calculator, counters, and CP multiplier tables
Migrating from v0.1.2d
Run the following sections from migrate.sql against your database in order and before deploying:
| Section | What it does |
|---|---|
| 30 | Creates user_pokemon_box and mobile_device_tokens tables |
| 31 | Adds costume and event_tag columns to user_shinies; rebuilds the unique index to include both |
| 32 | Adds trainer_level column to users |
| 33 | Drops the unique constraint on user_shinies (replaced by a non-unique index) |
| 34 | Renames user_friends to user_follows |
| 35 | Adds confirm_warned_30s flag to raid_lobby_members |
| 36 | Adds min_grant_rank column to awards |
| 37 | Creates sprite_locks table |
| 38 | Adds evolved_at column to user_shinies |
Important: Sections must be applied in order. Section 33 must run before section 34.
If Tesseract is not yet installed on your server, install it now:
# Debian/Ubuntu
apt-get install tesseract-ocr
# Verify
tesseract --versionMigrating from v0.1.2c or earlier
Apply all sections from your last applied section through section 38, in order. The section comment headers in migrate.sql include dates to help you identify where to start.
If you are on v0.1.2c: start at section 26.
If you are on v0.1.2b: start at section 24.
If you are on v0.1.2a or earlier: start at section 23.
Fresh Install
Follow the Getting Started wiki guide. Use schema.sql -- it already reflects all migrations through section 38. Do not also run migrate.sql on a fresh install.
See Configuration for all environment variables including the new optional push notification credentials.
Notes
- Tesseract must be on
PATHon the server for the IV Calculator Screenshot tab to return results. The tab loads and accepts uploads without it; OCR extraction will return empty fields if the binary is missing. - Push notifications require separate FCM (Android) and APNs (iOS) credentials. Both are silently disabled when their environment variables are absent -- no errors, no effect on other features.
- The
user_friends→user_followsrename (section 34) is a destructive rename. If your database does not yet have auser_friendstable (i.e. you never applied section 27 from v0.1.2d), skip section 34. - The
sprite_lockstable starts empty; professor sprites are auto-locked server-side. Use Admin → Trainer Avatars to configure locks for other sprites. - Trainer level defaults to 40 for users who have not set it; the OCR endpoint also accepts a
?trainer_level=query parameter override.