[object Object]

← back to Re Flyer Aggregator

advertising viewer: add sortable Scanned date+time column (Steve: dates on every entry); widen gitignore to keep all scraped broker-ad-signals data (3rd-party tokens) out of git (TK-10708)

02c0a119ce9e376d91c2cf0056395e6eeefaea4d · 2026-08-19 17:42:41 -0700 · Steve Abrams

Files touched

Diff

commit 02c0a119ce9e376d91c2cf0056395e6eeefaea4d
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Aug 19 17:42:41 2026 -0700

    advertising viewer: add sortable Scanned date+time column (Steve: dates on every entry); widen gitignore to keep all scraped broker-ad-signals data (3rd-party tokens) out of git (TK-10708)
---
 .gitignore                    | 2 +-
 public/advertising/index.html | 8 +++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/.gitignore b/.gitignore
index e9e339c..a2a33a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,7 +12,7 @@ out/provenance-worklist-*.json
 out/provenance-2*.json
 
 # generated crawl data (contains third-party public tracking IDs; regenerated by the crawler)
-public/advertising/broker-ad-signals.json
+public/advertising/broker-ad-signals*.json
 public/advertising/broker-ad-signals.csv
 data/broker-ad-signals.json
 data/ad-scan.log
diff --git a/public/advertising/index.html b/public/advertising/index.html
index 92f2c73..93bf29b 100644
--- a/public/advertising/index.html
+++ b/public/advertising/index.html
@@ -39,11 +39,12 @@
 </div>
 <table><thead><tr>
  <th data-k="firm">Firm</th><th data-k="domain">Domain</th><th data-k="paid_count">Paid ads</th>
- <th data-k="_plats">Platforms</th><th data-k="google_analytics">GA</th><th data-k="flyer_count">Flyers/PDFs</th>
+ <th data-k="_plats">Platforms</th><th data-k="google_analytics">GA</th><th data-k="flyer_count">Flyers/PDFs</th><th data-k="scanned_at">Scanned</th>
 </tr></thead><tbody id="tb"></tbody></table>
 <script>
 const PLAT={google_ads:['g','Google'],bing_ads:['b','Bing'],meta:['m','Meta'],linkedin:['l','LinkedIn'],tiktok:['t','TikTok'],twitter:['t','X'],pinterest:['x','Pinterest'],reddit:['x','Reddit'],snap:['x','Snap'],amazon:['x','Amazon'],criteo:['x','Criteo'],taboola:['x','Taboola'],outbrain:['x','Outbrain'],adroll:['x','AdRoll'],doubleclick:['x','DoubleClick']};
 let DATA=[],sortK='paid_count',sortDir=-1;
+const fmtWhen=s=>{if(!s)return '<span class="none">—</span>';const d=new Date(s);return isNaN(d)?'—':d.toLocaleString(undefined,{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'});};
 const plats=r=>Object.keys(PLAT).filter(p=>r[p]);
 function chips(r){const on=plats(r);return on.length?on.map(p=>`<span class="chip ${PLAT[p][0]}">${PLAT[p][1]}</span>`).join(''):'<span class="none">—</span>';}
 function flyerCell(r){if(!r.flyer_count)return '<span class="none">—</span>';
@@ -55,14 +56,15 @@ function render(){
  if(f==='paid')rows=rows.filter(r=>r.paid_count>0);
  else if(f==='flyers')rows=rows.filter(r=>r.flyer_count>0);
  else if(f)rows=rows.filter(r=>r[f]);
- rows.sort((a,b)=>{let x=a[sortK],y=b[sortK];if(sortK==='firm'||sortK==='domain'){return (''+x).localeCompare(''+y)*sortDir;}return ((x||0)-(y||0))*sortDir;});
+ rows.sort((a,b)=>{let x=a[sortK],y=b[sortK];if(sortK==='firm'||sortK==='domain'||sortK==='scanned_at'){return (''+(x||'')).localeCompare(''+(y||''))*sortDir;}return ((x||0)-(y||0))*sortDir;});
  document.getElementById('tb').innerHTML=rows.map(r=>`<tr>
   <td><b>${(r.firm||'').replace(/</g,'&lt;')||'—'}</b></td>
   <td><a href="https://${r.domain}" target="_blank" rel="noopener noreferrer">${r.domain}</a></td>
   <td class="${r.paid_count?'paid':'no'}">${r.paid_count||'·'}</td>
   <td>${chips(r)}</td>
   <td style="text-align:center">${r.google_analytics?'✓':'<span class="none">·</span>'}</td>
-  <td>${flyerCell(r)}</td></tr>`).join('');
+  <td>${flyerCell(r)}</td>
+  <td style="color:#8A5A00;white-space:nowrap" title="${r.scanned_at||''}">${fmtWhen(r.scanned_at)}</td></tr>`).join('');
  const adv=rows.filter(r=>r.paid_count>0).length,fl=rows.filter(r=>r.flyer_count>0).length;
  document.getElementById('stat').textContent=`${rows.length} brokers · ${adv} advertising · ${fl} with flyers`;
 }

← c543659 sources dashboard: click-to-drill on every graph → modal of  ·  back to Re Flyer Aggregator  ·  broker-ad-signals: fix stale console log that misreported CS 9b103fe →