Implement automated scheduled publishing for blog

- Enhanced blog library to read from both posts/ and scheduled/ directories
- Added publishDate filtering with real-time checking (no cron jobs needed)
- Support for draft posts and recursive directory scanning
- Posts automatically appear when publishDate is reached
- Containerized solution that works without external scheduling
- Added publishDate field to blog types and updated existing scheduled post

Tested and verified:
 Past-dated posts appear automatically
 Future-dated posts remain hidden until publish time
 Draft posts are excluded regardless of date
 Maintains existing functionality for regular posts

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
anthonyrawlins
2025-08-28 02:09:38 +10:00
parent 91c1cb9e5b
commit 5e53840371
12 changed files with 347 additions and 130 deletions

View File

@@ -19,8 +19,8 @@ export const metadata: Metadata = {
title: 'CHORUS PING! - Insights on Contextual AI',
description: 'Deep dives into contextual AI orchestration, agent coordination, and the future of intelligent systems.',
keywords: ['contextual AI', 'agent orchestration', 'enterprise AI', 'AI insights', 'technology blog'],
authors: [{ name: 'Anthony Lewis Rawlins', url: 'https://deepblack.cloud' }],
creator: 'Deep Black Cloud',
authors: [{ name: 'Anthony Rawlins', url: 'https://chorus.services' }],
creator: 'Anthony Rawlins',
publisher: 'CHORUS Services',
metadataBase: new URL('https://blog.chorus.services'),
alternates: {
@@ -70,14 +70,14 @@ export default function RootLayout({
<html lang="en">
<head>
{/* Google tag (gtag.js) */}
<script async src="https://www.googletagmanager.com/gtag/js?id=G-WTFF8JL9SF"></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-RTYKD3GJ44"></script>
<script
dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-WTFF8JL9SF');
gtag('config', 'G-RTYKD3GJ44);
`,
}}
/>