← back to Ventura Corridor
TK-11484: fix venturacorridor.com AdSense 'Needs attention' — un-gate /about (was admin-blocked → 401), add Privacy Policy + Contact pages, homepage footer links, sitemap entries
fc609bdef2f4e7ae91a3b83ab80d1bc304701040 · 2026-09-12 20:20:27 -0700 · Steve Abrams
Root cause: /about was in the ADMIN_PATHS basic-auth block-list (Googlebot got 401 on a required public page), and Privacy/Contact pages did not exist. AdSense requires clearly-linked Privacy Policy (with ad-cookie disclosure + opt-out), About, and Contact.
- src/server/index.ts: remove /about from ADMIN_PATHS; add /, /about.html, /privacy.html, /contact.html to the sitemap route
- public/privacy.html: new — Google ad-cookie disclosure + Google Ads Settings / aboutads / NAI opt-out links
- public/contact.html: new — contact routes to steve@designerwallcoverings.com
- public/index.html: homepage footer linking About / Contact / Privacy
Verified on a throwaway instance (free port): /about.html /privacy.html /contact.html all 200, admin /signals.html still 401. Deploy to prod is gated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TbFMncpunCRFE4z8Px3G1A
Files touched
A public/contact.htmlM public/index.htmlA public/privacy.htmlM src/server/index.ts
Diff
commit fc609bdef2f4e7ae91a3b83ab80d1bc304701040
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sat Sep 12 20:20:27 2026 -0700
TK-11484: fix venturacorridor.com AdSense 'Needs attention' — un-gate /about (was admin-blocked → 401), add Privacy Policy + Contact pages, homepage footer links, sitemap entries
Root cause: /about was in the ADMIN_PATHS basic-auth block-list (Googlebot got 401 on a required public page), and Privacy/Contact pages did not exist. AdSense requires clearly-linked Privacy Policy (with ad-cookie disclosure + opt-out), About, and Contact.
- src/server/index.ts: remove /about from ADMIN_PATHS; add /, /about.html, /privacy.html, /contact.html to the sitemap route
- public/privacy.html: new — Google ad-cookie disclosure + Google Ads Settings / aboutads / NAI opt-out links
- public/contact.html: new — contact routes to steve@designerwallcoverings.com
- public/index.html: homepage footer linking About / Contact / Privacy
Verified on a throwaway instance (free port): /about.html /privacy.html /contact.html all 200, admin /signals.html still 401. Deploy to prod is gated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TbFMncpunCRFE4z8Px3G1A
---
public/contact.html | 94 ++++++++++++++++++++++++++++++++++++++++++++
public/index.html | 8 ++++
public/privacy.html | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++
src/server/index.ts | 8 +++-
4 files changed, 219 insertions(+), 1 deletion(-)
diff --git a/public/contact.html b/public/contact.html
new file mode 100644
index 0000000..ff45fee
--- /dev/null
+++ b/public/contact.html
@@ -0,0 +1,94 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>Contact · The Corridor</title>
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="description" content="Contact The Corridor (venturacorridor.com) — corrections, story tips, business listings, and sponsor inquiries for Ventura Boulevard.">
+<style>
+@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;1,400;1,500&family=Inter:wght@300;400;500&family=JetBrains+Mono:wght@200;300&display=swap');
+:root{--paper:#faf6ee;--ink:#1a1815;--ink-mute:#6e6356;--metal:#8a6d3b;--metal-glow:#b89968;--accent:#6a3a1a;--rule:#d8cdb8}
+*{box-sizing:border-box}
+html,body{margin:0;background:var(--paper);color:var(--ink);font-family:'Inter',sans-serif;font-weight:300;line-height:1.65}
+header{text-align:center;padding:64px 24px 36px;border-bottom:4px double var(--ink)}
+header .kicker{font-size:10px;letter-spacing:.45em;text-transform:uppercase;color:var(--metal);font-weight:500}
+header h1{font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:500;font-size:72px;line-height:.98;margin:14px 0 0;letter-spacing:-0.02em}
+header h1 em{font-style:normal;color:var(--metal)}
+main{max-width:680px;margin:0 auto;padding:48px 24px 80px}
+section{margin-bottom:32px}
+section h2{font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:500;font-size:28px;margin:0 0 12px;color:var(--ink)}
+section h2 em{font-style:normal;color:var(--metal)}
+section p{font-size:16px;color:var(--ink);margin:0 0 12px}
+section .lede::first-letter{font-family:'Cormorant Garamond',serif;font-weight:600;font-size:72px;line-height:.85;float:left;margin:6px 12px 0 0;color:var(--accent)}
+a{color:var(--accent);text-decoration:none;border-bottom:1px solid var(--rule)}
+a:hover{color:var(--metal);border-color:var(--metal)}
+.cards{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:8px}
+@media(max-width:560px){.cards{grid-template-columns:1fr}}
+.card{padding:22px;background:rgba(184,153,104,0.06);border:1px solid var(--rule)}
+.card h3{font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:500;font-size:20px;margin:0 0 8px;color:var(--metal)}
+.card p{font-size:14px;color:var(--ink-mute);margin:0 0 10px}
+.card a{font-family:'JetBrains Mono',monospace;font-size:13px}
+.contact{margin-top:36px;padding:24px;background:var(--ink);color:var(--paper);text-align:center}
+.contact p{color:rgba(255,255,255,0.85);font-size:14px;margin:0 0 14px}
+.contact a{color:var(--metal-glow);font-family:'JetBrains Mono',monospace;font-size:13px;border-bottom:1px solid var(--metal-glow)}
+.contact a:hover{color:white;border-color:white}
+.toolbar{position:fixed;top:14px;right:14px;display:flex;gap:6px;z-index:100}
+.toolbar a{font-size:9px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-mute);background:var(--paper);padding:5px 10px;border:1px solid var(--rule);text-decoration:none}
+.toolbar a:hover{color:var(--metal);border-color:var(--metal)}
+footer{border-top:1px solid var(--rule);text-align:center;padding:28px 24px 48px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute)}
+footer a{color:var(--ink-mute);margin:0 8px;border:none}
+footer a:hover{color:var(--metal)}
+</style>
+</head>
+<body>
+<div class="toolbar">
+ <a href="/">Home</a>
+ <a href="/about.html">About</a>
+ <a href="/privacy.html">Privacy</a>
+</div>
+<header>
+ <div class="kicker">The Corridor · get in touch</div>
+ <h1>Contact <em>the desk</em></h1>
+</header>
+<main>
+
+<section>
+ <p class="lede">The Corridor is written from a desk in Los Angeles, covering every business on Ventura Boulevard from Sherman Oaks through Woodland Hills. Corrections, story tips, a business that belongs in the magazine, or a sponsorship question — all of it reaches a real person at the address below.</p>
+</section>
+
+<section>
+ <div class="cards">
+ <div class="card">
+ <h3>Editorial & corrections</h3>
+ <p>Something we got wrong, a business we missed, or a story tip.</p>
+ <a href="mailto:steve@designerwallcoverings.com?subject=The%20Corridor%20-%20Editorial">steve@designerwallcoverings.com</a>
+ </div>
+ <div class="card">
+ <h3>Sponsorship</h3>
+ <p>Placement and a custom photo for your business.</p>
+ <a href="/rate-card.html">See the rate card →</a>
+ </div>
+ <div class="card">
+ <h3>List your business</h3>
+ <p>Own a business on the boulevard? Tell us and we'll typeset it.</p>
+ <a href="mailto:steve@designerwallcoverings.com?subject=The%20Corridor%20-%20Business%20listing">steve@designerwallcoverings.com</a>
+ </div>
+ <div class="card">
+ <h3>Privacy & data</h3>
+ <p>Questions about data we hold, or a deletion request.</p>
+ <a href="/privacy.html">Read the privacy policy →</a>
+ </div>
+ </div>
+</section>
+
+<div class="contact">
+ <p>The fastest way to reach us:</p>
+ <a href="mailto:steve@designerwallcoverings.com?subject=The%20Corridor">steve@designerwallcoverings.com</a>
+</div>
+
+</main>
+<footer>
+ <a href="/">Home</a> · <a href="/about.html">About</a> · <a href="/contact.html">Contact</a> · <a href="/privacy.html">Privacy</a>
+</footer>
+</body>
+</html>
diff --git a/public/index.html b/public/index.html
index fee815f..ed5cb91 100644
--- a/public/index.html
+++ b/public/index.html
@@ -499,5 +499,13 @@ async function loadVoices() {
loadVoices();
document.getElementById('voices-shuffle')?.addEventListener('click', loadVoices);
</script>
+<footer style="border-top:1px solid var(--rule);text-align:center;padding:34px 24px 46px;margin-top:40px;font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);font-family:'Inter',sans-serif">
+ <nav style="margin-bottom:14px">
+ <a href="/about.html" style="color:var(--ink-mute);text-decoration:none;margin:0 10px">About</a>·
+ <a href="/contact.html" style="color:var(--ink-mute);text-decoration:none;margin:0 10px">Contact</a>·
+ <a href="/privacy.html" style="color:var(--ink-mute);text-decoration:none;margin:0 10px">Privacy Policy</a>
+ </nav>
+ <div style="font-family:'Cormorant Garamond',serif;font-style:italic;text-transform:none;letter-spacing:0;font-size:13px;color:var(--metal)">The Corridor — Ventura Boulevard, Los Angeles</div>
+</footer>
</body>
</html>
diff --git a/public/privacy.html b/public/privacy.html
new file mode 100644
index 0000000..adbe0fb
--- /dev/null
+++ b/public/privacy.html
@@ -0,0 +1,110 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>Privacy Policy · The Corridor</title>
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="description" content="Privacy Policy for venturacorridor.com — what we collect, how third-party and Google advertising cookies are used, and how to opt out.">
+<style>
+@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;1,400;1,500&family=Inter:wght@300;400;500&family=JetBrains+Mono:wght@200;300&display=swap');
+:root{--paper:#faf6ee;--ink:#1a1815;--ink-mute:#6e6356;--metal:#8a6d3b;--metal-glow:#b89968;--accent:#6a3a1a;--rule:#d8cdb8}
+*{box-sizing:border-box}
+html,body{margin:0;background:var(--paper);color:var(--ink);font-family:'Inter',sans-serif;font-weight:300;line-height:1.65}
+header{text-align:center;padding:64px 24px 36px;border-bottom:4px double var(--ink)}
+header .kicker{font-size:10px;letter-spacing:.45em;text-transform:uppercase;color:var(--metal);font-weight:500}
+header h1{font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:500;font-size:64px;line-height:.98;margin:14px 0 0;letter-spacing:-0.02em}
+header h1 em{font-style:normal;color:var(--metal)}
+header .sub{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);margin-top:14px}
+main{max-width:680px;margin:0 auto;padding:48px 24px 80px}
+section{margin-bottom:32px}
+section h2{font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:500;font-size:28px;margin:0 0 12px;color:var(--ink)}
+section h2 em{font-style:normal;color:var(--metal)}
+section p,section li{font-size:16px;color:var(--ink);margin:0 0 12px}
+section ul{padding-left:22px}
+a{color:var(--accent);text-decoration:none;border-bottom:1px solid var(--rule)}
+a:hover{color:var(--metal);border-color:var(--metal)}
+.contact{margin-top:40px;padding:24px;background:var(--ink);color:var(--paper);text-align:center}
+.contact p{color:rgba(255,255,255,0.85);font-size:14px;margin:0 0 14px}
+.contact a{color:var(--metal-glow);font-family:'JetBrains Mono',monospace;font-size:13px;border-bottom:1px solid var(--metal-glow)}
+.contact a:hover{color:white;border-color:white}
+.toolbar{position:fixed;top:14px;right:14px;display:flex;gap:6px;z-index:100}
+.toolbar a{font-size:9px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-mute);background:var(--paper);padding:5px 10px;border:1px solid var(--rule);text-decoration:none}
+.toolbar a:hover{color:var(--metal);border-color:var(--metal)}
+footer{border-top:1px solid var(--rule);text-align:center;padding:28px 24px 48px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute)}
+footer a{color:var(--ink-mute);margin:0 8px;border:none}
+footer a:hover{color:var(--metal)}
+</style>
+</head>
+<body>
+<div class="toolbar">
+ <a href="/">Home</a>
+ <a href="/about.html">About</a>
+ <a href="/contact.html">Contact</a>
+</div>
+<header>
+ <div class="kicker">The Corridor · legal</div>
+ <h1>Privacy <em>Policy</em></h1>
+ <div class="sub">venturacorridor.com · last updated 12 September 2026</div>
+</header>
+<main>
+
+<section>
+ <h2>Who we <em>are</em>.</h2>
+ <p>The Corridor (venturacorridor.com) is a local magazine and business directory covering Ventura Boulevard in Los Angeles, published by Designer Wallcoverings. This policy explains what information the site collects when you visit, how it is used, and the choices you have. Questions: <a href="mailto:steve@designerwallcoverings.com?subject=Privacy">steve@designerwallcoverings.com</a>.</p>
+</section>
+
+<section>
+ <h2>What we <em>collect</em>.</h2>
+ <ul>
+ <li><strong>Usage data</strong> — standard server logs and analytics (pages viewed, approximate location, device and browser type, referring page). This is aggregate and is not used to identify you personally.</li>
+ <li><strong>Information you send us</strong> — if you email us or submit a business listing, feedback, or sponsor inquiry, we keep what you send (name, email, message) to respond and maintain the record.</li>
+ <li><strong>Cookies</strong> — small files stored by your browser, used for analytics and, where enabled, advertising (see below). You can clear or block cookies in your browser settings.</li>
+ </ul>
+</section>
+
+<section>
+ <h2>Advertising & third-party <em>cookies</em>.</h2>
+ <p>This site displays ads served by Google. Third-party vendors, <strong>including Google</strong>, use cookies to serve ads based on your prior visits to this and other websites.</p>
+ <ul>
+ <li>Google's use of advertising cookies enables it and its partners to serve ads to you based on your visits to this site and/or other sites on the Internet.</li>
+ <li>You may opt out of personalized advertising by visiting <a href="https://www.google.com/settings/ads" target="_blank" rel="noopener">Google Ads Settings</a>.</li>
+ <li>You can opt out of a third-party vendor's use of cookies for personalized advertising at <a href="https://www.aboutads.info/choices/" target="_blank" rel="noopener">aboutads.info/choices</a> and <a href="https://optout.networkadvertising.org/" target="_blank" rel="noopener">optout.networkadvertising.org</a>.</li>
+ <li>See <a href="https://policies.google.com/technologies/partner-sites" target="_blank" rel="noopener">how Google uses information from sites that use its services</a>.</li>
+ </ul>
+</section>
+
+<section>
+ <h2>Analytics.</h2>
+ <p>We use privacy-respecting analytics to understand aggregate traffic (which pages are read, roughly where visitors come from). We do not sell your personal information.</p>
+</section>
+
+<section>
+ <h2>Your <em>choices</em>.</h2>
+ <ul>
+ <li>Manage or disable cookies in your browser settings at any time.</li>
+ <li>Opt out of personalized ads via the links above.</li>
+ <li>Ask us to delete any information you sent us by emailing the address below.</li>
+ </ul>
+</section>
+
+<section>
+ <h2>Children.</h2>
+ <p>This site is intended for a general audience and is not directed at children under 13. We do not knowingly collect information from children.</p>
+</section>
+
+<section>
+ <h2>Changes.</h2>
+ <p>We may update this policy from time to time; the date at the top reflects the latest revision. Continued use of the site after a change means you accept the updated policy.</p>
+</section>
+
+<div class="contact">
+ <p>Privacy questions, data requests, corrections:</p>
+ <a href="mailto:steve@designerwallcoverings.com?subject=Privacy%20-%20The%20Corridor">steve@designerwallcoverings.com</a>
+</div>
+
+</main>
+<footer>
+ <a href="/">Home</a> · <a href="/about.html">About</a> · <a href="/contact.html">Contact</a> · <a href="/privacy.html">Privacy</a>
+</footer>
+</body>
+</html>
diff --git a/src/server/index.ts b/src/server/index.ts
index 0534e63..9712f2f 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -104,7 +104,9 @@ const ADMIN_PATHS = [
/^\/rate-card(\.html)?\/?$/i,
/^\/sponsor(\.html)?\/?$/i,
/^\/api\/sponsor\/inquiries\/?$/i,
- /^\/about(\.html)?\/?$/i,
+ // NOTE: /about is a PUBLIC required page (AdSense site-requirement + the "Needs
+ // attention" fix, TK-11484). It must NOT be admin-gated or Googlebot gets 401.
+ // (Was previously here: /^\/about(\.html)?\/?$/i — removed 2026-09-12.)
/^\/api\/feedback(\/\d+)?\/?$/i,
/^\/feedback(\.html)?\/?$/i,
/^\/admin\/ig-drafts(\/.*)?$/i,
@@ -3274,6 +3276,10 @@ app.get('/sitemap.xml', async (_req, res) => {
`);
const fmt = (d: any) => new Date(d).toISOString();
const urls: string[] = [
+ `<url><loc>${baseUrl}/</loc><changefreq>daily</changefreq><priority>1.0</priority></url>`,
+ `<url><loc>${baseUrl}/about.html</loc><changefreq>monthly</changefreq><priority>0.5</priority></url>`,
+ `<url><loc>${baseUrl}/privacy.html</loc><changefreq>yearly</changefreq><priority>0.3</priority></url>`,
+ `<url><loc>${baseUrl}/contact.html</loc><changefreq>yearly</changefreq><priority>0.4</priority></url>`,
`<url><loc>${baseUrl}/issue</loc><changefreq>daily</changefreq><priority>1.0</priority></url>`,
`<url><loc>${baseUrl}/scoreboard.html</loc><changefreq>daily</changefreq><priority>0.6</priority></url>`,
`<url><loc>${baseUrl}/words</loc><changefreq>weekly</changefreq><priority>0.5</priority></url>`,
← 9f8fe5b Make Ventura sitemap resilient
·
back to Ventura Corridor
·
security: add rel=noopener noreferrer to target=_blank links eacc15b →