← back to Commercialrealestate
CRCP mls: add opt-in 'First seen' column (datetime cell type, date+time) surfacing listing.created_at — admin-card recency rule; default-hidden per START TIGHT
8ebbc43d99dc071fda57b0d1d3ec2fce89acc778 · 2026-08-06 16:48:48 -0700 · Steve Abrams
Files touched
Diff
commit 8ebbc43d99dc071fda57b0d1d3ec2fce89acc778
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Aug 6 16:48:48 2026 -0700
CRCP mls: add opt-in 'First seen' column (datetime cell type, date+time) surfacing listing.created_at — admin-card recency rule; default-hidden per START TIGHT
---
public/mls.html | 2 ++
1 file changed, 2 insertions(+)
diff --git a/public/mls.html b/public/mls.html
index 7398bf1..511ff2e 100644
--- a/public/mls.html
+++ b/public/mls.html
@@ -161,6 +161,7 @@ const COLS=[
{k:'off_date',l:'Pulled',t:'s'},
{k:'sold_price',l:'Sold $',t:'money'},
{k:'sold_date',l:'Sold',t:'s'},
+ {k:'first_seen',l:'First seen',t:'datetime'},
{k:'firm',l:'Firm',t:'s'},
{k:'broker_agent',l:'Agent',t:'s'},
{k:'last_broker_of_record',l:'Last Broker of Record',t:'s'},
@@ -373,6 +374,7 @@ function cellHTML(r,c){
if(c.t==='money') return money(v);
if(c.t==='pct') return v==null||v===''?'—':v+'%';
if(c.t==='n') return num(v);
+ if(c.t==='datetime'){ if(v==null||v==='') return '—'; const dt=new Date(v); if(isNaN(dt)) return '—'; return `<span title="${esc(String(v))}">🕓 ${dt.toLocaleString(undefined,{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'})}</span>`; }
if(c.t==='status'){ const a=String(v||'').startsWith('Active'); return `<span class="pill ${a?'active':'other'}">${esc(v||'—')}</span>`; }
if(c.t==='link'){ const u=brokerListing(r); const ab=agentBits(r);
if(u.mode==='listing') return `<a href="${esc(u.href)}" target="_blank" rel="noopener noreferrer" title="${esc(u.title)}">🔗 ${esc(u.label)}</a>`+ab;
← cea4265 security: npm audit fix — patch body-parser DoS (GHSA-v422-h
·
back to Commercialrealestate
·
CRCP mls: make 'First seen' visible per admin-card rule — un bc720b1 →