← back to Rentv
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
M build.mjsM data/markets.jsonM data/news.jsonM data/ticker.jsonM public/about.htmlM public/advertise.htmlM public/article.htmlM public/conferences.htmlM public/cre-talk.htmlM public/index.htmlM public/markets.htmlM public/review.htmlM public/section.htmlM public/subscribe.htmlM server.js
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=>({'&':'&','<':'<','>':'>','"':'"'}[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
·
rentv-v1 polish batch: wordmark 34→42px, mobile hamburger → 6ca6f36c →