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,34 @@
|
||||
<?= $this->extend('layout') ?>
|
||||
<?= $this->section('content') ?>
|
||||
|
||||
<div class="mb-6">
|
||||
<h1 class="text-2xl font-extrabold text-white tracking-tight">Subscriptions</h1>
|
||||
<p class="text-sm text-muted mt-1">Game subscription services — get hundreds of games for a monthly fee.</p>
|
||||
</div>
|
||||
|
||||
<div class="grid sm:grid-cols-2 lg:grid-cols-4 gap-3 mb-8">
|
||||
<?php foreach ($subs as $s): ?>
|
||||
<div class="bg-card border border-line rounded-xl p-4 hover:border-accent/40 transition-colors group">
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<span class="w-9 h-9 rounded-lg flex items-center justify-center text-sm font-extrabold text-white shrink-0"
|
||||
style="background: linear-gradient(135deg, #155e75, #22d3ee)">
|
||||
<?= store_initials($s['name']) ?>
|
||||
</span>
|
||||
<span class="kind-tag kind-official"><?= esc($s['period']) ?></span>
|
||||
</div>
|
||||
<div class="text-[15px] font-semibold text-zinc-100 mb-1"><?= esc($s['name']) ?></div>
|
||||
<p class="text-xs text-muted leading-relaxed mb-3 min-h-[32px]"><?= esc($s['desc']) ?></p>
|
||||
<div class="flex items-center justify-between">
|
||||
<span class="text-accent font-extrabold text-lg"><?= money((float) $s['price']) ?></span>
|
||||
<span class="text-[11px] text-muted">per month</span>
|
||||
</div>
|
||||
<?php $st = $stores[$s['store']] ?? null; ?>
|
||||
<div class="mt-2 flex items-center gap-1.5 text-[11px] text-muted">
|
||||
<?php if ($st): ?><?= view('partials/store_badge', ['store' => $st]) ?><?php endif; ?>
|
||||
<span><?= esc($st['name'] ?? '') ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
Reference in New Issue
Block a user