Files
polhunter/public/promo.html
T

116 lines
14 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Promo tools · PolHunter</title>
<meta name="description" content="Banners, posts, swipes and the teaser video, all carrying your InstantAdPay referral.">
<link rel="stylesheet" href="/style.css?v=12">
</head>
<body>
<div class="wrap">
<header class="top">
<a class="mark" href="/"><span class="coin"></span>PolHunter</a>
<nav class="nav">
<a class="btn ghost sm" href="/leaders">Leaderboard</a>
<a class="btn ghost sm" href="/#how">How it works</a>
<a class="btn sm" href="https://instantadpay.com/api/my/polhunter">Open my board</a>
</nav>
</header>
<section class="section" style="padding-top:14px">
<h2>Promo tools</h2>
<div class="sub">Everything here carries your link. People who sign up from it join InstantAdPay under you, and their hunts start on your line.</div>
<div class="notice" id="linkNote">Sign in to get your personal link: <a href="https://instantadpay.com/api/my/polhunter">Open my board</a>, then come back here. Until then the tools point at polhunter.com with no referral.</div>
<div class="copybox" style="margin-top:12px"><input id="mylink" readonly value="https://polhunter.com/"><button class="btn pol sm" data-copy="#mylink">Copy link</button></div>
</section>
<section class="section">
<h2>Share</h2>
<div class="sub">One tap. Edit the words if you like; the link is the part that matters.</div>
<div class="share" id="share"></div>
</section>
<section class="section">
<h2>The teaser</h2>
<div class="sub">Thirty seconds. Post it with your link, or send people to the page and let it play there.</div>
<video class="hero-video" controls playsinline preload="metadata" poster="/video/polhunter-teaser-poster.jpg" src="/video/polhunter-teaser.mp4" style="border-radius:18px;max-height:60vh"></video>
<p style="margin-top:10px"><a class="btn ghost sm" href="/video/polhunter-teaser.mp4?v=20260921a" download="polhunter-teaser.mp4">Download the mp4 (16:9)</a> <a class="btn ghost sm" href="/video/polhunter-teaser-portrait.mp4?v=20260921a" download="polhunter-teaser-portrait.mp4">Download the portrait cut (9:16 for TikTok, Reels, Shorts, Facebook)</a></p>
</section>
<section class="section">
<h2>How it feeds InstantAdPay</h2>
<div class="sub">A hundred seconds for your team: what a feeder program is, the free taste of POL on day one, and how every share puts sign-ups on your InstantAdPay line.</div>
<video class="hero-video" controls playsinline preload="metadata" poster="https://coolify-saasytop.nyc3.digitaloceanspaces.com/training/polhunter-feeder.jpg?v=20260921a" src="https://coolify-saasytop.nyc3.digitaloceanspaces.com/training/polhunter-feeder.mp4?v=20260921a" style="border-radius:18px;max-height:60vh"></video>
<p style="margin-top:10px"><a class="btn ghost sm" href="https://coolify-saasytop.nyc3.digitaloceanspaces.com/training/polhunter-feeder.mp4?v=20260921a" download="polhunter-feeder.mp4">Download the mp4</a></p>
</section>
<section class="section">
<h2>Short videos for TikTok, Reels and Shorts</h2>
<div class="sub">Two forty-second vertical spots, captions built in, no voice-over. One photoreal, one animated. Download the file and post it natively; the caption below already carries your link.</div>
<div class="grid" id="spots"></div>
<div class="card" style="margin-top:14px"><h3>Where each one works best</h3><ul style="margin:8px 0 0 18px;padding:0;line-height:1.55"><li><b>TikTok:</b> the animated one first. Upload the file itself, never a link. The hook is built into the first two seconds. Paste the caption, keep three to five hashtags, and put your PolHunter link in your bio; TikTok does not make caption links clickable. Answer comments with "link in bio".</li><li><b>Instagram Reels and Stories:</b> either spot; animated tends to travel further on Reels. The link goes in your bio, or post the spot to your Story with the link sticker, which is the one place on Instagram the link is tappable.</li><li><b>YouTube Shorts:</b> the photoreal one. Title it with PolHunter, put the link in the description and pin it as the first comment.</li><li><b>Facebook feed, Reels and groups:</b> the photoreal one for an older crowd. Feed and group posts can carry the link right in the caption. Facebook keeps your name on the link when you use the share buttons here.</li><li><b>X:</b> either spot, uploaded natively, with the caption and the link in the post.</li><li><b>Telegram and WhatsApp:</b> send the video file with your link and one line under it, or use the share buttons to send the link with the caption.</li><li><b>Two rules:</b> post one spot, then the other a few days later, never both in one post. And never promise amounts; the drips are small and random, and the caption already says free to play.</li></ul></div>
</section>
<section class="section">
<h2>Banners</h2>
<div class="sub">Right-click to save, or copy the embed code: it already has your link in it.</div>
<div class="banners" id="banners"></div>
</section>
<section class="section">
<h2>Posts and swipes</h2>
<div class="sub">Written to be pasted as they are. No earnings promises, and keep it that way.</div>
<div class="grid" id="swipes"></div>
</section>
<div class="adslot" data-ad="promo"><!-- nas: 468x60 on phones, 728x90 on wider screens --><script>(function(){var m=window.innerWidth<600;document.write('<scr'+'ipt src="https://www.networkadspace.com/showadss.php?'+(m?'w=468&h=60&n=1&bw=468&bh=60':'w=728&h=90&n=1&bw=728&bh=90')+'&c=999"></scr'+'ipt>');})();</script></div>
<footer class="foot">PolHunter rewards completed missions. Rewards are not income and are not guaranteed; the daily pool is limited and drips are random within the posted range. Cryptocurrency involves risk of loss. <br><a href="https://instantadpay.com">InstantAdPay</a></footer>
</div>
<script>
(async () => {
const esc = s => String(s == null ? '' : s).replace(/[&<>"]/g, c => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' }[c]));
let link = 'https://polhunter.com/', who = null;
try { const r = await fetch('/api/my/board'); if (r.ok) { const b = await r.json(); link = b.share.link; who = b.me; } } catch (e) {}
document.getElementById('mylink').value = link;
if (who) document.getElementById('linkNote').innerHTML = 'Signed in as <b>' + esc(who.username ? '@' + who.username : '#' + who.memberId) + '</b>. This is your link. Anyone who signs up from it lands on your InstantAdPay line.';
const L = encodeURIComponent(link);
const posts = [
{ name: 'Short post', text: 'New thing I am playing with: PolHunter. You visit a site, find your code on the page, tap it to copy, paste it on your board, and a random drip of POL lands in your wallet. On chain, with a link to prove it. ' + link },
{ name: 'Story post', text: 'I spent two minutes on a training page tonight, found a little glass coin at the bottom, tapped the code, and 0.26 POL showed up in my wallet a minute later. That is PolHunter. Small drips, real chain, no catch beyond actually visiting the site. Free to start, you just need an InstantAdPay account and a wallet. ' + link },
{ name: 'Telegram / WhatsApp', text: '\u{1F3AF} PolHunter is live. Missions across our sites, one code to find per site, random POL drips paid straight to your wallet. The hiding place moves every day. Start here: ' + link },
{ name: 'Email swipe', subject: 'A scavenger hunt that pays in POL', text: 'Hey,\n\nQuick one. I have been testing something called PolHunter.\n\nYou pick a mission, spend a couple of minutes on the site it names, and your personal code appears somewhere on the page. Tap it to copy, paste it on your board, and a random drip of POL goes to your wallet, on Polygon, with a transaction link you can open.\n\nIt is free to start. You need an InstantAdPay account (free) and a wallet linked to it so the drips have somewhere to land.\n\nHave a look: ' + link + '\n\nNo promises about amounts. The pool is limited every day and the drips are random within the posted range. It is fun, it is real, and it takes a few minutes.\n\nTalk soon' },
];
document.getElementById('share').innerHTML = posts.map((p, i) => '<div class="card"><h3>' + esc(p.name) + '</h3>' + (p.subject ? '<p><b>Subject:</b> ' + esc(p.subject) + '</p>' : '') + '<textarea id="t' + i + '" rows="' + (p.subject ? 12 : 5) + '">' + esc(p.text) + '</textarea>'
+ '<div class="sharebtns"><button class="btn pol sm" data-copy="#t' + i + '">Copy</button>'
+ (p.subject ? '' : '<a class="btn ghost sm" target="_blank" rel="noopener" href="https://twitter.com/intent/tweet?text=' + encodeURIComponent(p.text) + '">X</a><a class="btn ghost sm" target="_blank" rel="noopener" href="https://t.me/share/url?url=' + L + '&text=' + encodeURIComponent(p.text.replace(link, '').trim()) + '">Telegram</a><a class="btn ghost sm" target="_blank" rel="noopener" href="https://www.facebook.com/sharer/sharer.php?u=' + L + '">Facebook</a><a class="btn ghost sm" target="_blank" rel="noopener" href="https://wa.me/?text=' + encodeURIComponent(p.text) + '">WhatsApp</a>')
+ '</div></div>').join('');
const sizes = [['728x90', 'Leaderboard'], ['468x60', 'Mobile leaderboard'], ['300x250', 'Medium rectangle'], ['250x250', 'Square'], ['125x125', 'Button'], ['160x600', 'Skyscraper'], ['1200x630', 'Social card'], ['1080x1080', 'Instagram square']];
document.getElementById('banners').innerHTML = sizes.map(([s, n]) => { const src = 'https://polhunter.com/promo/polhunter-' + s + (Number(s.split('x')[0]) >= 300 ? '.jpg' : '.png'); const code = '<a href="' + link + '" target="_blank" rel="noopener"><img src="' + src + '" width="' + s.split('x')[0] + '" height="' + s.split('x')[1] + '" alt="PolHunter: visit it, find it, get paid in POL"></a>';
return '<div class="banner"><div class="bhead"><b>' + s + '</b> <span class="site">' + n + '</span></div><div class="bimg"><img src="' + src + '" alt="' + s + '"></div><textarea rows="3" id="b' + s + '">' + esc(code) + '</textarea><div class="sharebtns"><button class="btn pol sm" data-copy="#b' + s + '">Copy embed</button><a class="btn ghost sm" href="' + src + '" download>Save image</a></div></div>'; }).join('');
// the two spots: player, download, caption with the member's link, share buttons
const SP = 'https://coolify-saasytop.nyc3.digitaloceanspaces.com/promo/';
const spots = [
{ id: 'photoreal', name: 'Photoreal: the hunt in the forest', file: 'polhunter-spot-photoreal.mp4', poster: 'polhunter-spot-photoreal-poster.jpg', best: 'Facebook, YouTube Shorts, an older audience', cap: 'Somewhere on one of our sites, a code is waiting. Find it, tap it, paste it on your board, and a drip of Polygon lands in your wallet. On chain, with a link to prove it. Free to play. Start here: ' + link + ' #PolHunter #Polygon #crypto #scavengerhunt' },
{ id: 'animated', name: 'Animated: the explorer and the glass coin', file: 'polhunter-spot-animated.mp4', poster: 'polhunter-spot-animated-poster.jpg', best: 'TikTok, Instagram Reels, a younger crowd', cap: 'A scavenger hunt that pays in Polygon. Pick a mission, find the glass coin, tap it, and the drip lands in your wallet instantly. Three missions a day, badges, weekly prizes. 100% free. ' + link + ' #PolHunter #Polygon #crypto #gaming' },
];
document.getElementById('spots').innerHTML = spots.map(s => '<div class="card"><h3>' + esc(s.name) + '</h3><p>Best on: ' + esc(s.best) + '</p>'
+ '<video controls playsinline preload="none" poster="' + SP + s.poster + '" src="' + SP + s.file + '" style="width:100%;max-width:320px;border-radius:14px;display:block;margin:8px auto"></video>'
+ '<textarea id="cap-' + s.id + '" rows="5">' + esc(s.cap) + '</textarea>'
+ '<div class="sharebtns"><a class="btn pol sm" href="' + SP + s.file + '" download="' + s.file + '">Download the video</a><button class="btn ghost sm" data-copy="#cap-' + s.id + '">Copy caption</button>'
+ '<a class="btn ghost sm" target="_blank" rel="noopener" href="https://twitter.com/intent/tweet?text=' + encodeURIComponent(s.cap) + '">X</a>'
+ '<a class="btn ghost sm" target="_blank" rel="noopener" href="https://www.facebook.com/sharer/sharer.php?u=' + L + '">Facebook</a>'
+ '<a class="btn ghost sm" target="_blank" rel="noopener" href="https://t.me/share/url?url=' + L + '&text=' + encodeURIComponent(s.cap.replace(link, '').trim()) + '">Telegram</a>'
+ '<a class="btn ghost sm" target="_blank" rel="noopener" href="https://wa.me/?text=' + encodeURIComponent(s.cap) + '">WhatsApp</a></div></div>').join('');
document.getElementById('swipes').innerHTML = [
['Comment or DM', 'Not a program, a scavenger hunt. You find a code on one of our sites and it pays a little POL to your wallet. Try one mission and tell me what you got: ' + link],
['Objection: is it real?', 'Every drip is a Polygon transaction. Open the ledger on the page and click verify on any line, it opens the block explorer. That is the whole proof.'],
['Objection: how much?', 'Random, between the posted range, and the daily pool is limited. Nobody is promising amounts. It is a few minutes for a few cents to a few dollars of POL, and the fun is in the find.'],
].map(([n, t], i) => '<div class="card"><h3>' + esc(n) + '</h3><textarea id="s' + i + '" rows="4">' + esc(t) + '</textarea><div class="sharebtns"><button class="btn pol sm" data-copy="#s' + i + '">Copy</button></div></div>').join('');
document.body.addEventListener('click', async e => { const b = e.target.closest('[data-copy]'); if (!b) return; const el = document.querySelector(b.dataset.copy); try { await navigator.clipboard.writeText(el.value); } catch (x) { el.select(); document.execCommand('copy'); } const t = b.textContent; b.textContent = 'Copied'; setTimeout(() => { b.textContent = t; }, 1200); });
})();
</script>
</body>
</html>