← back to Rentv 2026
feat(services): DTD-verdict guardrails on the Featured layer (keep-with-guardrails)
e393d66a59ddf85acfbdb8f6d488d4eb74c3581b · 2026-08-06 15:42:52 -0700 · Steve
Panel voted 8/8 to KEEP the curated Featured layer, conditional on hardening the
pay-to-play firewall. Implements the four attached conditions:
1. Disclosure banner above Featured cards: '★ Featured = unpaid editorial selection —
no firm has paid for placement …' (public-facing, on every category with featured).
2. Published selection methodology in the banner (prominence + verifiable standing +
metro coverage), sourced from services-featured.json selection_criteria.
3. Pay-to-play tripwire: seed 'policy' field + code — a paid slot MUST set paid:true,
which renders 'Sponsored' (not '★ Featured'), visually distinct, with rel=sponsored
on its link; editorial Featured stays rel=nofollow. Never silently mixed.
4. last_verified date (shown in banner) + verify_cadence_days:90 in the seed for a
re-check cadence so a defunct firm is never shown as Featured.
Verified: facets returns featured_meta; Title view renders the banner with the date +
'no firm has paid' line; featured rows carry paid:false / source_label 'Featured'.
Files touched
M data/services-featured.jsonM public/services.htmlM server.js
Diff
commit e393d66a59ddf85acfbdb8f6d488d4eb74c3581b
Author: Steve <steve@designerwallcoverings.com>
Date: Thu Aug 6 15:42:52 2026 -0700
feat(services): DTD-verdict guardrails on the Featured layer (keep-with-guardrails)
Panel voted 8/8 to KEEP the curated Featured layer, conditional on hardening the
pay-to-play firewall. Implements the four attached conditions:
1. Disclosure banner above Featured cards: '★ Featured = unpaid editorial selection —
no firm has paid for placement …' (public-facing, on every category with featured).
2. Published selection methodology in the banner (prominence + verifiable standing +
metro coverage), sourced from services-featured.json selection_criteria.
3. Pay-to-play tripwire: seed 'policy' field + code — a paid slot MUST set paid:true,
which renders 'Sponsored' (not '★ Featured'), visually distinct, with rel=sponsored
on its link; editorial Featured stays rel=nofollow. Never silently mixed.
4. last_verified date (shown in banner) + verify_cadence_days:90 in the seed for a
re-check cadence so a defunct firm is never shown as Featured.
Verified: facets returns featured_meta; Title view renders the banner with the date +
'no firm has paid' line; featured rows carry paid:false / source_label 'Featured'.
---
data/services-featured.json | 4 ++++
public/services.html | 13 +++++++++++--
server.js | 18 ++++++++++++------
3 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/data/services-featured.json b/data/services-featured.json
index af38832c..ce53c10f 100644
--- a/data/services-featured.json
+++ b/data/services-featured.json
@@ -1,5 +1,9 @@
{
"note": "Editorially FEATURED, real and verifiable major CRE service firms. Purpose: guarantee at least one vendor in EVERY service category in every metro where the public California license registries do not cover (Title, Property Management) or barely cover (Legal — only 3 attorney records exist statewide). markets tokens: \"national\" = firm operates across all served metros INCLUDING Arizona (e.g. First American Title, CBRE); \"socal\" = the five California metros only (Greater LA, Orange County, San Diego, Inland Empire, Ventura) — used for SoCal-specific firms (e.g. California real-estate law firms) so they never falsely claim Arizona coverage. Registry-backed categories (Construction, Lenders, Escrow, Developers) already have hundreds-to-thousands of vendors per metro. Verify engagement terms and current licensure directly with each firm.",
+ "policy": "★ Featured is UNPAID EDITORIAL SELECTION. No firm has paid for placement, and Featured status is NEVER sold. This page also serves RENTV ad-sales as a lead list — that function must stay walled off from Featured selection. If a firm is ever given PAID placement, it MUST be a separate entry with \"paid\": true, rendered as a 'Sponsored' entry (not '★ Featured'), visually distinct, with rel=\"sponsored\" on its link — never silently mixed into the editorial Featured set. (DTD verdict 2026-08-06, 8/8 keep-with-guardrails; the pay-to-play tripwire is the load-bearing condition.)",
+ "selection_criteria": "Editorially selected for prominence in the market, verifiable licensure or professional standing, and broad metro coverage — not for payment.",
+ "last_verified": "2026-08-06",
+ "verify_cadence_days": 90,
"vendors": [
{
"cat": "title",
diff --git a/public/services.html b/public/services.html
index 8b020ccf..504a6f61 100644
--- a/public/services.html
+++ b/public/services.html
@@ -83,6 +83,9 @@
.locs{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:800;letter-spacing:.02em;padding:2px 8px;border-radius:20px;background:#eaf2ff;color:#1857b8;border:1px solid #cadcf7}
.card.feat{border-color:#ecdca4;background:linear-gradient(180deg,#fffdf7,#fff)}
.fhint{color:#8a6d1a;font-size:11px;font-weight:700;margin:6px 2px 0}
+ .fdisc{background:#fffaf0;border:1px solid #ecdca4;border-radius:10px;padding:9px 13px;margin:4px 2px 10px;color:#7a611a;font-size:12px;line-height:1.5}
+ .fdisc b{color:#8a6d1a}
+ .st.spon{background:#eef1f4;color:#4a4f55;border:1px solid #d5dae0}
.spec{font-size:12px;color:var(--ink);font-weight:600}
.loc{color:var(--sub);font-size:12.5px}
.loc a:hover{color:var(--red);text-decoration:underline}
@@ -183,6 +186,7 @@
</div>
</div>
+ <div class="fdisc" id="fdisc" style="display:none"></div>
<section class="rows" id="rows"></section>
<button class="more" id="more" style="display:none">Load more</button>
<div class="note" id="note"></div>
@@ -323,11 +327,11 @@ function card(r){
const spec=r.specialty?`<div class="spec">${esc(r.specialty)}</div>`:'';
const loc=[r.city&&`<a href="/services?cat=${esc(cat)}&market=${encodeURIComponent(market)}&city=${encodeURIComponent(r.city)}">${esc(cap(r.city))}</a>`,
r.county&&esc(cap(r.county))+' County', r.zip&&esc(r.zip)].filter(Boolean).join(' · ');
- const st=r.featured?`<span class="st feat">★ Featured</span>`:(r.license_status?`<span class="st${ok?' ok':''}">${esc(cap(r.license_status))}</span>`:'');
+ const st=r.featured?(r.paid?`<span class="st spon">Sponsored</span>`:`<span class="st feat">★ Featured</span>`):(r.license_status?`<span class="st${ok?' ok':''}">${esc(cap(r.license_status))}</span>`:'');
const lic=r.license_no?`<div class="lic">${esc(r.source_label||'License')} #${esc(r.license_no)}</div>`:'';
const acts=[];
if(r.phone) acts.push(`<a class="act p" href="tel:${esc(String(r.phone).replace(/[^0-9+]/g,''))}">☎ ${esc(r.phone)}</a>`);
- if(r.website) acts.push(`<a class="act" href="${esc(/^https?:/.test(r.website)?r.website:'https://'+r.website)}" target="_blank" rel="noopener noreferrer nofollow">Website ↗</a>`);
+ if(r.website) acts.push(`<a class="act" href="${esc(/^https?:/.test(r.website)?r.website:'https://'+r.website)}" target="_blank" rel="noopener noreferrer ${r.paid?'sponsored':'nofollow'}">Website ↗</a>`);
if(r.source_url) acts.push(`<a class="act" href="${esc(r.source_url)}" target="_blank" rel="noopener noreferrer nofollow">Public license record ↗</a>`);
if(ADMIN){ const done=inOutreach(r.name,SOCIAL_CAT[cat]||'Vendors / Service Providers'); acts.push(`<button class="act sol${done?' added':''}" data-solicit="${esc(r.id)}">${done?'✓ In outreach':'✉ Solicit'}</button>`); }
return `<article class="card">
@@ -361,6 +365,11 @@ async function load(reset){
const featured=reset?(d.featured||[]):[];
const rows=d.rows||[];
const grand=total+featuredTotal;
+ if(reset){
+ if(featuredTotal>0){ const fm=FACETS.featured_meta||{}; $('fdisc').style.display='block';
+ $('fdisc').innerHTML=`<b>★ Featured</b> = unpaid editorial selection — <b>no firm has paid for placement</b>. Selected for ${esc(fm.selection_criteria||'prominence, verifiable standing and metro coverage')}${fm.last_verified?` · verified ${esc(fm.last_verified)}`:''}. Verify licensure & engagement terms directly.`;
+ } else { $('fdisc').style.display='none'; }
+ }
if(!grand){ $('meta').textContent=''; $('rows').innerHTML='<div class="empty"><h3>No providers found</h3><div>Try a different name, city or category.</div></div>'; $('more').style.display='none'; return; }
const html=featured.map(card).join('')+rows.map(card).join('');
if(reset)$('rows').innerHTML=html; else $('rows').insertAdjacentHTML('beforeend',rows.map(card).join(''));
diff --git a/server.js b/server.js
index 0497baa9..7c3f7903 100644
--- a/server.js
+++ b/server.js
@@ -1600,9 +1600,12 @@ const SERVICE_CATS = {
};
// Curated real-firm seed (data/services-featured.json) — guarantees >=1 vendor per category per
// metro where the registry is thin/absent (Title, Property Mgmt, Legal). Loaded once at startup.
-let SERVICE_FEATURED = [];
-try { SERVICE_FEATURED = (JSON.parse(fs.readFileSync(path.join(DATA, 'services-featured.json'), 'utf8')).vendors) || []; }
-catch (e) { console.warn('[services] no services-featured.json (running without featured seed)'); }
+let SERVICE_FEATURED = [], SERVICE_FEATURED_META = {};
+try {
+ const doc = JSON.parse(fs.readFileSync(path.join(DATA, 'services-featured.json'), 'utf8'));
+ SERVICE_FEATURED = doc.vendors || [];
+ SERVICE_FEATURED_META = { selection_criteria: doc.selection_criteria || '', last_verified: doc.last_verified || '', verify_cadence_days: doc.verify_cadence_days || 0 };
+} catch (e) { console.warn('[services] no services-featured.json (running without featured seed)'); }
const SOCAL_METROS = ['Greater LA', 'Orange County', 'San Diego', 'Inland Empire', 'Ventura'];
// Resolve a featured firm's coverage HONESTLY: "national" = also Arizona; "socal"/"all" = CA metros
// only (so SoCal-specific law firms never falsely claim Arizona); or an explicit market array.
@@ -1624,8 +1627,11 @@ function featuredFor(catKey, market, q) {
city: v.hq || null, county: null, zip: null, market,
phone: null, website: v.website || null,
license_no: null, license_type: null, license_status: 'Featured',
- specialty: v.desc || null, source: 'featured', source_label: 'Featured',
- source_url: null, featured: true, loc_count: null, city_count: null,
+ specialty: v.desc || null,
+ // Pay-to-play tripwire (DTD verdict 2026-08-06): an unpaid editorial pick is '★ Featured';
+ // a PAID slot MUST be flagged paid:true in the seed → renders as 'Sponsored' (never mixed in).
+ source: v.paid ? 'sponsored' : 'featured', source_label: v.paid ? 'Sponsored' : 'Featured',
+ paid: !!v.paid, source_url: null, featured: true, loc_count: null, city_count: null,
}));
}
const SERVICE_MARKETS = new Set(['Greater LA', 'Orange County', 'San Diego', 'Inland Empire', 'Ventura', 'Arizona', 'SoCal (other)']);
@@ -1744,7 +1750,7 @@ app.get('/api/services/facets', async (req, res) => {
const cityR = await rePool.query(
"SELECT city, count(*)::int n FROM rentv_licensed_targets WHERE within_300mi AND market=$1 AND city IS NOT NULL AND city <> '' GROUP BY city ORDER BY n DESC LIMIT 24", [market]);
res.set('Cache-Control', 'public, max-age=300');
- res.json({ market, intro: SERVICE_CONTENT.intro || {}, cats, cities: cityR.rows });
+ res.json({ market, intro: SERVICE_CONTENT.intro || {}, cats, cities: cityR.rows, featured_meta: SERVICE_FEATURED_META });
} catch (e) { res.status(502).json({ cats: [], cities: [], error: 'services registry unavailable' }); }
});
← b63cb339 auto-data-snapshot: 2026-08-06T15:32:11 (7 data files) — dat
·
back to Rentv 2026
·
feat(deals): parseAcquirer recall 19→23/30 — handle developm 6190cac5 →