diff --git a/public/assets/my.js b/public/assets/my.js index eaa5b6b..0571dd1 100644 --- a/public/assets/my.js +++ b/public/assets/my.js @@ -1426,12 +1426,12 @@ let phShown = false; async function launchReveal() { try { + const nav = $('polhunterNav'); if (nav) nav.hidden = false; // listed in the menu from launch morning (Marty, 2026-09-21); the card below is the announcement and waits for launchAt const cfg = await IAP.getConfig(); const at = cfg.launchAt ? new Date(cfg.launchAt).getTime() : 0; if (!at || Date.now() < at) return; - const nav = $('polhunterNav'); if (nav) nav.hidden = false; const card = $('phLaunch'); if (!card || phShown) return; phShown = true; card.hidden = false; card.innerHTML = '

\u{1F3AF} New today: PolHunter

Launch-day surprise
' - + '

Missions across our sites. Visit the site, find your personal code on the page, type it in, and a random drip of POL lands in the wallet on this account, on chain, with a link to prove it. Three missions a day, a leaderboard with weekly POL prizes, and badge cards you can share. Your PolHunter share link puts sign-ups on your InstantAdPay line.

' + + '

Missions across our sites. Visit the site, find your personal code on the page, tap it to copy, paste it on your board, and a random drip of POL lands in the wallet on this account, on chain, with a link to prove it. Three missions a day, a leaderboard with weekly POL prizes, and badge cards you can share. Your PolHunter share link puts sign-ups on your InstantAdPay line.

' + 'Open my PolHunter board The teaser'; const tb = $('phTrain'); if (tb) tb.addEventListener('click', () => { const m = document.querySelector('.bo-menu [data-pane="training"]'); if (m) m.click(); }); } catch (e) {} @@ -1887,7 +1887,7 @@ if ($('tkGo')) { $('tkGo').addEventListener('click', tkGenerate); $('tkAgain').addEventListener('click', tkGenerate); $('tkCopy').addEventListener('click', async () => { try { await navigator.clipboard.writeText($('tkText').value); IAP.status('Copied.', 'ok'); } catch (e) { $('tkText').select(); } }); $('tkSendBc').addEventListener('click', tkSendBroadcast); } // promo tools: pill menu switches between posts / swipes / banners / wall / videos function setPromoSub(name) { - const ids = ['toolkit', 'posts', 'text', 'swipe', 'banners', 'wall', 'objections', 'videos', 'viral']; + const ids = ['toolkit', 'posts', 'text', 'swipe', 'banners', 'wall', 'objections', 'videos', 'viral', 'polhunter']; if (name === 'toolkit') loadToolkit(); if (!ids.includes(name)) name = 'posts'; ids.forEach(id => { const el = $('promo-' + id); if (el) el.hidden = id !== name; }); diff --git a/public/assets/promo.js b/public/assets/promo.js index eb91fff..4e357d2 100644 --- a/public/assets/promo.js +++ b/public/assets/promo.js @@ -222,6 +222,30 @@ window.IAPPromo = (function () { vp.onchange = render; $('viralCopy').onclick = async () => { const l = $('viralLink').textContent; if (!/^https:/.test(l)) return; try { await navigator.clipboard.writeText(l); status('Link copied.', 'ok'); } catch (e) { status('Copy failed.', 'bad'); } }; } + // PolHunter, the feeder program: the member's PolHunter link (their IAP username, so sign-ups land on their line) + const phl = $('phLink'); + if (phl && token && phl.dataset.filled !== token) { + phl.dataset.filled = token; + const enc = encodeURIComponent, pl = 'https://polhunter.com/?r=' + enc(token); + phl.textContent = pl; + $('phLinkCopy').onclick = async () => { try { await navigator.clipboard.writeText(pl); status('Link copied.', 'ok'); } catch (e) { status('Copy failed.', 'bad'); } }; + const sh = $('phShare'); sh.innerHTML = ''; + const hook = 'PolHunter: find a code on one of our sites and a drip of POL lands in your wallet, on chain. Free to start.'; + [linkBtn('https://x.com/intent/tweet?url=' + enc(pl) + '&text=' + enc(hook), 'X'), linkBtn('https://www.facebook.com/sharer/sharer.php?u=' + enc(pl), 'Facebook'), linkBtn('https://t.me/share/url?url=' + enc(pl) + '&text=' + enc(hook), 'Telegram'), linkBtn('https://wa.me/?text=' + enc(hook + ' ' + pl), 'WhatsApp'), linkBtn('mailto:?subject=' + enc('A scavenger hunt that pays in POL') + '&body=' + enc(hook + '\n\n' + pl), 'Email')].forEach(b => sh.appendChild(b)); + const PH_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. ' + pl }, + { 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. ' + pl }, + { name: 'Telegram or 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: ' + pl }, + { 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 chain, with a link to prove it. Three missions a day, a leaderboard with weekly prizes, and the hiding place moves every day.\n\nIt is free to start. You need an InstantAdPay account (also free) and a wallet, and the site walks you through both.\n\nStart here: ' + pl + '\n\nTell me what your first find pays.' }, + ]; + const pp = $('phPosts'); pp.innerHTML = ''; + for (const p of PH_POSTS) { const extras = p.subject ? [] : [linkBtn('https://x.com/intent/tweet?text=' + enc(p.text), 'X'), linkBtn('https://t.me/share/url?url=' + enc(pl) + '&text=' + enc(p.text.replace(pl, '').trim()), 'Telegram')]; pp.appendChild(block(p.text, '' + esc(p.name) + '' + (p.subject ? ' Subject: ' + esc(p.subject) + '' : ''), extras)); } + const sizes = [['728x90', 'Leaderboard'], ['468x60', 'Mobile leaderboard'], ['300x250', 'Medium rectangle'], ['250x250', 'Square'], ['125x125', 'Button'], ['160x600', 'Skyscraper'], ['1200x630', 'Social card'], ['1080x1080', 'Instagram square']]; + const bg = $('phBanners'); bg.innerHTML = ''; + for (const [s, n] of sizes) { const w = s.split('x')[0], h = s.split('x')[1]; const src = 'https://polhunter.com/promo/polhunter-' + s + (Number(w) >= 300 ? '.jpg' : '.png'); const code = 'PolHunter'; + const d = document.createElement('div'); d.className = 'promo-block'; d.innerHTML = '
' + s + ' ' + esc(n) + '
' + s + '
' + esc(code) + '
'; + const row = document.createElement('div'); row.className = 'pb-actions'; row.appendChild(copyBtn(code, 'Copy embed code')); row.appendChild(linkBtn(src, 'Open image')); d.appendChild(row); bg.appendChild(d); } + } // objections const ob = $('promoObjections'); if (ob && ob.dataset.filled !== link) { diff --git a/public/my.html b/public/my.html index 2aeb701..b5f8cc0 100644 --- a/public/my.html +++ b/public/my.html @@ -745,6 +745,23 @@ + + + - - + +