3a80a50648
Public promo is now RM-Circle-only; the Crypto Team Build Network is learned after joining, not surfaced to prospects. - nav brand "Crypto Team Build" -> "RM Circle" (subtitle "Premium Team Build") - all <title>, og:site_name, twitter meta, footers, disclaimers, 404, chatbot system prompt + canned answers, config siteName/supportLabel swept - removed "a project of the Crypto Team Build Network" framing from prose - banners regenerated: eyebrow now "The RM Circle · Polygon" (was Crypto Team Build) - og-card.jpg regenerated (was "CRYPTO TEAM BUILD NETWORK PRESENTS") - roadmap.webp already RM-Circle branded (no change needed) - social posts/swipes: #CryptoTeamBuild -> #RMCircle, "crypto team build" -> "RM Circle team build" Videos still reference old branding (VO + embedded site screenshot) — rebuilt next. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
55 lines
5.1 KiB
JavaScript
55 lines
5.1 KiB
JavaScript
let currentSponsor=null;
|
|
async function load(){
|
|
try{
|
|
const [cr,sr]=await Promise.all([fetch('/api/public/config'),fetch('/api/public/current-sponsor')]);
|
|
const c=await cr.json(); const s=await sr.json();
|
|
if(!sr.ok)throw new Error(s.error||'No sponsor assigned');
|
|
currentSponsor=s.sponsor;
|
|
if(c.siteName){document.title=`Get Started | ${c.siteName}`;const bn=document.getElementById('brandName');if(bn)bn.textContent=c.siteName}
|
|
document.getElementById('sponsorId').textContent=`ID ${currentSponsor.id}`;
|
|
document.getElementById('sponsorIdInline').textContent=currentSponsor.id;
|
|
document.getElementById('sponsorName').textContent=currentSponsor.name||'Current RM Circle placement';
|
|
document.getElementById('progressText').textContent=`${currentSponsor.directs} / 2`;
|
|
document.getElementById('progressBar').style.width=`${Math.min(100,(currentSponsor.directs/2)*100)}%`;
|
|
document.getElementById('entryPol').textContent=c.premiumEntryPol;
|
|
document.getElementById('entryPol2').textContent=c.premiumEntryPol;
|
|
document.getElementById('joinButton').href=currentSponsor.referralUrl;
|
|
document.getElementById('queueText').textContent=c.showQueueProgress?`${s.waitingCount} team placement${s.waitingCount===1?'':'s'} waiting behind the current sponsor.`:'';
|
|
document.getElementById('supportBox').textContent=c.supportLabel||'Contact your team sponsor if you need help before joining.';
|
|
if(c.telegramUrl){const w=document.getElementById('supportLinkWrap'),a=document.getElementById('supportLink');a.href=c.telegramUrl;w.classList.remove('hidden')}
|
|
}catch(e){
|
|
document.getElementById('sponsorName').textContent=e.message;
|
|
document.getElementById('joinButton').classList.add('hidden');
|
|
document.getElementById('copyButton').classList.add('hidden');
|
|
}
|
|
}
|
|
document.getElementById('joinButton').addEventListener('click',()=>{try{if(currentSponsor)sessionStorage.setItem('ctb.joinedSponsor',currentSponsor.id)}catch(e){};fetch('/api/public/join-click',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({source:window.ctbGetSource?window.ctbGetSource():'(direct)',clickid:window.ctbGetClickId?window.ctbGetClickId():''})}).catch(()=>{})});
|
|
document.getElementById('idSubmitForm').addEventListener('submit',async e=>{
|
|
e.preventDefault();
|
|
const form=e.currentTarget,input=form.elements.newId,msg=document.getElementById('idSubmitMsg');
|
|
const newId=input.value.trim();
|
|
const memberName=form.elements.memberName.value.trim();
|
|
if(!/^[0-9]{1,10}$/.test(newId)){msg.style.color='var(--danger)';msg.textContent='Numbers only — the ID shown by the RM Circle dApp.';return}
|
|
if(!memberName){msg.style.color='var(--danger)';msg.textContent='Add your name or Telegram handle so the team can reach you.';return}
|
|
let joinedSponsor='';try{joinedSponsor=sessionStorage.getItem('ctb.joinedSponsor')||''}catch(e){}
|
|
const sponsorId=joinedSponsor||(currentSponsor?currentSponsor.id:'?');
|
|
msg.style.color='var(--muted)';msg.textContent='Submitting…';
|
|
try{
|
|
const r=await fetch('/api/public/submit-id',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({newId,memberName,sponsorId,source:window.ctbGetSource?window.ctbGetSource():'(direct)',clickid:window.ctbGetClickId?window.ctbGetClickId():''})});
|
|
const d=await r.json();
|
|
if(!r.ok)throw new Error(d.error||'Submission failed');
|
|
form.classList.add('hidden');
|
|
msg.style.color='var(--ok)';
|
|
const dash=`<br><a href="/my/${newId}" style="color:var(--gold)">Open your Member Dashboard →</a>`;
|
|
if(d.duplicate)msg.innerHTML=`✓ ID <strong>${newId}</strong> was already submitted — you're on the list.${dash}`;
|
|
else if(d.path==='rotation')msg.innerHTML=`✓ Verified on the blockchain! ID <strong>${newId}</strong> joined through the team rotation under sponsor <strong>#${d.onchain.referrerId}</strong> (${d.onchain.tier}). The team has been notified and you're in line for the rotation that gets <strong>your</strong> 2.${dash}`;
|
|
else if(d.path==='leg')msg.innerHTML=`✓ Verified on the blockchain! ID <strong>${newId}</strong> is registered under sponsor <strong>#${d.onchain.referrerId}</strong>'s team build (${d.onchain.tier}) — your placement is recorded and the team has been notified. Heads up: the sponsor shown on this page is the site's team rotation, a separate group effort — your own team hub is your dashboard.${dash}`;
|
|
else if(d.path==='notfound'){msg.style.color='var(--danger)';msg.innerHTML=`⚠ ID <strong>${newId}</strong> isn't on the smart contract yet — double-check the number from the RM Circle dApp. Your submission is saved and the team will verify it manually.`;}
|
|
else msg.innerHTML=`✓ Got it! ID <strong>${newId}</strong> is submitted. The team has been notified and will verify your placement.${dash}`;
|
|
}catch(x){msg.style.color='var(--danger)';msg.textContent=x.message}
|
|
});
|
|
document.getElementById('copyButton').addEventListener('click',async()=>{
|
|
if(!currentSponsor)return; await navigator.clipboard.writeText(currentSponsor.id); const b=document.getElementById('copyButton'); const old=b.textContent;b.textContent='Copied ✓';setTimeout(()=>b.textContent=old,1400)
|
|
});
|
|
load();
|