[object Object]

← back to Rentv 2026

rentv-v1 DTD-C: section routes 301→/?cat= filtered home (one consistent 'section=filtered feed' model, no thin pages); home honors ?cat= + activates nav; tighten nav padding to fix Conferences clip

7444bb1f7c3cbc086d304d951db361ec1e42b91c · 2026-07-21 14:46:04 -0700 · Steve Abrams

Files touched

Diff

commit 7444bb1f7c3cbc086d304d951db361ec1e42b91c
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Jul 21 14:46:04 2026 -0700

    rentv-v1 DTD-C: section routes 301→/?cat= filtered home (one consistent 'section=filtered feed' model, no thin pages); home honors ?cat= + activates nav; tighten nav padding to fix Conferences clip
---
 build.mjs               |  2 +-
 data/markets.json       |  2 +-
 data/news.json          |  2 +-
 data/ticker.json        |  2 +-
 public/about.html       |  2 +-
 public/advertise.html   |  2 +-
 public/article.html     |  2 +-
 public/conferences.html |  2 +-
 public/cre-talk.html    |  2 +-
 public/index.html       | 10 ++++++++--
 public/markets.html     |  2 +-
 public/review.html      |  2 +-
 public/section.html     |  2 +-
 public/subscribe.html   |  2 +-
 server.js               |  5 +++--
 15 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/build.mjs b/build.mjs
index 1554d940..2db78721 100644
--- a/build.mjs
+++ b/build.mjs
@@ -36,7 +36,7 @@ const CSS = `
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
   .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
   .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   @media(max-width:860px){
     .ham{display:block;order:-1}
diff --git a/data/markets.json b/data/markets.json
index 016c7712..eacbbef2 100644
--- a/data/markets.json
+++ b/data/markets.json
@@ -1,5 +1,5 @@
 {
-  "fetched_at": "2026-07-21T21:23:33.015Z",
+  "fetched_at": "2026-07-21T21:43:33.955Z",
   "source": "Yahoo Finance — live (CBOE Treasury yields, Dow Jones/MSCI REIT indices)",
   "curve": [
     {
diff --git a/data/news.json b/data/news.json
index d03a7d74..efdfe0e2 100644
--- a/data/news.json
+++ b/data/news.json
@@ -1,6 +1,6 @@
 {
  "source": "rentv.com — live",
- "fetched_at": "2026-07-21T21:23:32.730Z",
+ "fetched_at": "2026-07-21T21:43:33.625Z",
  "count": 30,
  "items": [
   {
diff --git a/data/ticker.json b/data/ticker.json
index 7e0fd6a8..4a73fd72 100644
--- a/data/ticker.json
+++ b/data/ticker.json
@@ -1,5 +1,5 @@
 {
-  "fetched_at": "2026-07-21T21:23:32.991Z",
+  "fetched_at": "2026-07-21T21:43:33.928Z",
   "la_office_vac": {
     "label": "LA OFFICE VAC",
     "value": "23.1%",
diff --git a/public/about.html b/public/about.html
index e9041fe9..ee6110b0 100644
--- a/public/about.html
+++ b/public/about.html
@@ -24,7 +24,7 @@
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
   .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
   .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   @media(max-width:860px){
     .ham{display:block;order:-1}
diff --git a/public/advertise.html b/public/advertise.html
index f8faeed1..e21dd0c6 100644
--- a/public/advertise.html
+++ b/public/advertise.html
@@ -24,7 +24,7 @@
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
   .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
   .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   @media(max-width:860px){
     .ham{display:block;order:-1}
diff --git a/public/article.html b/public/article.html
index 316ec702..8e0bb2f3 100644
--- a/public/article.html
+++ b/public/article.html
@@ -24,7 +24,7 @@
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
   .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
   .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   @media(max-width:860px){
     .ham{display:block;order:-1}
diff --git a/public/conferences.html b/public/conferences.html
index a5ee2f42..2b4974ed 100644
--- a/public/conferences.html
+++ b/public/conferences.html
@@ -24,7 +24,7 @@
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
   .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
   .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   @media(max-width:860px){
     .ham{display:block;order:-1}
diff --git a/public/cre-talk.html b/public/cre-talk.html
index 8bbe67eb..566b0e40 100644
--- a/public/cre-talk.html
+++ b/public/cre-talk.html
@@ -24,7 +24,7 @@
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
   .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
   .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   @media(max-width:860px){
     .ham{display:block;order:-1}
diff --git a/public/index.html b/public/index.html
index 32c1702f..46da70c0 100644
--- a/public/index.html
+++ b/public/index.html
@@ -26,7 +26,7 @@
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
   .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
   .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   @media(max-width:860px){
     .ham{display:block;order:-1}
@@ -130,7 +130,11 @@
 
 <script>
 document.getElementById('today').textContent = new Date().toLocaleDateString(undefined,{weekday:'long',year:'numeric',month:'long',day:'numeric'});
-let ALL=[], cat='all';
+// DTD-C: a "section" is the home feed filtered by ?cat= (section routes 301 here).
+var _CATS=['Sales','Leases','Financing','Development','Multifamily','Industrial','Retail'];
+var _q=(new URLSearchParams(location.search).get('cat')||'').toLowerCase();
+var _match=_CATS.filter(function(c){return c.toLowerCase()===_q;})[0];
+let ALL=[], cat=_match||'all';
 const esc=s=>(s||'').replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
 const bgimg=o=>(o&&o.image)?(' style="background:#12161a url(\''+esc(o.image)+'\') center/cover"'):'';
 function render(){
@@ -177,6 +181,8 @@ async function loadTicker(){
     if(html) document.getElementById('ticker').innerHTML=html;
   }catch(e){/* keep prior ticker on failure */}
 }
+// if we arrived via /?cat=Leases, highlight that section in the nav
+if(cat!=='all'){document.querySelectorAll('#nav a').forEach(function(a){a.classList.toggle('on',a.dataset.cat===cat);});}
 load(); setInterval(load, 120000); // refresh the live feed every 2 minutes
 loadTicker(); setInterval(loadTicker, 120000); // live market ticker
 </script>
diff --git a/public/markets.html b/public/markets.html
index 6b91236f..1c922395 100644
--- a/public/markets.html
+++ b/public/markets.html
@@ -24,7 +24,7 @@
   .logo small{display:block;font-size:11px;font-weight:600;letter-spacing:3px;color:var(--sub);text-transform:uppercase;margin-top:2px;font-family:var(--sans)}
   nav{background:#fff;border-bottom:1px solid var(--line)}
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   .head{padding:30px 0 6px}
   .head h1{font-family:var(--serif);font-size:34px;letter-spacing:-.5px}
diff --git a/public/review.html b/public/review.html
index b5239519..8681d18f 100644
--- a/public/review.html
+++ b/public/review.html
@@ -24,7 +24,7 @@
   .datebox{font-size:12px;color:var(--sub);text-align:right}
   nav{border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:10}
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   /* ── REview hero band ── */
   .rhero{background:linear-gradient(120deg,#111827,#c8102e);color:#fff;padding:30px 0}
diff --git a/public/section.html b/public/section.html
index b4af5d6a..50d177fb 100644
--- a/public/section.html
+++ b/public/section.html
@@ -24,7 +24,7 @@
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
   .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
   .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   @media(max-width:860px){
     .ham{display:block;order:-1}
diff --git a/public/subscribe.html b/public/subscribe.html
index 43705e76..d6e3ac42 100644
--- a/public/subscribe.html
+++ b/public/subscribe.html
@@ -24,7 +24,7 @@
   nav .wrap{display:flex;gap:2px;align-items:center;height:46px}
   .ham{display:none;background:none;border:0;font-size:24px;line-height:1;color:var(--ink);cursor:pointer;padding:8px 12px 8px 0;margin-right:4px}
   .navlinks{display:flex;gap:2px;align-items:center;overflow-x:auto}
-  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:14px 13px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
+  nav a{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:13px 8px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}
   nav a:hover,nav a.on{color:var(--red);border-color:var(--red)}
   @media(max-width:860px){
     .ham{display:block;order:-1}
diff --git a/server.js b/server.js
index b6ff72db..75f75d6b 100644
--- a/server.js
+++ b/server.js
@@ -143,9 +143,10 @@ app.get('/api/article/:id', async (req, res) => {
   }
 });
 
-// ── Clean section routes → the one section template (category read client-side from path) ──
+// ── Section routes → the home feed filtered by category (DTD-C: a "section" IS a filtered
+//    live feed, one consistent model site-wide; no thin static section pages). ──
 const SECTIONS = ['financing', 'leases', 'development', 'retail', 'multifamily', 'industrial', 'sales'];
-SECTIONS.forEach(s => app.get('/' + s, (_q, r) => r.sendFile(path.join(PUB, 'section.html'))));
+SECTIONS.forEach(s => app.get('/' + s, (_q, r) => r.redirect(301, '/?cat=' + s.charAt(0).toUpperCase() + s.slice(1))));
 app.get('/news/:id', (_q, r) => r.sendFile(path.join(PUB, 'article.html')));
 // The REview — the folded-in video platform, served natively in the RENTV shell
 app.get('/review', (_q, r) => r.sendFile(path.join(PUB, 'review.html')));

← d11197b5 rentv-v1: fix article breadcrumb dead link — only link cat w  ·  back to Rentv 2026  ·  rentv-v1 polish batch: wordmark 34→42px, mobile hamburger → 6ca6f36c →