Monday, June 1, 2026 streamed.news From video to newspaper

/** * Streamed.News -- Section Hub Grid (v6 -- paginated tag fetch, fixes Ghost include=tags bug) * * Level 1 /sports/ Section page -> family cards (static config) * Level 2 /tag/category-rugby/ Family page -> auto-discovered channel cards * Level 3 /tag/{channel-slug}/ Channel page -> Ghost default (individual posts) * * Channel discovery: fetch 100 most recent category-* posts, extract tag co-occurrence, * filter out topic tags, render as channel cards (>=3 posts per channel). * A new channel appears automatically once it has >=3 posts. * * All emoji use JS Unicode escapes (pure ASCII) -- no encoding issues. */ (function () { "use strict"; var CONTENT_KEY = "938d65fbaad8924b65ba337290"; var GHOST_URL = "https://streamed-news.ghost.io"; var API_BASE = GHOST_URL + "/ghost/api/content"; var MIN_POSTS = 3; // -- Level 1 config: Section -> Families (STATIC) -- var SECTIONS = { sports: { label: "Sports", families: [ { slug: "windsurfing", emoji: "\u{1F3C4}", name: "Windsurfing", fallback: ["windsurfing","cookie","ride-along-sessions-with-cookie", "graham-ezzy-coaching","exocet-windsurfing","goya-windsurfing", "nils-bach-windsurfing","loftsails","windsurfingpodcast", "tws-windsurfing","tomb-brendt-coach"] }, { slug: "rugby", emoji: "\u{1F3C9}", name: "Rugby", fallback: ["rugby","squidge-rugby-press","six-nations", "the-good-the-bad-and-the-rugby","eggchasers-rugby-press", "men-s-six-nations-2026","bbc-sport"] }, { slug: "motorsport", emoji: "\u{1F3CE}", name: "Motorsport", fallback: ["formula-1","motogp","david-perogil","duralavita", "chequered-flag","david-perogil-formula-1"] }, { slug: "tennis", emoji: "\u{1F3BE}", name: "Tennis", fallback: ["meike-babel-tennis","intuitive-tennis"] }, { slug: "triathlon", emoji: "\u{1F3CA}", name: "Triathlon & Endurance", fallback: ["matias-marquez-team","triatlon","atletismo", "entrenamiento-deportivo","ben-greenfield-press", "performance-longevity"] }, { slug: "sports-psychology", emoji: "\u{1F9E0}", name: "Psychology", fallback: ["sports-psychology","coaching","sports-performance"] }, ]}, business: { label: "Business", families: [ { slug: "sales", emoji: "\u{1F4C8}", name: "Sales & Strategy", fallback: ["b2b-sales","sales-strategy","mike-weinberg","carson-heady", "sales-management","sales-leadership","ian-koniak", "outbound-squad-press","mastering-modern-selling"] }, { slug: "marketing", emoji: "\u{1F4E3}", name: "Marketing", fallback: ["b2b-marketing","content-marketing","content-strategy", "ashley-faus","mark-stouse","fullfunnel-io"] }, { slug: "leadership",emoji: "\u{1F465}", name: "Leadership", fallback: ["leadership-development","closed-circuit-selling", "adem-manderovic-closed-circuit-selling-ccs", "paul-mcdonagh-smith","growth-leaders-network"] }, ]}, science: { label: "Science", families: [ { slug: "energy", emoji: "\u{26A1}", name: "Energy & Resources", fallback: ["nate-hagens","antonio-turiel","energy-transition", "energy-live-news","crisis-energetica","energy-crisis", "biogas","tgs-nate-hagens","iea"] }, { slug: "climate", emoji: "\u{1F30D}", name: "Climate & Environment", fallback: ["climate-change","clean-technology","renewable-energy", "environmental-science"] }, { slug: "medicine", emoji: "\u{1F3E5}", name: "Medicine & Health", fallback: ["world-medical-innovation-forum","medical-physics", "mgb","health-innovation"] }, ]}, world: { label: "World", families: [ { slug: "geopolitics",emoji: "\u{1F310}", name: "Geopolitics", fallback: ["geopolitics","fabian-calle-geopolitica","iran", "fabi-n-calle-news","la-base"] }, { slug: "argentina", emoji: "\u{1F1E6}\u{1F1F7}", name: "Argentina", fallback: ["argentina","javier-milei","economia-argentina", "ahora-play","radio-con-vos-899","decode-con-daninovarama", "marcelo-longobardi","ernesto-tenembaum","dani-novarama", "historia-argentina-eduardo-sartelli","programa-412"] }, { slug: "latam", emoji: "\u{1F30E}", name: "Latin America", fallback: ["diego-ruzzarin","mundo-maldini","yaqpa"] }, { slug: "china", emoji: "\u{1F1E8}\u{1F1F3}", name: "China & Asia", fallback: ["china","buenas-tardes-china"] }, { slug: "us-politics",emoji: "\u{1F30F}", name: "US & Global", fallback: ["donald-trump","english","prdictive-history-press"] }, ]}, technology: { label: "Technology", families: [ { slug: "cybersecurity",emoji: "\u{1F510}", name: "Cybersecurity", fallback: ["cybersecurity","ransomware","data-protection", "cybersecurity-insights","check-point-software-press", "gigamon-press"] }, { slug: "cloud", emoji: "\u{2601}\u{FE0F}", name: "Cloud & Enterprise", fallback: ["aws","cloud-computing","netapp","cohesity","cohesity-news", "netapp-insights-news","netapp-insights-press", "connectwise","cloud-deployment-management", "outshift-by-cisco","ciscolivenews"] }, { slug: "ai", emoji: "\u{1F916}", name: "AI & Data", fallback: ["agentic-ai","large-language-models","artificial-intelligence", "data-analysis-for-social-scientists"] }, { slug: "aviation", emoji: "\u{2708}\u{FE0F}", name: "Aviation", fallback: ["aviation","mentour-pilot","mentourpilot"] }, ]}, culture: { label: "Culture", families: [ { slug: "design", emoji: "\u{1F3A8}", name: "Design & Branding", fallback: ["norberto-chaves","graphic-design","design-criticism", "branding","visual-identity"] }, { slug: "personal-growth",emoji: "\u{1F331}", name: "Personal Growth", fallback: ["finding-mastery","personal-growth","resilience", "work-life-balance","finding-mastery-newspaper", "rich-roll-newspaper","remarkable-people"] }, { slug: "society", emoji: "\u{1F5E3}\u{FE0F}", name: "Society & Ideas", fallback: ["el-gato-y-el-zorro","cultural-identity","tengo-un-plan", "cultura","jordi-wild","joe-rogan-press"] }, { slug: "music", emoji: "\u{1F3B5}", name: "Music & Arts", fallback: ["rick-beato","music-theory","rick-beato-2"] }, { slug: "economics", emoji: "\u{1F4B0}", name: "Economics", fallback: ["garys-economics","gary-stevenson","harvard-econ", "ray-dalio-news","barry-s-economics-press", "bloomberg-balance-of-power-press"] }, { slug: "food", emoji: "\u{1F373}", name: "Food & Recipes", fallback: ["el-comidista-en-el-pa-s"] }, ]}, }; // -- Family topic exclusions (tags that are NOT channels) -- var FAMILY_EXCLUSIONS = { "windsurfing": ["windsurfing","water-sports","windsurfing-techniques","extreme-sports"], "rugby": ["rugby","bbc-sport","six-nations","tactical-analysis","england-rugby","scotland-rugby","united-rugby-championship"], "motorsport": ["formula-1","motogp","rider-journeys","gran-premio-de-miami","aprilia"], "tennis": ["tennis","tournament-coverage","roland-garros","coaching","tactical-analysis"], "triathlon": ["triatlon","atletismo","entrenamiento-deportivo","rendimiento-deportivo","nutricion-deportiva"], "sports-psychology": ["sports-psychology","coaching","tactical-analysis","psychologie-du-sport","analyse-tactique","planche-a-voile"], "sales": ["b2b-sales","sales-strategy","sales-management","sales-leadership","consultative-selling","sales-training"], "marketing": ["b2b-marketing","content-marketing","content-strategy","marketing-b2b","marketing-de-contenidos","marketing-strategy"], "leadership": ["leadership-development","leadership","management-accountability","predictable-revenue"], "energy": ["energy-transition","energy-live-news","crisis-energetica","energy-crisis","energy-throughput","biophysical-economics"], "climate": ["climate-change","clean-technology","renewable-energy","environmental-science"], "medicine": ["world-medical-innovation-forum","medical-physics","health-innovation","medikamentenentwicklung"], "geopolitics": ["geopolitics","us-foreign-policy","estados-unidos","israel"], "argentina": ["argentina","economia-argentina","javier-milei","inflacion"], "latam": ["capitalism","capitalismo"], "china": ["politica-argentina"], "us-politics": [], "cybersecurity": ["cybersecurity","cybersecurity-insights"], "cloud": ["cloud-computing","cloud-deployment-management","hybrid-cloud"], "ai": ["agentic-ai","large-language-models","artificial-intelligence","psychology","education","productivity"], "aviation": ["aviation","mentour-pilot"], "design": ["graphic-design","design-criticism","corporate-identity","identidad-corporativa","logos"], "personal-growth": ["personal-transformation","mental-health","creativity","personal-development"], "society": ["cultura","cultural-identity","salud-mental"], "music": ["music-theory","music-education","music-production"], "economics": ["wealth-inequality"] }; function esc(s) { return (s||"").replace(/&/g,"&").replace(//g,">").replace(/"/g,"""); } function timeAgo(dateStr) { var diff = Date.now() - new Date(dateStr).getTime(); var days = Math.floor(diff / 86400000); if (days === 0) return "Today"; if (days === 1) return "Yesterday"; if (days < 7) return days + " days ago"; if (days < 30) return Math.floor(days/7) + " wk ago"; if (days < 365) return Math.floor(days/30) + " mo ago"; return Math.floor(days/365) + "y ago"; } function fetchPosts(filterStr, limit, includeTags) { var fields = "title,url,feature_image,published_at"; var url = API_BASE + "/posts/?key=" + CONTENT_KEY + "&filter=" + encodeURIComponent(filterStr) + "&limit=" + (limit || 4) + "&fields=" + fields + (includeTags ? "&include=tags" : "") + "&order=published_at%20desc"; return fetch(url) .then(function(r){ return r.ok ? r.json() : {posts:[]}; }) .then(function(d){ return d.posts||[]; }) .catch(function(){ return []; }); } function mountGrid(main, html) { var container = document.createElement("div"); container.id = "sn-hub-grid"; container.style.cssText = "max-width:1100px;margin:0 auto;padding:0 24px 48px;"; container.innerHTML = '

Loading...

'; var existing = main.firstElementChild; main.insertBefore(container, existing); if (existing) existing.style.display = "none"; return { container: container, existing: existing, render: function(h){ container.innerHTML = h; }, restore: function(){ container.remove(); if(existing) existing.style.display=""; } }; } function cardHtml(headerHtml, posts, seeAllUrl, seeAllLabel) { var featured = posts[0]; var rest = posts.slice(1,3); var img = featured.feature_image ? '' + '' : ""; var links = rest.map(function(p){ return '
  • ' + ''+esc(p.title)+'' + ''+timeAgo(p.published_at)+'
  • '; }).join(""); return '
    ' + headerHtml + img + '' + esc(featured.title)+'' + '' + timeAgo(featured.published_at)+'' + (links ? '' : '') + '' + 'See all '+esc(seeAllLabel)+' \u2192
    '; } function pillsHtml(items) { return '
    ' + items.map(function(it){ return ''+(it.emoji?' '+it.emoji+' ':'')+esc(it.label)+''; }).join("") + '
    '; } function gridWrap(cards) { return '
    '+cards+'
    '; } function detectSection() { var path = window.location.pathname.replace(/\/$/,""); for (var s in SECTIONS) { if (path === "/"+s || path.indexOf("/"+s+"/page/") === 0) return s; } return null; } function renderSectionGrid(sectionSlug) { var section = SECTIONS[sectionSlug]; if (!section) return; var main = document.querySelector(".site-main,main,#ghost-main,.gh-main") || document.querySelector("[class*='main']"); if (!main) return; var m = mountGrid(main); var promises = section.families.map(function(f){ var tags = ["category-"+f.slug].concat(f.fallback); return fetchPosts("tag:["+tags.join(",")+"]", 4); }); Promise.all(promises).then(function(results){ var active = section.families .map(function(f,i){ return {f:f, posts:results[i]}; }) .filter(function(a){ return a.posts.length >= MIN_POSTS; }); if (!active.length) { m.restore(); return; } var navItems = active.map(function(a){ return { url:"/tag/category-"+a.f.slug+"/", label:a.f.name, emoji:a.f.emoji }; }); var cards = active.map(function(a){ var hdr = '
    ' + ''+a.f.emoji+'' + ''+esc(a.f.name)+'
    '; return cardHtml(hdr, a.posts, "/tag/category-"+a.f.slug+"/", a.f.name); }).join(""); m.render(pillsHtml(navItems) + gridWrap(cards)); }); } function detectFamily() { var m = window.location.pathname.replace(/\/$/,"").match(/^\/tag\/category-([^/]+)$/); return m ? m[1] : null; } function getFamily(familySlug) { for (var s in SECTIONS) { for (var i = 0; i < SECTIONS[s].families.length; i++) { if (SECTIONS[s].families[i].slug === familySlug) { return { section: s, family: SECTIONS[s].families[i] }; } } } return null; } function prettyName(slug) { return slug.replace(/-/g, " ").replace(/\b\w/g, function(c){ return c.toUpperCase(); }); } function renderFamilyGrid(familySlug) { var main = document.querySelector(".site-main,main,#ghost-main,.gh-main") || document.querySelector("[class*='main']"); if (!main) return; var m = mountGrid(main); var info = getFamily(familySlug); // Ghost's include=tags breaks on large fetches \u2014 tags bleed between posts. // Paginate in batches of 15 so each page reliably returns full tag lists. var PAGE_SIZE = 15; var MAX_PAGES = 7; // up to 105 posts scanned for channel discovery var chSeen = {}; var page = 1; function fetchNextPage() { var url = API_BASE + "/posts/?key=" + CONTENT_KEY + "&filter=" + encodeURIComponent("tag:[category-"+familySlug+"]") + "&limit=" + PAGE_SIZE + "&page=" + page + "&fields=title" + "&include=tags" + "&order=published_at%20desc"; fetch(url) .then(function(r){ return r.ok ? r.json() : {posts:[],meta:{}}; }) .then(function(d){ var posts = d.posts || []; for (var i = 0; i < posts.length; i++) { var tags = posts[i].tags || []; for (var j = 0; j < tags.length; j++) { if (tags[j].slug.indexOf("ch-") === 0) chSeen[tags[j].slug] = true; } } var totalPages = (d.meta && d.meta.pagination) ? d.meta.pagination.pages : 1; if (posts.length === PAGE_SIZE && page < totalPages && page < MAX_PAGES) { page++; fetchNextPage(); } else { buildCards(); } }) .catch(function(){ buildCards(); }); } function buildCards() { var chSlugs = Object.keys(chSeen); if (!chSlugs.length) { m.restore(); return; } // Fetch posts using the real channel slug (strip "ch-" prefix) var promises = chSlugs.map(function(ch) { return fetchPosts("tag:["+ch.slice(3)+"]", 4); }); Promise.all(promises).then(function(results) { var active = chSlugs .map(function(ch, i) { return { slug: ch.slice(3), posts: results[i] }; }) .filter(function(a) { return a.posts.length >= 1; }) .sort(function(a, b) { return b.posts.length - a.posts.length; }); if (!active.length) { m.restore(); return; } var sectionLabel = info ? info.section.charAt(0).toUpperCase() + info.section.slice(1) : "Content"; var familyLabel = info ? info.family.emoji + " " + info.family.name : prettyName(familySlug); var breadcrumb = '
    ' + '' + esc(sectionLabel)+'' + ' \u203A' + ''+esc(familyLabel)+'
    '; var cards = active.map(function(a) { var hdr = '
    ' + esc(prettyName(a.slug))+'
    '; return cardHtml(hdr, a.posts, "/tag/"+a.slug+"/", prettyName(a.slug)); }).join(""); m.render(breadcrumb + gridWrap(cards)); }); } // end buildCards fetchNextPage(); } function boot() { var section = detectSection(); var family = !section && detectFamily(); var fn = section ? function(){ renderSectionGrid(section); } : family ? function(){ renderFamilyGrid(family); } : null; if (!fn) return; if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", fn); } else { fn(); } } boot(); })();