Admin Access

Log in as an admin to continue.

Invite Links

Multi-use, permanent 60-day Pro trial links. Each link can be used by unlimited users.

← Beta Codes
Links
Total Signups
Paid Conversions

Create New Invite Link

function getCookie(n){for(var c=document.cookie.split(";"),i=0;in+(i.total_signups||0),0),e=t.reduce((n,i)=>n+(i.conversions||0),0);document.getElementById("statLinks").textContent=t.length,document.getElementById("statSignups").textContent=s,document.getElementById("statConversions").textContent=e}function renderLinks(t){const s=document.getElementById("linksContainer");if(!t.length){s.innerHTML='
No invite links yet. Create one above.
';return}s.innerHTML=t.map(e=>` `).join("")}async function copyUrl(t,s){try{await navigator.clipboard.writeText(s);const e=s.split("/invite/")[1],n=document.querySelector('[id^="cf-"]'),i=t.querySelector(".copy-feedback");i&&(i.style.display="inline",setTimeout(()=>i.style.display="none",2e3))}catch{window.prompt("Copy this link:",s)}}async function toggleActive(t,s){try{(await(await fetch(`/api/admin/invite-links/${t}`,{method:"PATCH",headers:{"Content-Type":"application/json","Authorization":"Bearer "+_token},body:JSON.stringify({is_active:s})})).json()).success&&_reload()}catch(e){console.error(e)}}async function createLink(){const t=document.getElementById("newSlug").value.trim(),s=document.getElementById("newLabel").value.trim(),e=parseInt(document.getElementById("newTrialDays").value,10)||60,n=document.getElementById("createMsg");if(!t){n.textContent="Slug is required.",n.className="create-msg error",n.style.display="block";return}try{const a=await(await fetch("/api/admin/invite-links",{method:"POST",headers:{"Content-Type":"application/json","Authorization":"Bearer "+_token},body:JSON.stringify({slug:t,label:s,trial_days:e})})).json();a.success?(n.textContent=`Created! URL: ${a.link.invite_url}`,n.className="create-msg success",n.style.display="block",document.getElementById("newSlug").value="",document.getElementById("newLabel").value="",_reload()):(n.textContent=a.message||"Failed to create link.",n.className="create-msg error",n.style.display="block")}catch{n.textContent="Network error. Please try again.",n.className="create-msg error",n.style.display="block"}}function esc(t){return t?String(t).replace(/&/g,"&").replace(//g,">").replace(/"/g,"""):""}