๐ŸŽ“ Student AI Hub
Powerful AI Models for Students
Multiple leading AI models. One simple, affordable student platform.
GPTGPT
ClaudeClaude
GeminiGemini
DeepSeekDeepSeek
MistralMistral
Groq
One platform โ€ข Multiple AI models โ€ข Affordable student pricing

Welcome Back

Log in to your Student AI Hub account and continue your learning journey.

Forgot password?
or continue with

Don't have an account?

async function registerNew(){ try{ let j=await api('/api/auth/register',{ method:'POST', body:{ name:regnm.value.trim(), email:regem.value.trim(), password:regpw.value } }); token=j.token; localStorage.token=token; boot(); }catch(e){ regmsg.textContent=e.message; } } function loadRazorpay(){ return new Promise((resolve,reject)=>{ const s=document.createElement('script'); s.src='https://checkout.razorpay.com/v1/checkout.js'; s.onload=resolve;s.onerror=()=>reject(Error('Razorpay Checkout failed to load')); document.head.appendChild(s); }); } async function uploadDoc(){let f=file.files[0];if(!f)return;let fd=new FormData();fd.append('file',f);try{await api('/api/documents',{method:'POST',body:fd});chatmsg.textContent='Document uploaded';loadDocs()}catch(e){chatmsg.textContent=e.message}} async function loadDocs(){if(!token)return;let j=await api('/api/documents');doclist.innerHTML=j.map(x=>`

๐Ÿ“„ ${esc(x.original_name)} ${Math.round(x.size_bytes/1024)} KB ยท ${x.status}

`).join('')} async function loadAdmin(){let x=await api('/api/admin/overview');stats.innerHTML=`
Students: ${x.students}
Credits used: ${x.credits_used}
Outstanding: ${x.credits_outstanding}
Revenue: โ‚น${x.revenue_inr}
`;let rows=await api('/api/admin/students');students.innerHTML=''+rows.map(r=>``).join('')+'
NameEmailCreditsUsed
${esc(r.name)}${esc(r.email)}${r.credits}${r.lifetime_used}
'} function tab(t){['chat','docs','admin'].forEach(x=>document.getElementById(x).classList.toggle('hidden',x!==t));if(t==='admin')loadAdmin()} function esc(s){return String(s).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]))} if(token)boot().catch(()=>{localStorage.removeItem('token');token=null}) function chooseModel(provider,el){ prov.value=provider; document.querySelectorAll('.model-icon').forEach(x=>x.classList.remove('active')); el.classList.add('active'); }