← back to Rentv
security(a11y): rel=noopener noreferrer on all target=_blank anchors fleet-wide
6f7c108053d20ff6a1bef997b375024ea216ef5e · 2026-08-08 08:55:58 -0700 · Steve Abrams
/yoloforever cycle 3 (DTD verdict A, unanimous 5/5): enforce Steve's codified fleet
standing rule ('noopener noreferrer' on external links) across all of public/.
19 anchors had NO rel added; 36 pre-existing rel="noopener" (missing noreferrer,
incl. real external links to linkedin.com / sublease.com / crelc.com) upgraded to
rel="noopener noreferrer". 55 anchors across 18 files; both sweeps now 0 remaining.
Cody gate = FIX FIRST -> caught that the first-pass regex was blind to partial-rel
tags (self-certified '0 remaining' while 36 external noopener-only tags survived);
fixed by adding a second upgrade pass. Diff normalize-verified: ONLY rel attrs changed,
no markup touched. npm test 95 pass / 0 fail; /review /markets /about /conferences 200.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Files touched
M public/about.htmlM public/admin/pr-intelligence/credentials.htmlM public/admin/publish.htmlM public/advertise.htmlM public/allstar.htmlM public/article.htmlM public/audience.htmlM public/conferences.htmlM public/consulting/portal.htmlM public/cre-talk.htmlM public/desk.htmlM public/la-commercial.htmlM public/markets.htmlM public/press/index.htmlM public/review.htmlM public/section.htmlM public/social.htmlM public/subscribe.html
Diff
commit 6f7c108053d20ff6a1bef997b375024ea216ef5e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sat Aug 8 08:55:58 2026 -0700
security(a11y): rel=noopener noreferrer on all target=_blank anchors fleet-wide
/yoloforever cycle 3 (DTD verdict A, unanimous 5/5): enforce Steve's codified fleet
standing rule ('noopener noreferrer' on external links) across all of public/.
19 anchors had NO rel added; 36 pre-existing rel="noopener" (missing noreferrer,
incl. real external links to linkedin.com / sublease.com / crelc.com) upgraded to
rel="noopener noreferrer". 55 anchors across 18 files; both sweeps now 0 remaining.
Cody gate = FIX FIRST -> caught that the first-pass regex was blind to partial-rel
tags (self-certified '0 remaining' while 36 external noopener-only tags survived);
fixed by adding a second upgrade pass. Diff normalize-verified: ONLY rel attrs changed,
no markup touched. npm test 95 pass / 0 fail; /review /markets /about /conferences 200.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
public/about.html | 2 +-
public/admin/pr-intelligence/credentials.html | 4 ++--
public/admin/publish.html | 2 +-
public/advertise.html | 2 +-
public/allstar.html | 14 +++++++-------
public/article.html | 2 +-
public/audience.html | 2 +-
public/conferences.html | 2 +-
public/consulting/portal.html | 16 ++++++++--------
public/cre-talk.html | 4 ++--
public/desk.html | 2 +-
public/la-commercial.html | 4 ++--
public/markets.html | 2 +-
public/press/index.html | 2 +-
public/review.html | 6 +++---
public/section.html | 2 +-
public/social.html | 16 ++++++++--------
public/subscribe.html | 2 +-
18 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/public/about.html b/public/about.html
index 14447586..fcbad67f 100644
--- a/public/about.html
+++ b/public/about.html
@@ -119,7 +119,7 @@
<div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals & conferences across the Western United States since 1998.</p></div>
<div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
<div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
- <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
+ <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
</div><div class="fine">© 2026 RENTV.com · 5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045 · (310) 213-6409</div></div></footer>
<script>
var t=document.getElementById('today');if(t)t.textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
diff --git a/public/admin/pr-intelligence/credentials.html b/public/admin/pr-intelligence/credentials.html
index ec5b6aef..a8483460 100644
--- a/public/admin/pr-intelligence/credentials.html
+++ b/public/admin/pr-intelligence/credentials.html
@@ -41,10 +41,10 @@
<details open>
<summary>How to get these 4 values (about 3 minutes)</summary>
<ol class="steps">
- <li>Go to <a href="https://console.cloud.google.com/apis/credentials" target="_blank" rel="noopener">Google Cloud Console → Credentials</a>. Create (or pick) a project.</li>
+ <li>Go to <a href="https://console.cloud.google.com/apis/credentials" target="_blank" rel="noopener noreferrer">Google Cloud Console → Credentials</a>. Create (or pick) a project.</li>
<li><b>Enable the Gmail API:</b> APIs & Services → Library → search “Gmail API” → Enable.</li>
<li>Credentials → <b>Create Credentials → OAuth client ID</b> → type <b>Web application</b>. Under “Authorized redirect URIs” add <code>https://developers.google.com/oauthplayground</code>. Copy the <b>Client ID</b> and <b>Client Secret</b> below.</li>
- <li>Open the <a href="https://developers.google.com/oauthplayground" target="_blank" rel="noopener">OAuth 2.0 Playground</a> → gear ⚙ (top right) → check <b>“Use your own OAuth credentials”</b> → paste your Client ID + Secret.</li>
+ <li>Open the <a href="https://developers.google.com/oauthplayground" target="_blank" rel="noopener noreferrer">OAuth 2.0 Playground</a> → gear ⚙ (top right) → check <b>“Use your own OAuth credentials”</b> → paste your Client ID + Secret.</li>
<li>In the left list, under <b>Gmail API v1</b> select the scope <code>https://www.googleapis.com/auth/gmail.readonly</code> → <b>Authorize APIs</b> → sign in with the Gmail account you want to sync → <b>Exchange authorization code for tokens</b> → copy the <b>Refresh token</b> below.</li>
</ol>
</details>
diff --git a/public/admin/publish.html b/public/admin/publish.html
index 47d90e02..b64c8894 100644
--- a/public/admin/publish.html
+++ b/public/admin/publish.html
@@ -48,7 +48,7 @@ function load(){fetch('/api/posts').then(function(r){return r.json();}).then(fun
$('cnt').textContent='· '+d.count;
$('list').innerHTML=(d.items||[]).map(function(p){return '<li><span class="badge '+(p.status==='published'?'pub">Live':'dr">Draft')+'</span> <h4 style="display:inline;margin-left:6px">'+esc(p.title)+'</h4>'+
'<div class="m">'+esc(p.cat)+' · '+esc(p.author)+' · '+esc((p.updated_at||'').slice(0,16).replace("T"," "))+' · '+esc(p.id)+'</div>'+
- '<div class="act"><a onclick="edit(\''+p.id+'\')">Edit</a><a onclick="pub(\''+p.id+'\',\''+(p.status==='published'?'draft':'published')+'\')">'+(p.status==='published'?'Unpublish':'Publish')+'</a><a class="del" onclick="del(\''+p.id+'\')">Delete</a> <a href="/post/'+p.id+'" target="_blank">Open ↗</a></div></li>';}).join('')||'<li class="mut">No posts yet — write your first above.</li>';
+ '<div class="act"><a onclick="edit(\''+p.id+'\')">Edit</a><a onclick="pub(\''+p.id+'\',\''+(p.status==='published'?'draft':'published')+'\')">'+(p.status==='published'?'Unpublish':'Publish')+'</a><a class="del" onclick="del(\''+p.id+'\')">Delete</a> <a rel="noopener noreferrer" href="/post/'+p.id+'" target="_blank">Open ↗</a></div></li>';}).join('')||'<li class="mut">No posts yet — write your first above.</li>';
});}
window.edit=function(id){fetch('/api/posts/'+id).then(function(r){return r.json();}).then(function(p){
$('pid').value=p.id;$('title').value=p.title||'';$('cat').value=p.cat||'';$('author').value=p.author||'';$('dek').value=p.dek||'';$('image').value=p.image||'';$('body').value=p.body||'';$('status').value=p.status||'draft';
diff --git a/public/advertise.html b/public/advertise.html
index 1828e386..9756618e 100644
--- a/public/advertise.html
+++ b/public/advertise.html
@@ -128,7 +128,7 @@
<div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals & conferences across the Western United States since 1998.</p></div>
<div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
<div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
- <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
+ <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
</div><div class="fine">© 2026 RENTV.com · 5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045 · (310) 213-6409</div></div></footer>
<script>
var t=document.getElementById('today');if(t)t.textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
diff --git a/public/allstar.html b/public/allstar.html
index 65be18a1..32cdf9ed 100644
--- a/public/allstar.html
+++ b/public/allstar.html
@@ -266,7 +266,7 @@
<div class="k">2026 Flagship</div>
<h3>CRE & Lending Conference</h3>
<div class="d">Wed · April 29, 2026 · The Westin Long Beach · 30+ expert speakers</div>
- <a href="https://crelc.com/socal/" target="_blank" rel="noopener">Register at crelc.com →</a>
+ <a href="https://crelc.com/socal/" target="_blank" rel="noopener noreferrer">Register at crelc.com →</a>
</div>
</div>
</div>
@@ -310,7 +310,7 @@
<section class="panel wrap" id="events" style="max-width:var(--maxw)">
<h2 class="rule" style="margin-top:8px">2026 event calendar</h2>
<p class="lede">All Star Group produces the industry's signature CRE, lending and hospitality gatherings.
- The 2026 flagship is confirmed below; recurring series return on their usual annual cadence with dates announced through <a href="https://crelc.com/" target="_blank" rel="noopener" style="color:var(--red);font-weight:700">crelc.com</a>.</p>
+ The 2026 flagship is confirmed below; recurring series return on their usual annual cadence with dates announced through <a href="https://crelc.com/" target="_blank" rel="noopener noreferrer" style="color:var(--red);font-weight:700">crelc.com</a>.</p>
<div class="ev flag">
<div class="date"><div class="mo">Apr</div><div class="dy">29</div><div class="yr">2026</div></div>
@@ -318,7 +318,7 @@
<h4>Commercial Real Estate & Lending Conference (CRELC) — So. California</h4>
<div class="meta"><span class="pin">📍 The Westin Long Beach</span> · 30+ expert speakers: economists, lenders, developers, brokers & attorneys · <b>Flagship</b></div>
</div>
- <a class="btn go" href="https://crelc.com/socal/" target="_blank" rel="noopener">Register →</a>
+ <a class="btn go" href="https://crelc.com/socal/" target="_blank" rel="noopener noreferrer">Register →</a>
</div>
<div class="ev">
@@ -327,7 +327,7 @@
<h4>Commercial Real Estate Summit — ONLINE</h4>
<div class="meta">Virtual half-day summit · national audience · <span class="tba">Date TBA</span></div>
</div>
- <a class="btn ghost go" href="https://allstargroup.com/" target="_blank" rel="noopener">Details →</a>
+ <a class="btn ghost go" href="https://allstargroup.com/" target="_blank" rel="noopener noreferrer">Details →</a>
</div>
<div class="ev">
@@ -336,7 +336,7 @@
<h4>LoanMakers Forum — Networking Luncheon & Expo</h4>
<div class="meta">Lender & broker networking expo · <span class="tba">Date TBA</span></div>
</div>
- <a class="btn ghost go" href="https://allstargroup.com/" target="_blank" rel="noopener">Details →</a>
+ <a class="btn ghost go" href="https://allstargroup.com/" target="_blank" rel="noopener noreferrer">Details →</a>
</div>
<div class="ev">
@@ -345,7 +345,7 @@
<h4>Commercial Real Estate Networking Expo — Northern California</h4>
<div class="meta">Bay Area CRE & lending networking · <span class="tba">Date TBA</span></div>
</div>
- <a class="btn ghost go" href="https://allstargroup.com/" target="_blank" rel="noopener">Details →</a>
+ <a class="btn ghost go" href="https://allstargroup.com/" target="_blank" rel="noopener noreferrer">Details →</a>
</div>
<h2 class="rule">What to expect on stage</h2>
@@ -370,7 +370,7 @@
<div class="k">Established</div>
<h3>Sept. 1995</h3>
<div class="d">30 years financing income property and convening the people who lend on it.</div>
- <a href="https://allstargroup.com/" target="_blank" rel="noopener">allstargroup.com →</a>
+ <a href="https://allstargroup.com/" target="_blank" rel="noopener noreferrer">allstargroup.com →</a>
</div>
</div>
diff --git a/public/article.html b/public/article.html
index fce5e2da..ff1a104b 100644
--- a/public/article.html
+++ b/public/article.html
@@ -85,7 +85,7 @@
<div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals & conferences across the Western United States since 1998.</p></div>
<div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
<div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
- <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
+ <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
</div><div class="fine">© 2026 RENTV.com · Commercial real estate news, Western U.S. · Headlines refreshed live from rentv.com</div></div></footer>
<script>
diff --git a/public/audience.html b/public/audience.html
index 2505ef24..e494e038 100644
--- a/public/audience.html
+++ b/public/audience.html
@@ -109,7 +109,7 @@ const esc=s=>String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&','<':'<',
const dstr=d=>d?new Date(d).toLocaleDateString(undefined,{month:'short',day:'numeric',year:'numeric'}):'—';
const fmtWhen=d=>{try{return new Date(d).toLocaleString(undefined,{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'});}catch(e){return d||'—';}};
const LI_P=(n,f)=>`https://www.linkedin.com/search/results/people/?keywords=${enc([n,f].filter(Boolean).join(' '))}`,LI_C=f=>`https://www.linkedin.com/search/results/companies/?keywords=${enc(f)}`,GOOG=q=>`https://www.google.com/search?q=${enc(q)}`,MAPS=q=>`https://www.google.com/maps/search/?api=1&query=${enc(q)}`;
-const A=(h,i,l)=>`<a class="act" href="${h}" target="_blank" rel="noopener" onclick="event.stopPropagation()"><span class="i">${i}</span>${l}</a>`;
+const A=(h,i,l)=>`<a class="act" href="${h}" target="_blank" rel="noopener noreferrer" onclick="event.stopPropagation()"><span class="i">${i}</span>${l}</a>`;
function contactActions(c){
return [
c.email?A('mailto:'+c.email,'✉️','Email'):'',
diff --git a/public/conferences.html b/public/conferences.html
index 99cd3d0d..66fa61dc 100644
--- a/public/conferences.html
+++ b/public/conferences.html
@@ -116,7 +116,7 @@
<div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals & conferences across the Western United States since 1998.</p></div>
<div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
<div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
- <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
+ <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
</div><div class="fine">© 2026 RENTV.com · 5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045 · (310) 213-6409</div></div></footer>
<script>
var t=document.getElementById('today');if(t)t.textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
diff --git a/public/consulting/portal.html b/public/consulting/portal.html
index f0a2d4c0..9fdbb92e 100644
--- a/public/consulting/portal.html
+++ b/public/consulting/portal.html
@@ -162,7 +162,7 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
<nav class="menu" id="portalmenu" onclick="if(event.target.closest('a'))document.body.classList.remove('nav')">
<a class="mbrand" href="#summary">REN<span>TV</span>.com<small>Growth Strategy · 2026</small></a>
<div class="mh">Contents</div><a href="#summary">Executive Summary</a><a href="#swot">SWOT Analysis</a><a href="#lowhanging">Low Hanging Fruit</a><a href="#reputation">Reputation & Authority</a><a href="#empire">The Empire & Sublease.com</a><a href="#competitors">Competitors</a><a href="#wires">News + Conference Rivals</a><a href="#advertising">Where to Advertise</a><a href="#timing">Timing & Cadence</a><a href="#audit">Website Audit</a><a href="#teardown">Page-by-Page Teardown</a><a href="#social">Social Media Audit</a><a href="#suggested">Suggested New Websites</a><a href="#partners">Unlikely Partners</a><a href="#revenue">Unlikely Revenue</a><a href="#videos">Video + Brand Films</a><a href="#dealdesk">Live Deal Desk (demo)</a><a href="#roadmap">90-Day Roadmap</a><a href="#sources">Sources & Methodology</a>
- <div class="minfo"><div class="mh">RENTV.com, Inc.</div><p>5757 W. Century Blvd., #700, Los Angeles, CA 90045</p><p>Steve Bloom — Owner / Producer · (310) 213-6409</p><p>Arnie Garfinkel — CRE Talk co-host · (818) 532-7660</p><p>Allen Wolfsheimer — News/Resources · (310) 836-8238</p><p>Daniel Ginzburg — CFO, Dandeana Corp · (424) 251-8405</p><p><span>rentv.com</span> · <a href="https://www.rentvreview.com" target="_blank" rel="noopener">The REview ↗</a> · <a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn ↗</a></p></div>
+ <div class="minfo"><div class="mh">RENTV.com, Inc.</div><p>5757 W. Century Blvd., #700, Los Angeles, CA 90045</p><p>Steve Bloom — Owner / Producer · (310) 213-6409</p><p>Arnie Garfinkel — CRE Talk co-host · (818) 532-7660</p><p>Allen Wolfsheimer — News/Resources · (310) 836-8238</p><p>Daniel Ginzburg — CFO, Dandeana Corp · (424) 251-8405</p><p><span>rentv.com</span> · <a href="https://www.rentvreview.com" target="_blank" rel="noopener noreferrer">The REview ↗</a> · <a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn ↗</a></p></div>
</nav>
<div class="hero" id="summary">
@@ -279,7 +279,7 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
<section id="teardown"><div class="eyebrow">07 · Page-by-Page Teardown</div><h2 class="disp">Every page, graded — with the fix.</h2><div class="accbody">
<p class="lead2">We captured every page of rentv.com live and put each through an adversarial review. The pattern: <b>the content operation works — the website destroys it at every conversion point.</b> Headline finding: the site still runs <b>Universal Analytics (UA-148799896-1)</b>, which Google shut down in 2023 — <b>there has been no traffic data for ~3 years</b>. Every decision below is currently being made blind.</p>
- <div class="tdp rv"><div class="tdshot"><a href="/portal/audit/index.png" target="_blank"><img src="/portal/audit/index.png" loading="lazy" alt="index screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D+</span><h3 class="disp">rentv.com (homepage)</h3></div><div class="tdl">Issues</div><ul><li>Above the fold is a flea market: a sublease.com banner owns the top-right quarter, plus two more ads and a video box — before a single headline.</li><li>Three-column table layout leaves the actual news ~45% of a fixed-width page; nav links are 11px gray text.</li><li>Every story gets identical tiny treatment — no lead story, no hierarchy, no way to scan. No bylines, no trust anchors.</li><li>"The REview" widget renders as an unexplained black box with no CTA.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Kill the top-of-fold ad wall; hero = one featured story card (large image, 24px+ headline, deck, byline).</li><li>Responsive grid: full-width hero → card feed → labeled sticky sponsor rail (max 2 ads).</li><li>Editorial tiers: lead story, top-3 row, then the feed — type scale does the talking.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/advertise.png" target="_blank"><img src="/portal/audit/advertise.png" loading="lazy" alt="advertise screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/advertise.php — the AD SALES page</h3></div><div class="tdl">Issues</div><ul><li>The page that makes the money is a wall of 12px small print — products listed with no pricing table, no media kit, no visuals of any ad unit.</li><li>Zero proof of audience: no open rates, no advertiser logos, no case study. A media buyer closes the tab in 8 seconds.</li><li>Sole CTA is "call us / raw email" — no form, no rate-card download, no buy path.</li><li>A sublease.com ad sits in the header of the page selling RENTV’s own inventory — self-defeating.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Rebuild as a media-kit landing page: 3-tier pricing table (Newsletter / eBlast / Display), audience stats in bold, "Request Media Kit" form.</li><li>Add a Current Advertisers logo row + one pull-quote (one phone call gets it).</li><li>Remove sublease.com from this page entirely.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/subscriber.png" target="_blank"><img src="/portal/audit/subscriber.png" loading="lazy" alt="subscriber screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D</span><h3 class="disp">/subscriber_info.php — the $146/yr member page</h3></div><div class="tdl">Issues</div><ul><li>A real revenue product ($146/yr Executive Subscriber) sold via a dense bullet wall — free vs. paid never cleanly separated; unanswerable in 10 seconds.</li><li>No sample issue, no preview, no testimonial, no subscriber count — buying an information product sight-unseen.</li><li>CTA is plain text: "CLICK HERE or call us." No visible checkout; beige 2005-registrar aesthetic.</li><li>The News Archive is sold as a paid benefit — but the archive page is freely accessible to everyone.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Two-column conversion page: benefits (headline + one-liner + frequency) left, price card with live Stripe checkout right — add a $15/mo option.</li><li>Publish one Sample Issue link — the single biggest conversion lift available.</li><li>Gate the archive or stop selling it; never sell what you give away.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/providers.png" target="_blank"><img src="/portal/audit/providers.png" loading="lazy" alt="providers screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/service-providers.php — the marketplace</h3></div><div class="tdl">Issues</div><ul><li>~40 categories, every single one "(0)" listings — Accounting (0), Brokerage (0), Construction (0). A directory of failure that trains visitors never to return.</li><li>No search, no cards, no map, no filters — a 1999 Yellow Pages list even if inventory existed.</li><li>"Don’t Be Left Out!" CTA asks providers to join a visibly empty room.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>SEED BEFORE RELAUNCH: scrape LA County business-license data + web research (Exa) for CRE-category firms — contractors, brokers, architects, property managers, lenders — and pre-populate 10–15 real listings per major category with phone numbers. Offer each firm its free listing to claim; they upgrade. An empty directory is not a product; a full one is. <a href="/versions/marketplace.html" target="_blank" style="color:#9fd6b0;text-decoration:underline">→ We already built the seeded demo: 62 real LA providers, live here.</a></li><li>Rebuild as a searchable card grid (name, category badge, city, phone, Contact) with geography filter.</li><li>Monetize with a Featured Listing tier — after inventory exists, never before.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/store.png" target="_blank"><img src="/portal/audit/store.png" loading="lazy" alt="store screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D-</span><h3 class="disp">/store.php — conferences/store</h3></div><div class="tdl">Issues</div><ul><li>Labeled "store," contains no product, price, or buy button — a press page wearing a store costume.</li><li>A FUTURE conference (Arizona, Oct 29 2026) is on the page with no Register button, no speakers, no price — revenue advertising that goes nowhere.</li><li>Past and future events unfiltered in one feed; sponsor logos outweigh the editorial 2:1.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Split: "Upcoming Events" above the fold (date, venue, price, Register Now) vs. "Past Coverage" archive grid.</li><li>Sell recorded sessions as an on-demand library: title, price, 90-second preview, buy button.</li><li>Rename the tab — Conferences and Store are different intents.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/archive.png" target="_blank"><img src="/portal/audit/archive.png" loading="lazy" alt="archive screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D</span><h3 class="disp">/archive.php</h3></div><div class="tdl">Issues</div><ul><li>20 bare hyperlinks with no dates, story counts, previews, or search — a filing cabinet with the labels ripped off.</li><li>Freely accessible while being sold as a paid subscriber benefit.</li><li>No orientation: what years, what geographies, how fresh — unknowable.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Full-text search + geography/content-type filters over the archive.</li><li>Each link shows recent stories + a count ("482 articles, 2019–2026").</li><li>Pick a lane: gate it as a benefit, or use it free to drive newsletter signups.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/newsletter.png" target="_blank"><img src="/portal/audit/newsletter.png" loading="lazy" alt="newsletter screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D+</span><h3 class="disp">/newsletter.php</h3></div><div class="tdl">Issues</div><ul><li>NINE fields for a free newsletter (address, zip, phone…) — Bisnow asks for one. Conversion ≈ zero.</li><li>Distorted-text homemade CAPTCHA ("rjvxk6") — broken-looking, inaccessible.</li><li>Right half of the page is empty void; no pitch, no sample, no reason to sign up — the heading is just "NEWSLETTER."</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Three fields max: Email (required), Name, Company. Delete the rest.</li><li>Invisible reCAPTCHA v3 or honeypot; kill the distorted image.</li><li>Add the pitch: "Join 50,000+ CRE professionals · twice-weekly SoCal deals · free" + a sample-issue link.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/subscribe.png" target="_blank"><img src="/portal/audit/subscribe.png" loading="lazy" alt="subscribe screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/subscribe.php — the paywall</h3></div><div class="tdl">Issues</div><ul><li>The paywall page is a cartoon dog GIF + "Hold on there sport!" + a login box. That is the entire page every non-subscriber hits.</li><li>No subscribe CTA, no path for non-members, no visible password reset — a dead end that costs conversions daily.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Replace with a real paywall intercept: what you’re missing, "$146/yr — Subscribe Now" primary button, login secondary.</li><li>Remove the dog and "sport" TODAY — before any redesign.</li><li>Wire a real password-reset flow; a locked-out subscriber is a churned subscriber.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/contact.png" target="_blank"><img src="/portal/audit/contact.png" loading="lazy" alt="contact screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ca8a04">C-</span><h3 class="disp">/contact.php</h3></div><div class="tdl">Issues</div><ul><li>Twelve fields including FAX in 2026; same broken CAPTCHA; right half of the page is empty.</li><li>No visible email fallback if the form breaks (and on a Windows-1252 site, forms break).</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Six fields: Name, Company, Email, Phone (opt), Subject dropdown, Message.</li><li>Show a direct email + phone under the form; fix the half-empty template site-wide.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/jobworks.png" target="_blank"><img src="/portal/audit/jobworks.png" loading="lazy" alt="jobworks screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/jobworks.php — the jobs board</h3></div><div class="tdl">Issues</div><ul><li>Opens with an "Adobe Flash Player is no longer supported" error banner — Flash died Dec 2020; this has greeted every visitor for 5+ years.</li><li>Every job category is "(0)" — the second of three marketplace pillars with zero inventory.</li><li>Bare "create a listing" link with no pricing, reach, or pitch attached.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Delete the Flash widget today; replace with static HTML.</li><li>Seed or kill: offer 10–15 subscriber firms free 90-day listings, or pull JobWorks from the nav until it has inventory.</li><li>One combined CRE Marketplace landing (live counts + featured listings + "Post a listing" CTA) instead of empty silos.</li></ul></div></div>
+ <div class="tdp rv"><div class="tdshot"><a rel="noopener noreferrer" href="/portal/audit/index.png" target="_blank"><img src="/portal/audit/index.png" loading="lazy" alt="index screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D+</span><h3 class="disp">rentv.com (homepage)</h3></div><div class="tdl">Issues</div><ul><li>Above the fold is a flea market: a sublease.com banner owns the top-right quarter, plus two more ads and a video box — before a single headline.</li><li>Three-column table layout leaves the actual news ~45% of a fixed-width page; nav links are 11px gray text.</li><li>Every story gets identical tiny treatment — no lead story, no hierarchy, no way to scan. No bylines, no trust anchors.</li><li>"The REview" widget renders as an unexplained black box with no CTA.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Kill the top-of-fold ad wall; hero = one featured story card (large image, 24px+ headline, deck, byline).</li><li>Responsive grid: full-width hero → card feed → labeled sticky sponsor rail (max 2 ads).</li><li>Editorial tiers: lead story, top-3 row, then the feed — type scale does the talking.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a rel="noopener noreferrer" href="/portal/audit/advertise.png" target="_blank"><img src="/portal/audit/advertise.png" loading="lazy" alt="advertise screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/advertise.php — the AD SALES page</h3></div><div class="tdl">Issues</div><ul><li>The page that makes the money is a wall of 12px small print — products listed with no pricing table, no media kit, no visuals of any ad unit.</li><li>Zero proof of audience: no open rates, no advertiser logos, no case study. A media buyer closes the tab in 8 seconds.</li><li>Sole CTA is "call us / raw email" — no form, no rate-card download, no buy path.</li><li>A sublease.com ad sits in the header of the page selling RENTV’s own inventory — self-defeating.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Rebuild as a media-kit landing page: 3-tier pricing table (Newsletter / eBlast / Display), audience stats in bold, "Request Media Kit" form.</li><li>Add a Current Advertisers logo row + one pull-quote (one phone call gets it).</li><li>Remove sublease.com from this page entirely.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a rel="noopener noreferrer" href="/portal/audit/subscriber.png" target="_blank"><img src="/portal/audit/subscriber.png" loading="lazy" alt="subscriber screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D</span><h3 class="disp">/subscriber_info.php — the $146/yr member page</h3></div><div class="tdl">Issues</div><ul><li>A real revenue product ($146/yr Executive Subscriber) sold via a dense bullet wall — free vs. paid never cleanly separated; unanswerable in 10 seconds.</li><li>No sample issue, no preview, no testimonial, no subscriber count — buying an information product sight-unseen.</li><li>CTA is plain text: "CLICK HERE or call us." No visible checkout; beige 2005-registrar aesthetic.</li><li>The News Archive is sold as a paid benefit — but the archive page is freely accessible to everyone.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Two-column conversion page: benefits (headline + one-liner + frequency) left, price card with live Stripe checkout right — add a $15/mo option.</li><li>Publish one Sample Issue link — the single biggest conversion lift available.</li><li>Gate the archive or stop selling it; never sell what you give away.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a rel="noopener noreferrer" href="/portal/audit/providers.png" target="_blank"><img src="/portal/audit/providers.png" loading="lazy" alt="providers screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/service-providers.php — the marketplace</h3></div><div class="tdl">Issues</div><ul><li>~40 categories, every single one "(0)" listings — Accounting (0), Brokerage (0), Construction (0). A directory of failure that trains visitors never to return.</li><li>No search, no cards, no map, no filters — a 1999 Yellow Pages list even if inventory existed.</li><li>"Don’t Be Left Out!" CTA asks providers to join a visibly empty room.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>SEED BEFORE RELAUNCH: scrape LA County business-license data + web research (Exa) for CRE-category firms — contractors, brokers, architects, property managers, lenders — and pre-populate 10–15 real listings per major category with phone numbers. Offer each firm its free listing to claim; they upgrade. An empty directory is not a product; a full one is. <a rel="noopener noreferrer" href="/versions/marketplace.html" target="_blank" style="color:#9fd6b0;text-decoration:underline">→ We already built the seeded demo: 62 real LA providers, live here.</a></li><li>Rebuild as a searchable card grid (name, category badge, city, phone, Contact) with geography filter.</li><li>Monetize with a Featured Listing tier — after inventory exists, never before.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a rel="noopener noreferrer" href="/portal/audit/store.png" target="_blank"><img src="/portal/audit/store.png" loading="lazy" alt="store screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D-</span><h3 class="disp">/store.php — conferences/store</h3></div><div class="tdl">Issues</div><ul><li>Labeled "store," contains no product, price, or buy button — a press page wearing a store costume.</li><li>A FUTURE conference (Arizona, Oct 29 2026) is on the page with no Register button, no speakers, no price — revenue advertising that goes nowhere.</li><li>Past and future events unfiltered in one feed; sponsor logos outweigh the editorial 2:1.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Split: "Upcoming Events" above the fold (date, venue, price, Register Now) vs. "Past Coverage" archive grid.</li><li>Sell recorded sessions as an on-demand library: title, price, 90-second preview, buy button.</li><li>Rename the tab — Conferences and Store are different intents.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a rel="noopener noreferrer" href="/portal/audit/archive.png" target="_blank"><img src="/portal/audit/archive.png" loading="lazy" alt="archive screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D</span><h3 class="disp">/archive.php</h3></div><div class="tdl">Issues</div><ul><li>20 bare hyperlinks with no dates, story counts, previews, or search — a filing cabinet with the labels ripped off.</li><li>Freely accessible while being sold as a paid subscriber benefit.</li><li>No orientation: what years, what geographies, how fresh — unknowable.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Full-text search + geography/content-type filters over the archive.</li><li>Each link shows recent stories + a count ("482 articles, 2019–2026").</li><li>Pick a lane: gate it as a benefit, or use it free to drive newsletter signups.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a rel="noopener noreferrer" href="/portal/audit/newsletter.png" target="_blank"><img src="/portal/audit/newsletter.png" loading="lazy" alt="newsletter screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D+</span><h3 class="disp">/newsletter.php</h3></div><div class="tdl">Issues</div><ul><li>NINE fields for a free newsletter (address, zip, phone…) — Bisnow asks for one. Conversion ≈ zero.</li><li>Distorted-text homemade CAPTCHA ("rjvxk6") — broken-looking, inaccessible.</li><li>Right half of the page is empty void; no pitch, no sample, no reason to sign up — the heading is just "NEWSLETTER."</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Three fields max: Email (required), Name, Company. Delete the rest.</li><li>Invisible reCAPTCHA v3 or honeypot; kill the distorted image.</li><li>Add the pitch: "Join 50,000+ CRE professionals · twice-weekly SoCal deals · free" + a sample-issue link.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a rel="noopener noreferrer" href="/portal/audit/subscribe.png" target="_blank"><img src="/portal/audit/subscribe.png" loading="lazy" alt="subscribe screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/subscribe.php — the paywall</h3></div><div class="tdl">Issues</div><ul><li>The paywall page is a cartoon dog GIF + "Hold on there sport!" + a login box. That is the entire page every non-subscriber hits.</li><li>No subscribe CTA, no path for non-members, no visible password reset — a dead end that costs conversions daily.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Replace with a real paywall intercept: what you’re missing, "$146/yr — Subscribe Now" primary button, login secondary.</li><li>Remove the dog and "sport" TODAY — before any redesign.</li><li>Wire a real password-reset flow; a locked-out subscriber is a churned subscriber.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a rel="noopener noreferrer" href="/portal/audit/contact.png" target="_blank"><img src="/portal/audit/contact.png" loading="lazy" alt="contact screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ca8a04">C-</span><h3 class="disp">/contact.php</h3></div><div class="tdl">Issues</div><ul><li>Twelve fields including FAX in 2026; same broken CAPTCHA; right half of the page is empty.</li><li>No visible email fallback if the form breaks (and on a Windows-1252 site, forms break).</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Six fields: Name, Company, Email, Phone (opt), Subject dropdown, Message.</li><li>Show a direct email + phone under the form; fix the half-empty template site-wide.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a rel="noopener noreferrer" href="/portal/audit/jobworks.png" target="_blank"><img src="/portal/audit/jobworks.png" loading="lazy" alt="jobworks screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/jobworks.php — the jobs board</h3></div><div class="tdl">Issues</div><ul><li>Opens with an "Adobe Flash Player is no longer supported" error banner — Flash died Dec 2020; this has greeted every visitor for 5+ years.</li><li>Every job category is "(0)" — the second of three marketplace pillars with zero inventory.</li><li>Bare "create a listing" link with no pricing, reach, or pitch attached.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Delete the Flash widget today; replace with static HTML.</li><li>Seed or kill: offer 10–15 subscriber firms free 90-day listings, or pull JobWorks from the nav until it has inventory.</li><li>One combined CRE Marketplace landing (live counts + featured listings + "Post a listing" CTA) instead of empty silos.</li></ul></div></div>
<p class="lead2" style="margin-top:30px"><b>Overall verdict:</b> a site that was genuinely valuable in 2005 and has received near-zero strategic investment since. News still publishes, conferences still run, and 50,000 opt-in subscribers is a real asset — but a broken Flash banner, an all-zeros marketplace, a cartoon-dog paywall and a phone-number ad page are actively destroying that asset. First fix, before any redesign: <b>install GA4 today</b> — until RENTV knows its own traffic, everything else is guesswork.</p>
</div></section>
@@ -297,32 +297,32 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
<section id="suggested"><div class="eyebrow">09 · Suggested New Websites</div><h2 class="disp">Six directions — each after a CRE-news leader.</h2><div class="accbody">
<p class="lead2">Modern, editorial, mobile-first — modeled on the outlets winning CRE news today. Each opens as a working front-page concept with real layout & motion. Pick a direction; we build it out.</p>
<div class="vgrid">
- <a class="vtile rv" href="/versions/thewire.html" target="_blank" style="--vb:#111114;--vi:#f5f5f7;--vg:#e0243b">
+ <a rel="noopener noreferrer" class="vtile rv" href="/versions/thewire.html" target="_blank" style="--vb:#111114;--vi:#f5f5f7;--vg:#e0243b">
<div class="vswatch"><span style="background:#111114"></span><span style="background:#1a1a1f"></span><span style="background:#e0243b"></span><span style="background:#f5f5f7"></span></div>
<div class="vname">The Wire</div><div class="vmodel">after The Real Deal</div>
<div class="vmood">Real-Deal energy — red-on-black newsroom, aggressive headlines.</div><div class="vopen">Open live concept →</div>
</a>
- <a class="vtile rv" href="/versions/dispatch.html" target="_blank" style="--vb:#0d1b2a;--vi:#eef3f8;--vg:#3fb0ff">
+ <a rel="noopener noreferrer" class="vtile rv" href="/versions/dispatch.html" target="_blank" style="--vb:#0d1b2a;--vi:#eef3f8;--vg:#3fb0ff">
<div class="vswatch"><span style="background:#0d1b2a"></span><span style="background:#14273d"></span><span style="background:#3fb0ff"></span><span style="background:#eef3f8"></span></div>
<div class="vname">Dispatch</div><div class="vmodel">after Bisnow</div>
<div class="vmood">Bisnow-style — newsletter-forward, clean, capture-first.</div><div class="vopen">Open live concept →</div>
</a>
- <a class="vtile rv" href="/versions/observer.html" target="_blank" style="--vb:#14110c;--vi:#f6efe2;--vg:#c9a24b">
+ <a rel="noopener noreferrer" class="vtile rv" href="/versions/observer.html" target="_blank" style="--vb:#14110c;--vi:#f6efe2;--vg:#c9a24b">
<div class="vswatch"><span style="background:#14110c"></span><span style="background:#1e1a12"></span><span style="background:#c9a24b"></span><span style="background:#f6efe2"></span></div>
<div class="vname">The Observer</div><div class="vmodel">after Commercial Observer</div>
<div class="vmood">Commercial-Observer editorial — serif authority, gold on ink.</div><div class="vopen">Open live concept →</div>
</a>
- <a class="vtile rv" href="/versions/terminal.html" target="_blank" style="--vb:#0a0e12;--vi:#e9eef3;--vg:#37d39a">
+ <a rel="noopener noreferrer" class="vtile rv" href="/versions/terminal.html" target="_blank" style="--vb:#0a0e12;--vi:#e9eef3;--vg:#37d39a">
<div class="vswatch"><span style="background:#0a0e12"></span><span style="background:#111820"></span><span style="background:#37d39a"></span><span style="background:#e9eef3"></span></div>
<div class="vname">Terminal</div><div class="vmodel">after CoStar / GlobeSt</div>
<div class="vmood">CoStar/GlobeSt utility — dark data terminal, live tickers & charts.</div><div class="vopen">Open live concept →</div>
</a>
- <a class="vtile rv" href="/versions/broadsheet.html" target="_blank" style="--vb:#fbf3e9;--vi:#2a211a;--vg:#a8442b">
+ <a rel="noopener noreferrer" class="vtile rv" href="/versions/broadsheet.html" target="_blank" style="--vb:#fbf3e9;--vi:#2a211a;--vg:#a8442b">
<div class="vswatch"><span style="background:#fbf3e9"></span><span style="background:#f4e7d5"></span><span style="background:#a8442b"></span><span style="background:#2a211a"></span></div>
<div class="vname">Broadsheet</div><div class="vmodel">after The Financial Times</div>
<div class="vmood">FT-style broadsheet — cream stock, classic authority, print heritage.</div><div class="vopen">Open live concept →</div>
</a>
- <a class="vtile rv" href="/versions/modern.html" target="_blank" style="--vb:#0e0f11;--vi:#f2f3f5;--vg:#8b5cf6">
+ <a rel="noopener noreferrer" class="vtile rv" href="/versions/modern.html" target="_blank" style="--vb:#0e0f11;--vi:#f2f3f5;--vg:#8b5cf6">
<div class="vswatch"><span style="background:#0e0f11"></span><span style="background:#17181b"></span><span style="background:#8b5cf6"></span><span style="background:#f2f3f5"></span></div>
<div class="vname">Modern</div><div class="vmodel">after Axios</div>
<div class="vmood">Axios-style modern — minimal, scannable, mobile-native.</div><div class="vopen">Open live concept →</div>
diff --git a/public/cre-talk.html b/public/cre-talk.html
index 716f9697..b18ccf11 100644
--- a/public/cre-talk.html
+++ b/public/cre-talk.html
@@ -120,7 +120,7 @@
g.innerHTML=items.map(function(v){
var href=v.view_url||('https://www.rentvreview.com/Videos/View/'+encodeURIComponent(v.id||''));
var thumb=v.thumb||(v.yt?('https://img.youtube.com/vi/'+v.yt+'/hqdefault.jpg'):'');
- return '<a class="tile" href="'+esc(href)+'" target="_blank" rel="noopener" style="padding:0;overflow:hidden">'+
+ return '<a class="tile" href="'+esc(href)+'" target="_blank" rel="noopener noreferrer" style="padding:0;overflow:hidden">'+
'<div style="aspect-ratio:16/9;background:#111 center/cover'+(thumb?(" url('"+esc(thumb)+"')"):'')+'"></div>'+
'<div style="padding:16px 18px"><div class="n" style="font-size:11px;letter-spacing:.1em;text-transform:uppercase">'+esc(v.cat||'The REview')+'</div>'+
'<h3 style="font-size:18px;margin:6px 0 0">'+esc(v.title||'RENTV video')+'</h3></div></a>';
@@ -133,7 +133,7 @@
<div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals & conferences across the Western United States since 1998.</p></div>
<div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
<div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
- <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
+ <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
</div><div class="fine">© 2026 RENTV.com · 5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045 · (310) 213-6409</div></div></footer>
<script>
var t=document.getElementById('today');if(t)t.textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
diff --git a/public/desk.html b/public/desk.html
index 71f369b0..e262cd01 100644
--- a/public/desk.html
+++ b/public/desk.html
@@ -96,7 +96,7 @@ const shortUsd=n=>{n=Number(n)||0;return n>=1e9?'$'+(n/1e9).toFixed(2)+'B':n>=1e
const dstr=d=>d?new Date(d).toLocaleDateString(undefined,{month:'short',day:'numeric',year:'numeric'}):'—';
const loc=x=>[x.city||x.hq_city,x.state_code||x.hq_state].filter(Boolean).join(', ');
const LI_P=(n,f)=>`https://www.linkedin.com/search/results/people/?keywords=${enc([n,f].filter(Boolean).join(' '))}`,LI_C=f=>`https://www.linkedin.com/search/results/companies/?keywords=${enc(f)}`,WEB=f=>`https://www.google.com/search?q=${enc('"'+f+'" real estate official website')}`,MAPS=q=>`https://www.google.com/maps/search/?api=1&query=${enc(q)}`,DRE=l=>`https://www2.dre.ca.gov/PublicASP/pplinfo.asp?License_id=${enc(l)}`,GOOG=q=>`https://www.google.com/search?q=${enc(q)}`,ASSR=a=>`https://portal.assessor.lacounty.gov/parceldetail/${enc(a)}`;
-const A=(h,i,l)=>`<a class="act" href="${h}" target="_blank" rel="noopener" onclick="event.stopPropagation()"><span class="i">${i}</span>${l}</a>`;
+const A=(h,i,l)=>`<a class="act" href="${h}" target="_blank" rel="noopener noreferrer" onclick="event.stopPropagation()"><span class="i">${i}</span>${l}</a>`;
function actions(k,x){
if(k==='firms')return [A(LI_C(x.name),'🏢','LinkedIn'),A(WEB(x.name),'🌐','Website'),A(MAPS(x.name+' '+loc(x)),'📍','HQ / Map'),x.license_no?A(DRE(x.license_no),'🪪','DRE'):'',A(GOOG(x.name+' brokers '+loc(x)),'🔎','Google')].filter(Boolean).join('');
if(k==='owners'){const ad=[x.address,x.city].filter(Boolean).join(', ');return [A(MAPS(ad),'📍','Map'),A(GOOG(ad+' '+(x.use_desc||'')+' owner'),'🔎','Owner / deal'),A('https://www.google.com/maps/@?api=1&map_action=pano&viewpoint='+enc(ad),'📸','Street View'),A(ASSR(x.ain),'🏛️','Assessor')].join('');}
diff --git a/public/la-commercial.html b/public/la-commercial.html
index f0bf60b1..cbaf0b95 100644
--- a/public/la-commercial.html
+++ b/public/la-commercial.html
@@ -93,13 +93,13 @@ const attr=esc;
(async()=>{
const d=await (await fetch('/api/la-commercial')).json();
$('#fresh').textContent=d.fetched_at?('Data as of '+new Date(d.fetched_at).toLocaleString()):'';
- $('#marquee').innerHTML=(d.marquee||[]).slice(0,9).map(r=>`<a class="asset${r.ain?' ext':''}"${r.ain?` href="${AIN(r.ain)}" target="_blank" rel="noopener" title="LA County Assessor parcel ${attr(r.ain)}"`:''}>
+ $('#marquee').innerHTML=(d.marquee||[]).slice(0,9).map(r=>`<a class="asset${r.ain?' ext':''}"${r.ain?` href="${AIN(r.ain)}" target="_blank" rel="noopener noreferrer" title="LA County Assessor parcel ${attr(r.ain)}"`:''}>
<div class="tag">${esc(r.type_label||'')}</div>
<div class="v">${usd(r.assessed_total)}</div>
<div class="a">${esc(r.address||'—')}${r.city?', '+esc(r.city):''}</div>
${r.brief?`<div class="brief">${esc(r.brief)}</div>`:''}</a>`).join('');
$('#recent').innerHTML='<table><thead><tr><th>Recorded</th><th>Address</th><th>Type</th><th>Assessed</th></tr></thead><tbody>'+
- (d.recent||[]).map(r=>{const lbl=r.address?`${esc(r.address)}${r.city?', '+esc(r.city):''}`:(r.ain?`Parcel ${esc(r.ain)}`:'—');const cell=r.ain?`<a class="ext" href="${AIN(r.ain)}" target="_blank" rel="noopener" title="LA County Assessor parcel ${attr(r.ain)}">${lbl}</a>`:lbl;return `<tr><td>${dstr(r.recording_date)}</td><td class="n">${cell}</td><td>${esc(r.type_label||'')}</td><td class="v">${usd(r.assessed_total)}</td></tr>`;}).join('')+'</tbody></table>';
+ (d.recent||[]).map(r=>{const lbl=r.address?`${esc(r.address)}${r.city?', '+esc(r.city):''}`:(r.ain?`Parcel ${esc(r.ain)}`:'—');const cell=r.ain?`<a class="ext" href="${AIN(r.ain)}" target="_blank" rel="noopener noreferrer" title="LA County Assessor parcel ${attr(r.ain)}">${lbl}</a>`:lbl;return `<tr><td>${dstr(r.recording_date)}</td><td class="n">${cell}</td><td>${esc(r.type_label||'')}</td><td class="v">${usd(r.assessed_total)}</td></tr>`;}).join('')+'</tbody></table>';
$('#firms').innerHTML=(d.firms||[]).slice(0,12).map(f=>`<a class="firm" href="/directory?tab=firms&q=${encodeURIComponent(f.name||'')}" title="See ${attr(f.name)} in the CRE Directory">
<div class="fn">${esc(f.name)}</div><div class="fa">${(f.agent_count||0).toLocaleString()} agents</div></a>`).join('');
})();
diff --git a/public/markets.html b/public/markets.html
index c0b0a621..d6a13a08 100644
--- a/public/markets.html
+++ b/public/markets.html
@@ -82,7 +82,7 @@ footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:28px}footer
<div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals & conferences across the Western United States since 1998.</p></div>
<div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a><a href="/la-commercial">LA Commercial</a></div>
<div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
- <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
+ <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
</div><div class="fine">© 2026 RENTV.com · Commercial real estate news, Western U.S. · Headlines refreshed live from rentv.com</div></div></footer>
<script>
diff --git a/public/press/index.html b/public/press/index.html
index 21003877..71256db8 100644
--- a/public/press/index.html
+++ b/public/press/index.html
@@ -67,7 +67,7 @@
var caps = ['home','markets','article','blog','cretalk','admin-index','admin-command','admin-analytics','admin-kanban'];
document.getElementById('caps').innerHTML = caps.map(function (c) {
- return '<a href="/press/media/captures/' + c + '.png" target="_blank"><img loading="lazy" src="/press/media/captures/' + c + '.png" alt="' + c + '"></a>';
+ return '<a rel="noopener noreferrer" href="/press/media/captures/' + c + '.png" target="_blank"><img loading="lazy" src="/press/media/captures/' + c + '.png" alt="' + c + '"></a>';
}).join('');
</script>
</body>
diff --git a/public/review.html b/public/review.html
index 050e455c..16d4b59a 100644
--- a/public/review.html
+++ b/public/review.html
@@ -93,7 +93,7 @@
</head>
<body>
<div class="util"><div class="wrap">
- <div class="left"><a href="/">RENTV.com News</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="https://sublease.com/" target="_blank" rel="noopener">Sublease.com</a></div>
+ <div class="left"><a href="/">RENTV.com News</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="https://sublease.com/" target="_blank" rel="noopener noreferrer">Sublease.com</a></div>
<div class="acts"><a href="/subscribe">Newsletters</a><a href="/advertise">Advertise</a><a class="sub" href="/subscribe">Subscribe</a></div>
</div></div>
@@ -133,7 +133,7 @@
<div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals & conferences across the Western United States since 1998.</p></div>
<div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
<div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
- <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
+ <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
</div><div class="fine">© 2026 RENTV.com · Commercial real estate news, Western U.S. · Headlines refreshed live from rentv.com</div></div></footer>
<div class="modal" id="modal">
@@ -141,7 +141,7 @@
<div class="panel">
<div class="video"><iframe id="mframe" allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture" allowfullscreen></iframe></div>
<div class="meta"><span class="rcat" id="mcat"></span><h3 id="mtitle"></h3><p id="mdesc"></p>
- <div class="row"><a id="mlink" target="_blank" rel="noopener">Open on The REview ↗</a></div>
+ <div class="row"><a id="mlink" target="_blank" rel="noopener noreferrer">Open on The REview ↗</a></div>
</div>
</div>
</div>
diff --git a/public/section.html b/public/section.html
index 59274400..c42f8206 100644
--- a/public/section.html
+++ b/public/section.html
@@ -93,7 +93,7 @@
<div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals & conferences across the Western United States since 1998.</p></div>
<div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
<div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
- <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
+ <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
</div><div class="fine">© 2026 RENTV.com · Commercial real estate news, Western U.S. · Headlines refreshed live from rentv.com</div></div></footer>
<script>
diff --git a/public/social.html b/public/social.html
index 99937497..2c5a309a 100644
--- a/public/social.html
+++ b/public/social.html
@@ -427,10 +427,10 @@
return '<div class="gitem'+(isCat?' cat':'')+sel+'">'
+'<div class="gi-top"><span class="gi-ic">'+icoFor(x.cat)+'</span><span class="gi-name">'+esc(x.name)+'</span>'
+(isCat&&count?'<span class="gi-count">'+count+'</span>':'')
- +'<a class="gi-li" href="'+liUrl(x.terms||x.name)+'" target="_blank" rel="noopener">in ↗</a>'
+ +'<a class="gi-li" href="'+liUrl(x.terms||x.name)+'" target="_blank" rel="noopener noreferrer">in ↗</a>'
+'<button class="gi-x" data-del="'+x.id+'" title="Remove">✕</button></div>'
+(x.sub?'<div class="gi-sub">'+esc(x.sub)+'</div>':'')
- +((x.phone||x.website)?'<div class="gi-contact">'+(x.phone?'<a href="tel:'+esc(String(x.phone).replace(/[^\d+]/g,''))+'">📞 '+esc(x.phone)+'</a>':'')+(x.website?'<a href="'+(/^https?:/i.test(x.website)?esc(x.website):'https://'+esc(x.website))+'" target="_blank" rel="noopener">🌐 site</a>':'')+'</div>':'')
+ +((x.phone||x.website)?'<div class="gi-contact">'+(x.phone?'<a href="tel:'+esc(String(x.phone).replace(/[^\d+]/g,''))+'">📞 '+esc(x.phone)+'</a>':'')+(x.website?'<a href="'+(/^https?:/i.test(x.website)?esc(x.website):'https://'+esc(x.website))+'" target="_blank" rel="noopener noreferrer">🌐 site</a>':'')+'</div>':'')
+'<span class="gstatus s'+(x.status||0)+'" data-st="'+x.id+'">'+GSTL[x.status||0]+'</span>'
+'<span class="gwhen">🕓 '+when+'</span>'
+'<button class="gi-letter" data-letter="'+x.id+'">'+lLabel+'</button>'
@@ -443,8 +443,8 @@
+'<span class="gp-nm">'+esc(cap(p.name))+'</span>'
+'<span class="gp-sub">'+esc([cap(p.city||''),p.license_type||''].filter(Boolean).join(' · '))+'</span>'
+'<span class="gstatus s'+(p.status||0)+'" data-pst="'+key+'">'+GSTL[p.status||0]+'</span>'
- +'<a class="gp-a" href="'+liUrl(p.name+' '+(firm.name||''))+'" target="_blank" rel="noopener">in↗</a>'
- +(p.license_no?'<a class="gp-a" href="'+dreUrl(p.license_no)+'" target="_blank" rel="noopener">DRE</a>':'')
+ +'<a class="gp-a" href="'+liUrl(p.name+' '+(firm.name||''))+'" target="_blank" rel="noopener noreferrer">in↗</a>'
+ +(p.license_no?'<a class="gp-a" href="'+dreUrl(p.license_no)+'" target="_blank" rel="noopener noreferrer">DRE</a>':'')
+'<button class="gi-letter gp-let" data-pletter="'+key+'">'+(p.lv?'✎ Regen':'✎ Letter')+'</button></div>';
}
function grender(){
@@ -463,11 +463,11 @@
contacts.sort(function(a,b){ if(sort==='name')return a.name.localeCompare(b.name); if(sort==='status')return (b.status||0)-(a.status||0); return b.added-a.added; });
var out='<div class="gcat">';
if(head) out+=gItemHtml(head, contacts.length);
- else out+='<div class="gitem cat"><div class="gi-top"><span class="gi-name">'+esc(cn)+'</span><span class="gi-count">'+contacts.length+' contacts</span><a class="gi-li" href="'+liUrl(cn+' commercial real estate')+'" target="_blank" rel="noopener">in ↗</a></div></div>';
+ else out+='<div class="gitem cat"><div class="gi-top"><span class="gi-name">'+esc(cn)+'</span><span class="gi-count">'+contacts.length+' contacts</span><a class="gi-li" href="'+liUrl(cn+' commercial real estate')+'" target="_blank" rel="noopener noreferrer">in ↗</a></div></div>';
out+=contacts.map(function(x){
var h=gItemHtml(x,0);
if(x.expanded && x.people){
- var meta=(x.website||x.phone)?('<div class="gp-firm">'+(x.phone?'📞 '+esc(x.phone)+' ':'')+(x.website?'<a href="'+(/^https?:/i.test(x.website)?x.website:'https://'+x.website)+'" target="_blank" rel="noopener">🌐 site</a>':'')+'</div>'):'';
+ var meta=(x.website||x.phone)?('<div class="gp-firm">'+(x.phone?'📞 '+esc(x.phone)+' ':'')+(x.website?'<a href="'+(/^https?:/i.test(x.website)?x.website:'https://'+x.website)+'" target="_blank" rel="noopener noreferrer">🌐 site</a>':'')+'</div>'):'';
h+='<div class="gpeople">'+meta+x.people.map(function(p){ return gPersonHtml(p,x); }).join('')+'</div>';
}
return h;
@@ -822,13 +822,13 @@
grid.innerHTML=list.map(function(v){
var thumb=v.thumb_local||v.thumb||'';
return '<div class="vcard">'+
- '<a class="vthumb" href="'+esc(v.url)+'" target="_blank" rel="noopener">'+
+ '<a class="vthumb" href="'+esc(v.url)+'" target="_blank" rel="noopener noreferrer">'+
(thumb?'<img loading="lazy" src="'+esc(thumb)+'" alt="">':'')+
'<span class="play">▶</span>'+(v.duration?'<span class="dur">'+dur(v.duration)+'</span>':'')+
'</a>'+
'<div class="vb">'+
'<span class="ep'+(v.kind==='clip'?' clip':'')+'">'+(v.kind==='episode'?'CRE Talk':'Clip')+'</span>'+
- '<h4><a class="vt" href="'+esc(v.url)+'" target="_blank" rel="noopener">'+esc(v.title)+'</a></h4>'+
+ '<h4><a class="vt" href="'+esc(v.url)+'" target="_blank" rel="noopener noreferrer">'+esc(v.title)+'</a></h4>'+
'<div class="vwhen">🕓 '+fmtDT(v.date)+(v.plays?(' · '+(+v.plays).toLocaleString()+' plays'):'')+'</div>'+
'<div class="vacts">'+
'<button class="pri" data-act="draft" data-id="'+v.id+'">→ Draft post</button>'+
diff --git a/public/subscribe.html b/public/subscribe.html
index 0c1f8a86..408f0042 100644
--- a/public/subscribe.html
+++ b/public/subscribe.html
@@ -120,7 +120,7 @@
<div><div class="logo">REN<span style="color:var(--red)">TV</span>.com</div><p style="max-width:34ch">Commercial real estate news, deals & conferences across the Western United States since 1998.</p></div>
<div><h5>Sections</h5><a href="/sales">Sales</a><a href="/leases">Leases</a><a href="/financing">Financing</a><a href="/development">Development</a><a href="/multifamily">Multifamily</a><a href="/industrial">Industrial</a><a href="/retail">Retail</a><a href="/markets">Markets</a></div>
<div><h5>Company</h5><a href="/about">About</a><a href="/advertise">Advertise</a><a href="/conferences">Conferences</a><a href="/subscribe">Subscribe</a></div>
- <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
+ <div><h5>Follow</h5><a href="https://www.linkedin.com/company/rentv.com-inc" target="_blank" rel="noopener noreferrer">LinkedIn</a><a href="/review">The REview</a><a href="/cre-talk">CRE Talk</a><a href="/subscribe">Newsletters</a></div>
</div><div class="fine">© 2026 RENTV.com · 5757 W. Century Blvd, Suite 700, Los Angeles, CA 90045 · (310) 213-6409</div></div></footer>
<script>
var t=document.getElementById('today');if(t)t.textContent=new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
← 83d6d662 test(api): lock validation contract on public PII-write endp
·
back to Rentv
·
auto-data-snapshot: 2026-08-08T09:04:57 (7 data files) — dat 907a56cc →