How the events calendar works
Everything on the calendar is sorted into one of six groups, and every date is taken from an official schedule rather than guessed. This page says what each group holds and where its dates come from.
The six groups
Use the buttons at the top of the calendar to show or hide each one.
National and club football matches you can bet on. Matches with no betting available anywhere are hidden.
CS2, Dota 2 and League of Legends tournaments (Majors, The International, Worlds) — both single matches and who-wins-the-whole-thing bets.
The days the big economic numbers come out: US interest-rate decisions, inflation, and the monthly jobs report. Each row carries the flag of the country it belongs to.
The days big US companies say how much they earned — Apple, Meta, Nvidia and others, plus the crypto-linked ones like Coinbase and Strategy. Each row carries the company logo.
Token unlocks, new listings, network upgrades and exchange launches.
Everything else worth watching: elections, big cultural moments, tech launches, world events.
Where the dates come from
Every event records exactly which schedule it was read from — a league fixture list, a central-bank calendar, a company investor-relations page. We refresh them every six hours, and a date is never extrapolated from a pattern: if a quarter has not been announced yet, the row simply is not there.
| Source | Feeds into | Origin | Refresh |
|---|---|---|---|
polymarket-wc | Sports (FIFA World Cup 2026 fixtures + MLS) | Polymarket gamma-api (tag_slug=fifa-world-cup, tag_slug=mls) | Every 6 hours |
sportsdb | Sports (EPL fixtures + international friendlies) | TheSportsDB free tier (eventsnextleague.php) | Every 6 hours |
curated-tournament | Esports (TI 2026, PGL Singapore Major, etc.) | Hand-maintained list in scripts/events/sources/curated-tournaments.mjs. Verified against Liquipedia. | On deploy |
curated-macro | Macro (FOMC, CPI, NFP, ISM PMI, jobless claims) | Hand-maintained list in curated-macro.mjs. Verified against the Fed FOMC calendar + BLS release schedule. | On deploy |
curated-earnings | Earnings (US large-cap Q2/Q3 2026) | Hand-maintained list in curated-earnings.mjs. Dates verified against company IR pages. | On deploy |
xo-market | Enrichment only — tournament tiles + fixture tiles on esports panels | XO Data API (curated catalog, ~30-40 active markets) | Every 6 hours |
limitless | Enrichment only — venue tiles on WC + other fixtures | Limitless active-markets API | Every 6 hours |
predict-fun | Enrichment only — WC tournament-winner + fixture tiles | Predict.fun mainnet API (auth via API key) | Every 6 hours |
kalshi | Enrichment only — macro, politics, tech and awards tiles | Kalshi public trade API (no auth, ~7.5k open events) | Daily |
Logo & flag registry
All visual assets (company logos, game logos, country flags) live in one file — scripts/events/assets.mjs. Change a logo URL once and every source picks it up on the next pipeline run.
- COMPANY_LOGOS — earnings feed. Keyed by ticker (
AAPL,MSFT,NVDA…). Each entry hasname,logoURL, brandcolor,domain. Source: simpleicons.org where possible (clean brand mark); Google favicon service as fallback for companies where simpleicons has trademark blocks (Microsoft, Amazon). - GAME_LOGOS — esports tournaments (
DOTA2,CS2,LOL,VALORANT). Same shape; all from simpleicons. - COUNTRY_FLAGS — used by the macro adapter and by
curated-tournaments.mjswhere relevant. Emoji-based (rendered as SVG via Twemoji for cross-platform consistency). - MACRO_ICONS — small emoji hints for macro chips (Fed 🏦, CPI 📈, NFP 👷, PMI 🏭, jobless 📉).
To swap a logo: edit scripts/events/assets.mjs, redeploy. All sources import from here — no need to hunt through adapter files.
What you see in the side panel
Each row keeps the one schedule that owns its date. Everywhere you can bet on it is then attached underneath as a card, in two groups:
- This match — bets on the game itself: who wins, the half-time result, the exact score. Shown when a site actually lists that matchup.
- Tournament winner — bets that run all season ("Who wins the 2026 World Cup"), attached to every match in that competition.
Visual conventions
- Sports fixtures — home + away team crests or country flags, with
Home vs Awayin the middle. - Economic releases — country flag first (🇺🇸 for the US), green category chip.
- Company results — small company logo on the card, the full brand mark in the side panel, amber category chip.
- Curated tournaments — game logo (Dota red D, CS yellow silhouette) on card + brand-tinted card background. Big logo in side panel.
Adding a new event
For events on venues we already pull (Polymarket / XO / Limitless / Predict.fun), the pipeline auto-attaches them — nothing to do. For curated additions:
- Pick the right file: tournament →
curated-tournaments.mjs, macro release →curated-macro.mjs, earnings →curated-earnings.mjs. - Add an object with
slug,title,startAt(ISO UTC), and category-appropriate metadata (heroImage,heroColor,countryFlag). - Deploy scripts to the server. The next pipeline run (every 6h) picks it up.