About this project

Game Sales Aggregator is an open-source project (MIT license is indicated) that automatically collects current game offers from several digital stores and publishes them on a static site and in a Telegram channel. The deployed version is available on GitHub Pages. What is tracked: free Epic Games giveaways (current and upcoming), discounts in Epic Games Store, temporarily free offers on Steam, Steam hot discounts (from 5%), as well as new arrivals and expected additions to Xbox Game Pass for PC. Site features: search by game title with 300 ms debounce; filtering by categories (Epic/Steam, free/discounted, new Game Pass games); sorting by price, discount percentage, or title; price range filter; wishlist stored in localStorage; notification history for the last 30 days; dark and light themes with a toggle in the header; bilingual interface (Ukrainian and English); PWA mode with installation on phone or PC and offline caching via Service Worker; SEO markup — Open Graph, Twitter Cards, JSON-LD, sitemap.xml. How it works: on a GitHub Actions schedule (hourly), a script runs that collects data from Steam, Epic Games, and Xbox Game Pass APIs. Then deals.json in the repository is updated, sitemap.xml is generated, the React app is built and deployed to GitHub Pages, and new discounts, giveaways, and additions are sent to the Telegram channel via Bot API. Technologies: React 19 + TypeScript + Vite + React Router; styles — vanilla CSS with glassmorphism effects; custom localization via LocaleContext (uk.ts, en.ts); data collection — Node.js with tsx; PWA based on vite-plugin-pwa and Service Worker; hosting — GitHub Pages; automation — GitHub Actions with hourly cron. Local launch: Node.js 20+ and npm are required. Automatic installation scripts are provided for Ubuntu/Debian (scripts/install.sh, including --dev mode) and Windows (scripts/install.ps1, including -Dev). Manual path — git clone, npm install, then commands npm run fetch (get data), npm run dev (local site), npm run build (production build), npm run lint, npm test. Build, tests, and deploy in CI run on ubuntu-latest; the app is static, so the dist/ directory can be placed on any web server (nginx, Caddy, etc.). For notifications to work in GitHub Actions, add secrets TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID in Settings, then Secrets and variables, then Actions. The README describes how to get the channel Chat ID: add the bot as administrator, send a message to the channel, and view the response from the getUpdates method. The repository structure covers workflow .github/workflows/scheduler.yml, data public/data/deals.json, scripts fetch-deals.ts and generate-sitemap.ts, components (GameCard and Epic/Steam/Xbox sections), contexts (LocaleContext, WishlistContext), hooks (useDebounce, useInstallPWA, useLocalStorage), localization dictionaries, router App.tsx, DataContext for loading deals.json, Service Worker src/sw.ts, and Vite configuration with PWA. The project also maintains a public Telegram channel with notifications about free games, discounts, and new Game Pass items.