How the filter works
Deals pass through two layers before being broadcast:- Layer 1 — deterministic rules (
rulesFilter.ts): fast, free, and fully configurable via environment variables. - Layer 2 — GPT curation: the AI evaluates only the deals that survive Layer 1, selecting the best ones and generating a short reason for each.
Quality check: OR logic
A game passes the quality check if it satisfies either condition:Parameter trade-offs
| Parameter | Increasing it | Decreasing it |
|---|---|---|
MIN_DISCOUNT_PERCENT | Fewer deals, all more heavily discounted | More deals, includes moderate discounts |
MIN_METACRITIC_SCORE | Stricter quality floor, fewer games qualify via Metacritic | More lenient; set to 0 to disable entirely |
MIN_STEAM_RATING_PERCENT | Stricter community rating requirement | Allows games with mixed or lower ratings |
MAX_PRICE_USD | (lower value) Only cheap deals make it through | (higher value) Includes premium-priced titles on sale |
DEALS_PAGE_SIZE | More candidates for the AI → potentially better selection, slightly higher AI cost | Fewer candidates, faster and cheaper but may miss good deals |
Recommended configurations
- Strict (AAA only)
- Balanced (default)
- Broad (more variety)
High thresholds to surface only deeply discounted, critically acclaimed titles.Expect fewer daily deals — sometimes none. Best for users who only want well-known, high-quality games at steep discounts.
Interaction between parameters
The parameters are not fully independent. A few things to keep in mind:DEALS_PAGE_SIZEis an upstream cap. CheapShark returns at mostDEALS_PAGE_SIZEdeals sorted by deal rating. If you set strict quality thresholds, increasing this value gives the filter a larger pool to draw from.- Price and discount compound. A game with a 70% discount on a 60. If you want to avoid expensive titles even on deep discount, lower
MAX_PRICE_USD. - Metacritic coverage is incomplete. Many indie games and some newer releases have no Metacritic score. When
MIN_METACRITIC_SCORE > 0, those games can still pass viaMIN_STEAM_RATING_PERCENT. SettingMIN_METACRITIC_SCORE=0removes this asymmetry.