Social layer: leaderboard (week/month/all) + six badges, /leaders and /promo pages, share panel and rank on the board, ?r= referral cookie -> member's IAP join link, OG tags, banner set served through the curtain
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
+12
-3
@@ -5,7 +5,14 @@
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>PolHunter</title>
|
||||
<meta name="description" content="Missions across the network. Visit a site, find the thing, get a drip of POL to your wallet.">
|
||||
<link rel="stylesheet" href="/style.css?v=7">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="PolHunter: Visit it. Find it. Get paid in POL.">
|
||||
<meta property="og:description" content="Missions across our sites, one code to find, a random drip of POL straight to your wallet. On chain, with a link to prove it.">
|
||||
<meta property="og:image" content="https://polhunter.com/promo/polhunter-1200x630.jpg">
|
||||
<meta property="og:url" content="https://polhunter.com/">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:image" content="https://polhunter.com/promo/polhunter-1200x630.jpg">
|
||||
<link rel="stylesheet" href="/style.css?v=8">
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
@@ -14,7 +21,7 @@
|
||||
<nav class="nav">
|
||||
<a class="btn ghost sm" href="#start">Get started</a>
|
||||
<a class="btn ghost sm" href="#how">How it works</a>
|
||||
<a class="btn ghost sm" href="#ledger">Paid so far</a>
|
||||
<a class="btn ghost sm" href="/leaders">Leaderboard</a>
|
||||
<a class="btn sm" id="signin" href="https://instantadpay.com/api/my/polhunter">Open my board</a>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -58,7 +65,7 @@
|
||||
|
||||
<section class="section" id="ledger">
|
||||
<h2>Paid so far</h2>
|
||||
<div class="sub">Every drip is a Polygon transaction you can open.</div>
|
||||
<div class="sub">Every drip is a Polygon transaction you can open. See who is finding the most on the <a href="/leaders">leaderboard</a>.</div>
|
||||
<div class="stats" id="stats"></div>
|
||||
<div class="ledger" id="recent"><div class="row"><span class="site">Loading…</span></div></div>
|
||||
</section>
|
||||
@@ -86,6 +93,8 @@
|
||||
document.getElementById('stats').innerHTML = [['POL paid', (t.pol || 0).toLocaleString('en-US', { maximumFractionDigits: 2 })], ['drips', t.paid || 0], ['hunters', t.hunters || 0], ['today', (t.today || 0).toLocaleString('en-US', { maximumFractionDigits: 2 }) + ' POL']]
|
||||
.map(([l, v]) => '<div class="stat"><div class="v num">' + v + '</div><div class="l">' + l + '</div></div>').join('');
|
||||
const cfg = await (await fetch('/api/config')).json();
|
||||
// arrived on a member's share link: sign-ups go to that member's InstantAdPay join page
|
||||
if (cfg.ref) { document.querySelectorAll('a[href="https://instantadpay.com"]').forEach(a => { a.href = cfg.joinUrl; }); const inv = document.createElement('span'); inv.className = 'pill'; inv.style.marginLeft = '10px'; inv.innerHTML = '<i></i> Invited by @' + cfg.ref.replace(/[<>&"]/g, ''); document.querySelector('.hero-copy .pill').after(inv); }
|
||||
document.getElementById('recent').innerHTML = (r.recent || []).length ? r.recent.map(x => '<div class="row"><span>' + x.who + '</span><span class="site">' + x.site + '</span><span class="pol">+' + x.pol + ' POL</span><a class="when" href="' + cfg.explorer + '/tx/' + x.tx + '" target="_blank" rel="noopener">verify ↗</a></div>').join('')
|
||||
: '<div class="row"><span class="site">No drips yet. The first hunter gets the first line.</span></div>';
|
||||
} catch (e) {}
|
||||
|
||||
Reference in New Issue
Block a user