At your service for taxes, research, business, homework, writing, and anything else.
Help with my taxes
Help with homework
Business plan
Generate an image
AXON · Created by Carson Powers · Free Plan
AX
Plans
Billed monthly - cancel anytime
Free$0
10 chats/day · Full AI · Tax help
Basic
$20/mo
$216/yr - save $24
65/day · Voice · 12 languages · Uploads
Pro
$50/mo
$540/yr - save $60
115/day · Voice · Languages · Save · Personality
Unlimited
$75/mo
$810/yr - save $90
Unlimited · All features · Priority · Images
Annual plans require full 12-month payment upfront. No refunds.
AX
Reviews
WRITE A REVIEW
Rating *
★★★★★
Name *
Review *
0/300
OVERALL RATING
AX
About
AX
Axon
Your intelligent AI assistant
CREATED BY
Carson Powers
Built with vision. Powered by AI.
ABOUT THE CREATOR
"I am a young coder and website designer who is very interested in AI. I made Axon to help people - for people that are interested in things like me, or not."
SMARTER THAN CHATGPT
Axon outperforms ChatGPT on reading comprehension, writing quality, instruction following, and coding accuracy.
READING
Higher scores on complex documents.
WRITING
More natural, precise writing.
CODING
Outperforms on coding benchmarks.
WHAT IS AXON
Axon is a powerful AI assistant that helps with taxes, homework, business, coding, writing, math, research, creative work, and everyday questions. Axon remembers you across conversations.
CAPABILITIES
🧾
Tax Help
Returns, deductions
📚
Homework
Any subject
💼
Business
Strategy, proposals
💻
Coding
Any language
🌎
Web Search
Real-time info
🧠
Memory
Remembers you
🎨
Image Gen
AI illustrations
🔊
Voice Mode
Speaks responses
AXON v6.0 - Carson Powers - All Rights Reserved
AX
Settings
CURRENT PLAN
Free
10 chats left today
ACTIVATE PLAN
Enter your activation code from Carson Powers
CONVERSATION
AXON VOICE
Speak responses aloud
Optional - off by default
Best male voice: iPhone Settings - Accessibility - Spoken Content - Voices - English - Download Daniel (Enhanced)
PICK A VOICE
Enable voice first
TONE
🎙
Deep
Low masculine
🔊
Normal
Natural
✨
Clear
Crisp
🐢
Slow
Easy follow
SPEED
1.0x
ADMIN MODE
Enter admin code for unlimited free access
Admin active - go to Admin tab to generate codes
AXON v6.0 - Carson Powers
AD
Admin PanelCarson Powers Only
GENERATE ACTIVATION CODE
User name
Plan
FOR
SEND THIS CODE
CODES LOG
No codes yet.
ALERTS
No alerts yet.
STATS
-
Generate Image
Describe what you want Axon to illustrate
💳
Subscribe with Stripe
Plan·$0
Annual plan - full year payment required upfront.
HOW TO PAY
1
Click the Pay with Stripe button below and complete payment
2
Include your Request Code in the Stripe notes:
3
Carson Powers sends you an activation code after payment confirmed
4
Enter it in Settings - Activate Plan
Plan activates instantly once you enter your code.
Choose Language
Saved Conversations
Save current chat as:
SAVED CHATS
Custom Personality
Tell Axon how you want him to respond
Axon Memory
Things Axon remembers about you
Reply to Review
REVIEW FROM
var KEY="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";
var MODEL="claude-sonnet-4-20250514";
var ADMIN_CODE="157";
var BIN_ID="69b5b951b7ec241ddc6b2beb";
var BIN_KEY="$2a$10$z0QxyHwqNO1j1EKug79qQeUh.sZ8jSjuio.pyTLGR3BttrOPpr8jW";
var SYSTEM="You are Axon a helpful AI assistant created by Carson Powers. Be warm conversational and natural. Help with any topic including taxes homework business coding writing math advice and casual chat. When users introduce themselves respond warmly and remember what they tell you. Never say you are Claude or mention Anthropic. You were made by Carson Powers.";
var PLANS={
free:{name:"Free",price:"$0",color:"#6b7280",daily:5,upload:true,voice:false,langs:false,save:false,pers:false,priority:false},
basic:{name:"Basic",price:"$20",color:"#5BBFCF",daily:50,upload:true,voice:true,langs:true,save:false,pers:false,priority:false},
pro:{name:"Pro",price:"$50",color:"#8B9FD4",daily:150,upload:true,voice:true,langs:true,save:true,pers:true,priority:false},
unlimited:{name:"Unlimited",price:"$75",color:"#C9A96E",daily:9999,upload:true,voice:true,langs:true,save:true,pers:true,priority:true}
};
var ANNUAL={basic:{total:216,save:24},pro:{total:540,save:60},unlimited:{total:810,save:90}};
var curPlan="free",isAdmin=false,planCycle="mo";
var chatHistory=[],savedMsgs=[],pendingFiles=[],isBusy=false;
var starRating=0,allReviews=[],counts={};
var voiceOn=false,voiceRate=1,voiceIdx=0,voicePitch=0.85,proOn=false;
var curLang="English",personality="",memory={};
var savedConvos=[],actCodes={},admLog=[],alerts=[];
function D(id){return document.getElementById(id);}
function todayKey(){return new Date().toISOString().slice(0,10);}
function curP(){
if(isAdmin){return {name:"Admin",price:"$75",color:"#C9A96E",daily:9999,upload:true,voice:true,langs:true,save:true,pers:true,priority:true};}
return PLANS[curPlan]||PLANS.free;
}
function getLeft(){var p=curP();var c=counts[todayKey()]||0;return p.daily===9999?"Unlimited":Math.max(0,p.daily-c);}
function bumpCount(){counts[todayKey()]=(counts[todayKey()]||0)+1;}
function showErr(m){var e=D("err-bar");if(!e)return;e.style.display="block";var et=D("err-txt");if(et)et.textContent=m;var ab=D("alert-btn");if(ab){ab.textContent="Notify Carson";ab.disabled=false;ab.style.color="#f87171";}var am=D("alert-msg");if(am)am.style.display="none";}
function hideErr(){var e=D("err-bar");if(e)e.style.display="none";}
function showToast(m){var t=D("toast");if(!t){t=document.createElement("div");t.id="toast";t.style.cssText="position:fixed;bottom:70px;left:50%;transform:translateX(-50%);background:rgba(13,16,23,0.97);border:1px solid rgba(255,255,255,0.1);color:#ddd8cc;padding:8px 16px;border-radius:99px;font-size:13px;z-index:9999;pointer-events:none;white-space:nowrap";document.body.appendChild(t);}t.textContent=m;t.style.opacity="1";clearTimeout(t._t);t._t=setTimeout(function(){t.style.opacity="0";},2500);}
function goTo(id){
var all=["scr-chat","scr-plans","scr-reviews","scr-about","scr-settings","scr-admin"];
for(var i=0;idata.expiry){curPlan="free";localStorage.removeItem("ax_active_plan");showErr("Your "+PLANS[data.plan].name+" plan has expired. Renew via Plans tab.");}
else{curPlan=data.plan;}
}catch(e){curPlan="free";}
}
function genCode(){
if(!isAdmin)return;
var uname=(D("adm-uname")||{value:""}).value.trim();
var sel=(D("adm-psel")||{value:"basic_mo"}).value;
var isYr=sel.indexOf("_yr")!==-1;
var planKey=sel.replace("_mo","").replace("_yr","");
var chars="ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
var code="";
for(var i=0;i<12;i++){if(i===4||i===8)code+="-";code+=chars[Math.floor(Math.random()*chars.length)];}
var days=isYr?365:30;
var expiry=Date.now()+(days*24*60*60*1000);
var expDate=new Date(expiry).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"});
var planLabel=PLANS[planKey].name+(isYr?" Annual":" Monthly")+" - expires "+expDate;
var entry={plan:planKey,expiry:expiry,yearly:isYr,name:uname||"",date:new Date().toLocaleDateString()};
// Save to JSONBin so ANY device can activate
var genBtn=D("adm-gen-btn");if(genBtn){genBtn.textContent="Saving...";genBtn.disabled=true;}
doXHR("https://api.jsonbin.io/v3/b/"+BIN_ID+"/latest","GET",{"X-Master-Key":BIN_KEY},null,function(err,text){
var current={reviews:[],alerts:[],codes:{}};
try{if(!err){var d=JSON.parse(text);current=d.record||current;}}catch(e){}
if(!current.codes)current.codes={};
current.codes[code]=entry;
// Also keep local copy
actCodes[code]=entry;
try{localStorage.setItem("ax_act_codes",JSON.stringify(actCodes));}catch(e){}
doXHR("https://api.jsonbin.io/v3/b/"+BIN_ID,"PUT",{"Content-Type":"application/json","X-Master-Key":BIN_KEY},JSON.stringify(current),function(err2){
if(genBtn){genBtn.textContent="Generate Code";genBtn.disabled=false;}
if(err2){showToast("Warning: code saved locally only");}
});
});
try{localStorage.setItem("ax_last_code",JSON.stringify({code:code,name:uname||"",plan:planLabel}));}catch(e){}
var rn=D("adm-rname");if(rn)rn.textContent=uname?"For: "+uname:"(no name)";
var rc2=D("adm-rcode");if(rc2)rc2.textContent=code;
var rp=D("adm-rplan");if(rp)rp.textContent=planLabel;
var rs=D("adm-result");if(rs)rs.style.display="block";
admLog.unshift({code:code,name:uname||"unnamed",plan:planLabel,date:new Date().toLocaleDateString()});
try{localStorage.setItem("ax_adm_log",JSON.stringify(admLog));}catch(e){}
renderAdmLog();
var un=D("adm-uname");if(un)un.value="";
}
function admCopy(){var el=D("adm-rcode");if(!el)return;if(navigator.clipboard)navigator.clipboard.writeText(el.textContent).then(function(){showToast("Copied!");});}
function admShare(){var code=(D("adm-rcode")||{textContent:""}).textContent;var plan=(D("adm-rplan")||{textContent:""}).textContent;var msg="Your Axon activation code: "+code+" ("+plan+"). Enter it in Axon Settings - Activate Plan.";if(navigator.share)navigator.share({text:msg});else if(navigator.clipboard)navigator.clipboard.writeText(msg).then(function(){showToast("Message copied - paste and send!");});}
function renderAdmLog(){
var list=D("adm-log");if(!list)return;
if(!admLog.length){list.innerHTML='
No codes yet.
';return;}
var h="";
for(var i=0;i'
+'
'
+'
'+e.name+'
'
+'
'+e.date+'
'
+'
'
+'
'+e.code+'
'
+'
'+e.plan+'
'
+'
';
}
list.innerHTML=h;
list.onclick=function(ev){var c=ev.target.getAttribute("data-copy");if(c&&navigator.clipboard)navigator.clipboard.writeText(c).then(function(){showToast("Copied!");});};
}
function clearLog(){
admLog=[];
try{localStorage.removeItem("ax_adm_log");localStorage.removeItem("ax_last_code");}catch(e){}
var rs=D("adm-result");if(rs)rs.style.display="none";
renderAdmLog();showToast("Log cleared");
}
function refreshStats(){
try{var ac=localStorage.getItem("ax_act_codes");if(ac)actCodes=JSON.parse(ac);}catch(e){}
try{var al=localStorage.getItem("ax_adm_log");if(al)admLog=JSON.parse(al);}catch(e){}
try{var lc=JSON.parse(localStorage.getItem("ax_last_code")||"null");if(lc){var rn=D("adm-rname");var rc2=D("adm-rcode");var rp=D("adm-rplan");var rs=D("adm-result");if(rn)rn.textContent=lc.name?"For: "+lc.name:"(no name)";if(rc2)rc2.textContent=lc.code;if(rp)rp.textContent=lc.plan;if(rs)rs.style.display="block";}}catch(e){}
renderAdmLog();
loadAlerts();
var el=D("adm-stats");if(!el)return;
try{var active=Object.keys(actCodes).length;el.innerHTML='Active codes: '+active+' Generated: '+admLog.length+' Reviews: '+allReviews.length+'';}catch(e){el.textContent="-";}
}
function sendAlert(){
var ab=D("alert-btn"),am=D("alert-msg");
if(ab){ab.textContent="Sending...";ab.disabled=true;}
var entry={id:Date.now(),msg:"Credits ran out",time:new Date().toLocaleString("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}),read:false};
try{var local=JSON.parse(localStorage.getItem("ax_alerts")||"[]");local.unshift(entry);if(local.length>30)local=local.slice(0,30);localStorage.setItem("ax_alerts",JSON.stringify(local));}catch(e){}
if(ab){ab.textContent="Notified!";ab.style.background="rgba(74,222,128,0.1)";ab.style.borderColor="rgba(74,222,128,0.3)";ab.style.color="#4ade80";}
if(am){am.textContent="Carson has been notified!";am.style.display="block";am.style.color="#4ade80";}
}
function loadAlerts(){
try{var local=JSON.parse(localStorage.getItem("ax_alerts")||"[]");alerts=local;renderAlerts();}catch(e){}
}
function renderAlerts(){
var list=D("adm-alerts");if(!list)return;
var unread=0;for(var i=0;i0?String(unread):"";
if(!alerts.length){list.innerHTML='
No alerts yet.
';return;}
var h="";
for(var i=0;i'
+'
Credits ran out
'
+'
'+a.time+'
'
+(a.read?'':'
NEW
')
+'
';
}
list.innerHTML=h;
}
function markAlertsRead(){for(var i=0;i/g,">");
return'
');
t=t.replace(/\n\n/g,'');
t=t.replace(/\n/g,' ');
return t;
}catch(e){return t;}
}
function addBubble(role,text,svgData,imgPrompt){
try{
var w=D("welcome");if(w&&w.parentNode)w.parentNode.removeChild(w);
var msgs=D("chat-msgs");if(!msgs)return;
var wrap=document.createElement("div");wrap.className="bubble";
wrap.style.cssText="display:flex;gap:8px;flex-direction:"+(role==="user"?"row-reverse":"row")+";align-self:"+(role==="user"?"flex-end":"flex-start")+";max-width:90%";
var av=document.createElement("div");
av.style.cssText="width:26px;height:26px;border-radius:6px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:9px;font-family:monospace;font-weight:700;"+(role==="assistant"?"background:linear-gradient(135deg,#5BBFCF,#8B9FD4);color:#07090f":"background:#131720;border:1px solid rgba(255,255,255,0.07);color:#5a5750");
av.textContent=role==="assistant"?"AX":"Y";
var bub=document.createElement("div");
bub.style.cssText="padding:11px 13px;font-size:14px;line-height:1.8;max-width:100%;word-break:break-word;border-radius:12px;"+(role==="assistant"?"border-top-left-radius:3px;background:#0d1017;border:1px solid rgba(255,255,255,0.07)":"border-top-right-radius:3px;background:rgba(14,22,34,0.95);border:1px solid rgba(91,191,207,0.12)");
if(imgPrompt&&svgData){
var cap=document.createElement("div");cap.style.cssText="font-size:11px;color:#5a5750;font-family:monospace;margin-bottom:8px";cap.textContent='Image: "'+imgPrompt+'"';
var svgW=document.createElement("div");svgW.style.cssText="max-width:300px;border-radius:9px;overflow:hidden;border:1px solid rgba(255,255,255,0.07)";svgW.innerHTML=svgData;
bub.appendChild(cap);bub.appendChild(svgW);
} else if(role==="assistant"){bub.innerHTML=fmt(text||"");}
else{bub.style.whiteSpace="pre-wrap";bub.textContent=text||"";}
wrap.appendChild(av);wrap.appendChild(bub);msgs.appendChild(wrap);msgs.scrollTop=msgs.scrollHeight;
if(role==="assistant"&&text){try{speakText(text);}catch(e){}}
}catch(e){
try{var m=D("chat-msgs");if(m){var d=document.createElement("div");d.style.cssText="padding:12px;color:#ddd8cc;font-size:14px;line-height:1.8;white-space:pre-wrap";d.textContent=text||"";m.appendChild(d);m.scrollTop=m.scrollHeight;}}catch(e2){}
}
}
function addTyping(){
var w=D("welcome");if(w&&w.parentNode)w.parentNode.removeChild(w);
var msgs=D("chat-msgs");if(!msgs)return;
var t=document.createElement("div");t.id="typing";t.style.cssText="display:flex;gap:8px;align-self:flex-start";
t.innerHTML='
AX
';
msgs.appendChild(t);msgs.scrollTop=msgs.scrollHeight;
}
function rmTyping(){var t=D("typing");if(t&&t.parentNode)t.parentNode.removeChild(t);}
function needsSearch(hist){
if(!hist||!hist.length)return false;
var last=hist[hist.length-1];
var txt=(typeof last.content==="string"?last.content:"").toLowerCase();
var tr=["news","today","latest","current","price","score","weather","who won","2025","2026","this week","stock","crypto"];
for(var i=0;i40?chatHistory.slice(-40):chatHistory;
var payload={model:MODEL,max_tokens:maxTok,system:sys,messages:hist};
if(needsSearch(hist))payload.tools=[{type:"web_search_20250305",name:"web_search"}];
return payload;
}
function sendMsg(){
if(isBusy)return;
var inp=D("chat-inp");if(!inp)return;
var text=inp.value.trim();
if(!text&&pendingFiles.length===0)return;
var p=curP();var c=counts[todayKey()]||0;
if(c>=p.daily){showErr("Daily limit reached. Upgrade in Plans.");return;}
hideErr();
var files=pendingFiles.slice();pendingFiles=[];updateFilePrev();
inp.value="";inp.style.height="auto";
isBusy=true;
addBubble("user",text);savedMsgs.push({role:"user",text:text});bumpCount();
var parts=[];
for(var i=0;i0)raw=raw.slice(si);
chatHistory.push({role:"assistant",content:"[Image: "+prompt+"]"});
addBubble("assistant",raw,prompt);
savedMsgs.push({role:"assistant",svgData:raw,imgPrompt:prompt});
saveChat();
}catch(e){addBubble("assistant","Image generation failed.");}
});
}
function addFile(inp,type){
var files=inp.files;
for(var i=0;imax||h>max){if(w>h){h=Math.round(h*max/w);w=max;}else{w=Math.round(w*max/h);h=max;}}
canvas.width=w;canvas.height=h;
var ctx=canvas.getContext("2d");
ctx.drawImage(img,0,0,w,h);
var quality=0.85;
var dataUrl=canvas.toDataURL("image/jpeg",quality);
// If still too big reduce quality
while(dataUrl.length>5000000&&quality>0.3){quality-=0.1;dataUrl=canvas.toDataURL("image/jpeg",quality);}
URL.revokeObjectURL(url);
pendingFiles.push({type:"image",data:dataUrl.split(",")[1],name:f.name,mt:"image/jpeg"});
updateFilePrev();
};
img.src=url;
} else {
var r=new FileReader();
r.onload=function(ev){pendingFiles.push({type:"document",data:ev.target.result.split(",")[1],name:f.name,mt:f.type||"application/pdf"});updateFilePrev();};
r.readAsDataURL(f);
}
})(files[i]);
}
inp.value="";
}
function updateFilePrev(){
var c=D("file-prev");if(!c)return;
if(!pendingFiles.length){c.style.display="none";c.innerHTML="";return;}
c.style.display="flex";var h="";
for(var i=0;i'+(pendingFiles[i].type==="image"?"🖼":"📎")+''+pendingFiles[i].name+'x
';
c.innerHTML=h;
}
function rmFile(i){pendingFiles.splice(i,1);updateFilePrev();}
function toggleVoice(){voiceOn=!voiceOn;var b=D("btn-voice");if(b)b.style.opacity=voiceOn?"1":"0.5";showToast(voiceOn?"Voice on":"Voice off");saveVS();}
function toggleVoiceSetting(){
voiceOn=!voiceOn;updateVoiceUI();
if(voiceOn){setTimeout(loadVoiceList,200);setTimeout(loadVoiceList,1200);}
saveVS();showToast(voiceOn?"Voice on":"Voice off");
}
function updateVoiceUI(){
var tog=D("voice-tog"),knob=D("voice-knob"),opts=D("voice-opts"),btn=D("btn-voice");
if(tog)tog.style.background=voiceOn?"linear-gradient(135deg,#5BBFCF,#8B9FD4)":"#131720";
if(knob){knob.style.left=voiceOn?"23px":"3px";knob.style.background=voiceOn?"#07090f":"#5a5750";}
if(opts)opts.style.display=voiceOn?"block":"none";
if(btn)btn.style.opacity=voiceOn?"1":"0.5";
}
function loadVoiceList(){
if(!window.speechSynthesis)return;
var container=D("voice-list");if(!container)return;
var all=window.speechSynthesis.getVoices();
if(!all.length){
container.innerHTML='
Loading voices...
';
window.speechSynthesis.onvoiceschanged=function(){window.speechSynthesis.onvoiceschanged=null;loadVoiceList();};
return;
}
var FEMALE=["samantha","victoria","karen","kate","susan","tessa","alice","laura","alva","anna","sara","amelie","fiona","nora","ava","allison","sophie","veena","zoe","kyoko","moira","kathy","vicki"];
var MALE=["daniel","aaron","arthur","oliver","fred","thomas","james","alex","tom","gordon","lee","bruce","nathan","wayne","ryan","reed","martin"];
function getG(n){n=n.toLowerCase();for(var i=0;iNo voices found.';
}
function setTone(mode){
var tones={deep:{pitch:0.4,rate:0.85},normal:{pitch:0.85,rate:1},clear:{pitch:1.1,rate:1.05},slow:{pitch:0.5,rate:0.75}};
var t=tones[mode]||tones.normal;
voicePitch=t.pitch;voiceRate=t.rate;
var ri=D("voice-rate-inp");if(ri)ri.value=voiceRate;
var rl=D("voice-rate-lbl");if(rl)rl.textContent=voiceRate.toFixed(1)+"x";
var modes=["deep","normal","clear","slow"];
for(var i=0;i]+>/g,"").replace(/[*#]/g,"").trim();
if(!plain||plain.length<2)return;
if(plain.length>600)plain=plain.slice(0,600)+"...";
var all=window.speechSynthesis.getVoices();
var eng=all.filter(function(v){return v.lang.indexOf("en")===0;});
if(!eng.length)eng=all;
var u=new SpeechSynthesisUtterance(plain);
if(eng[voiceIdx])u.voice=eng[voiceIdx];
u.rate=voiceRate;u.pitch=voicePitch;u.volume=1;
window.speechSynthesis.speak(u);
}catch(e){}
}
function setLang(l){curLang=l;closeM("lang-modal");showToast("Language: "+l);}
function togglePro(){proOn=!proOn;var b=D("btn-pro");if(b){b.style.opacity=proOn?"1":"0.5";b.style.color=proOn?"#C9A96E":"#5a5750";}showToast(proOn?"Pro Mode ON":"Pro Mode off");}
function savePers(){var i=D("pers-inp");if(i)personality=i.value.trim();closeM("pers-modal");showToast("Personality saved!");}
function extractMemory(userMsg,reply){
var pats=[{re:/my name is ([a-zA-Z]+)/i,key:"name"},{re:/i am (\d+) years old/i,key:"age"},{re:/i live in ([a-zA-Z ,]+)/i,key:"location"},{re:/i work (?:as |at )?([a-zA-Z ]+)/i,key:"job"}];
for(var i=0;iNo memories yet.';return;}
var h="";
for(var i=0;i'
+'
'+keys[i].toUpperCase()+'
'+memory[keys[i]]+'
'
+'x';
}
list.innerHTML=h;
var spans=list.querySelectorAll("[data-fk]");
for(var j=0;jNo saved conversations.';return;}
var h="";
for(var i=0;i'
+'
'+savedConvos[i].name+'
'+savedConvos[i].date+'
'
+'x';
}
list.innerHTML=h;
list.onclick=function(ev){
var el=ev.target;
var load=null,del=null;
while(el&&el!==list){
if(el.getAttribute("data-load"))load=el.getAttribute("data-load");
if(el.getAttribute("data-del"))del=el.getAttribute("data-del");
el=el.parentNode;
}
if(load!==null){
var idx=parseInt(load);var s=savedConvos[idx];
if(!s||!confirm("Load this chat?"))return;
chatHistory=JSON.parse(JSON.stringify(s.history));savedMsgs=JSON.parse(JSON.stringify(s.msgs));
var msgs=D("chat-msgs");if(!msgs)return;
var w=D("welcome");if(w&&w.parentNode)w.parentNode.removeChild(w);
msgs.innerHTML="";
for(var i=0;i
AX
Good day. I am Axon.
At your service for anything.
';
goTo("scr-chat");
}
function setStar(n){starRating=n;for(var i=1;i<=5;i++){var el=D("s"+i);if(el){el.style.opacity=i<=n?"1":"0.3";el.style.color=i<=n?"#C9A96E":"#ddd8cc";}}}
function submitRv(){
var nameEl=D("rv-name"),cmtEl=D("rv-comment"),errEl=D("rv-err");
if(!nameEl||!cmtEl||!errEl)return;
var name=nameEl.value.trim(),cmt=cmtEl.value.trim();
if(!starRating){errEl.textContent="Please select a rating.";errEl.style.display="block";return;}
if(!name){errEl.textContent="Please enter your name.";errEl.style.display="block";return;}
if(!cmt){errEl.textContent="Please write a review.";errEl.style.display="block";return;}
errEl.style.display="none";
var rv={id:Date.now(),name:name,comment:cmt,rating:starRating,date:new Date().toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),reply:"",hidden:false};
allReviews.unshift(rv);nameEl.value="";cmtEl.value="";D("rv-chars").textContent="0/300";starRating=0;
for(var i=1;i<=5;i++){var el=D("s"+i);if(el){el.style.opacity="0.3";el.style.color="#ddd8cc";}}
renderReviews();saveReviews();
}
function renderReviews(){
var list=D("rv-list");if(!list)return;
if(!allReviews.length){list.innerHTML='
No reviews yet. Be the first!
';var avg=D("rv-avg");if(avg)avg.style.display="none";return;}
var avgEl=D("rv-avg");if(avgEl)avgEl.style.display="block";
var tot=0;for(var i=0;i[Comment removed]':'
'+r.comment+'
';
var rep=r.reply?'
REPLY FROM CARSON POWERS
'+r.reply+'
':"";
var adm=isAdmin?'':"";
h+='
'+r.name+'
'+stars+'
'+r.date+'
'+cmt+rep+adm+'
';
}
list.innerHTML=h;
list.onclick=function(ev){
var btn=ev.target;if(!btn||btn.tagName!=="BUTTON")return;
var ri=btn.getAttribute("data-reply");var hi=btn.getAttribute("data-hide");var di=btn.getAttribute("data-del");
if(ri!==null){var rv2=allReviews[parseInt(ri)];if(!rv2)return;D("rp-name").textContent=rv2.name;D("rp-comment").textContent=rv2.comment;D("rp-text").value=rv2.reply||"";D("rp-idx").value=ri;D("rp-err").style.display="none";openM("reply-modal");}
if(hi!==null){allReviews[parseInt(hi)].hidden=!allReviews[parseInt(hi)].hidden;saveReviews();renderReviews();}
if(di!==null){if(confirm("Delete this review permanently?")){allReviews.splice(parseInt(di),1);saveReviews();renderReviews();}}
};
}
function saveReviews(){
// Save locally first
try{localStorage.setItem("ax_reviews",JSON.stringify(allReviews));}catch(e){}
// Then save to JSONBin
doXHR("https://api.jsonbin.io/v3/b/"+BIN_ID,"PUT",{"Content-Type":"application/json","X-Master-Key":BIN_KEY},JSON.stringify({reviews:allReviews,alerts:alerts}),function(){});
}
function loadReviews(){
// Load from localStorage first for instant display
try{var lr=localStorage.getItem("ax_reviews");if(lr){allReviews=JSON.parse(lr);renderReviews();}}catch(e){}
// Then load from JSONBin (authoritative)
doXHR("https://api.jsonbin.io/v3/b/"+BIN_ID+"/latest","GET",{"X-Master-Key":BIN_KEY},null,function(err,text){
if(err)return;
try{var d=JSON.parse(text);if(d.record&&d.record.reviews){allReviews=d.record.reviews;try{localStorage.setItem("ax_reviews",JSON.stringify(allReviews));}catch(e){}renderReviews();}}catch(e){}
});
}
function submitReply(){
var idxEl=D("rp-idx"),txtEl=D("rp-text"),errEl=D("rp-err");if(!idxEl||!txtEl)return;
var txt=txtEl.value.trim();if(!txt){if(errEl){errEl.textContent="Please write a reply.";errEl.style.display="block";}return;}
if(errEl)errEl.style.display="none";
var idx=parseInt(idxEl.value);if(allReviews[idx]){allReviews[idx].reply=txt;saveReviews();renderReviews();closeM("reply-modal");}
}
window.onload=function(){
checkExpiry();
loadVS();
goTo("scr-chat");
loadChat();
loadReviews();
try{var m=localStorage.getItem("ax_memory");if(m)memory=JSON.parse(m);}catch(e){}
try{var sc=localStorage.getItem("ax_convos");if(sc)savedConvos=JSON.parse(sc);}catch(e){}
try{var ac=localStorage.getItem("ax_act_codes");if(ac)actCodes=JSON.parse(ac);}catch(e){}
try{var al=localStorage.getItem("ax_adm_log");if(al)admLog=JSON.parse(al);}catch(e){}
updateUI();
var inp=D("chat-inp");
if(inp){
inp.addEventListener("input",function(){autoResize(this);});
inp.addEventListener("keydown",function(e){if(e.key==="Enter"&&!e.shiftKey){e.preventDefault();sendMsg();}});
}
var rc=D("rv-comment");
if(rc)rc.addEventListener("input",function(){var c=D("rv-chars");if(c)c.textContent=this.value.length+"/300";});
// Save on page close/refresh
window.onbeforeunload=function(){ saveChat(); };
};
};
};