Members area: Circle Method lessons 2-10 + Video 8 gated behind position ownership
The product now has a lid. Server refuses the gated video FILES without a wallet-verified member session (the Mini App bridge session counts, so Telegram members see no locks). Lesson 1, every poster, and all join-funnel and transparency videos stay public: free preview + trust engine. Training page renders locked cards with a one-signature unlock (same SIWE flow as Messages) and a members-unlocked badge. Chatbot: new members-area canned answer, Method answer notes the preview, AI prompt routing rule now answers prospects directly instead of sending locked links; bot lesson command notes the unlock path. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+4
-2
@@ -38,9 +38,11 @@
|
||||
{k:['telegram bot','connect telegram','payout ping','telegram notification','message my downline','contact my downline','reach my downline','mini app','miniapp','telegram app','dashboard in telegram'],
|
||||
a:()=>`Link your position to our Telegram companion bot: open your <a href="/my">dashboard</a> → Messages → sign in with your wallet → tap "Connect Telegram". Once linked you get an instant DM whenever your position catches a payment, team messages reach you natively in Telegram (reply right there to answer), you're pinged when someone joins on your link, and "links" gives you all your invite links. Linked members can also tap the bot's ☰ menu button to open the <strong>Mini App</strong> — your full live dashboard, promo tools, and the Circle Method right inside Telegram, no login needed. The bot's "links" command includes a <strong>Telegram-native invite link</strong> that opens your invite page instantly inside Telegram — great for sharing in groups and DMs; the prospect's join finishes in their own wallet app (zero custody, as always). Messaging still follows your matrix lines only — same rules as the site.`},
|
||||
{k:['cash out','cashout','spend my crypto','withdraw','off ramp','off-ramp','gift card','giftcard','get my money out','turn into cash','convert to dollars'],
|
||||
a:()=>`Three good paths, easiest first: (1) <strong>E-gift cards</strong> — send POL to CWallet (cwallet.com), swap to a US-dollar token there (their internal swaps are virtually free), and buy gift cards for brands you already use — groceries, gas, Amazon. eGifter (egifter.com) also takes crypto directly. (2) <strong>Straight cash-out</strong> via a regulated exchange in your country (Coinbase, Kraken…): send, sell, withdraw to your bank. (3) <strong>Keep it working</strong> — many members leave catches in the wallet to fund their next level. Full guide: <a href="/training#spending">Spending what you earn</a> — and <a href="/training#egift-video">Video 8 shows a real cash-out done on screen</a>, ending with the card in a mobile wallet ready to tap-to-pay. Honest notes: those are independent custodial services — only move what you're about to spend; taxes may apply where you live; not financial advice.`},
|
||||
a:()=>`Three good paths, easiest first: (1) <strong>E-gift cards</strong> — send POL to CWallet (cwallet.com), swap to a US-dollar token there (their internal swaps are virtually free), and buy gift cards for brands you already use — groceries, gas, Amazon. eGifter (egifter.com) also takes crypto directly. (2) <strong>Straight cash-out</strong> via a regulated exchange in your country (Coinbase, Kraken…): send, sell, withdraw to your bank. (3) <strong>Keep it working</strong> — many members leave catches in the wallet to fund their next level. Full guide: <a href="/training#spending">Spending what you earn</a> — and <a href="/training#egift-video">Video 8 shows a real cash-out done on screen</a> (members area), ending with the card in a mobile wallet ready to tap-to-pay. Honest notes: those are independent custodial services — only move what you're about to spend; taxes may apply where you live; not financial advice.`},
|
||||
{k:['circle method','recruiting course','how do i recruit','recruiting training','get my two','get your two','how to invite','module 1','lessons'],
|
||||
a:()=>`That's <a href="/training#circle-method">The Circle Method</a> — our free 10-lesson course, three modules, ~30 minutes total. Module 1 "Get Your Two": mindset, warm list, the exact words, objections. Module 2 "Help Your Two": your dashboard as a coaching desk, the first 48 hours, stalled people, timing upgrades. Module 3 "Teach the Teachers": run the same play + the 20-minute weekly rhythm. The Method's golden rule: the answer to every question is a lesson — when your people ask something, send the lesson that answers it.`},
|
||||
a:()=>`That's <a href="/training#circle-method">The Circle Method</a> — our 10-lesson course, three modules, ~30 minutes total. Module 1 "Get Your Two": mindset, warm list, the exact words, objections. Module 2 "Help Your Two": your dashboard as a coaching desk, the first 48 hours, stalled people, timing upgrades. Module 3 "Teach the Teachers": run the same play + the 20-minute weekly rhythm. <strong>Lesson 1 is free to watch</strong>; the rest is part of the members area that comes with your position — unlock it on the training page with the wallet that owns your position (one free signature), or it's already unlocked inside the Telegram Mini App. The Method's golden rule: the answer to every question is a lesson — when your people ask something, send the lesson that answers it.`},
|
||||
{k:['members area','member area','whats the product','what is the product','what am i buying','what do i get','members only','locked','unlock','sign in to training'],
|
||||
a:()=>`Yes — every position includes a real members area: <strong>The Circle Method</strong> (10-lesson recruiting & coaching course + a real cash-out walkthrough) on the <a href="/training">training page</a>, your <a href="/my">live coaching dashboard</a>, <a href="/tools">promo tools</a> personalized with your invite link, printable playbooks, wallet-verified team messaging, and the Telegram companion bot + Mini App. No passwords — access is proven by the wallet that owns your position (one free signature that can't move funds), and inside the Telegram Mini App it unlocks automatically. Lesson 1 and all the how-it-works videos are public so you can inspect everything before joining.`},
|
||||
{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 ${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 "Pocket Change" 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'],
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
<div class="video-card" style="max-width:880px;margin:0 auto 26px"><div style="padding:6px 6px 0"><div class="eyebrow">Video 7 · 14 min · your daily driver</div><h2 style="margin:6px 0 6px">The Member Dashboard — full walkthrough</h2><p style="color:var(--muted);margin:0 0 12px">Everything your dashboard does, end to end: your position and team, the pipeline that shows money forming below you, upgrading your level right on the page, wallet-verified Messages, the Coach Your Team panel, and grabbing your personalized promo tools and QR code. Watch this once and you'll never wonder what to do next.</p></div><video class="video-frame" style="display:block;width:100%;height:auto;aspect-ratio:16/9" controls preload="metadata" poster="/training/dashboard_walkthrough_poster.jpg" src="/training/dashboard_walkthrough.mp4"></video></div>
|
||||
|
||||
<div id="egift-video" class="video-card" style="max-width:880px;margin:0 auto 26px"><div style="padding:6px 6px 0"><div class="eyebrow">Video 8 · 8 min · watch a real cash-out</div><h2 style="margin:6px 0 6px">E-gift cards — turning team earnings into everyday spending</h2><p style="color:var(--muted);margin:0 0 12px">The whole "okay, I have crypto… now how do I actually <em>use</em> it?" answer, done for real on screen: sending POL from the wallet to CWallet, swapping it to a dollar token inside the platform (virtually free), and buying a gift card with the balance. Watch it once, then run the same play with your own catches — and show your two where this video lives when they ask the same question.</p></div><video class="video-frame" style="display:block;width:100%;height:auto;aspect-ratio:1672/768" controls preload="metadata" poster="/training/egift_cards_poster.jpg" src="/training/egift_cards.mp4"></video>
|
||||
<div id="egift-video" class="video-card" style="max-width:880px;margin:0 auto 26px"><div style="padding:6px 6px 0"><div class="eyebrow">Video 8 · 8 min · watch a real cash-out</div><h2 style="margin:6px 0 6px">E-gift cards — turning team earnings into everyday spending</h2><p style="color:var(--muted);margin:0 0 12px">The whole "okay, I have crypto… now how do I actually <em>use</em> it?" answer, done for real on screen: sending POL from the wallet to CWallet, swapping it to a dollar token inside the platform (virtually free), and buying a gift card with the balance. Watch it once, then run the same play with your own catches — and show your two where this video lives when they ask the same question.</p></div><video class="video-frame" style="display:block;width:100%;height:auto;aspect-ratio:1672/768" controls preload="none" poster="/training/egift_cards_poster.jpg" src="/training/egift_cards.mp4"></video>
|
||||
<div style="display:flex;gap:16px;align-items:center;padding:14px 6px 6px;flex-wrap:wrap"><img src="/training/giftcard_wallet_example.jpg" alt="Virtual card added to a mobile wallet, ready to tap to pay" loading="lazy" style="width:170px;max-width:38%;height:auto;border-radius:12px;border:1px solid var(--line)"><p style="color:var(--muted);margin:0;flex:1;min-width:200px"><strong style="color:var(--text)">The end result from the video:</strong> a virtual card added to a mobile wallet, ready to tap-to-pay — groceries, gas, anywhere cards are accepted. It started as POL catches from the team build.</p></div></div>
|
||||
|
||||
|
||||
@@ -86,4 +86,4 @@
|
||||
</div></section>
|
||||
</main>
|
||||
<footer class="wrap disclaimer">This is an independent RM Circle Team Build training resource. Always confirm transaction details in your wallet before signing. Never disclose your Secret Recovery Phrase.<div class="footer-links"><a href="/">Strategy</a><a href="/start">Getting Started</a><a href="/contract">Contract Security</a><a href="/admin">Team Admin</a><a href="/disclaimer">Disclaimers</a><a href="/how-pay-works">How You Get Paid</a><a href="/tools">Promo Tools</a></div></footer>
|
||||
<script src="/track.js"></script><script src="/training.js"></script><script src="/chat.js" defer></script><script src="/translate.js" defer></script><script src="/tg-app.js" defer></script><script src="/nav-dash.js" defer></script></body></html>
|
||||
<script src="/track.js"></script><script src="/rmc-wallet.js"></script><script src="/training.js"></script><script src="/chat.js" defer></script><script src="/translate.js" defer></script><script src="/tg-app.js" defer></script><script src="/nav-dash.js" defer></script></body></html>
|
||||
|
||||
@@ -16,3 +16,55 @@ fetch('/api/public/config').then(function(r){return r.json()}).then(function(c){
|
||||
// carry the member's saved id onto tools links so promo assets arrive personalized
|
||||
try{var tid=localStorage.getItem('rmc.toolsId')||localStorage.getItem('ctb.myId');
|
||||
if(tid&&/^\d+$/.test(tid))document.querySelectorAll('a[href="/tools"]').forEach(function(a){a.href='/tools?id='+tid;});}catch(e){}
|
||||
|
||||
// Members area: Circle Method lessons 2-10 + Video 8 are member-only. The
|
||||
// SERVER refuses those video files without a session — this makes the page
|
||||
// honest about it: locked cards with a one-signature unlock. Members arriving
|
||||
// through the Telegram Mini App already carry a session and see no locks.
|
||||
(async function(){
|
||||
'use strict';
|
||||
const gated=[...document.querySelectorAll('video')].filter(v=>{
|
||||
const s=v.getAttribute('src')||'';
|
||||
return (/\/v\/rmc-method-m\d+l\d+-/.test(s)&&s.indexOf('rmc-method-m1l1-')<0)||s.indexOf('/training/egift_cards.mp4')>=0;
|
||||
});
|
||||
if(!gated.length)return;
|
||||
let member=null;
|
||||
try{const r=await fetch('/api/public/msg-me');if(r.ok)member=await r.json();}catch(e){}
|
||||
if(member&&member.id){
|
||||
const h=document.getElementById('module-1');
|
||||
if(h){const b=document.createElement('p');b.className='micro';b.style.cssText='max-width:880px;margin:6px auto 0;color:var(--ok)';b.textContent='✅ Members area unlocked — position #'+member.id;h.after(b);}
|
||||
return;
|
||||
}
|
||||
gated.forEach(v=>{
|
||||
const poster=v.getAttribute('poster')||'';
|
||||
const box=document.createElement('div');
|
||||
box.className='rmc-lock';
|
||||
box.style.cssText='position:relative;border-radius:12px;overflow:hidden;aspect-ratio:16/9;display:flex;align-items:center;justify-content:center;background:#08131f center/cover no-repeat';
|
||||
if(poster)box.style.backgroundImage="linear-gradient(rgba(4,10,17,.85),rgba(4,10,17,.85)),url('"+poster+"')";
|
||||
box.innerHTML='<div style="text-align:center;padding:18px;max-width:460px">'
|
||||
+'<div style="font-size:32px">🔒</div>'
|
||||
+'<div style="font-weight:800;font-size:17px;margin:6px 0 4px">Members area</div>'
|
||||
+'<p class="micro" style="color:var(--muted);margin:0 0 12px">This lesson comes with every team position. Sign in with the wallet that owns your position — one free signature, it can\'t move funds. Linked on Telegram? The ☰ Mini App in @RMCircleBot unlocks everything automatically.</p>'
|
||||
+'<button class="btn btn-primary btn-sm rmc-unlock">🔓 I\'m a member — connect & unlock</button> '
|
||||
+'<a class="btn btn-secondary btn-sm" href="/start">Not yet? See how to join</a>'
|
||||
+'<div class="micro rmc-lock-err" style="color:#ff7b7b;margin-top:8px"></div></div>';
|
||||
v.replaceWith(box);
|
||||
});
|
||||
const UNLOCK_LABEL='🔓 I\'m a member — connect & unlock';
|
||||
document.querySelectorAll('button.rmc-unlock').forEach(b=>b.addEventListener('click',async ev=>{
|
||||
const btn=ev.currentTarget,err=btn.closest('.rmc-lock').querySelector('.rmc-lock-err');
|
||||
btn.disabled=true;btn.textContent='Connecting…';
|
||||
try{
|
||||
const eth=await window.RMCWallet.pick();
|
||||
if(!eth){err.textContent='No wallet in this browser. On a phone, open this page inside your wallet app\'s browser — or use the Telegram Mini App.';btn.disabled=false;btn.textContent=UNLOCK_LABEL;return;}
|
||||
const accs=await eth.request({method:'eth_requestAccounts'});const account=accs[0];
|
||||
const ch=await(await fetch('/api/public/msg-challenge',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({address:account})})).json();
|
||||
if(!ch.message)throw new Error(ch.error||'Could not start sign-in.');
|
||||
let hex='0x';for(const b2 of new TextEncoder().encode(ch.message))hex+=b2.toString(16).padStart(2,'0');
|
||||
const sig=await eth.request({method:'personal_sign',params:[hex,account]});
|
||||
const vr=await(await fetch('/api/public/msg-verify',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({address:account,signature:sig})})).json();
|
||||
if(!vr.ok)throw new Error(vr.error||'Verification failed — is this the wallet that owns your position?');
|
||||
location.reload();
|
||||
}catch(e){err.textContent=e.message||String(e);btn.disabled=false;btn.textContent=UNLOCK_LABEL;}
|
||||
}));
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user