AgxSkyRun
Satellite Intelligence Platform
LIVE OPERATIONS
--:--:--
UTC TIME
--:--:--
WAT LOCAL
3
HIGH
7
MEDIUM
12
MONITORED
DSA
Satellite Sources9 ONLINE
Intelligence Overlays
Thermal Hotspots
Border Zones
Maritime Watch
Forest Penetration
Tracked Movements
AIS Vessel Tracking
THERMAL ANOMALY DETECTED - BORNO/CHAD BORDER - CONFIDENCE: 94%
6ZOOM
LAT: 9.0820NLON: 8.6753ERES: 0.5m/px
Intel FeedLIVE
Thermal Signature Scale
-20C0C20C40C60C80C+
3
Active Threats
9
Sats Tracking
5
Border Alerts
94%
Coverage
SENTINEL-2: LIVE
VIIRS: ACTIVE
MODIS: 3HR DELAY
AIS: LIVE
NOAA-20: LIVE
AES-256 ENCRYPTED
https://agxskyrun.com.ng
const SATELLITES=[{id:'sentinel2',name:'SENTINEL-2 A/B',provider:'ESA (Free)',status:'live',capabilities:['optical','free'],res:'10m/px',revisit:'5 days',active:true},{id:'landsat9',name:'LANDSAT-9',provider:'USGS/NASA (Free)',status:'live',capabilities:['optical','thermal','free'],res:'30m/px',revisit:'16 days',active:false},{id:'viirs',name:'VIIRS / NOAA-20',provider:'NOAA (Free)',status:'live',capabilities:['thermal','free'],res:'375m/px',revisit:'12hr',active:false},{id:'modis',name:'MODIS Terra/Aqua',provider:'NASA (Free)',status:'delayed',capabilities:['thermal','free'],res:'1km/px',revisit:'1-2 days',active:false},{id:'goes16',name:'GOES-16 / Meteosat',provider:'NOAA/EUMETSAT (Free)',status:'live',capabilities:['thermal','free'],res:'0.5km',revisit:'10min',active:false},{id:'planet',name:'PLANET SkySat',provider:'Planet (Paid)',status:'live',capabilities:['optical','sar'],res:'0.5m/px',revisit:'Daily',active:false},{id:'maxar',name:'MAXAR WorldView-3',provider:'Maxar (Paid)',status:'live',capabilities:['optical','thermal'],res:'0.3m/px',revisit:'<1 day',active:false},{id:'iceye',name:'ICEYE SAR',provider:'ICEYE (Paid)',status:'live',capabilities:['sar'],res:'1m/px',revisit:'3hr',active:false},{id:'spire',name:'SPIRE Maritime AIS',provider:'Spire (Paid)',status:'live',capabilities:['sar'],res:'AIS',revisit:'Continuous',active:false}]; const INTEL=[{id:1,type:'HIGH',title:'Thermal Cluster - Sambisa Forest',desc:'VIIRS + MODIS co-detection of 12+ thermal signatures consistent with armed camp.',time:'14:23 UTC',lat:11.5,lon:13.3,confidence:'94%',confClass:'conf-high',class:'threat-high'},{id:2,type:'HIGH',title:'Vehicle Movement - Niger Border',desc:'SAR change detection shows 6-8 vehicle tracks crossing Maradi corridor.',time:'13:47 UTC',lat:13.9,lon:8.3,confidence:'87%',confClass:'conf-high',class:'threat-high'},{id:3,type:'HIGH',title:'Dark Vessel - Gulf of Guinea',desc:'AIS transponder disabled. Vessel matching tanker profile heading Lagos EEZ.',time:'13:12 UTC',lat:3.9,lon:3.4,confidence:'91%',confClass:'conf-high',class:'threat-high'},{id:4,type:'MEDIUM',title:'Forest Clearing - Cross River',desc:'NDVI anomaly. 3.2km new canopy loss in 48hr window. Possible logistics base.',time:'12:55 UTC',lat:6.0,lon:8.4,confidence:'72%',confClass:'conf-med',class:'threat-medium'},{id:5,type:'MEDIUM',title:'Night Thermal - Lake Chad Basin',desc:'Day/Night Band shows 7 discrete light clusters at known extremist areas.',time:'02:14 UTC',lat:13.3,lon:14.2,confidence:'78%',confClass:'conf-med',class:'threat-medium'},{id:6,type:'MEDIUM',title:'Weapons Cache - Sokoto (Unconfirmed)',desc:'Metallic scatter pattern detected. Consistent with vehicle-sized objects under tarp.',time:'11:30 UTC',lat:13.0,lon:5.2,confidence:'65%',confClass:'conf-med',class:'threat-medium'},{id:7,type:'LOW',title:'Maritime Patrol - Sector 7 Clear',desc:'Scheduled patrol vessel NICOBAT-4 confirmed on station. AIS nominal.',time:'09:45 UTC',lat:3.8,lon:6.0,confidence:'99%',confClass:'conf-low',class:'threat-low'},{id:8,type:'CLEAR',title:'Benin Border - All Sectors Nominal',desc:'Standard commercial traffic. 3 registered convoys. No anomalies detected.',time:'08:22 UTC',lat:7.5,lon:2.7,confidence:'98%',confClass:'conf-low',class:'threat-low'}]; const THREATS=[{lat:11.5,lon:13.3,type:'high',label:'THERMAL CAMP',color:'#ff2244'},{lat:13.9,lon:8.3,type:'high',label:'VEHICLE CONVOY',color:'#ff2244'},{lat:3.9,lon:3.4,type:'high',label:'DARK VESSEL',color:'#ff2244'},{lat:6.0,lon:8.4,type:'medium',label:'DEFORESTATION',color:'#ffaa00'},{lat:13.3,lon:14.2,type:'medium',label:'NIGHT LIGHTS',color:'#ffaa00'},{lat:13.0,lon:5.2,type:'medium',label:'CACHE UNCONF',color:'#ffaa00'},{lat:7.5,lon:2.7,type:'clear',label:'NOMINAL',color:'#00ff88'},{lat:3.8,lon:6.0,type:'clear',label:'PATROL OK',color:'#00ff88'}]; const ALERTS=['THERMAL ANOMALY DETECTED - BORNO/CHAD BORDER - CONFIDENCE: 94%','DARK VESSEL ALERT - GULF OF GUINEA - AIS TRANSPONDER DISABLED','MOVEMENT DETECTED - MARADI CORRIDOR - NIGER BORDER - 6 VEHICLES','NIGHT THERMAL CLUSTERS - LAKE CHAD BASIN - 7 SIGNATURES']; let map,alertIdx=0,layerStates={thermal:true,borders:true,maritime:true,forest:true,movements:true,ais:true}; function startup(){initMap();renderSats();renderIntel();initRadar();setInterval(updateClocks,1000);updateClocks();setInterval(()=>{alertIdx=(alertIdx+1)%ALERTS.length;document.getElementById('alertBanner').textContent=ALERTS[alertIdx];},6000);} function initMap(){ map=L.map('map',{center:[9.08,8.67],zoom:6,zoomControl:false,attributionControl:false}); L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',{maxZoom:18}).addTo(map); L.polygon([[4.27,2.68],[4.27,14.68],[13.9,14.68],[13.9,2.68]],{color:'#00e5ff',weight:1.5,fillOpacity:0,dashArray:'6 4',opacity:0.35}).addTo(map); THREATS.forEach(pt=>{ const el=document.createElement('div'); el.style.cssText=`width:${pt.type==='high'?18:14}px;height:${pt.type==='high'?18:14}px;border-radius:50%;border:2px solid ${pt.color};background:${pt.color}33;cursor:pointer;`; const icon=L.divIcon({html:el.outerHTML,className:'',iconSize:[18,18]}); L.marker([pt.lat,pt.lon],{icon}).addTo(map).bindTooltip(`${pt.label}`,{direction:'top'}).on('click',()=>openModal(pt)); }); [[13.5,3.5,14.2,5.5],[4.5,13.8,6.5,14.7],[13.3,13.8,14.0,14.7]].forEach(b=>{ L.rectangle([[b[0],b[1]],[b[2],b[3]]],{color:'#ffaa00',weight:1,fillOpacity:0.03,dashArray:'4 4',opacity:0.4}).addTo(map); }); map.on('mousemove',e=>{document.getElementById('dispLat').textContent=Math.abs(e.latlng.lat).toFixed(4)+(e.latlng.lat>=0?'N':'S');document.getElementById('dispLon').textContent=Math.abs(e.latlng.lng).toFixed(4)+(e.latlng.lng>=0?'E':'W');}); map.on('zoomend',()=>{document.getElementById('zoomVal').textContent=map.getZoom();document.getElementById('dispRes').textContent=(Math.pow(2,18-map.getZoom())*0.3).toFixed(1)+'m/px';}); connectWS(); } function connectWS(){ try{ const ws=new WebSocket('wss://agxskyrun.com.ng/ws/live'); ws.onmessage=e=>{ const d=JSON.parse(e.data); if(d.type==='thermal_update'&&d.points&&d.points.length>0){ d.points.forEach(p=>{ const el=document.createElement('div'); el.style.cssText='width:10px;height:10px;border-radius:50%;background:rgba(255,68,0,0.7);border:1px solid #ff4400;'; L.marker([p.lat,p.lon],{icon:L.divIcon({html:el.outerHTML,className:'',iconSize:[10,10]})}).addTo(map).bindTooltip('VIIRS THERMAL: '+Math.round(p.brightness)+'K'); }); addIntelCard('LIVE','VIIRS Thermal Feed Updated',''+d.count+' thermal anomalies detected over Nigeria','VIIRS SNPP','conf-med'); } }; ws.onerror=()=>setTimeout(connectWS,10000); ws.onclose=()=>setTimeout(connectWS,10000); }catch(e){} } function openModal(pt){ document.getElementById('modalTitle').textContent='THREAT: '+pt.label; document.getElementById('modalGrid').innerHTML=``; document.getElementById('modalOverlay').classList.add('open'); map.flyTo([pt.lat,pt.lon],9,{duration:1.5}); } function closeModal(){document.getElementById('modalOverlay').classList.remove('open');} document.getElementById('modalOverlay').addEventListener('click',e=>{if(e.target===e.currentTarget)closeModal();}); function addIntelCard(type,title,desc,source,confClass){ const feed=document.getElementById('intelFeed'); const card=document.createElement('div'); card.className='intel-card threat-'+(type==='HIGH'?'high':type==='MEDIUM'?'medium':'low'); card.innerHTML=`
${type} PRIORITY
JUST NOW
${title}
${desc}
${source}LIVE
`; feed.insertBefore(card,feed.firstChild); } function renderSats(){ document.getElementById('satList').innerHTML=SATELLITES.map(s=>`
${s.name}
${s.status.toUpperCase()}
${s.provider}
${s.res} - ${s.revisit} revisit
${s.capabilities.map(c=>`${c.toUpperCase()}`).join('')}
`).join(''); } function selectSat(id){SATELLITES.forEach(s=>s.active=s.id===id);renderSats();} function renderIntel(){ document.getElementById('intelFeed').innerHTML=INTEL.map(e=>`
${e.type} PRIORITY
${e.time}
${e.title}
${e.desc}
${e.source||'MULTI-SAT'}${e.confidence}
`).join(''); } function openIntelModal(id){ const e=INTEL.find(x=>x.id===id);if(!e)return; document.getElementById('modalTitle').textContent=e.title.toUpperCase(); document.getElementById('modalGrid').innerHTML=``; map.flyTo([e.lat,e.lon],9,{duration:1.5}); document.getElementById('modalOverlay').classList.add('open'); } function toggleLayer(l){ layerStates[l]=!layerStates[l]; const el=document.getElementById('toggle-'+l); const cls={thermal:'on-red',borders:'on-amber',maritime:'on',forest:'on-green',movements:'on-purple',ais:'on'}[l]; layerStates[l]?el.classList.add(cls):el.classList.remove(cls); } function setMapMode(mode){ document.querySelectorAll('.tool-btn').forEach(b=>b.classList.remove('active','thermal-active','sar-active')); const tiles={optical:'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',night:'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/VIIRS_Black_Marble/default/GoogleMapsCompatible_Level8/{z}/{y}/{x}.jpg',thermal:'https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_Land_Surface_Temp_Day/default/GoogleMapsCompatible_Level7/{z}/{y}/{x}.png',sar:'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',ndvi:'https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_NDVI_8Day/default/2024-01-01/GoogleMapsCompatible_Level7/{z}/{y}/{x}.png'}; map.eachLayer(l=>{if(l._url)map.removeLayer(l);}); L.tileLayer(tiles[mode]||tiles.optical,{maxZoom:18}).addTo(map); const btn={optical:null,night:'nightBtn',thermal:'thermalBtn',sar:'sarBtn',ndvi:'ndviBtn'}[mode]; if(btn){const b=document.getElementById(btn);if(b)b.classList.add(mode==='thermal'?'thermal-active':mode==='sar'?'sar-active':'active');} } function updateClocks(){ const n=new Date(); document.getElementById('utcClock').textContent=n.toUTCString().slice(17,25); document.getElementById('localClock').textContent=new Date(n.getTime()+3600000).toUTCString().slice(17,25); } function initRadar(){ const canvas=document.getElementById('radarCanvas'),ctx=canvas.getContext('2d'); let angle=0; function draw(){ ctx.clearRect(0,0,90,90); const cx=45,cy=45,r=42; ctx.beginPath();ctx.arc(cx,cy,r,0,Math.PI*2);ctx.fillStyle='rgba(0,229,255,0.05)';ctx.fill();ctx.strokeStyle='rgba(0,229,255,0.25)';ctx.lineWidth=1;ctx.stroke(); [28,18,9].forEach(rr=>{ctx.beginPath();ctx.arc(cx,cy,rr,0,Math.PI*2);ctx.strokeStyle='rgba(0,229,255,0.12)';ctx.stroke();}); ctx.strokeStyle='rgba(0,229,255,0.15)';ctx.beginPath();ctx.moveTo(cx,cy-r);ctx.lineTo(cx,cy+r);ctx.stroke();ctx.beginPath();ctx.moveTo(cx-r,cy);ctx.lineTo(cx+r,cy);ctx.stroke(); ctx.beginPath();ctx.moveTo(cx,cy);ctx.arc(cx,cy,r,angle,angle+Math.PI*0.4);ctx.fillStyle='rgba(0,229,255,0.08)';ctx.fill(); ctx.beginPath();ctx.moveTo(cx,cy);ctx.lineTo(cx+r*Math.cos(angle),cy+r*Math.sin(angle));ctx.strokeStyle='rgba(0,229,255,0.7)';ctx.lineWidth=1.5;ctx.stroke(); [[35,25],[58,50],[42,62],[65,35]].forEach(([bx,by])=>{ const bA=Math.atan2(by-cy,bx-cx);let diff=(angle-bA)%(Math.PI*2);if(diff<0)diff+=Math.PI*2; const fade=Math.max(0,1-diff/Math.PI);if(fade>0.01){ctx.beginPath();ctx.arc(bx,by,2.5,0,Math.PI*2);ctx.fillStyle=`rgba(0,255,136,${fade*0.9})`;ctx.fill();} }); angle+=0.03;if(angle>Math.PI*2)angle-=Math.PI*2;requestAnimationFrame(draw); } draw(); }