Members area: weekly webinar replay page at /replays
Wallet-gated like the Method lessons: the API returns titles/dates to everyone (prospects see the shape of the product) and video URLs only with a member session. List lives in the data volume (replays.json) so the weekly add never needs a deploy; videos stream from the DO Spaces bucket (CSP media-src added). Teaser on /training; chatbot + AI prompt updated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -48,7 +48,7 @@
|
||||
{k:['cap','capped','cap out','max level','maximum level','8 levels','eight levels','after corona','top level','stop earning','earning cap','level cap','beyond corona'],
|
||||
a:()=>`Your <strong>level</strong> caps at Corona (level 8) — you can't upgrade higher. But your <strong>earning doesn't cap</strong>. Two reasons: (1) you catch an upgrade pass-up from every person in your first seven generations as they level up, and those generations hold up to 254 positions that keep filling over time. (2) Pass-ups travel UP past anyone who can't catch them — when someone upgrades, the payment rises to the first upline who's qualified and leveled high enough (up to the contract's 16-layer depth cap; otherwise it goes to the project fee wallet). So Corona is the position that misses nothing: at max level you're eligible for every pass-up, you're never the bottleneck, and you catch the ones under-leveled members below you let slip. It's the whole reason to keep leveling up. Full breakdown: <a href="/how-pay-works#cap">rmcircle.team/how-pay-works#cap</a> — contract mechanics, verifiable on-chain, never a promise of income.`},
|
||||
{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.`},
|
||||
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>, the <a href="/replays">weekly team webinar replays</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:['own the level','need to own','have to buy the level','catch without','still at scintilla','upline not upgraded','sponsor not upgraded','only pays 2','only pays two','only 2 payments','seems small','2 then 4','level is your reach'],
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="Weekly RM Circle team webinar replays — a members-area benefit included with every position."><title>Webinar Replays | RM Circle Team Build</title>
|
||||
<link rel="canonical" href="https://rmcircle.team/replays">
|
||||
<meta property="og:type" content="website"><meta property="og:site_name" content="RM Circle Team Build"><meta property="og:title" content="Weekly Webinar Replays — RM Circle Team Build"><meta property="og:description" content="The team meets every week. Replays are included with every position — sign in with the wallet that owns yours."><meta property="og:url" content="https://rmcircle.team/replays"><meta property="og:image" content="https://rmcircle.team/og-card.jpg"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"><link rel="stylesheet" href="/styles.css"></head>
|
||||
<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>Webinar Replays</small></span></a><div class="nav-actions"><a class="btn btn-secondary hide-mobile" href="/training">← Training</a><a class="btn btn-primary" href="/start">Get Started</a></div></header>
|
||||
<main>
|
||||
<section class="section"><div class="wrap"><div class="section-head"><div class="eyebrow">Members area</div><h1 style="font-size:clamp(34px,5vw,54px);margin:8px 0 10px">The team meets <span class="gold">every week.</span></h1><p>Live team webinars: what's working, member questions answered straight, and the plays to run this week. Miss one and the replay is here — included with every position, like the rest of the members area.</p></div>
|
||||
|
||||
<div id="replayStatus" style="max-width:880px;margin:0 auto 20px"></div>
|
||||
<div id="replayList" style="max-width:880px;margin:0 auto"></div>
|
||||
|
||||
<div class="callout warning" style="max-width:880px;margin:26px auto 0"><strong>Risk reminder:</strong> webinars discuss a cryptocurrency team build. Nothing in them is an income promise or financial advice. Participation involves real risk — use only funds you can afford to lose.</div>
|
||||
</div></section>
|
||||
</main>
|
||||
<footer class="wrap disclaimer">This is an independent RM Circle Team Build training resource. No income is guaranteed.<div class="footer-links"><a href="/">Strategy</a><a href="/training">Training</a><a href="/my">Member Dashboard</a><a href="/tools">Promo Tools</a><a href="/disclaimer">Disclaimers</a><a href="/privacy">Privacy</a><a href="/refunds">Refunds</a></div></footer>
|
||||
<script src="/track.js"></script><script src="/rmc-wallet.js"></script><script src="/inapp-browser.js"></script><script src="/replays.js"></script><script src="/wallet-notice.js" defer></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>
|
||||
@@ -0,0 +1,71 @@
|
||||
// Webinar replays — members-area page. The list comes from /api/public/replays:
|
||||
// locked responses carry titles/dates only (prospects see the shape of the
|
||||
// product), a member session gets the video URLs. Unlock is the same
|
||||
// one-signature SIWE flow as the training page (msg-challenge/msg-verify via
|
||||
// RMCWallet); Mini App visitors already carry a session and see no lock.
|
||||
(function () {
|
||||
'use strict';
|
||||
function $(id) { return document.getElementById(id); }
|
||||
function esc(s) { return String(s == null ? '' : s).replace(/[&<>'"]/g, function (c) { return ({ '&': '&', '<': '<', '>': '>', "'": ''', '"': '"' })[c]; }); }
|
||||
|
||||
function card(r, locked) {
|
||||
var head = '<div style="padding:6px 6px 0"><div class="eyebrow" style="color:var(--teal)">' + esc(r.date || '') + (r.minutes ? ' · ' + esc(r.minutes) + ' min' : '') + '</div>' +
|
||||
'<h2 style="margin:6px 0 6px">' + esc(r.title || 'Team webinar') + '</h2>' +
|
||||
(r.blurb ? '<p style="color:var(--muted);margin:0 0 12px">' + esc(r.blurb) + '</p>' : '') + '</div>';
|
||||
if (locked || !r.url) {
|
||||
return '<div class="video-card rmc-lock" style="margin:0 0 26px">' + head +
|
||||
'<div style="padding:8px 6px 10px">' +
|
||||
'<p class="micro" style="color:var(--muted);margin:0 0 12px">🔒 Replays come 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 a member? See how to join</a>' +
|
||||
'<div class="micro rmc-lock-err" style="color:#ff7b7b;margin-top:8px"></div></div></div>';
|
||||
}
|
||||
return '<div class="video-card" style="margin:0 0 26px">' + head +
|
||||
'<video class="video-frame" style="display:block;width:100%;height:auto;aspect-ratio:16/9" controls preload="metadata"' + (r.poster ? ' poster="' + esc(r.poster) + '"' : '') + ' src="' + esc(r.url) + '"></video></div>';
|
||||
}
|
||||
|
||||
var UNLOCK_LABEL = '🔓 I\'m a member — connect & unlock';
|
||||
function wireUnlock() {
|
||||
document.querySelectorAll('button.rmc-unlock').forEach(function (b) {
|
||||
b.addEventListener('click', function (ev) {
|
||||
var btn = ev.currentTarget, err = btn.closest('.rmc-lock').querySelector('.rmc-lock-err');
|
||||
btn.disabled = true; btn.textContent = 'Connecting…';
|
||||
(async function () {
|
||||
try {
|
||||
var eth = window.RMCWallet && 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; }
|
||||
var accounts = await eth.request({ method: 'eth_requestAccounts' });
|
||||
var account = accounts && accounts[0];
|
||||
try { await window.RMCWallet.ensureChain(eth); } catch (ce) { err.textContent = 'Switch your wallet to the Polygon network, then tap unlock again.'; btn.disabled = false; btn.textContent = UNLOCK_LABEL; return; }
|
||||
var ch = await (await fetch('/api/public/msg-challenge', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ address: account }) })).json();
|
||||
if (ch.error) throw new Error(ch.error);
|
||||
var sig = await eth.request({ method: 'personal_sign', params: [ch.message, account] });
|
||||
var 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.error) throw new Error(vr.error);
|
||||
load();
|
||||
} catch (e) { err.textContent = e.message || String(e); btn.disabled = false; btn.textContent = UNLOCK_LABEL; }
|
||||
})();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function load() {
|
||||
fetch('/api/public/replays').then(function (r) { return r.json(); }).then(function (d) {
|
||||
var list = d.replays || [];
|
||||
if (!list.length) {
|
||||
$('replayList').innerHTML = '<div class="callout" style="text-align:center">The first replay is on its way — check back after this week\'s webinar.</div>';
|
||||
return;
|
||||
}
|
||||
if (!d.locked) {
|
||||
$('replayStatus').innerHTML = '<p class="micro" style="color:var(--ok);margin:0">✅ Members area unlocked — position #' + esc(d.id) + '</p>';
|
||||
} else {
|
||||
$('replayStatus').innerHTML = '';
|
||||
}
|
||||
$('replayList').innerHTML = list.map(function (r) { return card(r, d.locked); }).join('');
|
||||
if (d.locked) wireUnlock();
|
||||
}).catch(function () {
|
||||
$('replayList').innerHTML = '<div class="callout warning">Could not load the replay list — refresh to try again.</div>';
|
||||
});
|
||||
}
|
||||
load();
|
||||
})();
|
||||
@@ -29,6 +29,8 @@
|
||||
<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>
|
||||
|
||||
|
||||
<div class="callout" style="max-width:880px;margin:0 auto 26px"><strong>🎥 The team meets every week.</strong> Live webinars with what's working right now and member questions answered straight — and every replay is waiting in the members area. <a href="/replays" style="color:var(--teal);font-weight:700">Watch the webinar replays →</a></div>
|
||||
|
||||
<h2 id="circle-method" style="max-width:880px;margin:44px auto 6px;font-size:30px">⭕ The Circle Method — Module 1: Get Your Two</h2>
|
||||
<p style="max-width:880px;margin:0 auto 20px;color:var(--muted)">Our recruiting course, taught by the team. Four short lessons that take you from "I could never recruit" to your first two curious people — the honest way: no pitching, no pressure, no income promises. Watch them in order, then run the plays. When your two join, send them these same lessons — that's the Method.</p>
|
||||
<img src="/v/rmc-napkin.jpg" alt="The Circle Method sketched on a napkin: get your 2, help your 2 get theirs, teach them to do the same" style="display:block;max-width:880px;width:100%;margin:0 auto 26px;border-radius:16px;border:1px solid #23425d">
|
||||
|
||||
Reference in New Issue
Block a user