[object Object]

← back to Rentv

feat(social): add Instagram + featured RENTV Review video to /social; new 'RENTV on the Web' section

cf61759dcfe8741cfa60b1994bd844ceca2474b2 · 2026-08-01 11:12:25 -0700 · Steve

Files touched

Diff

commit cf61759dcfe8741cfa60b1994bd844ceca2474b2
Author: Steve <steve@designerwallcoverings.com>
Date:   Sat Aug 1 11:12:25 2026 -0700

    feat(social): add Instagram + featured RENTV Review video to /social; new 'RENTV on the Web' section
---
 data/consulting/socials.json | 19 +++++++++++++++----
 public/social.html           | 32 +++++++++++++++++++++++++++++++-
 2 files changed, 46 insertions(+), 5 deletions(-)

diff --git a/data/consulting/socials.json b/data/consulting/socials.json
index 932d432d..66442a38 100644
--- a/data/consulting/socials.json
+++ b/data/consulting/socials.json
@@ -1,5 +1,5 @@
 {
-  "instagram": null,
+  "instagram": "https://www.instagram.com/therentv.com_/",
   "facebook": "https://www.facebook.com/Rentv.comInc/",
   "tiktok": null,
   "youtube": null,
@@ -14,9 +14,20 @@
     "method": "web-search + resolve check",
     "found": {
       "linkedin": "rentv.com-inc (818 followers)",
-      "facebook": "Rentv.comInc (founded 1998)"
+      "facebook": "Rentv.comInc (founded 1998)",
+      "instagram": "therentv.com_ (supplied by Steve 2026-08-01)"
     },
-    "note": "LinkedIn + Facebook exist but are NOT linked from rentv.com homepage. Twitter/X + Instagram: none confirmed — opportunity."
+    "note": "LinkedIn + Facebook + Instagram confirmed. X/Twitter handle pending (garbled paste — awaiting Steve)."
   },
-  "twitter": null
+  "twitter": null,
+  "featured_video": {
+    "title": "SF Commercial Property Conversations with Guest, Steven Bloom: Reinventing Real Estate Media with RENTV.com",
+    "source": "RENTV Review",
+    "host": "Bruce Bean",
+    "guest": "Steven Bloom",
+    "published": "2025-12-23",
+    "url": "https://www.rentvreview.com/Videos/View/3103",
+    "poster_youtube_id": "OdFPMtToKqk",
+    "note": "Steve-supplied 2026-08-01. Links to the authoritative rentvreview.com source page; poster is the page's lead YouTube thumbnail."
+  }
 }
\ No newline at end of file
diff --git a/public/social.html b/public/social.html
index e4a440a7..2e74e022 100644
--- a/public/social.html
+++ b/public/social.html
@@ -231,6 +231,11 @@
       <h2>Channels</h2>
       <div class="chan" id="channels"></div>
     </div>
+    <div class="panel">
+      <h2>RENTV on the Web <span style="color:var(--muted);font-weight:400;text-transform:none;letter-spacing:0">— accounts &amp; featured video</span></h2>
+      <div id="rentvFeatured"></div>
+      <div id="rentvFollow" class="chan" style="margin-top:12px"></div>
+    </div>
     <div class="panel">
       <h2>Compose a post <span style="color:var(--muted);font-weight:400;text-transform:none;letter-spacing:0">(draft only)</span></h2>
       <div class="gate">⚠ Distribution is <b>draft-only</b>. Posts are saved here for review — nothing publishes to any channel until you enable it.</div>
@@ -292,9 +297,10 @@
     document.getElementById('channels').innerHTML = PLAT.map(function(p){
       var url = ch[p[0]] || (p[0]==='x' ? ch.twitter : null);
       var li = p[0]==='linkedin' ? ' li' : '';
-      if (url) return '<a class="on'+li+'" href="'+url+'" target="_blank"><b>'+p[2]+'</b> '+p[1]+'<span class="st y">live</span></a>';
+      if (url) return '<a class="on'+li+'" href="'+url+'" target="_blank" rel="noopener noreferrer"><b>'+p[2]+'</b> '+p[1]+'<span class="st y">live</span></a>';
       return '<div class="off'+li+'"><b>'+p[2]+'</b> '+p[1]+'<span class="st n">—</span></div>';
     }).join('');
+    renderRentvWeb(ch);
     // calendar
     document.querySelector('#cal tbody').innerHTML = (d.calendar||[]).map(function(c){
       return '<tr><td>'+c.day+'</td><td>'+c.platform+'</td><td>'+fmtTopic(c.topic)+'</td><td><span class="badge">'+(c.status||'').replace(/ —.*/,'')+'</span></td></tr>';
@@ -310,6 +316,30 @@
     renderDrafts(d.drafts||[]);
   });
 
+  function fmtDate(iso){ if(!iso) return ''; try{ return new Date(iso+'T00:00:00').toLocaleDateString(undefined,{year:'numeric',month:'short',day:'numeric'}); }catch(e){ return iso; } }
+  function renderRentvWeb(ch){
+    ch = ch || {};
+    var FOLLOW = [['instagram','Instagram','◎'],['x','X (Twitter)','𝕏'],['facebook','Facebook','f'],['linkedin','LinkedIn','in']];
+    document.getElementById('rentvFollow').innerHTML = FOLLOW.map(function(p){
+      var url = ch[p[0]] || (p[0]==='x' ? ch.twitter : null);
+      if (url) return '<a class="on" href="'+url+'" target="_blank" rel="noopener noreferrer"><b>'+p[2]+'</b> '+p[1]+'<span class="st y">follow</span></a>';
+      return '<div class="off"><b>'+p[2]+'</b> '+p[1]+'<span class="st n">—</span></div>';
+    }).join('');
+    var fv = ch.featured_video, el = document.getElementById('rentvFeatured');
+    if (!fv || !fv.url) { el.innerHTML = ''; return; }
+    var poster = fv.poster_youtube_id ? 'https://img.youtube.com/vi/'+encodeURIComponent(fv.poster_youtube_id)+'/hqdefault.jpg' : '';
+    var meta = [fv.source, (fv.guest?'Guest: '+fv.guest:''), (fv.host?'Host: '+fv.host:''), fmtDate(fv.published)].filter(Boolean).join(' · ');
+    el.innerHTML =
+      '<a class="fv" href="'+fv.url+'" target="_blank" rel="noopener noreferrer" '
+        +'style="display:flex;gap:14px;text-decoration:none;color:inherit;border:1px solid var(--line,#2a2a2a);border-radius:10px;padding:10px;align-items:flex-start">'
+        +(poster?'<img src="'+poster+'" alt="" loading="lazy" style="width:168px;height:94px;object-fit:cover;border-radius:6px;flex:0 0 auto;background:#000">':'')
+        +'<span style="min-width:0">'
+          +'<span style="display:block;font-weight:600;line-height:1.35;margin-bottom:4px">'+fmtTopic(fv.title||'Featured video')+'</span>'
+          +'<span style="display:block;font-size:12.5px;color:var(--muted)">'+fmtTopic(meta)+'</span>'
+          +'<span style="display:inline-block;margin-top:8px;font-size:12.5px;color:var(--accent,#4aa3ff)">▶ Watch on rentvreview.com ↗</span>'
+        +'</span>'
+      +'</a>';
+  }
   function renderDrafts(list){
     document.getElementById('drafts').innerHTML = (list||[]).map(function(x){
       var when = new Date(x.created_at).toLocaleString(undefined,{month:'short',day:'numeric',hour:'numeric',minute:'2-digit'});

← 871a02b4 chore: lint (py with-context), refactor (Invalid-Date guard,  ·  back to Rentv  ·  review: pin video 3103 (Steven Bloom / RenTV founder) into T ed30a7bf →