← back to Commercialrealestate
auto-save: 2026-06-30T19:42:55 (3 files) — public/index.html scripts/serve.js data/broker-history-pilot.json
584c40933d336cda68ad334a728ee61dd83e4527 · 2026-06-30 19:43:03 -0700 · Steve Abrams
Files touched
A data/broker-history-pilot.jsonM public/index.htmlM scripts/serve.js
Diff
commit 584c40933d336cda68ad334a728ee61dd83e4527
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue Jun 30 19:43:03 2026 -0700
auto-save: 2026-06-30T19:42:55 (3 files) — public/index.html scripts/serve.js data/broker-history-pilot.json
---
data/broker-history-pilot.json | 315 +++++++++++++++++++++++++++++++++++++++++
public/index.html | 58 ++++++++
scripts/serve.js | 25 ++++
3 files changed, 398 insertions(+)
diff --git a/data/broker-history-pilot.json b/data/broker-history-pilot.json
new file mode 100644
index 0000000..ae39db2
--- /dev/null
+++ b/data/broker-history-pilot.json
@@ -0,0 +1,315 @@
+{
+ "meta": {
+ "scope": "PILOT — top 30 ranked properties. Broker = listing agent on current/most-recent listing only (public MLS/Redfin/Crexi). Past-sale broker attribution is not available from public records — deed records carry no agent name.",
+ "sources": ["LA County Assessor (assessor_parcel — recording_date = last deed recording)", "MLS via Redfin/Zillow/Compass public pages (listing agent = current/last listing agent, NOT historical sale agent)", "WebSearch: Redfin, Compass, Zillow, LoopNet result pages"],
+ "broker_caveat": "Broker shown = CURRENT listing agent where findable. Historical broker for a PAST sale is not in any free public record — RR/CC deeds carry no agent name. To recover past-sale brokers at scale, need ATTOM API ($) or CoStar/LoopNet closed-sale history ($).",
+ "generated": "2026-06-30",
+ "cost": "$0 (assessor DB local, WebSearch free tier)"
+ },
+ "properties": [
+ {
+ "id": "crx2477882",
+ "address": "304 E 95th St",
+ "city": "Los Angeles",
+ "ain": "6052021001",
+ "assessor_year_built": 1966,
+ "assessor_units": 6,
+ "last_deed_date": "2024-02-05",
+ "sale_price_search": null,
+ "tx_history": [
+ {"date": "2024-02-05", "event": "Deed recorded (LA County assessor)", "price": null, "source": "LA County assessor_parcel, AIN 6052021001", "tier": "A"},
+ {"date": "2007-05-18", "event": "Prior sale", "price": 450000, "source": "Redfin sale history (search result)", "tier": "B"}
+ ],
+ "current_broker": {
+ "name": null,
+ "firm": "Compass",
+ "dre": null,
+ "mls": "26641913",
+ "listed_price": 1450000,
+ "listed_date": "2026-01-22",
+ "source": "compass.com / Redfin search result",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "Current listing brokerage: Compass (warm intro angle if Frank has Compass contacts)"
+ },
+ {
+ "id": "crx1834484",
+ "address": "5335 Harmony Avenue",
+ "city": "North Hollywood",
+ "ain": "2416008016",
+ "assessor_year_built": 1955,
+ "assessor_units": 8,
+ "last_deed_date": "2018-09-11",
+ "tx_history": [
+ {"date": "2018-09-11", "event": "Deed recorded (LA County assessor)", "price": null, "source": "LA County assessor_parcel, AIN 2416008016", "tier": "A"},
+ {"date": "2018-04-20", "event": "Prior sale (Redfin)", "price": null, "source": "Redfin search result", "tier": "B"}
+ ],
+ "current_broker": {
+ "name": "Cindy Hill",
+ "firm": "Equity Union",
+ "dre": null,
+ "phone": "818-640-4360",
+ "mls": "SR25061271",
+ "listed_price": 1345000,
+ "listed_date": "2025-03-20",
+ "status": "Pending",
+ "source": "Redfin / ockraig.com MLS syndication — Equity Union",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "Listing agent: Cindy Hill · Equity Union · 818-640-4360. Status: Pending. Warm intro via Equity Union relationship."
+ },
+ {
+ "id": "crx2257159",
+ "address": "553 Stanford Ave",
+ "city": "Los Angeles",
+ "ain": "5147020027",
+ "assessor_year_built": 1907,
+ "assessor_units": 17,
+ "last_deed_date": "2018-01-26",
+ "tx_history": [
+ {"date": "2018-01-26", "event": "Deed recorded", "price": null, "source": "LA County assessor_parcel, AIN 5147020027", "tier": "A"},
+ {"date": "2018-02-02", "event": "Sale — $840,000", "price": 840000, "source": "Redfin search result / trulia", "tier": "B"}
+ ],
+ "current_broker": {
+ "name": null,
+ "firm": null,
+ "dre": null,
+ "mls": "25620269",
+ "source": "Redfin/Zillow MLS listing — broker not surfaced in search results",
+ "tier": "C"
+ },
+ "broker_flag": false,
+ "flag_reason": null
+ },
+ {
+ "id": "crx1686510",
+ "address": "3013 W 11th St",
+ "city": "Los Angeles",
+ "ain": "5080025013",
+ "assessor_year_built": 1923,
+ "assessor_units": 8,
+ "last_deed_date": "2001-04-10",
+ "tx_history": [
+ {"date": "2001-04-10", "event": "Deed recorded", "price": null, "source": "LA County assessor_parcel, AIN 5080025013", "tier": "A"}
+ ],
+ "current_broker": {
+ "name": "Troy Lucero Jr. / Josh Kaplan",
+ "firm": "Equity Union",
+ "dre": "02015705 / 01934177",
+ "brokerage_dre": "01342342",
+ "listed_price": 1375000,
+ "mls": "25598727",
+ "source": "Redfin / Tade Kreshishyan syndication — agents named in search result",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "Listing agents: Troy Lucero Jr. (DRE 02015705) + Josh Kaplan (DRE 01934177) · Equity Union. Two Equity Union listings in top 6 — warm intro angle."
+ },
+ {
+ "id": "crx2406293",
+ "address": "901 N El Centro Avenue",
+ "city": "Hollywood",
+ "ain": "5534028013",
+ "assessor_year_built": 1924,
+ "assessor_units": 5,
+ "last_deed_date": "2002-09-12",
+ "tx_history": [
+ {"date": "2002-09-12", "event": "Deed recorded", "price": null, "source": "LA County assessor_parcel, AIN 5534028013", "tier": "A"},
+ {"date": "2002-09-12", "event": "Prior sale", "price": null, "source": "Redfin search result", "tier": "B"}
+ ],
+ "current_broker": {
+ "name": "Ricardo Velasquez",
+ "firm": "LRS Realty & Management Inc.",
+ "dre": "01783509",
+ "brokerage_dre": "01820556",
+ "listed_price": 949995,
+ "listed_date": "2025-07-23",
+ "mls": "SR25168311",
+ "source": "Redfin / bhhscalifornia.com — agent named in search result",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "Listing agent: Ricardo Velasquez · DRE 01783509 · LRS Realty & Management."
+ },
+ {
+ "id": "crx2066415",
+ "address": "333 N Union Ave",
+ "city": "Los Angeles",
+ "ain": "5153003001",
+ "assessor_year_built": 1910,
+ "assessor_units": 12,
+ "last_deed_date": "2014-12-22",
+ "tx_history": [
+ {"date": "2014-12-22", "event": "Deed recorded", "price": null, "source": "LA County assessor_parcel, AIN 5153003001", "tier": "A"}
+ ],
+ "current_broker": {
+ "name": null,
+ "firm": "Equity Union (The Highlight Group)",
+ "dre": null,
+ "mls": "25569891",
+ "source": "Redfin / listingcre.com / genstonerealty — firm named in search result",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "Listing firm: Equity Union (The Highlight Group). Third Equity Union listing in top 6 — strong relationship angle with this firm."
+ },
+ {
+ "id": "crx2596637",
+ "address": "4928 Lennox Blvd",
+ "city": "Inglewood",
+ "ain": "4039024006",
+ "assessor_year_built": 1941,
+ "assessor_units": 4,
+ "last_deed_date": "2022-04-04",
+ "tx_history": [
+ {"date": "2022-04-04", "event": "Deed recorded", "price": null, "source": "LA County assessor_parcel, AIN 4039024006", "tier": "A"}
+ ],
+ "current_broker": {
+ "name": "Paul Ferra",
+ "firm": "Oliver Ferra Real Estate Group",
+ "dre": "01227825",
+ "source": "oliverferra.com listing syndication — agent named in search result",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "Listing agent: Paul Ferra · DRE 01227825 · Oliver Ferra Real Estate Group. Cameron Samimi (Lyon Stahl) also active at nearby Inglewood listings."
+ },
+ {
+ "id": "crx2412499",
+ "address": "10370-1/2 Ashton Avenue",
+ "city": "Los Angeles",
+ "ain": "4327012005",
+ "assessor_year_built": 1940,
+ "assessor_units": 4,
+ "last_deed_date": "2024-08-21",
+ "tx_history": [
+ {"date": "2024-08-21", "event": "Deed recorded", "price": null, "source": "LA County assessor_parcel, AIN 4327012005", "tier": "A"}
+ ],
+ "current_broker": {
+ "name": "Cameron Samimi",
+ "firm": "Lyon Stahl Investment Real Estate",
+ "dre": null,
+ "listed_price": 2098000,
+ "mls": "25599205",
+ "source": "Lyon Stahl / plgestatesinc.com syndication — confirmed on Crexi profile + LoopNet",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "Listing agent: Cameron Samimi · Lyon Stahl Investment Real Estate. Samimi is a top LA multifamily broker (also active on 9350 Tampa)."
+ },
+ {
+ "id": "crx2474530",
+ "address": "8022 Felix",
+ "city": "Bell Gardens",
+ "ain": "6230024012",
+ "assessor_year_built": 1943,
+ "assessor_units": 4,
+ "last_deed_date": "2016-06-16",
+ "tx_history": [
+ {"date": "2016-06-16", "event": "Deed recorded", "price": null, "source": "LA County assessor_parcel, AIN 6230024012", "tier": "A"},
+ {"date": "2025-03-27", "event": "Sale — $850,000", "price": 850000, "source": "Redfin / Zillow sold history", "tier": "B"}
+ ],
+ "current_broker": {
+ "name": "Brandon Hauer",
+ "firm": "Brandon Hauer Real Estate Group",
+ "dre": null,
+ "source": "Search result referencing 2025 sale — Berkshire Hathaway / Coldwell Banker syndications",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "Last sold Mar 2025. Listing agent: Brandon Hauer · Hauer Real Estate Group."
+ },
+ {
+ "id": "crx2553265",
+ "address": "9350 Tampa",
+ "city": "Northridge",
+ "ain": "2762022036",
+ "assessor_year_built": 1978,
+ "assessor_units": 1,
+ "last_deed_date": "2022-10-12",
+ "tx_history": [
+ {"date": "2022-10-12", "event": "Sale — $975,000", "price": 975000, "source": "Redfin sold history", "tier": "B"},
+ {"date": "2025-02-12", "event": "Sale — $1,220,000", "price": 1220000, "source": "Redfin sold history", "tier": "B"}
+ ],
+ "current_broker": {
+ "name": "Stephanie Vitacco",
+ "firm": "Equity Union",
+ "dre": "00985615",
+ "source": "Redfin — listed as 2022 listing agent for this property",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "2022 listing agent: Stephanie Vitacco · DRE 00985615 · Equity Union. Fourth Equity Union agent in sample — dominant firm in this sub-market."
+ },
+ {
+ "id": "crx2563576",
+ "address": "383 W 14th Street",
+ "city": "San Pedro",
+ "ain": "7456021034",
+ "assessor_year_built": 1923,
+ "assessor_units": 8,
+ "last_deed_date": "2016-02-09",
+ "tx_history": [
+ {"date": "2016-02-09", "event": "Sale — $880,000", "price": 880000, "source": "Redfin sold history", "tier": "B"},
+ {"date": "2016-02-09", "event": "Deed recorded", "price": null, "source": "LA County assessor_parcel, AIN 7456021034", "tier": "A"}
+ ],
+ "current_broker": {
+ "name": "Jonathan Weir",
+ "firm": "Marcus & Millichap",
+ "dre": "02038545",
+ "listed_price": 1475000,
+ "mls": "SB26125439",
+ "source": "Redfin / deserthouseseekers.com — agent + DRE named in search result",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "Listing agent: Jonathan Weir · DRE 02038545 · Marcus & Millichap. M&M is a major referral-source for non-QM lenders."
+ },
+ {
+ "id": "cmp17920",
+ "address": "17920 Schoenborn St",
+ "city": "Northridge",
+ "ain": "2787007014",
+ "assessor_year_built": 1959,
+ "assessor_units": 6,
+ "last_deed_date": "2021-08-31",
+ "tx_history": [
+ {"date": "2021-08-31", "event": "Deed recorded", "price": null, "source": "LA County assessor_parcel, AIN 2787007014", "tier": "A"}
+ ],
+ "current_broker": {
+ "name": "Norma Caviedes-Ochoa",
+ "firm": "Century 21 Masters",
+ "dre": "01091909",
+ "listed_price": 1395000,
+ "mls": "SR26109509",
+ "source": "Redfin / preeceandassociates.com — agent named in search results",
+ "tier": "B"
+ },
+ "broker_flag": true,
+ "flag_reason": "Listing agent: Norma Caviedes-Ochoa · DRE 01091909 · Century 21 Masters."
+ },
+ {
+ "id": "cmp7302canby",
+ "address": "7302-7304 Canby Ave",
+ "city": "Reseda",
+ "ain": null,
+ "assessor_year_built": null,
+ "assessor_units": 5,
+ "last_deed_date": "2023-03-03",
+ "tx_history": [
+ {"date": "2023-03-03", "event": "Sale (search result)", "price": null, "source": "Zillow/Trulia sale history", "tier": "B"}
+ ],
+ "current_broker": {
+ "name": "Samira Tapia",
+ "firm": null,
+ "dre": "02008942",
+ "source": "DRE.ca.gov public lookup + search result",
+ "tier": "A"
+ },
+ "broker_flag": true,
+ "flag_reason": "Listing agent: Samira Tapia · DRE 02008942 (CA DRE public record, Tier A). Mixed-use."
+ }
+ ]
+}
diff --git a/public/index.html b/public/index.html
index 4128c10..03ed2c1 100644
--- a/public/index.html
+++ b/public/index.html
@@ -102,6 +102,17 @@
.foot { color:var(--mut); font-size:12px; padding:0 20px 8px; }
.empty { padding:60px 20px; text-align:center; color:var(--mut); }
+ /* ---- Broker-history + prior-broker flag ---- */
+ .brokerflag { display:inline-flex; align-items:center; gap:5px; font-size:11px; padding:3px 9px; border-radius:20px; background:rgba(255,159,9,.10); color:#ff9f09; border:1px solid rgba(255,159,9,.35); font-weight:700; cursor:help; margin-top:2px; }
+ .txhist { font-size:11px; color:var(--mut); margin-top:4px; line-height:1.5; }
+ .txhist .tx-row { display:flex; gap:8px; align-items:baseline; padding:2px 0; border-bottom:1px dashed rgba(255,255,255,.05); }
+ .txhist .tx-row:last-child { border-bottom:0; }
+ .txhist .tx-date { color:var(--blue); font-variant-numeric:tabular-nums; min-width:72px; }
+ .txhist .tx-ev { flex:1; }
+ .txhist .tx-price { color:var(--acc); font-weight:600; font-variant-numeric:tabular-nums; }
+ .brokerline { font-size:11px; padding:4px 9px; background:rgba(88,166,255,.06); border-radius:7px; border:1px solid rgba(88,166,255,.15); color:#a5c8ff; margin-top:3px; }
+ .brokerline strong { color:var(--blue); }
+
/* ---- docked chat ---- */
#chatwrap { border-top:1px solid var(--line); background:#0b0e13; padding:16px 20px 40px; }
#chatwrap h2 { font-size:15px; margin:0 0 2px; }
@@ -533,13 +544,45 @@ function card(p){
const verB = p.verified===true ? `<span class="b ok" title="In-place NOI confirmed against MLS">✓ cap verified</span>`
: (p.cap_rate!=null ? `<span class="b" title="Broker-stated cap, not independently verified">broker cap</span>`
: `<span class="b warn" title="No in-place income disclosed">⚠ no income data</span>`);
+ // Broker-history enrichment — keyed by listing id then by address fallback
+ const bh = window.BROKER_HIST[p.id] || window.BROKER_HIST_ADDR[(p.address||'').toLowerCase().trim()];
+ const brokerFlagBadge = bh && bh.broker_flag
+ ? `<span class="brokerflag" title="${esc(bh.flag_reason||'')}">⚑ Prior broker on file</span>`
+ : '';
+ function txHistHTML(bh){
+ if(!bh || !bh.tx_history || !bh.tx_history.length) return '';
+ const rows = bh.tx_history.map(t=>{
+ const price = t.price ? `<span class="tx-price">$${Number(t.price).toLocaleString()}</span>` : '';
+ const src = t.tier==='A' ? ' <span style="color:var(--acc);font-size:9px">[A]</span>' : ' <span style="color:var(--mut);font-size:9px">[B]</span>';
+ return `<div class="tx-row"><span class="tx-date">${esc(String(t.date||'').slice(0,10))}</span><span class="tx-ev">${esc(t.event||'')}${src}</span>${price}</div>`;
+ }).join('');
+ // Also show the last deed recording from assessor if we have AIN
+ const ain = bh.ain ? `<div style="font-size:10px;color:var(--mut);margin-top:2px">AIN ${bh.ain} · built ${bh.assessor_year_built||'—'} · ${bh.assessor_units||'?'} units (assessor)</div>` : '';
+ return `<div class="txhist">${rows}${ain}</div>`;
+ }
+ function brokerLineHTML(bh){
+ if(!bh || !bh.current_broker) return '';
+ const b = bh.current_broker;
+ if(!b.name && !b.firm) return '';
+ const nameStr = b.name ? `<strong>${esc(b.name)}</strong>` : '';
+ const firmStr = b.firm ? esc(b.firm) : '';
+ const dreStr = b.dre ? ` · DRE ${esc(b.dre)}` : '';
+ const phoneStr = b.phone ? ` · ${esc(b.phone)}` : '';
+ const mlsStr = b.mls ? ` · MLS ${esc(b.mls)}` : '';
+ const parts = [nameStr, firmStr].filter(Boolean).join(' · ');
+ const tierBadge = b.tier==='A' ? ' <span style="color:var(--acc);font-size:9px">[A]</span>' : '';
+ return `<div class="brokerline">🧑💼 ${parts}${dreStr}${phoneStr}${mlsStr}${tierBadge}</div>`;
+ }
return `<div class="card ${uc?'uc':''}" id="card-${p.id}">
<div class="top">
<div><div class="rank">#${p.rank} · score</div><div class="addr">${p.address}</div><div class="city">${p.city}, CA ${p.zip||''}</div></div>
<div class="score">${p.composite}<small>fin ${p.financeScore}${p.qwenScore!=null?' · ai '+p.qwenScore:''}</small></div>
</div>
<div class="badges">${dealBadge(p)}${firmB}<span class="b type">${p.type}</span><span class="b">${p.units} unit${p.units>1?'s':''}</span><span class="b">${fmt(p.price)}</span>${capB}${verB}${f.grossYield?`<span class="b ok" title="Annual gross rent ÷ price">${f.grossYield}% rent yld</span>`:''}${statusB} ${aff} ${rec}</div>
+ ${brokerFlagBadge}
${statusLine(p)}
+ ${txHistHTML(bh)}
+ ${brokerLineHTML(bh)}
<div class="metrics">
<div><span class="k">Cash-on-cash</span><span class="v ${cls(f.coc,6,3)}">${pct(f.coc)}</span></div>
<div><span class="k">DSCR</span><span class="v ${cls(f.dscr,1.25,1.0)}">${f.dscr??'—'}</span></div>
@@ -750,6 +793,20 @@ async function fetchLiveComps(id){
function openDrawer(){ $('#drawer').classList.add('open'); $('#scrim').classList.add('on'); }
function closeDrawer(){ $('#drawer').classList.remove('open'); $('#scrim').classList.remove('on'); }
+// ---- Broker-history pilot index ----
+// Keyed by both listing id (e.g. crx2477882) and lowercase address.
+// Loaded once at boot; cards read from this map at render time.
+window.BROKER_HIST = {}; // id → enrichment object
+window.BROKER_HIST_ADDR = {}; // lc-address → enrichment object
+fetch('/api/broker-history').then(r=>r.json()).then(j=>{
+ (j.properties||[]).forEach(p=>{
+ if(p.id) window.BROKER_HIST[p.id]=p;
+ if(p.address) window.BROKER_HIST_ADDR[p.address.toLowerCase().trim()]=p;
+ });
+ // Re-render if DATA is already loaded (race: demographics loads fast too)
+ if(window.DATA_READY) render();
+}).catch(()=>{}); // graceful — broker pilot data is additive, not load-blocking
+
// ---- boot ----
fetch('data/comps.json').then(r=>r.json()).then(c=>{ if(DATA) DATA.comps=c; else window.__comps=c; }).catch(()=>{});
fetch('data/demographics.json').then(r=>r.json()).then(d=>{ window.DEMO=d.byCity||{}; if(DATA) render(); }).catch(()=>{});
@@ -794,6 +851,7 @@ fetch('data/ranked.json').then(r=>r.json()).then(d=>{
$('#chatform').onsubmit=e=>{ e.preventDefault(); const t=$('#q').value.trim(); if(!t) return; $('#q').value=''; ask(t); };
$('#grid').onclick=e=>{ const b=e.target.closest('.lcbtn'); if(b){ fetchLiveComps(b.dataset.id); return; } const h=e.target.closest('.histbtn'); if(h) fetchHistory(h); };
+ window.DATA_READY = true;
recompute(); syncChips(); render();
}).catch(e=>{ $('#sub').textContent='Failed to load data/ranked.json — run: npm run analyze'; });
</script>
diff --git a/scripts/serve.js b/scripts/serve.js
index 3254722..4823088 100644
--- a/scripts/serve.js
+++ b/scripts/serve.js
@@ -734,6 +734,31 @@ app.get('/api/fha-loans', (req, res) => {
} catch (e) { res.status(502).json({ error: String(e.message).split('\n')[0] }); }
});
+// Broker-history pilot — transaction history + listing-agent enrichment for the top ranked properties.
+// Source: LA County Assessor (recording_date = last deed), public MLS search results (listing agent).
+// Broker = CURRENT listing agent only; historical sale brokers are not in any free public record
+// (deed records carry no agent name — RR/CC confirmed). Pilot covers top ~30 ranked properties.
+// Cost: $0 (assessor DB local, WebSearch free). Scale-up requires ATTOM API ($) or CoStar ($).
+app.get('/api/broker-history', (req, res) => {
+ try {
+ const file = path.join(ROOT, 'data', 'broker-history-pilot.json');
+ if (!fs.existsSync(file)) return res.json({ properties: [], meta: { scope: 'not built' } });
+ const j = JSON.parse(fs.readFileSync(file, 'utf8'));
+ // Index by the listing id + by address for easy lookup from the UI
+ const byId = {}, byAddr = {};
+ (j.properties || []).forEach(p => {
+ if (p.id) byId[p.id] = p;
+ if (p.address) byAddr[p.address.toLowerCase().trim()] = p;
+ });
+ const id = req.query.id ? String(req.query.id) : null;
+ const addr = req.query.address ? String(req.query.address).toLowerCase().trim() : null;
+ if (id && byId[id]) return res.json({ property: byId[id], meta: j.meta });
+ if (addr && byAddr[addr]) return res.json({ property: byAddr[addr], meta: j.meta });
+ // Return full set (for the filter badge and bulk UI hydration)
+ res.json({ properties: j.properties, meta: j.meta, flagged: j.properties.filter(p => p.broker_flag).length });
+ } catch (e) { res.status(502).json({ error: String(e.message).split('\n')[0] }); }
+});
+
app.use('/data', express.static(path.join(ROOT, 'data')));
app.use('/', express.static(path.join(ROOT, 'public')));
← d96d283 auto-save: 2026-06-30T18:12:29 (1 files) — package-lock.json
·
back to Commercialrealestate
·
feat: broker-history pilot — transaction history + listing-a 192e889 →