Monitors Apex Manager auctions
(https://apexmanager.rootsxo.studio/api/auctions, auth
Authorization: Bearer <APEX_TOKEN>) every 15 min and pushes alerts to ntfy
(<NTFY_TOPIC>) and Discord (<DISCORD_WEBHOOK_URL>). Alerts one per
auction via rolling 24h dedupe (blob key apex_cheap_player_alert_seen_ids
stores {auctionId: firstSeenTs}).
growthClass is prodigy, displayed
potential is B+, AND salary < PRODIGY_MAX_SALARY (3500). Data proves
prodigy + B+ potential carries a 60.0% S-tier conversion rate (vs. ~3.0%
for all other growth classes).salary < 2500.intel < GEM_MAX_INTEL (0.35, meaning Fog > 65%), AND
salary < GEM_MAX_SALARY (4100). High floor + high upside lottery.fogConfidence = 0), AND
salary < GEM_MAX_SALARY (4100).main.ts:
PRODIGY_MAX_SALARY = 3500 (rule 1), ARCHETYPE_MAX_SALARY = 2500 (rule 2),
and GEM_MAX_SALARY = 4100.GEM_MAX_SALARY constant — editing it moves
both thresholds at once. Split it into two constants if they ever need to
differ.p.salary ?? Infinity, so a listing with no
salary value fails every < threshold check and will not fire rules
1/3/4 (rule 2 already required a salary). A missing salary is effectively
treated as "too expensive," not a match. In practice listings always carry a
salary, so this only matters for malformed/edge data.[Role] after the name in both the ntfy title and the Discord embed title,
plus a dedicated Role field in the Discord embed. Sourced from p.role
and shown as h.role ?? "?" so a missing role degrades gracefully.Variance Ceiling Cap (+5 / +6 Max):
The Prodigy Multiplier:
growth_class = 'prodigy' is the primary discriminator on the market.Intel Semantics:
fogConfidence is INTEL (scouting confidence), NOT fog obscuring.fogConfidence = 1.0 is
0% fog; 0.0 is 100% fog).Trial Caps (attributeCaps) are Fogged:
statsRevealed: true appears, but attributes and
attributeCaps are provisional and fluctuate as intel rises. They can
trend downwards upon retirement. Do not treat trial caps as confirmed true
ceilings./api/auctions provides endAt ISO timestamps for
calculating real-time auction expiry and countdown timers.trueRating and potentialRating are only
populated once a player retires (available in /api/watchlist and
/api/players/:id).D- to S+) over 0–3000 rating points
(~200 pts per grade).APEX_TOKEN — API bearer token (required)NTFY_TOPIC — ntfy.sh topic to post to (required)DISCORD_WEBHOOK_URL — Discord channel webhook URL (optional/required)