- Full gg.deals-style UI: deal feed with filters, game pages with price history charts, rankings, vouchers, news, prepaids, subscriptions, bundles, franchises, wishlist, API docs - Real data crawlers: * gg:crawl (Steam Store API + GOG Catalog + Epic free games) * gg:catalog (252K game slugs from gg.deals sitemaps) * gg:ggdeals (per-game prices via FlareSolverr session, JSON-LD parsing) * gg:seed / gg:crawl-covers (demo seed + Steam CDN cover art) - 24/7 self-updating scheduler (scripts/scheduler_loop.php, lockfile-protected) - Tailwind v4 dark/light theme, Alpine.js, Chart.js
5.1 KiB
5.1 KiB
GG.deals Clone
A demo clone of gg.deals — PC game price comparison — built with:
- CodeIgniter 4 (PHP 8.2) — MVC backend
- MongoDB — data store (
harness-mongo, db:ggdeals) - Tailwind CSS v4 — styling (dark + light theme)
- Alpine.js — interactivity (tabs, filters, wishlist store, settings store, search dropdown)
- Chart.js — price history charts
The feature set was modeled after a deep crawl of gg.deals itself: the full sitemap tree (12 sitemap types, 5k+ URLs) plus Wayback Machine snapshots of every page type (homepage, deals, game, bundle, freebie, giveaway, franchise, game-points, API, rankings, vouchers, news).
Features
Homepage dashboard (gg.deals-style, 10 sections)
- Most Popular Games, New deals, Best deals, Historical lows, Ending Soon
- 🔥 Most Wanted, 🆕 New releases, 📅 Upcoming games
- 📰 News feed, 🎁 Prepaids
- Stats strip (games / deals / stores / all-time lows now)
Deal feed & presets (/deals/{preset})
- Preset tabs: Hot New Deals, New Deals, Historical Lows, Ending Soon, ≥75% off, ≥85% off
- Advanced filters: price tiers (Under $2–$30), discount tiers (≥50–90%), deal rating (🔥 Hot/Good/Fair), release year ranges, only all-time lows, only-from-wishlist, per-store checkboxes with real logos
- Sorts: Best deals, Deal rating, Biggest discount, Cheapest ever, New releases, Lowest price, Metascore, Title A–Z, Oldest release, Ending soon
- Deal rows with 🔥 Hot / Good / Fair badges, ★ New HL flags, ⏳ ending-soon timers, wishlist hearts
Game page (/game/{slug})
- Header price tabs: Current Prices / Historical Low
- Price summary cards: Official Stores, Keyshops, Subscriptions, All-time low
- Deals tables (official stores & keyshops) with DRM, region locks, expiry, HL flags
- Chart.js price history (3M/6M/1Y/All) vs all-time low
- Bundles with this game, Series & franchises, Similar games sections
- About (dev/publisher/age rating), System Requirements, How Long to Beat
Content & community pages
- Bundle pages (
/bundle/{slug}) — games list, price, savings, store - News articles (
/article|deal|freebie|giveaway/{slug}) — categorized posts with claim/enter CTAs - Franchise pages (
/franchise/{slug}) — all games in a series - Rankings — Most Wishlisted, Most Collected, Metacritic, Steam Reviews
- Vouchers — promo codes per store with copy-to-clipboard
- Subscriptions — Game Pass, PS Plus, EA Play, Ubisoft+ cards
- Prepaids — gift card groups with denominations
- Games browser (
/games/{genre}) — same deal-feed layout (filter sidebar + row list + pagination) with genre chips on top, Stores, Wishlist (localStorage)
Site features
- Region & currency selector (19 regions, 7 currencies, localStorage-persisted)
- Keyshops toggle (on/off)
- Dark / Light theme toggle
- API page + Game Prices API (
/api/prices?appid=) with live demo tester - FAQ (accordion) + CD key activation tutorials (Steam/GOG/Epic/Origin/Uplay/Keyshops)
- Live search suggestions
Assets
- Real cover art — crawled from Steam CDN (
php spark gg:crawl-covers) - Real store logos — brand favicons in
public/img/stores/
Quick start
# 1. Configure .env (MONGO_URI / MONGO_DB)
cp env .env
# 2. Install PHP + frontend deps
composer install
npm install
# 3. Build CSS
npx @tailwindcss/cli -i assets/css/app.css -o public/css/app.css --minify
# 4. Seed the database (stores, 61 games, 549 deals, ~26k price points, vouchers, news, prepaids, subscriptions, bundles, franchises, covers)
php spark gg:seed
# 5. Crawl real cover art from Steam
php spark gg:crawl-covers
# 6. Serve
php spark serve --host 0.0.0.0 --port 8085
Data model (MongoDB collections)
stores— code, name, kind, colors, logogames— slug, title, base price, genres, platforms, scores, all-time low, best prices, developer/publisher, sys reqs, HLTB, age rating, descriptiondeals— per-store offers with cut %, HL flag, DRM, expiryprice_history— 5-day cadence price points per storevouchers— promo codes per storenews— categorized posts (deals/bundles/freebies/giveaways/subscriptions)prepaids— gift card groupssubscriptions— game subscription servicesbundles— bundles with included game slugsfranchises— franchise series
Layout
app/
Commands/ SeedDatabase (gg:seed), CrawlCovers (gg:crawl-covers)
Controllers/ Home, Game, Games, Rankings, Vouchers, News, Prepaids,
Subscriptions, Bundle, Franchise, Wishlist, Stores, Pages, Api
Helpers/gg_helper.php money(), cut_class(), deal_rating(), qs_url(), time_ago()
Libraries/Mongo.php MongoDB client wrapper
Models/GameModel.php aggregation pipelines for feed/chart/dashboard/similar
Views/ layout, homepage, home, game, + 15 more page views, partials/
assets/css/app.css Tailwind v4 source (theme tokens + dark/light)
Demo data only: prices are randomly generated, buy links point to search results.