[object Object]

← back to Commercialrealestate

condos viewer: always-on created date+time chip on cards + date+time (not date-only) in list — comply with admin-card timestamp HARD rule

f7b6b058f9190799f81a3bf354af29aa5fdfa224 · 2026-08-03 09:35:49 -0700 · Steve Abrams

Files touched

Diff

commit f7b6b058f9190799f81a3bf354af29aa5fdfa224
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Aug 3 09:35:49 2026 -0700

    condos viewer: always-on created date+time chip on cards + date+time (not date-only) in list — comply with admin-card timestamp HARD rule
---
 public/condos.html | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/public/condos.html b/public/condos.html
index ce44328..8708870 100644
--- a/public/condos.html
+++ b/public/condos.html
@@ -222,7 +222,7 @@ function fcell(c,f){ const v=fval(c,f);
   if(v==null||v==='') return '—';
   if(f.money) return '$'+(+v).toLocaleString()+(f.suf||'');
   if(f.num) return (+v).toLocaleString();
-  if(f.date){ try{ return new Date(v).toLocaleDateString(undefined,{year:'numeric',month:'short',day:'numeric'}); }catch(e){ return '—'; } }
+  if(f.date){ try{ const d=new Date(v); return '<span title="'+esc(d.toISOString())+'">'+d.toLocaleString(undefined,{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'})+'</span>'; }catch(e){ return '—'; } }
   return esc(v)+(f.suf||'');
 }
 
@@ -300,14 +300,24 @@ function noteBox(c){
   const v=(NOTES[c.id]&&NOTES[c.id].note)||'';
   return `<div class="notewrap"><textarea class="notebox" data-note="${esc(c.id)}" rows="2" placeholder="✎ Your notes on this listing…">${esc(v)}</textarea><span class="notestatus" data-nstat="${esc(c.id)}"></span></div>`;
 }
+// Always-on created date+time chip (Steve HARD rule: admin cards must show when the
+// record was added, date AND time, visible on the card — not toggle-gated. Mirrors the
+// design-curator .when chip). Full ISO in title=. Falls back to last_seen; hidden if neither.
+function whenChip(c){
+  const t=c.created_at||c.last_seen; if(!t) return '';
+  const d=new Date(t); if(isNaN(d)) return '';
+  const s=d.toLocaleString(undefined,{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'});
+  return `<div class="when" title="${esc(d.toISOString())}" style="font-size:10px;color:var(--mut,#8b949e);margin-top:6px">🕓 Added ${esc(s)}</div>`;
+}
 
 // ---- renderers ----
-const CARD_SKIP=new Set(['warrantable_status','city','zip','project_name','warrant_source']);
+const CARD_SKIP=new Set(['warrantable_status','city','zip','project_name','warrant_source','created_at']);
 function dbCards(rows){
   const vis=orderedFields().filter(f=>fvis(f.k)&&!CARD_SKIP.has(f.k));
   return rows.map(c=>`<div class="condo">
     <div class="chead"><div class="name">${esc(c.project_name||c.address||'Condo')}</div><button class="starbtn ${SHORT.has(c.id)?'on':''}" data-star="${c.id}" aria-label="${SHORT.has(c.id)?'Remove from':'Add to'} shortlist" aria-pressed="${SHORT.has(c.id)}" title="Shortlist">★</button></div>
     <div class="addr">${esc(c.address||'')}${c.city?', '+esc(c.city):''} ${esc(c.zip||'')}</div>
+    ${whenChip(c)}
     ${fvis('warrantable_status')?statusBadge(c.warrantable_status||c.warrant_signal):''}
     ${vis.map(f=>`<div class="row"><span class="k">${esc(f.l)}</span><span>${fcell(c,f)}</span></div>`).join('')}
     ${brokerCell(c)}

← 685110b chore: lint, refactor (path.join, delete stale note keys), v  ·  back to Commercialrealestate  ·  condos viewer: DRY date rendering into fmtDateTime/dateTimeS e0227f6 →