[object Object]

← back to Rentv Ad Engine

wire as-aired ad timeline into dossier (per-airing ▶ deep-link + spoken copy) + add CRE Talk producer page (/Producers/View/618) source link to header (Steve-directed)

db15224e10397d449d5f11288548ac3ffd14e671 · 2026-08-07 11:12:21 -0700 · Steve Abrams

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit db15224e10397d449d5f11288548ac3ffd14e671
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Fri Aug 7 11:12:21 2026 -0700

    wire as-aired ad timeline into dossier (per-airing ▶ deep-link + spoken copy) + add CRE Talk producer page (/Producers/View/618) source link to header (Steve-directed)
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 public/index.html | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/public/index.html b/public/index.html
index ecc24f4..ddcbc7c 100644
--- a/public/index.html
+++ b/public/index.html
@@ -71,6 +71,7 @@
   <div style="margin-left:auto;display:flex;gap:10px;font-size:12px">
     <a href="https://soundcloud.com/rentvnews" target="_blank" rel="noopener" title="RENTV podcast on SoundCloud">🎧 Podcast</a>
     <a href="https://www.rentvreview.com" target="_blank" rel="noopener" title="The REview — RENTV's authoritative episode archive">📺 The REview</a>
+    <a href="https://www.rentvreview.com/Producers/View/618" target="_blank" rel="noopener" title="RENTV CRE Talk — all episodes + official sponsors on The REview">🎬 CRE Talk episodes</a>
   </div>
 </header>
 
@@ -101,7 +102,7 @@ const setLS=(k,v)=>localStorage.setItem("rae_"+k,JSON.stringify(v));
 const siteURL=s=>/^https?:/.test(s)?s:"https://"+s;
 const telURL=p=>"tel:"+String(p).replace(/[^\d+]/g,"");
 
-let DATA={advertisers:[],guests:[],videos:[],emails:[],podcasts:[]}, FRAMES={}, SYN={}, RV={}, ADCLIPS={};
+let DATA={advertisers:[],guests:[],videos:[],emails:[],podcasts:[]}, FRAMES={}, SYN={}, RV={}, ADCLIPS={}, AIRINGS={};
 let view=LS("view","advertisers"), mode=LS("mode","cards");
 
 const SORTS={
@@ -131,6 +132,7 @@ async function boot(){
   try{SYN=await fetch("api/synopses").then(r=>r.json())}catch{SYN={}}
   try{DATA.emails=(await fetch("api/emails").then(r=>r.json())).emails||[]}catch{DATA.emails=[]}
   try{RV=await fetch("api/rentvreview").then(r=>r.json())}catch{RV={}}
+  try{(await fetch("api/adairings").then(r=>r.json())).airings.forEach(a=>{(AIRINGS[a.episode_id]=AIRINGS[a.episode_id]||[]).push(a)})}catch{AIRINGS={}}
   try{DATA.podcasts=(await fetch("api/soundcloud").then(r=>r.json())).episodes||[]}catch{DATA.podcasts=[]}
   try{(await fetch("api/adclips").then(r=>r.json())).clips||[]}catch{}
   $("#stat").innerHTML=`<b>${s.advertisers}</b> advertisers · <b>${s.guests}</b> guests · <b>${s.videos_rich}</b>/${s.videos_total} videos transcribed`;
@@ -405,6 +407,12 @@ window.openEpisode=id=>{
       ${RV[id].guest_note?`<div class="kv">🎤 ${esc(RV[id].guest_note)}</div>`:""}
       ${(RV[id].sponsors||[]).length?`<div class="row"><span class="kv">Official sponsors:</span>${RV[id].sponsors.map(s=>`<span class="chip" style="color:var(--gold);border-color:#3a3320">${esc(s)}</span>`).join("")}</div>`:""}
     </div>`:""}
+    ${(AIRINGS[id]||[]).length?`<h3>As-aired ad timeline (${AIRINGS[id].length})</h3>
+      <div class="muted" style="margin:-4px 0 6px">Exact second each sponsor spot aired — click ▶ to jump to that moment.</div>
+      ${AIRINGS[id].slice().sort((a,b)=>a.start-b.start).map(x=>`<div style="margin:4px 0">
+        <a href="${esc(x.deeplink)}" target="_blank" rel="noopener" class="mailbtn" style="text-decoration:none">▶ ${esc(x.timecode)}</a>
+        <b>${esc(x.advertiser)}</b>
+        <span class="muted"> — "${esc((x.spoken_copy||'').slice(0,110))}…"</span></div>`).join("")}`:""}
     <h3>Advertisers in this episode (${ads.length})</h3>
     ${ads.length?ads.map(a=>`<div class="row" style="margin:4px 0"><b>${esc(a.name)}</b> <span class="badge cat">${esc(a.category)}</span>
         ${(a.websites||[]).map(w=>`<a href="${siteURL(esc(w))}" target="_blank" rel="noopener">${esc(w)}</a>`).join(" ")}

← 4864f38 deep-frame build: PROVEN real-browser frame capture (postMes  ·  back to Rentv Ad Engine  ·  auto-data-snapshot: 2026-08-07T11:14:36 (8 data files) — dat 2ed2dbe →