GG.deals clone: CodeIgniter 4 + MongoDB game price tracker
- 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
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
<?= $this->extend('layout') ?>
|
||||
<?= $this->section('content') ?>
|
||||
|
||||
<div class="text-xs text-muted mb-4 flex items-center gap-1.5">
|
||||
<a href="/faq" class="hover:text-accent">FAQ</a>
|
||||
<span>›</span>
|
||||
<span class="text-zinc-400"><?= esc($tutorial[0]) ?></span>
|
||||
</div>
|
||||
|
||||
<div class="max-w-3xl bg-panel border border-line rounded-2xl p-6 mb-8">
|
||||
<h1 class="text-2xl font-extrabold text-white tracking-tight mb-4"><?= esc($tutorial[0]) ?></h1>
|
||||
|
||||
<?php
|
||||
$content = match ($tutorial[1]) {
|
||||
'steam' => [
|
||||
'Open the Steam client on your computer and sign in.',
|
||||
'Click "Games" in the top menu, then "Activate a Product on Steam".',
|
||||
'Click "Next" and agree to the Steam Subscriber Agreement.',
|
||||
'Enter the CD key you purchased — it looks like XXXXX-XXXXX-XXXXX.',
|
||||
'Click "Next". The game will be added to your library and begin downloading automatically.',
|
||||
'You can also do this in the browser: store.steampowered.com/account/registerkey.',
|
||||
],
|
||||
'gog' => [
|
||||
'Sign in to your GOG.com account in the browser or GOG Galaxy client.',
|
||||
'In the browser, hover over your username and click "Account".',
|
||||
'Click "Redeem code" in the account menu.',
|
||||
'Enter the code from your purchase and click "Redeem".',
|
||||
'The game is added to your library. In GOG Galaxy it appears immediately — install from the library tab.',
|
||||
],
|
||||
'epic' => [
|
||||
'Open the Epic Games Launcher and sign in.',
|
||||
'Click your profile icon (top right) and select "Redeem Code".',
|
||||
'Enter the code — it is usually 5 groups of 5 characters.',
|
||||
'Click "Redeem". The game is added to your library.',
|
||||
'Find it under your library and click "Install" to download.',
|
||||
],
|
||||
'origin' => [
|
||||
'Open the EA app (formerly Origin) and sign in.',
|
||||
'Click "Menu" (≡) in the top-left, then "Redeem Product Code".',
|
||||
'Enter the code and click "Next".',
|
||||
'The game appears in your library. Select it and click "Download".',
|
||||
],
|
||||
'uplay' => [
|
||||
'Open Ubisoft Connect (Uplay) and sign in.',
|
||||
'Click "Games" then "Activate a key" in the top bar.',
|
||||
'Enter your product key.',
|
||||
'Click "Activate". The game is added to your library.',
|
||||
'Ubisoft Connect also supports claiming keys directly on account.ubisoft.com.',
|
||||
],
|
||||
'keyshops' => [
|
||||
'Keyshops are marketplaces where third-party sellers list game keys.',
|
||||
'They are usually cheaper than official stores — sometimes significantly.',
|
||||
'The main risks: region-locked keys that may not activate in your country, and keys purchased with stolen payment methods that can be revoked later.',
|
||||
'Always check the key region before buying. Global keys are the safest option.',
|
||||
'You can disable keyshop prices entirely in the site settings (Keyshops toggle).',
|
||||
'If a key fails to activate, contact the seller first — most marketplaces have buyer protection.',
|
||||
],
|
||||
};
|
||||
?>
|
||||
<ol class="space-y-3">
|
||||
<?php foreach ($content as $i => $step): ?>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-6 h-6 rounded-full bg-accent/15 text-accent text-xs font-extrabold flex items-center justify-center shrink-0 mt-0.5"><?= $i + 1 ?></span>
|
||||
<span class="text-sm text-zinc-200 leading-relaxed"><?= esc($step) ?></span>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="bg-panel border border-line rounded-2xl p-6 max-w-3xl">
|
||||
<h2 class="text-sm font-bold text-zinc-200 uppercase tracking-wider mb-3">Other tutorials</h2>
|
||||
<div class="grid sm:grid-cols-2 gap-2.5">
|
||||
<?php foreach ($all as $key => [$title, $plat]) : if ($key === array_search($tutorial, $all, true)) continue; ?>
|
||||
<a href="/page/<?= $key ?>" class="flex items-center gap-3 bg-card border border-line rounded-xl px-4 py-3 hover:border-accent/40 transition-colors group">
|
||||
<span class="text-lg">📖</span>
|
||||
<span class="text-sm font-semibold text-zinc-100 group-hover:text-accent"><?= esc($title) ?></span>
|
||||
</a>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
Reference in New Issue
Block a user