-
Notifications
You must be signed in to change notification settings - Fork 0
Data Sources
hailsDotGO does not invent any game data: everything on the site is aggregated from community-maintained sources, cached aggressively, and served from memory. This page lists every external source, what it provides, how often it is fetched, and how the app stays up even when all of them are unreachable.
| Source | Provides | Fetched by | Cadence |
|---|---|---|---|
| PoGoAPI | Base stats, current movesets, fast/charged moves, CP multipliers, shiny availability, shadow list, type effectiveness, Pokemon types, localized names | Server | Every 6 hours |
| pokemon-go-api (GitHub Pages) | Current raid bosses (raidboss.json) and Max Battles (maxbattles.json) |
Server | Six scheduled refreshes per day |
| ScrapedDuck | LeekDuck events feed (events.min.json) |
Server | Every 30 minutes |
| LeekDuck event pages | Per-event detail HTML (scraped and sanitized) | Server | Re-fetched when older than 12 hours |
| PokeAPI | Pokemon sprites, species flavor text, genus, cries, form sprites | Browser (client-side) | On demand |
| Open-Meteo | Geocoding plus current weather for the weather boost feature; no API key needed | Server | Cached until the next half-hour boundary |
| Pokemon Showdown | Classic trainer class sprites for avatars | Server (proxied) | Fetched once, cached in memory |
| Dreamstone Mysteries | GBA-style trainer sprites | Bundled in the repo | Never fetched |
The core game data set comes from ten PoGoAPI endpoints: pokemon_stats, current_pokemon_moves, fast_moves, charged_moves, shiny_pokemon, shadow_pokemon, type_effectiveness, cp_multiplier, pokemon_types, and pokemon_names. They are fetched sequentially with a 400 ms delay between requests to stay polite, every 6 hours, plus once at startup. Each successful response is written to the disk cache. A superadmin can force an immediate refresh from the admin panel, and private API consumers can trigger one via POST /api/refresh (see API Reference).
pokemon_names feeds the localized Pokemon names (French, German, Spanish) used by the frontend; the parser tolerates the several response shapes this endpoint has had over time.
Current raid bosses come from https://pokemon-go-api.github.io/pokemon-go-api/api/raidboss.json and Max Battles from .../api/maxbattles.json. The app regroups them under its own tier keys: raids use 1, 3, 5, and 6 (Mega), with the shadow tiers folded into their numeric tier and a Shadow prefix added to the name; Max Battles use tiers 1 to 3. Each boss carries its image, types, shiny availability, and normal plus weather-boosted CP ranges.
Both endpoints refresh on a fixed schedule in Mountain Time (DST-aware): 12:01 AM, 4:00 AM, 8:00 AM, 12:01 PM, 4:00 PM, and 8:00 PM, matching when raid rotations actually change. They are also fetched once at startup. These bosses power the Raids and Counters page and define which bosses can be queued in the Raid Finder.
The Events page is driven by ScrapedDuck's events.min.json, a machine-readable export of LeekDuck's event calendar, fetched every 30 minutes (ScrapedDuck asks for at least 5 minutes between fetches, so this is comfortably polite).
For the event detail modal, the server scrapes each active event's LeekDuck page directly:
- Only
httpslinks on theleekduck.comhost are ever fetched. - Requests are spaced 1500 ms apart and a fetch pass skips events that already ended.
- The page's main content block is extracted, navigation, ads, scripts, and the author box are stripped, links are absolutized and forced to
target="_blank" rel="noopener nofollow", and the result is sanitized with bluemonday (UGC policy plusclassattributes, https-only URLs) before storage. - A scraped page is kept for up to 12 hours before re-fetching; failures keep the previous copy, and details for events that leave the feed are evicted.
- The whole detail cache persists to disk (
event_details.jsonin the cache directory).
PokeAPI is used entirely client-side: Pokemon sprites (including shiny and special forms), species flavor text, genus lines, and cries are fetched by the browser on demand for the DPS Calculator, Shiny Tracking, and profile features. The server also builds favorite-Pokemon sprite URLs from the PokeAPI sprites repository on GitHub for the Trainer Directory. Nothing from PokeAPI transits or loads the hailsDotGO server.
The weather boost feature resolves a user's saved city to coordinates with Open-Meteo's geocoding API (results cached indefinitely, since cities do not move), then reads the current WMO weather code and wind speed from the forecast API. The code is mapped to an in-game weather condition, with wind of 36 km/h or more overriding clear-sky conditions as Windy. Results are cached per city until the next half-hour boundary, matching when in-game weather changes. No API key is required. See Accounts and Roles for the user-facing behavior.
-
Pokemon Showdown: the classic trainer class sprites used for avatars are proxied through
GET /api/trainer-sprite/{slug}so browsers never hit Showdown directly. Each sprite is fetched once, capped at 64 KB, cached in an in-processsync.Map, and served withCache-Control: public, max-age=2592000, immutable. -
Dreamstone Mysteries: GBA-style trainer sprites from the open-source pokeemerald ROM hack Pokemon Dreamstone Mysteries are bundled in the repository under
static/sprites/dreamstone/and served as ordinary static files.
The store survives every source being down:
-
Embedded fallback: baseline JSON for the core PoGoAPI data sets is compiled into the binary from
internal/pogodata/fallback/, so a fresh install boots with working data and no network at all. -
Disk cache: every successful fetch is written to the cache directory (
CACHE_DIR, default./cache); at startup anything on disk overlays the embedded fallback. - Network: background refreshers then overlay live data as it arrives. A failed refresh keeps the last good payload.
Public consumers read the same in-memory store through the endpoints in the API Reference, which add a 5-minute browser cache on top.
hailsDotGO exists because of the people maintaining these projects: PoGoAPI, pokemon-go-api, ScrapedDuck, LeekDuck, PokeAPI, Open-Meteo, Pokemon Showdown, and Pokemon Dreamstone Mysteries. The in-app credits page (https://pogo.hails.live/credits) carries the canonical attribution list, split by how each source is used. If you operate one of these sources and have concerns about how your data is used, please open an issue on the repository.
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