${esc(t.title)}
Ofrues / autoritet${esc(t.provider)}
Fondi limit${esc(t.limitFund)}
Kërkesa, sasia, materiali${esc(t.requirements)}
Afati i mbarimit${esc(t.deadline)}
Hap tenderin ↗ · ${esc((t.matchedKeywords||[]).join(', '))}
const $=s=>document.querySelector(s); const esc=s=>String(s||'Nuk u gjet').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
function render(items){$('#list').innerHTML=items.length?items.map(t=>` Hap tenderin ↗ · ${esc((t.matchedKeywords||[]).join(', '))}${esc(t.title)}
Ofrues / autoritet${esc(t.provider)}Fondi limit${esc(t.limitFund)}Kërkesa, sasia, materiali${esc(t.requirements)}Afati i mbarimit${esc(t.deadline)}
Nuk ka tendera aktivë të përputhur ende.
'} async function load(){const [s,t]=await Promise.all([fetch('/api/status').then(r=>r.json()),fetch('/api/tenders').then(r=>r.json())]);$('#active').textContent=s.active;$('#new').textContent=s.lastCheck?new Date(s.lastCheck).toLocaleString('sq-AL'):'—';$('#last').textContent=s.lastCheck?new Date(s.lastCheck).toLocaleTimeString('sq-AL'):'—';render(t);if(s.lastError)$('#message').textContent='Kontrolli i fundit: '+s.lastError} $('#run').onclick=async()=>{$('#message').textContent='Po kontrolloj portalin…';await fetch('/api/run',{method:'POST'});await load();$('#message').textContent='Kontrolli përfundoi.'};$('#report').onclick=async()=>{const r=await fetch('/api/report');const x=await r.json();$('#message').textContent=`Raporti u ruajt me ${x.count} tendera te data/reports.`};load();setInterval(load,60000);