Training: feature 'polhunter' entries appear at the launch moment; launch card links the feeder video

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-09-20 05:27:10 -05:00
parent 9a531538ed
commit 9fafd0bf43
3 changed files with 5 additions and 3 deletions
+2 -1
View File
@@ -1415,7 +1415,8 @@
const card = $('phLaunch'); if (!card || phShown) return; phShown = true; card.hidden = false;
card.innerHTML = '<div class="card-head"><h3>\u{1F3AF} New today: PolHunter</h3><span class="sub">Launch-day surprise</span></div>'
+ '<p>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.</p>'
+ '<a class="btn" href="/api/my/polhunter">Open my PolHunter board</a> <a class="btn sec" href="https://polhunter.com/" target="_blank" rel="noopener">Watch the 30-second teaser</a>';
+ '<a class="btn" href="/api/my/polhunter">Open my PolHunter board</a> <button class="btn sec" type="button" id="phTrain">Watch: how it feeds your line (70 s)</button> <a class="btn sec" href="https://polhunter.com/" target="_blank" rel="noopener">The teaser</a>';
const tb = $('phTrain'); if (tb) tb.addEventListener('click', () => { const m = document.querySelector('.bo-menu [data-pane="training"]'); if (m) m.click(); });
} catch (e) {}
}
launchReveal(); setInterval(launchReveal, 30000);
+1 -1
View File
@@ -1040,7 +1040,7 @@
<script src="/assets/common.js?v=20260916a"></script>
<script src="/assets/wallet.js?v=20260911a"></script>
<script src="/assets/promo.js?v=20260911a"></script>
<script src="/assets/my.js?v=20260921b"></script>
<script src="/assets/my.js?v=20260922b"></script>
<script src="/assets/chat.js?v=20260907l"></script>
</body>
</html>
+2 -1
View File
@@ -2256,7 +2256,8 @@ const server = http.createServer(async (req, res) => {
let items = [];
try { const j = JSON.parse(fs.readFileSync(path.join(DATA_DIR, 'training.json'), 'utf8')); if (Array.isArray(j)) items = j; } catch (e) {}
// a card with feature:'pipeline' waits for the switch, so the video can be ready before the tab opens (Marty, 2026-09-15)
const scT = siteConfig(); items = items.filter(it => !it.feature || (it.feature === 'pipeline' && pipeline.visible(scT.pipelineMode, s.email, ADMIN_EMAIL)));
const scT = siteConfig(); const launched = scT.launchAt && Date.now() >= new Date(scT.launchAt).getTime(); // feature:'polhunter' waits for the launch moment (Marty, 2026-09-20)
items = items.filter(it => !it.feature || (it.feature === 'pipeline' && pipeline.visible(scT.pipelineMode, s.email, ADMIN_EMAIL)) || (it.feature === 'polhunter' && launched));
if (!items.length) items = [{ title: 'Getting started with InstantAdPay',
desc: 'How the platform works, how every payout splits on-chain to real wallets, and how to build your line.',
docUrl: 'https://instantadpay.com/' }];