[object Object]

← back to Allnewsdaily

front page: Drudge-scale smaller text + cap headlines to 20 words (both SSR + live-refresh paths)

af0cd1b8b4308e694b0402d0a3502ab3b07a6f61 · 2026-09-10 00:18:12 -0700 · Steve Abrams

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019QqMmD8S45PEQRKbQM1KBo

Files touched

Diff

commit af0cd1b8b4308e694b0402d0a3502ab3b07a6f61
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 10 00:18:12 2026 -0700

    front page: Drudge-scale smaller text + cap headlines to 20 words (both SSR + live-refresh paths)
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_019QqMmD8S45PEQRKbQM1KBo
---
 server.js | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/server.js b/server.js
index 19f00d6..b5706c8 100644
--- a/server.js
+++ b/server.js
@@ -83,7 +83,7 @@ function renderFront() {
   const today = new Date().toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', timeZone: 'America/New_York' });
 
   const storyLink = (it) =>
-    `<a class="story" href="${esc(it.link)}" target="_blank" rel="noopener nofollow">${esc(it.topic)}<span class="src"> — ${esc(it.outlet)}</span></a>`;
+    `<a class="story" href="${esc(it.link)}" target="_blank" rel="noopener nofollow">${esc(cap20(it.topic))}<span class="src"> — ${esc(it.outlet)}</span></a>`;
 
   const columnsHtml = (wire.columns || []).map((c) => `
     <section class="col">
@@ -93,7 +93,7 @@ function renderFront() {
 
   const splashHtml = wire.splash ? `
     <a class="splash" href="${esc(wire.splash.link)}" target="_blank" rel="noopener nofollow">
-      ${esc(wire.splash.topic)}<span class="src"> — ${esc(wire.splash.outlet)}</span>
+      ${esc(cap20(wire.splash.topic))}<span class="src"> — ${esc(wire.splash.outlet)}</span>
     </a>` : `<div class="splash placeholder">Assembling today's wire…</div>`;
 
   const columnistsHtml = (cfg.columnists || []).map((p) =>
@@ -157,11 +157,12 @@ ${bannerAd('top')}
   var elSplash= document.getElementById('wire-splash');
   var elCols  = document.getElementById('wire-cols');
   function esc(s){return String(s==null?'':s).replace(/[&<>"]/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c];});}
+  function cap20(s){var w=String(s==null?'':s).trim().split(/\\s+/);return w.length<=20?w.join(' '):w.slice(0,20).join(' ')+'…';}
   function fmtTime(ms){var s=Math.max(0,Math.round(ms/1000));var m=Math.floor(s/60);var r=s%60;return m+':'+(r<10?'0':'')+r;}
   function fmtET(iso){try{return new Date(iso).toLocaleTimeString('en-US',{hour:'numeric',minute:'2-digit',timeZone:'America/New_York'})+' ET';}catch(e){return '';}}
-  function story(it){return '<a class="story" href="'+esc(it.link)+'" target="_blank" rel="noopener nofollow">'+esc(it.topic)+'<span class="src"> — '+esc(it.outlet)+'</span></a>';}
+  function story(it){return '<a class="story" href="'+esc(it.link)+'" target="_blank" rel="noopener nofollow">'+esc(cap20(it.topic))+'<span class="src"> — '+esc(it.outlet)+'</span></a>';}
   function paint(w){
-    if(w.splash && elSplash){ elSplash.innerHTML='<a class="splash" href="'+esc(w.splash.link)+'" target="_blank" rel="noopener nofollow">'+esc(w.splash.topic)+'<span class="src"> — '+esc(w.splash.outlet)+'</span></a>'; }
+    if(w.splash && elSplash){ elSplash.innerHTML='<a class="splash" href="'+esc(w.splash.link)+'" target="_blank" rel="noopener nofollow">'+esc(cap20(w.splash.topic))+'<span class="src"> — '+esc(w.splash.outlet)+'</span></a>'; }
     if(Array.isArray(w.columns) && elCols){
       elCols.innerHTML = w.columns.map(function(c){
         return '<section class="col"><h2 class="colhead">'+esc(c.title)+'</h2>'+(c.items||[]).map(story).join('')+'</section>';
@@ -314,6 +315,8 @@ app.get('/sitemap.xml', (_q, res) => {
 // ---- Original editorial content (news-literacy guides) --------------------
 // Turns the site from a bare outbound-link directory into a real publisher.
 const esc = (s) => String(s).replace(/[&<>"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' }[c]));
+// Drudge-style: cap a headline to at most 20 words (adds an ellipsis when trimmed).
+const cap20 = (s) => { const w = String(s == null ? '' : s).trim().split(/\s+/); return w.length <= 20 ? w.join(' ') : w.slice(0, 20).join(' ') + '…'; };
 const ADSENSE = '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5278231299883833" crossorigin="anonymous"></script>';
 
 // Big banner ad zone. Renders a live AdSense responsive display unit when the position's slot ID
@@ -340,7 +343,7 @@ function bannerAd(pos) {
 const FRONT_CSS = `
 :root{--ink:#111;--link:#0000cc;--vis:#551a8b;--red:#c00;--rule:#000;--bg:#f8f7f2;--src:#6a6a6a}
 *{box-sizing:border-box}
-body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.32 Georgia,'Times New Roman',Times,serif}
+body{margin:0;background:var(--bg);color:var(--ink);font:13px/1.28 Georgia,'Times New Roman',Times,serif}
 a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}a:visited{color:var(--vis)}
 .masthead{display:grid;grid-template-columns:1fr auto 1fr;align-items:end;gap:12px;padding:14px 16px 6px;text-align:center}
 .wordmark{margin:0;font-size:clamp(30px,6vw,58px);letter-spacing:1px;font-weight:700;text-transform:uppercase;font-family:'Times New Roman',Times,serif}
@@ -352,19 +355,19 @@ a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}a:vis
 .rule.thin{border-top:1px solid #000;margin:10px 16px}
 main{max-width:1180px;margin:0 auto;padding:0 12px 60px}
 .splash{display:block;text-align:center;font-weight:700;text-transform:uppercase;color:var(--red);
-  font-size:clamp(22px,3.4vw,34px);line-height:1.2;padding:16px 12px 8px;letter-spacing:.3px}
+  font-size:clamp(16px,2.5vw,23px);line-height:1.18;padding:12px 12px 6px;letter-spacing:.3px}
 .splash:hover{text-decoration:underline}.splash.placeholder{color:#888;font-style:italic;text-transform:none}
 .splash .src{color:#7a2a2a;font-weight:400;font-size:.62em}
 .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0 26px}
 .col{padding:6px 0 10px;border-left:1px solid #ddd;padding-left:14px}
 .col:first-child{border-left:0;padding-left:0}
-.colhead{font-size:12px;text-transform:uppercase;letter-spacing:1px;color:#000;border-bottom:2px solid #000;
+.colhead{font-size:11px;text-transform:uppercase;letter-spacing:1px;color:#000;border-bottom:2px solid #000;
   margin:6px 0 8px;padding-bottom:3px;font-family:Arial,Helvetica,sans-serif}
-.story{display:block;padding:5px 0;border-bottom:1px dotted #cfcfcf;font-size:15px;line-height:1.28}
-.story .src{color:var(--src);font-style:italic;font-size:12px}
+.story{display:block;padding:4px 0;border-bottom:1px dotted #cfcfcf;font-size:12px;line-height:1.22}
+.story .src{color:var(--src);font-style:italic;font-size:11px}
 .railstrip{display:grid;grid-template-columns:repeat(3,1fr);gap:0 26px;background:#f0efe8;padding:12px 14px;margin-top:4px}.railstrip .rcol{border-left:1px solid #ddd;padding-left:14px}.railstrip .rcol:first-child{border-left:0;padding-left:0}
-.railitem{display:block;padding:4px 0;border-bottom:1px dotted #d5d5cf;font-size:14px}
-.railitem .src{color:var(--src);font-style:italic;font-size:12px}
+.railitem{display:block;padding:3px 0;border-bottom:1px dotted #d5d5cf;font-size:12px}
+.railitem .src{color:var(--src);font-style:italic;font-size:11px}
 .foot{max-width:1180px;margin:0 auto;padding:20px 16px 40px;border-top:3px double #000;font-size:12px;color:#444;text-align:center}
 .foot nav{margin-bottom:8px}.foot nav a{color:var(--link)}
 @media(max-width:960px){.grid{grid-template-columns:repeat(2,1fr)}.col:nth-child(3){border-left:0;padding-left:0}.railstrip{grid-template-columns:1fr}.railstrip .rcol{border-left:0;padding-left:0}}

← 75e04a0 sync package-lock.json with package.json (https-proxy-agent  ·  back to Allnewsdaily  ·  front page: Drudge-style photos — big splash photo + a lead bf0d044 →