โ back to Commercialrealestate
deal-flow C3: FHA co-source (494 CA FHA-financed multifamily w/ rate + assumable flag, ๐ฆ badge) + EDGAR window 120->365d (35->87 deals); 3 free public sources in one board
e4f907d8f5beab75d234c33236b349c5fd1ccfc1 ยท 2026-07-31 09:35:00 -0700 ยท steve
Files touched
Diff
commit e4f907d8f5beab75d234c33236b349c5fd1ccfc1
Author: steve <steve@designerwallcoverings.com>
Date: Fri Jul 31 09:35:00 2026 -0700
deal-flow C3: FHA co-source (494 CA FHA-financed multifamily w/ rate + assumable flag, ๐ฆ badge) + EDGAR window 120->365d (35->87 deals); 3 free public sources in one board
---
public/deals-flow.html | 29 +++++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/public/deals-flow.html b/public/deals-flow.html
index a39a35c..350ddfd 100644
--- a/public/deals-flow.html
+++ b/public/deals-flow.html
@@ -32,6 +32,7 @@ select{background:var(--card);border:1px solid var(--line);color:var(--ink);bord
.src{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:2px 6px;border-radius:6px;white-space:nowrap;flex-shrink:0}
.src.county{background:rgba(63,185,80,.16);color:var(--acc)}
.src.edgar{background:rgba(188,140,255,.16);color:var(--violet)}
+.src.fha{background:rgba(88,166,255,.16);color:var(--blue)}
.dcard .price{font-size:20px;font-weight:700;color:var(--gold);font-variant-numeric:tabular-nums}
.dl{display:flex;flex-wrap:wrap;gap:5px 14px;font-size:12px;color:var(--ink)}
.dl .i{color:var(--mut);display:inline-flex;align-items:center;gap:4px}
@@ -100,21 +101,26 @@ function buildRail(){
$('#fSrc').innerHTML=chip(sc,'s');$('#fUse').innerHTML=chip(uc,'u',10);$('#fYear').innerHTML=chip(yc,'y',8);$('#fConf').innerHTML=chip(cc,'c');
}
function card(r){
- const isE=r.kind==='reit-filing';
- const srcBadge=isE?'<span class="src edgar">๐ SEC EDGAR</span>':'<span class="src county">๐๏ธ Assessor</span>';
+ const isE=r.kind==='reit-filing', isF=r.kind==='fha', isC=r.kind==='county-sale';
+ const srcBadge=isE?'<span class="src edgar">๐ SEC EDGAR</span>':isF?'<span class="src fha">๐ฆ HUD FHA</span>':'<span class="src county">๐๏ธ Assessor</span>';
const price=money(r.price);
const details=[];
- if(price) details.push(`<span class="i">๐ฐ <b>${price}</b>${isE?'':' <span class="mut">est</span>'}</span>`);
+ if(price&&isE) details.push(`<span class="i">๐ฐ <b>${price}</b></span>`);
+ if(r.rate!=null) details.push(`<span class="i">๐ต <b>${(+r.rate).toFixed(2)}%</b> rate</span>`);
+ if(isF&&r.belowMarket) details.push(`<span class="i" style="color:var(--gold)">โ assumable (below-market)</span>`);
if(r.units) details.push(`<span class="i">๐ข <b>${r.units}</b> units</span>`);
if(r.use) details.push(`<span class="i">๐ท๏ธ ${esc(r.use)}</span>`);
+ if(r.deal_city) details.push(`<span class="i">๐ ${esc(r.deal_city)}</span>`);
if(r.year_built) details.push(`<span class="i">๐๏ธ built ${r.year_built}</span>`);
if(r.date) details.push(`<span class="i">๐
${esc(r.date)}</span>`);
if(r.ticker) details.push(`<span class="i">๐ ${esc(r.ticker)}</span>`);
+ if(r.holder) details.push(`<span class="i">๐ฆ ${esc(String(r.holder).slice(0,24))}</span>`);
const conf=r.confidence?`<span class="conf ${r.confidence}">${r.confidence} confidence</span>`:'';
const link=r.url?`<a class="f" href="${esc(r.url)}" target="_blank" rel="noopener noreferrer">๐ SEC filing โ</a>`:'';
+ const bigPrice=(price&&(isC||isF))?`<div class="price">${price}${isC?' <span class="mut" style="font-size:11px">est sale</span>':isF?' <span class="mut" style="font-size:11px">loan</span>':''}</div>`:'';
return `<div class="dcard">
<div class="top"><div class="name">${esc(r.name)}</div>${srcBadge}</div>
- ${price&&isE?'':price?`<div class="price">${price}</div>`:''}
+ ${bigPrice}
<div class="dl">${details.join('')}</div>
${link}${conf?'<div>'+conf+'</div>':''}
<div class="provline">๐ ${esc(r.source)}</div>
@@ -146,13 +152,20 @@ $('#sort').innerHTML=[['date','Date'],['price','Price'],['units','Units'],['year
$('#dens').value=dens;
Promise.all([
fetch('/data/deals-flow.json').then(r=>r.json()).catch(()=>({deals:[]})),
- fetch('/data/edgar-reit-deals.json').then(r=>r.json()).catch(()=>({deals:[]}))
-]).then(([county,edgar])=>{
+ fetch('/data/edgar-reit-deals.json').then(r=>r.json()).catch(()=>({deals:[]})),
+ fetch('/data/fha-loans.json').then(r=>r.json()).catch(()=>({rows:[]}))
+]).then(([county,edgar,fha])=>{
const c=(county.deals||[]).map(d=>({...d,kind:'county-sale',name:d.address||d.ain,source_label:'LA County Assessor'}));
const e=(edgar.deals||[]).map(d=>({...d,kind:'reit-filing',name:d.company,
use:d.property?('REIT: '+String(d.property).slice(0,44)):(d.price?'REIT acquisition':'REIT filing ยท price pending'),
- date:d.filed,url:d.filing_url,source_label:'SEC EDGAR'}));
- DATA=c.concat(e);
+ deal_city:d.deal_city||null,date:d.filed,url:d.filing_url,source_label:'SEC EDGAR'}));
+ // FHA-financed properties as a co-source (city/zip only โ rides alongside, not a per-parcel join).
+ const f=(fha.rows||[]).filter(r=>r.state==='CA'&&r.rate!=null).map(d=>({
+ kind:'fha',name:d.property,use:'FHA-financed multifamily',price:d.originalAmount,units:d.units,
+ year:String(d.originationDate||'').slice(0,4)||null,date:d.originationDate,rate:d.rate,belowMarket:d.belowMarket,
+ holder:d.holder,deal_city:d.city,source_label:'HUD FHA',
+ source:'HUD/FHA Multifamily Insured Mortgages (public, resellable)'}));
+ DATA=c.concat(e).concat(f);
buildRail();render();
}).catch(()=>{$('#count').textContent='failed to load deal data';});
</script></body></html>
โ 94bdca5 EDGAR deals now PRICED: parse-edgar-prices.js (local Ollama
ยท
back to Commercialrealestate
ยท
crcp: fix cleanup script โ dedup brokers on (name,target-fir 8bc12cc โ