';
}
function esc(s){return String(s??'').replace(/[&<>'"]/g,c=>({'&':'&','<':'<','>':'>',"'":''','"':'"'}[c]))}
diff --git a/public/start.html b/public/start.html
index f0471dc..4e14bdd 100644
--- a/public/start.html
+++ b/public/start.html
@@ -11,7 +11,7 @@
3
Fund your wallet with POL
Premium entry is 362 POL. Keep a small additional POL balance available for network gas. POL's USD value changes with the market.
4
Use the current team sponsor
Confirm that the sponsor ID shown by the RM Circle dApp matches ID — before completing the transaction.
5
Select Premium and review the transaction
Read the wallet transaction before signing. Never share your Secret Recovery Phrase or seed words with this site, a sponsor, or a dApp.
-
6
Submit your NEW RM Circle ID here
After your purchase confirms, the RM Circle dApp shows your new member ID. Type it below and hit submit — this tells the team you're in, maps your placement, and puts you in line for the rotation that gets your 2.
+
6
Submit your NEW RM Circle ID here
After your purchase confirms, the RM Circle dApp shows your new member ID. Type it below and hit submit — this tells the team you're in, maps your placement, and puts you in line for the rotation that gets your 2.
What happens next: get exactly 2 directs, retire your qualified referral link, help your 2 get their 2, and upgrade with earned POL when practical. The goal is depth and duplication—not endless directs on one link.
Risk reminder: participation involves cryptocurrency and smart-contract risk. No income is guaranteed. Use only funds you can afford to lose.
The RM Circle is a team build project of the Crypto Team Build Network. This roadmap is the plan every member follows — tap to view full size.
diff --git a/public/start.js b/public/start.js
index 8271aaa..e83b8aa 100644
--- a/public/start.js
+++ b/public/start.js
@@ -28,12 +28,14 @@ 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,sponsorId,source:window.ctbGetSource?window.ctbGetSource():'(direct)',clickid:window.ctbGetClickId?window.ctbGetClickId():''})});
+ 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');
diff --git a/server.js b/server.js
index e1fdeb6..630d9c1 100644
Binary files a/server.js and b/server.js differ