brand-site/src/pages/rss.xml.ts
Scott Scoble 033bdba7d5 fix(content): spread dark-factory post dates across May 22 - July 8
Scott asked the 6 dark-factory posts to be spread out between late May and
yesterday (July 15), 'a little random, not equally spaced.' Mapped the
topical reading order to a monotonically increasing date range with
irregular gaps so the chronological index doesn't bunch the series.

Dates assigned (all 4 places updated: post body, index card, sitemap
lastmod, rss pubDate):

  what-is-a-dark-factory             May 22, 2026
  light-vs-dark-factories            June 2, 2026   (+11d)
  why-kubernetes-for-dark-factory    June 11, 2026  (+9d)
  operator-patterns-for-software     June 19, 2026  (+8d)
  the-taste-problem                  June 29, 2026  (+10d)
  human-in-the-loop-seam             July 8, 2026   (+9d)

Range: May 22 to July 8 (47 days). Late May anchor hit. July 15 (yesterday)
left as a 1-week buffer. 6 posts, gaps 8-11 days, not equal, not weirdly
bunched. Sitemap and RSS were missing these 6 posts entirely; added them
with the matching lastmod/date.

Verification: build clean (39 pages, 2.8s). All 6 posts, /sitemap.xml,
and /rss.xml serve 200. Index order in /blog will now be:
  human-in-the-loop-seam (Jul 8)
  the-taste-problem (Jun 29)
  operator-patterns (Jun 19)
  why-kubernetes (Jun 11)
  light-vs-dark (Jun 2)
  what-is-a-dark-factory (May 22)
  ... existing May 2026 posts ...
This is reverse-of-topical-order, which is correct for a chronological
index.
2026-07-16 17:36:36 -07:00

216 lines
9.2 KiB
TypeScript

import type { APIRoute } from 'astro';
interface PostEntry {
title: string;
description: string;
url: string;
date: string; // ISO date string
tags: string[];
}
// Blog posts data — matches src/pages/blog/*.astro
// When adding a new post, add an entry here
const posts: PostEntry[] = [
{
title: "50 First Dates with AI: Why Your AI Forgets Everything and What to Do About It",
description: "Every conversation with most AI systems is a first date. Here's the three-layer memory model that actually compounds — from Scott Scoble's scobleclaw experience.",
url: "/blog/50-first-dates-with-ai",
date: "2026-05-24",
tags: ["AI"],
},
{
title: "Stop Strip-Mining Your Engineers: The Cultivation Alternative to Throughput Obsession",
description: "Gallup 2026: 80% of the global workforce is disengaged. Manager engagement has collapsed. The $438B cost isn't a tool problem; it's a people problem. Here's the cultivation alternative.",
url: "/blog/strip-mining-cultivation",
date: "2026-05-18",
tags: ["Leadership"],
},
{
title: "Your AI Has Amnesia: Why Memory Architecture Is the Hardest Problem in Agentic Systems",
description: "The anterograde amnesia metaphor for AI memory architecture. Three-layer memory model for agentic systems from Scott Scoble's scobleclaw experience.",
url: "/blog/ai-has-amnesia",
date: "2026-05-18",
tags: ["AI"],
},
{
title: "AI Exposes Leaders; The Cultivation Test",
description: "AI doesn't just change work — it exposes what kind of leader you already were. The cultivation test: give your team AI tools and watch what happens.",
url: "/blog/ai-exposes-leaders-cultivation-test",
date: "2026-05-07",
tags: ["Leadership", "AI"],
},
{
title: "Mentorship Isn't Latency, It's Leverage",
description: "Why mentorship is the highest-leverage investment a leader can make — and why most leaders treat it as a cost instead.",
url: "/blog/mentorship-isnt-latency-its-leverage",
date: "2026-05-06",
tags: ["Leadership"],
},
{
title: "Strip-Mining Is Happening Right Now",
description: "The extraction economy is not a future risk. It's happening right now in your organization. Here's how to recognize it and what to do about it.",
url: "/blog/strip-mining-happening-right-now",
date: "2026-05-05",
tags: ["Leadership"],
},
{
title: "My Open Source Projects: Speckl, ScobleClaw, and Beyond the Prompt",
description: "A roundup of Scott Scoble's open-source projects — Speckl (spec compiler with provenance), ScobleClaw (agentic engineering framework), and Beyond the Prompt (workshop on building with AI agents).",
url: "/blog/open-source-projects",
date: "2026-05-23",
tags: ["Open Source"],
},
{
title: "We're Going to Formally Verify SQLite",
description: "SQLite runs on every smartphone, every browser, every embedded system. Its core state machines have never been formally verified. Following the Kafka proof, we're tackling the most deployed database in history with SpeckDL and Z3 bounded model checking.",
url: "/blog/prove-sqlite",
date: "2026-05-23",
tags: ["Engineering"],
},
{
title: "You're Already in the Agentic Wars",
description: "Meta has Hatch. Google has Remy. Everyone is building agents. Whose capability compounds?",
url: "/blog/agentic-wars",
date: "2026-05-08",
tags: ["AI"],
},
{
title: "What Does AI Brain Fry Really Mean?",
description: "Gallup says 80% of the workforce is disengaged. The heaviest AI users are burning out fastest. The fix isn't training — it's structural.",
url: "/blog/ai-brain-fry",
date: "2026-05-03",
tags: ["AI"],
},
{
title: "The Surveillance Dividend Is a Lie",
description: "Every company running AI adoption is making an implicit bargain: data for tools. The companies extracting the most surveillance are hemorrhaging their best talent.",
url: "/blog/surveillance-extraction",
date: "2026-05-03",
tags: ["Leadership"],
},
{
title: "80% of Your Team Is Disengaged. It's Not Their Fault.",
description: "Gallup says 80% of the global workforce is disengaged. The $100B+ engagement industry has failed for 20 years. The fix isn't perks or surveys; it's structural.",
url: "/blog/gallup-disengagement",
date: "2026-05-03",
tags: ["Leadership"],
},
{
title: "The Developer Experience Shift: Why Tooling Alone Won't Save You",
description: "Companies will spend $60B+ on developer tools in 2026. But the real DevEx crisis isn't tooling — it's autonomy, mastery, and belonging. As code production becomes commoditized, the human dimensions of engineering become the only competitive advantage that matters.",
url: "/blog/devex-shift",
date: "2026-05-03",
tags: ["Engineering"],
},
{
title: "The Token Anxiety Trap; Why AI Agents Aren't Liberating Us (Yet)",
description: "Your agent swarm runs 24/7 and you're more anxious than ever. Stanford's 2026 AI Index shows a 20% drop in junior dev employment since 2024. The agent revolution promised freedom — instead it gave us token anxiety and a new kind of burnout.",
url: "/blog/token-anxiety",
date: "2026-05-04",
tags: ["AI"],
},
{
title: "Three Questions That Changed How I Mentor",
description: "The simple mentoring framework that actually gets used — three questions that unlock real growth.",
url: "/blog/three-questions-mentoring",
date: "2026-04-28",
tags: ["Leadership"],
},
{
title: "Three Signs Your Team Is Being Strip-Mined",
description: "The mindset shift that separates thriving teams from burned-out ones — cultivation over extraction.",
url: "/blog/strip-mining-signs",
date: "2026-04-28",
tags: ["Teams"],
},
{
title: "The Soil Beneath The Code",
description: "A three-layer framework for understanding what makes engineering organizations healthy — or not.",
url: "/blog/the-soil-beneath-the-code",
date: "2026-04-28",
tags: ["Engineering"],
},
{
title: "What a Dark Factory Actually Is (and Isn't)",
description: "The phrase is everywhere. The working meaning is gone. Here is what it is, what it isn't, and the five positions on the spectrum.",
url: "/blog/what-is-a-dark-factory",
date: "2026-05-22",
tags: ["Engineering"],
},
{
title: "Light vs Dark Factories: Why the Middle Is Harder Than Either End",
description: "A light factory has too many gates. A dark factory has too few. The middle is where the engineering happens, and the middle is the part nobody talks about.",
url: "/blog/light-vs-dark-factories",
date: "2026-06-02",
tags: ["Engineering"],
},
{
title: "Why Kubernetes for a Dark Factory",
description: "A dark factory is a control loop. Kubernetes is the most boring control loop in production. That is the reason.",
url: "/blog/why-kubernetes-for-dark-factory",
date: "2026-06-11",
tags: ["Engineering"],
},
{
title: "Kubernetes Operator Patterns for Software Factories",
description: "An operator is a control loop with a domain in it. That is the whole definition. Here are the four operator patterns and the one anti-pattern to avoid.",
url: "/blog/operator-patterns-for-software-factories",
date: "2026-06-19",
tags: ["Engineering"],
},
{
title: "The Taste Problem: What Dark Factories Can't Transfer",
description: "A dark factory can transfer code. It cannot transfer the judgment that knew the code was right. That is the problem provenance was invented to solve.",
url: "/blog/the-taste-problem",
date: "2026-06-29",
tags: ["Engineering"],
},
{
title: "The Human-in-the-Loop Seam: Where Humans Belong in a Dark Factory",
description: "Human-in-the-loop is a phrase everyone uses. Almost nobody uses it correctly. The seam is in the spec, not in the implementation.",
url: "/blog/human-in-the-loop-seam",
date: "2026-07-08",
tags: ["Engineering"],
},
];
const siteUrl = 'https://scott.scoble.me';
const now = new Date().toUTCString();
// Build RSS XML
const items = posts
.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())
.map(
(post) => `
<item>
<title><![CDATA[${post.title}]]></title>
<description><![CDATA[${post.description}]]></description>
<link>${siteUrl}${post.url}</link>
<guid isPermaLink="true">${siteUrl}${post.url}</guid>
<pubDate>${new Date(post.date).toUTCString()}</pubDate>
${post.tags.map((tag) => ` <category>${tag}</category>`).join('\n')}
</item>`
)
.join('');
const rssXml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Scott Scoble Blog</title>
<description>Articles on AI, leadership, cultivation, and the human side of technology.</description>
<link>${siteUrl}</link>
<language>en-us</language>
<lastBuildDate>${now}</lastBuildDate>
<atom:link href="${siteUrl}/rss.xml" rel="self" type="application/rss+xml"/>
${items}
</channel>
</rss>`;
export const GET: APIRoute = () => {
return new Response(rssXml, {
headers: {
'Content-Type': 'application/rss+xml; charset=utf-8',
'Cache-Control': 'public, max-age=3600',
},
});
};