← back to Commercialrealestate
CRCP: soften dev-facing load errors + one-shot auto-retry on ranked.json & broker leads
00b81923aaaa200e403fb39baf080e50b9fa981e · 2026-08-06 16:17:18 -0700 · Steve Abrams
Files touched
Diff
commit 00b81923aaaa200e403fb39baf080e50b9fa981e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Aug 6 16:17:18 2026 -0700
CRCP: soften dev-facing load errors + one-shot auto-retry on ranked.json & broker leads
---
public/index.html | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/public/index.html b/public/index.html
index e60fdb5..529d57d 100644
--- a/public/index.html
+++ b/public/index.html
@@ -584,10 +584,10 @@
return '<a class="figli" href="'+esc(p.permalink)+'" target="_blank" rel="noopener noreferrer">'+thumb+'<span class="figb"><span class="figc">'+vid+cap+' ↗</span><span class="figm">'+(when?when+' · ':'')+'♥ '+(p.likes||0)+' · 💬 '+(p.comments||0)+'</span></span></a>'; }).join('');
return '<div class="figwrap"><div class="fighd">📷 @'+esc(h)+' · firm’s latest 3</div>'+items+'</div>'; }
// Ranked top brokers — expandable to spreadsheet-style current listings + Sold + per-address history.
- fetch('/api/leads/top?limit=40').then(r=>r.json()).then(async d=>{
+ (function loadBkLeads(_retry){ fetch('/api/leads/top?limit=40').then(r=>{ if(!r.ok) throw new Error('HTTP '+r.status); return r.json(); }).then(async d=>{
await firmIgReady;
const leads=d.leads||[];
- if(!leads.length){ bq('#bkleads').innerHTML='<div class="gate">no brokers (broker DB unavailable)</div>'; return; }
+ if(!leads.length){ bq('#bkleads').innerHTML='<div class="gate">No brokers to show yet.</div>'; return; }
bq('#bkleads').innerHTML=leads.map((l,i)=>{
const rows=(l.listings_json||[]).map(p=>'<tr class="mrow" data-addr="'+esc(p.address)+'" data-city="'+esc(p.city||'')+'">'
+'<td>'+esc(p.address)+'<div style="color:var(--mut);font-size:11px">'+esc(p.city||'')+(p.zip?' '+esc(p.zip):'')+'</div></td>'
@@ -609,7 +609,7 @@
const act=e.target.closest('[data-act]'); if(act){ if(act.dataset.act==='contact') openContact(lead.dataset.name, lead.dataset.id); else brokerSold(lead.dataset.id, act); return; }
if(e.target.closest('.lhead')) lead.classList.toggle('open');
};
- }).catch(()=>{ bq('#bkleads').innerHTML='<div class="gate">broker DB unavailable</div>'; });
+ }).catch(e=>{ if(_retry>0){ setTimeout(()=>loadBkLeads(_retry-1),1500); return; } bq('#bkleads').innerHTML='<div class="gate">Broker data is temporarily unavailable — please refresh.</div>'; console.warn('leads/top load failed:',e); }); })(1);
})();
</script>
<div class="bar">
@@ -1888,7 +1888,7 @@ function mapCondo(c){
beds:c.beds, baths:c.baths, sqft:c.sqft, hoa:c.hoa, broker_name:c.broker_name,
project_name:c.project_name, upside_note:null, qwen:null };
}
-fetch('data/ranked.json').then(r=>r.json()).then(async d=>{
+function loadRanked(_retry){ fetch('data/ranked.json').then(r=>{ if(!r.ok) throw new Error('HTTP '+r.status); return r.json(); }).then(async d=>{
DATA=d; if(window.__comps) DATA.comps=window.__comps;
// Merge condo inventory in-grid (best-effort; explorer still works if the API is down).
let condoN=0; try{ const cd=await (await fetch('/api/condos')).json(); const cs=(cd.condos||[]).map(mapCondo); condoN=cs.length; DATA.ranked=DATA.ranked.concat(cs); }catch(e){}
@@ -2011,7 +2011,7 @@ fetch('data/ranked.json').then(r=>r.json()).then(async d=>{
window.DATA_READY = true;
recompute(); syncChips(); render();
-}).catch(e=>{ $('#sub').textContent='Failed to load data/ranked.json — run: npm run analyze'; });
+}).catch(e=>{ if(_retry>0){ setTimeout(()=>loadRanked(_retry-1),1500); return; } $('#sub').textContent='Listings are still loading — refresh in a moment if this persists.'; console.warn('ranked.json load failed:',e); }); } loadRanked(1);
</script>
<script src="/col-resize.js" defer></script>
<script src="/global-search.js" defer></script>
← bd5c023 Polish corner nav: type-to-filter search, focus-on-open, cur
·
back to Commercialrealestate
·
CRCP: retry ranked.json fetch-only so success body (12 event f05ff59 →