← back to Rentv 2026
Wire /desk to the live CA broker registry via /api/brokers + /api/firms proxy (full 382,944 brokers)
6f8a706231a036e216092c6fc35e730961997a5b · 2026-07-22 17:37:31 -0700 · Steve
Files touched
M public/desk.htmlM server.js
Diff
commit 6f8a706231a036e216092c6fc35e730961997a5b
Author: Steve <steve@designerwallcoverings.com>
Date: Wed Jul 22 17:37:31 2026 -0700
Wire /desk to the live CA broker registry via /api/brokers + /api/firms proxy (full 382,944 brokers)
---
public/desk.html | 5 ++++-
server.js | 19 +++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/public/desk.html b/public/desk.html
index c7a1ddea..479bbb36 100644
--- a/public/desk.html
+++ b/public/desk.html
@@ -111,7 +111,10 @@ const cd=()=>{$('scrim').classList.remove('open');$('drawer').classList.remove('
$('user').onclick=()=>location.href='/subscribe';
async function jget(u,fb){try{const r=await fetch(u,{credentials:'same-origin'});if(!r.ok)return fb;return await r.json();}catch(e){return fb;}}
(async()=>{
- const [b,f,la]=await Promise.all([jget('desk-assets/data/brokers.json',{rows:[]}),jget('desk-assets/data/firms.json',{rows:[]}),jget('/api/la-commercial',null).then(v=>v||jget('desk-assets/data/la-commercial.json',{marquee:[]}))]);
+ const [b,f,la]=await Promise.all([
+ jget('/api/brokers?state=CA&limit=500',null).then(v=>(v&&v.rows&&v.rows.length)?v:jget('desk-assets/data/brokers.json',{rows:[]})),
+ jget('/api/firms?state=CA&limit=200',null).then(v=>(v&&v.rows&&v.rows.length)?v:jget('desk-assets/data/firms.json',{rows:[]})),
+ jget('/api/la-commercial',null).then(v=>v||jget('desk-assets/data/la-commercial.json',{marquee:[]}))]);
D.brokers=b.rows||[];D.firms=f.rows||[];D.owners=la.marquee||[];D.totalB=b.total||D.brokers.length;D.totalF=f.total||D.firms.length;
$('cB').textContent=D.brokers.length;$('cF').textContent=D.firms.length;$('cO').textContent=D.owners.length;
$('fresh').textContent='CA DRE registry · '+D.brokers.length+' brokers of '+D.totalB.toLocaleString()+' statewide';
diff --git a/server.js b/server.js
index 577514b1..1d5ca9f2 100644
--- a/server.js
+++ b/server.js
@@ -223,5 +223,24 @@ app.get('/admin', (_q, r) => r.sendFile(path.join(PUB, 'admin', 'index.html')));
app.get('/blog', (_q, r) => r.sendFile(path.join(PUB, 'blog.html')));
app.get('/post/:id', (_q, r) => r.sendFile(path.join(PUB, 'post.html')));
+// ── Broker & Owner Intelligence Desk (/desk): proxy the usrealestate CA registry ──
+// Keeps the desk on the FULL live registry (382k brokers / 34k firms) without
+// exposing the internal service; gated by the same auth middleware above.
+const USRE = process.env.USRE_URL || 'http://127.0.0.1:9913';
+const USRE_AUTH = 'Basic ' + Buffer.from(process.env.USRE_AUTH || 'admin:DW2024!').toString('base64');
+async function usreProxy(upstream, req, res) {
+ try {
+ const qs = new URLSearchParams(req.query);
+ if (!qs.get('state')) qs.set('state', 'CA');
+ if (!qs.get('limit')) qs.set('limit', '500');
+ const r = await fetch(`${USRE}${upstream}?${qs}`, { headers: { Authorization: USRE_AUTH }, signal: AbortSignal.timeout(12000) });
+ if (!r.ok) return res.status(502).json({ rows: [], total: 0, error: 'upstream ' + r.status });
+ res.set('Cache-Control', 'public, max-age=300');
+ res.json(await r.json());
+ } catch (e) { res.status(502).json({ rows: [], total: 0, error: 'registry unavailable' }); }
+}
+app.get('/api/brokers', (req, res) => usreProxy('/api/brokers', req, res));
+app.get('/api/firms', (req, res) => usreProxy('/api/firms', req, res));
+
app.use(express.static(PUB, { extensions: ['html'] }));
app.listen(PORT, () => console.log('rentv-v1 (full site, gated, live data) on ' + PORT));
← 4645759d Ship RENTV Intelligence Desk live at /desk — left-rail switc
·
back to Rentv 2026
·
auto-save: 2026-07-22T17:45:47 (3 files) — data/markets.json aaeca199 →