Make every dollar figure evergreen via the live POL price

The config API now carries the hourly-cached polUsd; the start page,
training callout, join-page shortfall, and chatbot (canned + AI
prompt) all compute entry dollars live instead of quoting stale
numbers. Post 6/7 copy drops hard "$27 = entry" claims for
pocket-change framing (the video's $27 stays - it describes weekly
wasted spending, which is evergreen).
This commit is contained in:
martbost
2026-08-22 04:56:25 -05:00
parent 9a1d8dbbf7
commit 950d412738
8 changed files with 33 additions and 15 deletions
+4 -3
View File
@@ -7,6 +7,7 @@
function esc(s){return String(s??'').replace(/[&<>'"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;',"'":'&#39;','"':'&quot;'}[c]))} function esc(s){return String(s??'').replace(/[&<>'"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;',"'":'&#39;','"':'&quot;'}[c]))}
function tg(){return (config&&config.telegramUrl)||'https://t.me/cryptoteambuild'} function tg(){return (config&&config.telegramUrl)||'https://t.me/cryptoteambuild'}
function pol(){return (config&&config.premiumEntryPol)||362} function pol(){return (config&&config.premiumEntryPol)||362}
function usd(){var u=config&&config.polUsd;return u>0?' (about $'+Math.round(pol()*u)+' at today’s POL price — it moves)':''}
function tgLink(label){return `<a href="${esc(tg())}" target="_blank" rel="noopener noreferrer">${esc(label||'Open the Telegram group ↗')}</a>`} function tgLink(label){return `<a href="${esc(tg())}" target="_blank" rel="noopener noreferrer">${esc(label||'Open the Telegram group ↗')}</a>`}
const KB=[ const KB=[
@@ -15,13 +16,13 @@
{k:['how does it work','strategy','how it works','plan','roadmap','system','duplicate','duplication'], {k:['how does it work','strategy','how it works','plan','roadmap','system','duplicate','duplication'],
a:()=>`The core strategy: <strong>get your 2, retire your link, help your 2 get their 2, upgrade with profits, repeat.</strong> Once a position has 2 directs it's qualified — we stop using its link and move the team's effort down to the next positions. The full picture is in <a href="/training">Video 1 of the training</a>, and the roadmap poster is on the <a href="/">home page</a>.`}, a:()=>`The core strategy: <strong>get your 2, retire your link, help your 2 get their 2, upgrade with profits, repeat.</strong> Once a position has 2 directs it's qualified — we stop using its link and move the team's effort down to the next positions. The full picture is in <a href="/training">Video 1 of the training</a>, and the roadmap poster is on the <a href="/">home page</a>.`},
{k:['cost','price','entry','how much','362','fee','pol needed','expensive'], {k:['cost','price','entry','how much','362','fee','pol needed','expensive'],
a:()=>`Premium entry is <strong>${pol()} POL</strong> on Polygon Mainnet, plus a small extra POL balance for network gas. POL's dollar value changes with the market. Only ever use funds you can afford to lose.`}, a:()=>`Premium entry is <strong>${pol()} POL</strong>${usd()} on Polygon Mainnet, plus a small extra POL balance for network gas. POL's dollar value changes with the market. Only ever use funds you can afford to lose.`},
{k:['pol','polygon','network','chain','gas','matic','mainnet'], {k:['pol','polygon','network','chain','gas','matic','mainnet'],
a:()=>`The build runs on <strong>Polygon Mainnet</strong> (chain ID 137). POL is the network's native token — it pays for your Premium entry AND for transaction "gas." Easiest way to think about gas: just like a car needs fuel to get from A to B, every blockchain transaction burns a tiny bit of POL to move. That's why you keep a little extra in the tank beyond your entry — a wallet that's bone-dry can't make the trip. In MetaMask, make sure Polygon is the selected network before doing anything.`}, a:()=>`The build runs on <strong>Polygon Mainnet</strong> (chain ID 137). POL is the network's native token — it pays for your Premium entry AND for transaction "gas." Easiest way to think about gas: just like a car needs fuel to get from A to B, every blockchain transaction burns a tiny bit of POL to move. That's why you keep a little extra in the tank beyond your entry — a wallet that's bone-dry can't make the trip. In MetaMask, make sure Polygon is the selected network before doing anything.`},
{k:['metamask','wallet','create wallet','install','set up wallet','setup wallet'], {k:['metamask','wallet','create wallet','install','set up wallet','setup wallet'],
a:()=>`Install MetaMask only from the <a href="https://metamask.io/" target="_blank" rel="noopener noreferrer">official site</a> or your device's official app store, then create your wallet. <a href="/training">Video 2 in the training</a> walks through it step by step. Never share your Secret Recovery Phrase with anyone — not the team, not this site, not a "support agent".`}, a:()=>`Install MetaMask only from the <a href="https://metamask.io/" target="_blank" rel="noopener noreferrer">official site</a> or your device's official app store, then create your wallet. <a href="/training">Video 2 in the training</a> walks through it step by step. Never share your Secret Recovery Phrase with anyone — not the team, not this site, not a "support agent".`},
{k:['fund','funding','buy pol','get pol','deposit','exchange','transfer','send pol'], {k:['fund','funding','buy pol','get pol','deposit','exchange','transfer','send pol'],
a:()=>`You'll need about ${pol()} POL plus a little extra for gas, on Polygon Mainnet. <a href="/training">Video 3 in the training</a> shows how to fund your wallet. Brand new to crypto? You can buy POL directly with a debit/credit card, Apple Pay, or Google Pay via <a href="https://www.moonpay.com/buy/matic" target="_blank" rel="noopener noreferrer">MoonPay</a> — pick POL on the Polygon network (MoonPay may show POL's old name, MATIC — same token) and send it to your own wallet address. The join page also offers this automatically if your connected wallet is short. Double-check you're getting POL on Polygon — not another chain.`}, a:()=>`You'll need about ${pol()} POL plus a little extra for gas${usd()}, on Polygon Mainnet. <a href="/training">Video 3 in the training</a> shows how to fund your wallet. Brand new to crypto? You can buy POL directly with a debit/credit card, Apple Pay, or Google Pay via <a href="https://www.moonpay.com/buy/matic" target="_blank" rel="noopener noreferrer">MoonPay</a> — pick POL on the Polygon network (MoonPay may show POL's old name, MATIC — same token) and send it to your own wallet address. The join page also offers this automatically if your connected wallet is short. Double-check you're getting POL on Polygon — not another chain.`},
{k:['join','buy','purchase','premium position','enter','sign up','signup','register','get started','start'], {k:['join','buy','purchase','premium position','enter','sign up','signup','register','get started','start'],
a:()=>`Ready to join? Go to the <a href="/start">Getting Started page</a> — it shows the current team sponsor and lets you connect your wallet and buy your position right on the site, with the sponsor ID filled in automatically. <a href="/training">Video 4 in the training</a> walks through the whole process (and Video 5 covers the dApp backup method).`}, a:()=>`Ready to join? Go to the <a href="/start">Getting Started page</a> — it shows the current team sponsor and lets you connect your wallet and buy your position right on the site, with the sponsor ID filled in automatically. <a href="/training">Video 4 in the training</a> walks through the whole process (and Video 5 covers the dApp backup method).`},
{k:['sponsor','current sponsor','who do i join under','placement','whose link','referral'], {k:['sponsor','current sponsor','who do i join under','placement','whose link','referral'],
@@ -35,7 +36,7 @@
{k:['pyramid','ponzi','pyramid scheme','ponzi scheme','mlm','recruiting scheme','is this a scheme'], {k:['pyramid','ponzi','pyramid scheme','ponzi scheme','mlm','recruiting scheme','is this a scheme'],
a:()=>`A pyramid or Ponzi scheme funnels everyone's money to a central company and pays earlier joiners out of later joiners' deposits — and you can't verify any of it. This is the opposite: <strong>no company holds the money</strong>. A public smart contract on Polygon sends each payment person-to-person in the same transaction it arrives, and you can read the code and every payout yourself on-chain — nothing pooled, nothing hidden, rules that can't be changed. It <em>is</em> a team build, so it takes real effort and carries real crypto risk — not a passive investment. But you don't have to trust anyone; verify it at <a href="/contract">rmcircle.team/contract</a>. No income is guaranteed.`}, a:()=>`A pyramid or Ponzi scheme funnels everyone's money to a central company and pays earlier joiners out of later joiners' deposits — and you can't verify any of it. This is the opposite: <strong>no company holds the money</strong>. A public smart contract on Polygon sends each payment person-to-person in the same transaction it arrives, and you can read the code and every payout yourself on-chain — nothing pooled, nothing hidden, rules that can't be changed. It <em>is</em> a team build, so it takes real effort and carries real crypto risk — not a passive investment. But you don't have to trust anyone; verify it at <a href="/contract">rmcircle.team/contract</a>. No income is guaranteed.`},
{k:['no money','cant afford','can not afford',"can't afford",'broke','they dont have','waiting on payday','no funds to join'], {k:['no money','cant afford','can not afford',"can't afford",'broke','they dont have','waiting on payday','no funds to join'],
a:()=>`"No money" is usually one of three things — sort it first. (1) Most often it means "this sounds expensive/complicated": entry is about $27 in POL — call it ~$35 all-in — payable with a regular debit card right on the <a href="/join-now">join page</a>. (2) Sometimes it's a priority thing: send the "$27" video from <a href="/tools">Promo Tools</a> and let it do the talking. (3) If they're genuinely broke: tell them honestly "don't join yet" — never rent money, never money they can't afford to lose. Ask "when's payday?" and follow up then — their invite link doesn't expire and the team keeps building publicly while they wait. One hard rule: never pay someone's entry for them.`}, a:()=>`"No money" is usually one of three things — sort it first. (1) Most often it means "this sounds expensive/complicated": entry is ${pol()} POL${usd()||" — a small one-time amount"} — payable with a regular debit card right on the <a href="/join-now">join page</a>. (2) Sometimes it's a priority thing: send the "$27" video from <a href="/tools">Promo Tools</a> and let it do the talking. (3) If they're genuinely broke: tell them honestly "don't join yet" — never rent money, never money they can't afford to lose. Ask "when's payday?" and follow up then — their invite link doesn't expire and the team keeps building publicly while they wait. One hard rule: never pay someone's entry for them.`},
{k:['fast start','checklist','printable','print','48 hour','48-hour','getting started sheet'], {k:['fast start','checklist','printable','print','48 hour','48-hour','getting started sheet'],
a:()=>`Grab the <a href="/fast-start">48-Hour Fast Start sheet</a> — a printable one-page checklist for your first two days. Open it from YOUR dashboard and it comes pre-filled with your invite link and a scannable QR code, then hit the print button (it prints clean black-on-white, in whatever language you've picked with the 🌐 button).`}, a:()=>`Grab the <a href="/fast-start">48-Hour Fast Start sheet</a> — a printable one-page checklist for your first two days. Open it from YOUR dashboard and it comes pre-filled with your invite link and a scannable QR code, then hit the print button (it prints clean black-on-white, in whatever language you've picked with the 🌐 button).`},
{k:['translate','translation','language','español','espanol','spanish','french','portuguese','not in english','other language'], {k:['translate','translation','language','español','espanol','spanish','french','portuguese','not in english','other language'],
+2 -1
View File
@@ -1,3 +1,4 @@
fetch('/api/public/config').then(function(r){return r.json()}).then(function(c){if(c&&c.polUsd>0)window.__polUsd=c.polUsd;}).catch(function(){});
/* RM Circle — public direct-join engine (dormant fallback; served only when /* RM Circle — public direct-join engine (dormant fallback; served only when
config.dappFallbackPublic is on). Talks only to window.ethereum (CSP-safe). config.dappFallbackPublic is on). Talks only to window.ethereum (CSP-safe).
Auto-assigns the current rotation sponsor, registers the member's own wallet, Auto-assigns the current rotation sponsor, registers the member's own wallet,
@@ -66,7 +67,7 @@
var need=regValue(); var need=regValue();
if(lastBal>=need){ box.style.display='none'; return; } if(lastBal>=need){ box.style.display='none'; return; }
var shortPol=Math.max(62,Math.ceil(Number(need-lastBal)/1e18)+5); var shortPol=Math.max(62,Math.ceil(Number(need-lastBal)/1e18)+5);
$('fundMsg').textContent='This wallet holds '+polStr(lastBal)+' POL; the Premium entry is '+polStr(need)+' POL plus a little gas (like a car, every blockchain transaction burns a bit of fuel - keep some in the tank). You can buy the remaining ~'+shortPol+' POL with a debit/credit card, Apple Pay, or Google Pay — delivered straight to this wallet.'; $('fundMsg').textContent='This wallet holds '+polStr(lastBal)+' POL; the Premium entry is '+polStr(need)+' POL plus a little gas (like a car, every blockchain transaction burns a bit of fuel - keep some in the tank). You can buy the remaining ~'+shortPol+' POL'+(window.__polUsd>0?' (about $'+Math.round(Number(shortPol.replace(/,/g,''))*window.__polUsd)+')':'')+' with a debit/credit card, Apple Pay, or Google Pay — delivered straight to this wallet.';
box.dataset.pol=shortPol; box.dataset.pol=shortPol;
box.style.display='block'; box.style.display='block';
} }
+2 -2
View File
@@ -5,10 +5,10 @@
<body> <body>
<header class="wrap nav"><a class="brand" href="/"><img class="brand-mark" src="/logo.jpg" alt="The RM Circle" width="42" height="42"><span><span id="brandName">RM Circle</span><small>Getting Started</small></span></a><div class="nav-actions"><a class="btn btn-secondary" href="/">← Strategy</a><a class="btn btn-secondary" href="/training">Training</a></div></header> <header class="wrap nav"><a class="brand" href="/"><img class="brand-mark" src="/logo.jpg" alt="The RM Circle" width="42" height="42"><span><span id="brandName">RM Circle</span><small>Getting Started</small></span></a><div class="nav-actions"><a class="btn btn-secondary" href="/">← Strategy</a><a class="btn btn-secondary" href="/training">Training</a></div></header>
<main class="sponsor-shell"><div class="wrap"><div class="section-head"><div class="eyebrow">Current placement</div><h1 style="font-size:clamp(34px,5vw,54px);margin:8px 0 10px">Use the sponsor shown on <span class="gold">this page.</span></h1><p>Team placements rotate as positions become qualified. Do not use an old screenshot or saved referral link.</p></div> <main class="sponsor-shell"><div class="wrap"><div class="section-head"><div class="eyebrow">Current placement</div><h1 style="font-size:clamp(34px,5vw,54px);margin:8px 0 10px">Use the sponsor shown on <span class="gold">this page.</span></h1><p>Team placements rotate as positions become qualified. Do not use an old screenshot or saved referral link.</p></div>
<div class="sponsor-grid"><aside class="sponsor-card"><span class="live-badge"><span class="dot"></span> Current team sponsor</span><div class="sponsor-id" id="sponsorId">—</div><div class="sponsor-name" id="sponsorName">Loading current placement…</div><div id="progressArea"><div style="display:flex;justify-content:space-between;color:var(--muted);font-size:13px"><span>Qualification progress</span><strong id="progressText">0 / 2</strong></div><div class="progress-line"><span id="progressBar" style="width:0%"></span></div></div><div class="facts"><div class="fact"><small>Program</small><strong>Premium</strong></div><div class="fact"><small>Entry</small><strong><span id="entryPol">362</span> POL</strong></div><div class="fact"><small>Network</small><strong>Polygon</strong></div><div class="fact"><small>Gas token</small><strong>POL</strong></div></div><a id="joinButton" class="btn btn-primary" style="width:100%" href="/join-now">Join With Current Sponsor →</a><button id="copyButton" class="btn btn-secondary" style="width:100%;margin-top:9px">Copy Sponsor ID</button><p class="micro" style="text-align:center;margin-top:9px">💳 No crypto yet? You can <a href="https://www.moonpay.com/buy/matic" target="_blank" rel="noopener nofollow" style="color:var(--teal)">buy POL with a card via MoonPay</a> — sent to your own wallet. How-to in <a href="/training" style="color:var(--teal)">the training</a>.</p><p class="micro" id="queueText" style="text-align:center"></p><a id="dappJoinLink" class="micro hidden" href="#" target="_blank" rel="noopener noreferrer" style="display:block;text-align:center;margin-top:4px">Prefer the official RM Circle dApp? Join there →</a></aside> <div class="sponsor-grid"><aside class="sponsor-card"><span class="live-badge"><span class="dot"></span> Current team sponsor</span><div class="sponsor-id" id="sponsorId">—</div><div class="sponsor-name" id="sponsorName">Loading current placement…</div><div id="progressArea"><div style="display:flex;justify-content:space-between;color:var(--muted);font-size:13px"><span>Qualification progress</span><strong id="progressText">0 / 2</strong></div><div class="progress-line"><span id="progressBar" style="width:0%"></span></div></div><div class="facts"><div class="fact"><small>Program</small><strong>Premium</strong></div><div class="fact"><small>Entry</small><strong><span id="entryPol">362</span> POL</strong><small id="entryUsd"></small></div><div class="fact"><small>Network</small><strong>Polygon</strong></div><div class="fact"><small>Gas token</small><strong>POL</strong></div></div><a id="joinButton" class="btn btn-primary" style="width:100%" href="/join-now">Join With Current Sponsor →</a><button id="copyButton" class="btn btn-secondary" style="width:100%;margin-top:9px">Copy Sponsor ID</button><p class="micro" style="text-align:center;margin-top:9px">💳 No crypto yet? You can <a href="https://www.moonpay.com/buy/matic" target="_blank" rel="noopener nofollow" style="color:var(--teal)">buy POL with a card via MoonPay</a> — sent to your own wallet. How-to in <a href="/training" style="color:var(--teal)">the training</a>.</p><p class="micro" id="queueText" style="text-align:center"></p><a id="dappJoinLink" class="micro hidden" href="#" target="_blank" rel="noopener noreferrer" style="display:block;text-align:center;margin-top:4px">Prefer the official RM Circle dApp? Join there →</a></aside>
<section><div class="callout" style="margin-bottom:16px"><strong>First time?</strong> <a href="/training" style="color:var(--teal)">Watch the four training videos</a> — how the build works, creating your MetaMask wallet, funding it, and buying your position.</div><div class="instruction-list"><article class="instruction"><div class="num">1</div><div><h3>Install or open a wallet</h3><p>Use <strong>MetaMask</strong> or <strong>Trust Wallet</strong> — only from the official website or your device's official app store. Never install a wallet from a link sent by a stranger.</p><div style="margin-top:10px"><a class="btn btn-secondary btn-sm" href="https://metamask.io/" target="_blank" rel="noopener noreferrer">Official MetaMask Site ↗</a></div></div></article> <section><div class="callout" style="margin-bottom:16px"><strong>First time?</strong> <a href="/training" style="color:var(--teal)">Watch the four training videos</a> — how the build works, creating your MetaMask wallet, funding it, and buying your position.</div><div class="instruction-list"><article class="instruction"><div class="num">1</div><div><h3>Install or open a wallet</h3><p>Use <strong>MetaMask</strong> or <strong>Trust Wallet</strong> — only from the official website or your device's official app store. Never install a wallet from a link sent by a stranger.</p><div style="margin-top:10px"><a class="btn btn-secondary btn-sm" href="https://metamask.io/" target="_blank" rel="noopener noreferrer">Official MetaMask Site ↗</a></div></div></article>
<article class="instruction"><div class="num">2</div><div><h3>Use Polygon Mainnet</h3><p>In MetaMask, select Polygon. Polygon Mainnet uses chain ID <strong>137</strong>, and POL is the native gas token.</p></div></article> <article class="instruction"><div class="num">2</div><div><h3>Use Polygon Mainnet</h3><p>In MetaMask, select Polygon. Polygon Mainnet uses chain ID <strong>137</strong>, and POL is the native gas token.</p></div></article>
<article class="instruction"><div class="num">3</div><div><h3>Fund your wallet with POL</h3><p>Premium entry is <strong><span id="entryPol2">362</span> POL</strong>. Keep a small additional POL balance for network gas — think of it like a car: every transaction is a short trip, and each trip burns a little fuel. Keep something in the tank beyond your entry so your wallet can always make the drive. POL's USD value changes with the market.</p></div></article> <article class="instruction"><div class="num">3</div><div><h3>Fund your wallet with POL</h3><p>Premium entry is <strong><span id="entryPol2">362</span> POL</strong><span id="entryUsd2" style="color:var(--muted)"></span>. Keep a small additional POL balance for network gas — think of it like a car: every transaction is a short trip, and each trip burns a little fuel. Keep something in the tank beyond your entry so your wallet can always make the drive. POL's USD value changes with the market.</p></div></article>
<article class="instruction"><div class="num">4</div><div><h3>Tap "Join With Current Sponsor" and connect your wallet</h3><p>Open the join page from the button above, then connect <strong>MetaMask</strong> or <strong>Trust Wallet</strong> on Polygon. Your team placement (sponsor <strong>ID <span id="sponsorIdInline">—</span></strong>) is assigned <strong>automatically</strong> — nothing to copy or paste.</p></div></article> <article class="instruction"><div class="num">4</div><div><h3>Tap "Join With Current Sponsor" and connect your wallet</h3><p>Open the join page from the button above, then connect <strong>MetaMask</strong> or <strong>Trust Wallet</strong> on Polygon. Your team placement (sponsor <strong>ID <span id="sponsorIdInline">—</span></strong>) is assigned <strong>automatically</strong> — nothing to copy or paste.</p></div></article>
<article class="instruction"><div class="num">5</div><div><h3>Review the amount and sign — you're placed instantly</h3><p>Your wallet shows the exact POL entry. Read the transaction before signing; your position is created on-chain in that same transaction. Never share your Secret Recovery Phrase or seed words with anyone — no site, sponsor, or "support" will ever need it.</p></div></article> <article class="instruction"><div class="num">5</div><div><h3>Review the amount and sign — you're placed instantly</h3><p>Your wallet shows the exact POL entry. Read the transaction before signing; your position is created on-chain in that same transaction. Never share your Secret Recovery Phrase or seed words with anyone — no site, sponsor, or "support" will ever need it.</p></div></article>
<article class="instruction" style="border-color:var(--gold);background:rgba(243,190,67,.05)"><div class="num" style="background:var(--gold);color:#071421;border-color:var(--gold)">6</div><div><h3>You're in — let the team know</h3><p>The moment it confirms, you're taken straight to your live position dashboard showing your <strong>new member ID</strong>. Introduce yourself so the team knows you're in and can help you get your 2 — enter your new ID and your name or handle below.</p><form id="idSubmitForm" style="display:grid;gap:8px;margin-top:12px"><input name="newId" class="input" inputmode="numeric" pattern="[0-9]{1,10}" maxlength="10" placeholder="Your NEW RM Circle ID (numbers only)" required><input name="memberName" class="input" maxlength="60" placeholder="Your name or Telegram @handle (so the team can reach you)" required><button class="btn btn-primary">Submit My ID →</button></form><div id="idSubmitMsg" style="margin-top:10px;font-size:14px"></div></div></article></div> <article class="instruction" style="border-color:var(--gold);background:rgba(243,190,67,.05)"><div class="num" style="background:var(--gold);color:#071421;border-color:var(--gold)">6</div><div><h3>You're in — let the team know</h3><p>The moment it confirms, you're taken straight to your live position dashboard showing your <strong>new member ID</strong>. Introduce yourself so the team knows you're in and can help you get your 2 — enter your new ID and your name or handle below.</p><form id="idSubmitForm" style="display:grid;gap:8px;margin-top:12px"><input name="newId" class="input" inputmode="numeric" pattern="[0-9]{1,10}" maxlength="10" placeholder="Your NEW RM Circle ID (numbers only)" required><input name="memberName" class="input" maxlength="60" placeholder="Your name or Telegram @handle (so the team can reach you)" required><button class="btn btn-primary">Submit My ID →</button></form><div id="idSubmitMsg" style="margin-top:10px;font-size:14px"></div></div></article></div>
+4
View File
@@ -13,6 +13,10 @@ async function load(){
document.getElementById('progressBar').style.width=`${Math.min(100,(currentSponsor.directs/2)*100)}%`; document.getElementById('progressBar').style.width=`${Math.min(100,(currentSponsor.directs/2)*100)}%`;
document.getElementById('entryPol').textContent=c.premiumEntryPol; document.getElementById('entryPol').textContent=c.premiumEntryPol;
document.getElementById('entryPol2').textContent=c.premiumEntryPol; document.getElementById('entryPol2').textContent=c.premiumEntryPol;
if(c.polUsd>0){
var usd=Math.round(c.premiumEntryPol*c.polUsd);
['entryUsd','entryUsd2'].forEach(function(id){var el=document.getElementById(id);if(el)el.textContent=' (~$'+usd+' today — POL’s price moves)';});
}
document.getElementById('joinButton').href='/join-now'; document.getElementById('joinButton').href='/join-now';
{const dl=document.getElementById('dappJoinLink');if(dl&&currentSponsor.referralUrl){dl.href=currentSponsor.referralUrl;dl.classList.remove('hidden');}} {const dl=document.getElementById('dappJoinLink');if(dl&&currentSponsor.referralUrl){dl.href=currentSponsor.referralUrl;dl.classList.remove('hidden');}}
document.getElementById('queueText').textContent=c.showQueueProgress?`${s.waitingCount} team placement${s.waitingCount===1?'':'s'} waiting behind the current sponsor.`:''; document.getElementById('queueText').textContent=c.showQueueProgress?`${s.waitingCount} team placement${s.waitingCount===1?'':'s'} waiting behind the current sponsor.`:'';
+6 -6
View File
@@ -98,7 +98,7 @@ Watch the 60-second overview first, then ask me anything. No pressure, no hype
<p style="color:var(--muted);margin:18px 0 0;font-size:14px">💡 <strong style="color:var(--text)">Pair these two with the “$27” video above:</strong> download the video (Copy link → open → save), upload it natively with your post, and let your invite link in the text do the work — the video itself deliberately shows no URL.</p> <p style="color:var(--muted);margin:18px 0 0;font-size:14px">💡 <strong style="color:var(--text)">Pair these two with the “$27” video above:</strong> download the video (Copy link → open → save), upload it natively with your post, and let your invite link in the text do the work — the video itself deliberately shows no URL.</p>
<div class="tool-card"><div class="tool-head"><div><div class="eyebrow">Post 6 · X / Twitter · the $27 hook</div><h3 style="font-size:20px">“You already spent it”</h3></div><button class="btn btn-teal btn-sm copy-btn" data-copy="You told yourself you don't have $27 for a side hustle. <div class="tool-card"><div class="tool-head"><div><div class="eyebrow">Post 6 · X / Twitter · the $27 hook</div><h3 style="font-size:20px">“You already spent it”</h3></div><button class="btn btn-teal btn-sm copy-btn" data-copy="You told yourself you don't have pocket change for a side hustle.
You spent it this week. Probably twice: You spent it this week. Probably twice:
☕ 3 fancy coffees ☕ 3 fancy coffees
@@ -106,8 +106,8 @@ You spent it this week. Probably twice:
🍕 Tuesday takeout 🍕 Tuesday takeout
🎯 scratch-offs → trash can 🎯 scratch-offs → trash can
Same $27. Different job description. 105-sec video 👇 Same pocket change. Different job description. 105-sec video 👇
https://rmcircle.team">Copy</button></div><pre class="swipe">You told yourself you don't have $27 for a side hustle. https://rmcircle.team">Copy</button></div><pre class="swipe">You told yourself you don't have pocket change for a side hustle.
You spent it this week. Probably twice: You spent it this week. Probably twice:
☕ 3 fancy coffees ☕ 3 fancy coffees
@@ -115,7 +115,7 @@ You spent it this week. Probably twice:
🍕 Tuesday takeout 🍕 Tuesday takeout
🎯 scratch-offs → trash can 🎯 scratch-offs → trash can
Same $27. Different job description. 105-sec video 👇 Same pocket change. Different job description. 105-sec video 👇
https://rmcircle.team</pre></div> https://rmcircle.team</pre></div>
<div class="tool-card"><div class="tool-head"><div><div class="eyebrow">Post 7 · Facebook · the $27 story</div><h3 style="font-size:20px">“The pocket-change illusion”</h3></div><button class="btn btn-teal btn-sm copy-btn" data-copy="Twenty-seven bucks. <div class="tool-card"><div class="tool-head"><div><div class="eyebrow">Post 7 · Facebook · the $27 story</div><h3 style="font-size:20px">“The pocket-change illusion”</h3></div><button class="btn btn-teal btn-sm copy-btn" data-copy="Twenty-seven bucks.
@@ -126,7 +126,7 @@ One DoorDash lunch after the fees. Three fancy coffees. Movie popcorn and a soda
25 ways. Same ending every time: $27 lighter, zero leverage. 25 ways. Same ending every time: $27 lighter, zero leverage.
So flip it. Our team build is called The RM Circle. One-time entry — the same $27-and-change — and you can start with a debit card, no crypto experience needed. Get your 2, help your 2, and the whole team helps them do it. Every payment is public on the blockchain, so you verify every dime instead of trusting anyone. So flip it. Our team build is called The RM Circle. One-time entry — the same pocket change you burn in a week — and you can start with a debit card, no crypto experience needed. Get your 2, help your 2, and the whole team helps them do it. Every payment is public on the blockchain, so you verify every dime instead of trusting anyone.
The popcorn is gone by the credits. Your side hustle starts with the same pocket change. Watch the 105-second video, then look around here: The popcorn is gone by the credits. Your side hustle starts with the same pocket change. Watch the 105-second video, then look around here:
https://rmcircle.team https://rmcircle.team
@@ -139,7 +139,7 @@ One DoorDash lunch after the fees. Three fancy coffees. Movie popcorn and a soda
25 ways. Same ending every time: $27 lighter, zero leverage. 25 ways. Same ending every time: $27 lighter, zero leverage.
So flip it. Our team build is called The RM Circle. One-time entry — the same $27-and-change — and you can start with a debit card, no crypto experience needed. Get your 2, help your 2, and the whole team helps them do it. Every payment is public on the blockchain, so you verify every dime instead of trusting anyone. So flip it. Our team build is called The RM Circle. One-time entry — the same pocket change you burn in a week — and you can start with a debit card, no crypto experience needed. Get your 2, help your 2, and the whole team helps them do it. Every payment is public on the blockchain, so you verify every dime instead of trusting anyone.
The popcorn is gone by the credits. Your side hustle starts with the same pocket change. Watch the 105-second video, then look around here: The popcorn is gone by the credits. Your side hustle starts with the same pocket change. Watch the 105-second video, then look around here:
https://rmcircle.team https://rmcircle.team
+1 -1
View File
@@ -14,7 +14,7 @@
<div class="video-card" style="max-width:880px;margin:0 auto 26px"><div style="padding:6px 6px 0"><div class="eyebrow">Video 3 · 3 min</div><h2 style="margin:6px 0 6px">Funding your wallet</h2><p style="color:var(--muted);margin:0 0 12px">Get POL onto Polygon Mainnet — enough for the 362 POL Premium entry plus a little extra for gas.</p></div><video class="video-frame" style="display:block;width:100%;height:auto;aspect-ratio:16/9" controls preload="metadata" poster="/training/funding_your_wallet_poster.jpg" src="/training/funding_your_wallet.mp4"></video></div> <div class="video-card" style="max-width:880px;margin:0 auto 26px"><div style="padding:6px 6px 0"><div class="eyebrow">Video 3 · 3 min</div><h2 style="margin:6px 0 6px">Funding your wallet</h2><p style="color:var(--muted);margin:0 0 12px">Get POL onto Polygon Mainnet — enough for the 362 POL Premium entry plus a little extra for gas.</p></div><video class="video-frame" style="display:block;width:100%;height:auto;aspect-ratio:16/9" controls preload="metadata" poster="/training/funding_your_wallet_poster.jpg" src="/training/funding_your_wallet.mp4"></video></div>
<div class="callout" style="max-width:880px;margin:0 auto 26px"><strong>💳 Brand new to crypto? You can buy POL with a card.</strong> If you don't have crypto anywhere yet, the simplest path is <a href="https://www.moonpay.com/buy/matic" target="_blank" rel="noopener nofollow">MoonPay</a> — buy with a debit/credit card, Apple Pay, or Google Pay. Three things to get right: choose <strong>POL on the Polygon network</strong> (MoonPay may show POL's old name, <em>MATIC</em> — same token), paste <strong>your own wallet address</strong> from Video 2 as the destination, and buy about <strong>385 POL</strong> (the 362 entry plus a little gas). Why the extra? Think of it like a car: the blockchain is the road and POL is also the fuel — every transaction burns a tiny bit of "gas" to move, so you keep a little in the tank beyond your entry. A wallet with an empty tank can't go anywhere. The crypto is delivered straight to your wallet — this site never touches your money. MoonPay handles ID verification and charges its own card fee (~4.5%); a first purchase can take a few minutes to arrive. The join page will also offer this automatically if your connected wallet is short.</div> <div class="callout" style="max-width:880px;margin:0 auto 26px"><strong>💳 Brand new to crypto? You can buy POL with a card.</strong> If you don't have crypto anywhere yet, the simplest path is <a href="https://www.moonpay.com/buy/matic" target="_blank" rel="noopener nofollow">MoonPay</a> — buy with a debit/credit card, Apple Pay, or Google Pay. Three things to get right: choose <strong>POL on the Polygon network</strong> (MoonPay may show POL's old name, <em>MATIC</em> — same token), paste <strong>your own wallet address</strong> from Video 2 as the destination, and buy about <strong>385 POL</strong> (the 362 entry plus a little gas<span id="fundUsdNote"></span>). Why the extra? Think of it like a car: the blockchain is the road and POL is also the fuel — every transaction burns a tiny bit of "gas" to move, so you keep a little in the tank beyond your entry. A wallet with an empty tank can't go anywhere. The crypto is delivered straight to your wallet — this site never touches your money. MoonPay handles ID verification and charges its own card fee (~4.5%); a first purchase can take a few minutes to arrive. The join page will also offer this automatically if your connected wallet is short.</div>
<div class="video-card" style="max-width:880px;margin:0 auto 26px"><div style="padding:6px 6px 0"><div class="eyebrow">Video 4 · 4 min · the new way to join</div><h2 style="margin:6px 0 6px">Joining right on the site — connect wallet &amp; buy your position</h2><p style="color:var(--muted);margin:0 0 12px">The whole join process, start to finish: open your invite link (or <a href="/start" style="color:var(--teal)">the start page</a>), connect your wallet, and buy your Premium position in one guided flow — the sponsor ID is filled in for you automatically.</p></div><video class="video-frame" style="display:block;width:100%;height:auto;aspect-ratio:16/9" controls preload="metadata" poster="/training/new_integrated_join_process_poster.jpg" src="/training/new_integrated_join_process.mp4"></video></div> <div class="video-card" style="max-width:880px;margin:0 auto 26px"><div style="padding:6px 6px 0"><div class="eyebrow">Video 4 · 4 min · the new way to join</div><h2 style="margin:6px 0 6px">Joining right on the site — connect wallet &amp; buy your position</h2><p style="color:var(--muted);margin:0 0 12px">The whole join process, start to finish: open your invite link (or <a href="/start" style="color:var(--teal)">the start page</a>), connect your wallet, and buy your Premium position in one guided flow — the sponsor ID is filled in for you automatically.</p></div><video class="video-frame" style="display:block;width:100%;height:auto;aspect-ratio:16/9" controls preload="metadata" poster="/training/new_integrated_join_process_poster.jpg" src="/training/new_integrated_join_process.mp4"></video></div>
+6
View File
@@ -6,3 +6,9 @@
if(c.siteName){document.title=`Training | ${c.siteName}`;const bn=document.getElementById('brandName');if(bn)bn.textContent=c.siteName} if(c.siteName){document.title=`Training | ${c.siteName}`;const bn=document.getElementById('brandName');if(bn)bn.textContent=c.siteName}
}catch(e){} }catch(e){}
})(); })();
// live dollar note in the card-buy callout — computed, never hand-written
fetch('/api/public/config').then(function(r){return r.json()}).then(function(c){
var el=document.getElementById('fundUsdNote');
if(el&&c.polUsd>0){var pol=(c.premiumEntryPol||362)+23;el.textContent=' — about $'+Math.round(pol*c.polUsd)+' at today’s price';}
}).catch(function(){});
+8 -2
View File
@@ -57,7 +57,7 @@ FACTS:
- "Is this a pyramid/Ponzi/scam?": a pyramid or Ponzi routes everyone's money to a central company that pays earlier joiners out of later joiners' deposits, with nothing verifiable. Here NO company holds funds — the smart contract pays person-to-person in the same transaction and the code plus every payout are public on-chain (verify at https://rmcircle.team/contract). Be plain that it is a team build with real effort and real crypto risk, not a passive investment. - "Is this a pyramid/Ponzi/scam?": a pyramid or Ponzi routes everyone's money to a central company that pays earlier joiners out of later joiners' deposits, with nothing verifiable. Here NO company holds funds — the smart contract pays person-to-person in the same transaction and the code plus every payout are public on-chain (verify at https://rmcircle.team/contract). Be plain that it is a team build with real effort and real crypto risk, not a passive investment.
- "If my two can't get their two, doesn't it stop there?": everyone needs their OWN 2 to qualify (spillover never qualifies for them), but a leg does not dead-end — it is a team: you help your 2 get theirs, uplines earn as the team grows so helping you is in their interest, and spillover adds depth when personal recruiting is slow. It only truly stalls if everyone stops helping. - "If my two can't get their two, doesn't it stop there?": everyone needs their OWN 2 to qualify (spillover never qualifies for them), but a leg does not dead-end — it is a team: you help your 2 get theirs, uplines earn as the team grows so helping you is in their interest, and spillover adds depth when personal recruiting is slow. It only truly stalls if everyone stops helping.
- "What if I can't afford the upgrades?": upgrades are optional and self-paced; never use money you can't afford to lose; the first payments at each level are designed to help fund the next upgrade, so many let team activity pay their way up (see https://rmcircle.team/how-pay-works). - "What if I can't afford the upgrades?": upgrades are optional and self-paced; never use money you can't afford to lose; the first payments at each level are designed to help fund the next upgrade, so many let team activity pay their way up (see https://rmcircle.team/how-pay-works).
- "My prospect wants to join but has no money": coach the member to sort which of three objections it really is. (1) Most common — "sounds expensive/complicated": entry is ~$27 in POL (~$35 all-in with card fee + gas) payable with a regular debit card via the join page; many prospects imagine far more. (2) Priority dressed as money: send the "$27" video from /tools and go silent — never argue it. (3) Genuinely broke: the honest answer is "don't join yet" — never rent money, never desperation recruiting; ask "when's payday?" and follow up then. Waiting costs the prospect nothing: invite links don't expire and the team's growth is publicly visible on-chain while they wait. HARD RULE: nobody ever fronts or loans someone's entry — not the sponsor, not the team; it kills commitment and creates one person controlling positions registered to others' wallets. Teach-forward: have the member log how each conversation goes, because their people will hit the same objection. - "My prospect wants to join but has no money": coach the member to sort which of three objections it really is. (1) Most common — "sounds expensive/complicated": entry is ${c.premiumEntryPol || 362} POL — right now roughly ${entryUsdLine()} — payable with a regular debit card via the join page; many prospects imagine far more. ALWAYS quote the current dollar figure from this prompt, never a remembered one, and add that POL's price moves. (2) Priority dressed as money: send the "$27 wasted" curiosity video from /tools and go silent (its $27 is about weekly wasted spending — an evergreen hook, not the entry price) — never argue it. (3) Genuinely broke: the honest answer is "don't join yet" — never rent money, never desperation recruiting; ask "when's payday?" and follow up then. Waiting costs the prospect nothing: invite links don't expire and the team's growth is publicly visible on-chain while they wait. HARD RULE: nobody ever fronts or loans someone's entry — not the sponsor, not the team; it kills commitment and creates one person controlling positions registered to others' wallets. Teach-forward: have the member log how each conversation goes, because their people will hit the same objection.
- "Someone below me won't upgrade / is stalled": a paused member NEVER blocks money. Each person below you pays you separately, once, at one level — nothing waits on pairs or chains of upgrades. Payments a paused member can't catch pass straight UP through them to the next ready position (often the asker's), and everyone below the paused member keeps flowing normally; the only thing on hold is the single payment that person would send at the asker's matching level. Never pressure anyone — paused members keep collecting entry rewards from new team growth and often return once the upgrade funds itself. Point the asker at the pipeline panel on their dashboard to see who IS moving, and (teach-forward) have them show their two the same panel. - "Someone below me won't upgrade / is stalled": a paused member NEVER blocks money. Each person below you pays you separately, once, at one level — nothing waits on pairs or chains of upgrades. Payments a paused member can't catch pass straight UP through them to the next ready position (often the asker's), and everyone below the paused member keeps flowing normally; the only thing on hold is the single payment that person would send at the asker's matching level. Never pressure anyone — paused members keep collecting entry rewards from new team growth and often return once the upgrade funds itself. Point the asker at the pipeline panel on their dashboard to see who IS moving, and (teach-forward) have them show their two the same panel.
- "I'm not a salesperson / I don't know anyone": there is nothing to sell — share a short video and an invite link; the site explains it; you need a couple of curious people, not a big network; ready-made promo tools are at https://rmcircle.team/tools. - "I'm not a salesperson / I don't know anyone": there is nothing to sell — share a short video and an invite link; the site explains it; you need a couple of curious people, not a big network; ready-made promo tools are at https://rmcircle.team/tools.
- "What if people quit?": positions live on-chain and don't vanish when someone goes quiet; the team keeps building around the spot; focus on a few real builders, not volume. No income is guaranteed. - "What if people quit?": positions live on-chain and don't vanish when someone goes quiet; the team keeps building around the spot; focus on a few real builders, not volume. No income is guaranteed.
@@ -366,6 +366,12 @@ let trCache=null,trDirty=false;
function trLoad(){ if(trCache)return trCache; try{trCache=JSON.parse(fs.readFileSync(TR_FILE,'utf8'))}catch(e){trCache={}} return trCache; } function trLoad(){ if(trCache)return trCache; try{trCache=JSON.parse(fs.readFileSync(TR_FILE,'utf8'))}catch(e){trCache={}} return trCache; }
setInterval(()=>{ if(trDirty){trDirty=false;try{fs.writeFileSync(TR_FILE,JSON.stringify(trCache))}catch(e){}} },15000).unref(); setInterval(()=>{ if(trDirty){trDirty=false;try{fs.writeFileSync(TR_FILE,JSON.stringify(trCache))}catch(e){}} },15000).unref();
const trIpHits=new Map(); const trIpHits=new Map();
function entryUsdLine(){
const pol=Number(getConfig().premiumEntryPol)||362;
if(!polPrice.usd)return 'a small one-time amount (see the join page for the current dollar figure)';
const entry=pol*polPrice.usd, allin=entry*1.055+2; // card fee ~4.5% + a little gas
return `$${entry.toFixed(0)} (about $${(Math.ceil(allin/5)*5).toFixed(0)} all-in with the card fee and gas)`;
}
function trLimited(ip){ const now=Date.now(); const h=trIpHits.get(ip)||{n:0,ts:now}; if(now-h.ts>600000){h.n=0;h.ts=now} h.n++; trIpHits.set(ip,h); if(trIpHits.size>2000)trIpHits.clear(); return h.n>60; } function trLimited(ip){ const now=Date.now(); const h=trIpHits.get(ip)||{n:0,ts:now}; if(now-h.ts>600000){h.n=0;h.ts=now} h.n++; trIpHits.set(ip,h); if(trIpHits.size>2000)trIpHits.clear(); return h.n>60; }
async function handleTranslate(req,res){ async function handleTranslate(req,res){
const ip=String(req.headers['x-forwarded-for']||req.socket.remoteAddress||'').split(',')[0].trim(); const ip=String(req.headers['x-forwarded-for']||req.socket.remoteAddress||'').split(',')[0].trim();
@@ -459,7 +465,7 @@ function staticFile(req,res,file,status=200){
async function handleApi(req,res,pathname){ async function handleApi(req,res,pathname){
if(req.method==='GET'&&pathname==='/health') return json(res,200,{ok:true}); if(req.method==='GET'&&pathname==='/health') return json(res,200,{ok:true});
if(req.method==='GET'&&pathname==='/api/public/config'){ if(req.method==='GET'&&pathname==='/api/public/config'){
const c=getConfig();return json(res,200,{siteName:c.siteName,programName:c.programName,bridgeHeadline:c.bridgeHeadline,bridgeSubheadline:c.bridgeSubheadline,premiumEntryPol:c.premiumEntryPol,telegramUrl:c.telegramUrl,supportLabel:c.supportLabel,showQueueProgress:c.showQueueProgress}); const c=getConfig();await getPolUsd().catch(()=>{});return json(res,200,{polUsd:polPrice.usd||0,siteName:c.siteName,programName:c.programName,bridgeHeadline:c.bridgeHeadline,bridgeSubheadline:c.bridgeSubheadline,premiumEntryPol:c.premiumEntryPol,telegramUrl:c.telegramUrl,supportLabel:c.supportLabel,showQueueProgress:c.showQueueProgress});
} }
if(req.method==='GET'&&pathname==='/api/public/member'){ if(req.method==='GET'&&pathname==='/api/public/member'){
const ip=String(req.headers['x-forwarded-for']||req.socket.remoteAddress||'').split(',')[0].trim(); const ip=String(req.headers['x-forwarded-for']||req.socket.remoteAddress||'').split(',')[0].trim();