[object Object]

← back to Commercialrealestate

crcp: surface Panel 4 in the Warrantability panel — HUD reference-list total (2661) + HRAP/DELRAP method split via /api/crcp/stats fhaTotal+fhaMethods

471728895af9d4e1d6e784e30df68ee880315613 · 2026-07-31 11:36:23 -0700 · Steve

Files touched

Diff

commit 471728895af9d4e1d6e784e30df68ee880315613
Author: Steve <steve@designerwallcoverings.com>
Date:   Fri Jul 31 11:36:23 2026 -0700

    crcp: surface Panel 4 in the Warrantability panel — HUD reference-list total (2661) + HRAP/DELRAP method split via /api/crcp/stats fhaTotal+fhaMethods
---
 public/crcp.html | 9 ++++++++-
 scripts/serve.js | 2 ++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/public/crcp.html b/public/crcp.html
index 2d0b0b0..bdce6bc 100644
--- a/public/crcp.html
+++ b/public/crcp.html
@@ -119,7 +119,8 @@
     <div>
       <div class="panel"><h3>Warrantability (FHA proxy) <span class="c" id="waC"></span></h3>
         <div id="wa"></div>
-        <div class="meta">FHA/VA-approval-based proxy — NOT lender-verified Fannie/Freddie warrantability.</div>
+        <a class="btn loanbtn" href="/condos.html?status=unwarrantable" title="Every non-FHA-approved condo — the deals conventional lenders decline">💰 Unwarrantable Loans — non-QM opportunities <span id="unwarrC" class="loanct"></span></a>
+        <div class="meta">FHA/VA-approval-based proxy — NOT lender-verified Fannie/Freddie warrantability. “Unwarrantable” = every condo not FHA-approved (non-QM / portfolio lending target).</div>
       </div>
       <div class="panel"><h3>Top firms by market share <span class="c" id="fmC"></span></h3>
         <table id="fmTbl"><thead><tr><th class="srt" data-col="firm">Firm</th><th class="srt n" data-col="listings">Listings</th><th class="srt n" data-col="brokers">Brokers</th></tr></thead><tbody></tbody></table>
@@ -430,7 +431,13 @@ async function poll(){
         + bar('FHA-approved', s.fhaApproved||0, waTot, 'var(--active)') + `</div>`
     + `<div class="wclk" data-st="fha_expired" title="Click to list the ${fmt(s.fhaExpired||0)} FHA-expired condos">`
         + bar('FHA-expired (flag/review)', s.fhaExpired||0, waTot, 'var(--staged)') + `</div>`;
+  // Panel 4 — FHA reference-list breakdown: caption the full HUD registry size + approval-method split.
+  $('#waC').textContent = fmt(s.fhaTotal||waTot)+' HUD reference projects'
+    + (s.fhaMethods ? ' · HRAP '+fmt(s.fhaMethods.HRAP||0)+' / DELRAP '+fmt(s.fhaMethods.DELRAP||0) : '');
   document.querySelectorAll('#wa .wclk').forEach(el=>el.onclick=()=>{ window._waQ=''; openWarrant(el.dataset.st); });
+  // unwarrantable = scraped condos NOT FHA-approved (the non-QM lending opportunity)
+  const _unwarr=(s.condos||0)-((s.condosByStatus&&s.condosByStatus.fha_approved)||0);
+  const _uc=$('#unwarrC'); if(_uc) _uc.textContent = _unwarr>0 ? fmt(_unwarr) : '';
   renderFirms(s);
   prev=s;
   // flash changed tiles
diff --git a/scripts/serve.js b/scripts/serve.js
index 3557fdc..1a23b98 100644
--- a/scripts/serve.js
+++ b/scripts/serve.js
@@ -788,6 +788,8 @@ app.get('/api/crcp/stats', async (req, res) => {
       const fc = JSON.parse(fs.readFileSync(path.join(ROOT, 'data', 'fha-approved-condos.json'), 'utf8')).condos;
       out.fhaApproved = fc.filter(c => c.warrant_signal === 'fha_approved').length;
       out.fhaExpired = fc.filter(c => c.warrant_signal === 'fha_expired').length;
+      out.fhaTotal = fc.length;   // full HUD reference-list size (Panel 4 breakdown)
+      out.fhaMethods = fc.reduce((m, c) => { const k = c.approval_method || '—'; m[k] = (m[k] || 0) + 1; return m; }, {});
     } catch (_) {}
     if (brokerdb) {
       const q = s => brokerdb.pool.query(s).then(r => r.rows);

← 2d6cee1 chore: v0.14.0 (session close) — user sign-in + personalizat  ·  back to Commercialrealestate  ·  deals.html: scored-deal address drills to city-scoped explor 889a29c →