Initial commit: CHORUS PING! blog

- Next.js 14 blog application with theme support
- Docker containerization with volume bindings
- Traefik integration with Let's Encrypt SSL
- MDX support for blog posts
- Theme toggle with localStorage persistence
- Scheduled posts directory structure
- Brand guidelines compliance with CHORUS colors

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
anthonyrawlins
2025-08-27 14:46:26 +10:00
commit 6e13451dc4
63 changed files with 12242 additions and 0 deletions

68
app/page.tsx Normal file
View File

@@ -0,0 +1,68 @@
import { getSortedPostsData, getFeaturedPosts } from '@/lib/blog'
import BlogHeader from '@/components/BlogHeader'
import BlogFooter from '@/components/BlogFooter'
import PostCard from '@/components/PostCard'
export default function HomePage() {
const allPosts = getSortedPostsData()
const featuredPosts = getFeaturedPosts()
const recentPosts = allPosts.slice(0, 6)
return (
<main className="min-h-screen">
<BlogHeader />
{/* Hero Section */}
<section className="blog-container py-16">
<div className="max-w-3xl mx-auto text-center">
<h1 className="text-h1 font-logo text-carbon-950 dark:text-mulberry-100 mb-6">
Informed Agentic AI
</h1>
<p className="text-xl text-carbon-700 dark:text-carbon-300 leading-relaxed">
Deep dives into AI orchestration, agent coordination, and the future of
intelligent systems from the team building CHORUS.
</p>
</div>
</section>
{/* Featured Posts */}
{featuredPosts.length > 0 && (
<section className="blog-container py-8">
<h2 className="text-h3 font-logo text-carbon-950 dark:text-carbon-100 mb-8">Featured Posts</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
{featuredPosts.map((post) => (
<PostCard key={post.slug} post={post} featured={true} />
))}
</div>
</section>
)}
{/* Recent Posts */}
<section className="blog-container py-12">
<h2 className="text-h3 font-logo text-carbon-950 dark:text-carbon-100 mb-8">Recent Posts</h2>
{recentPosts.length > 0 ? (
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
{recentPosts.map((post) => (
<PostCard key={post.slug} post={post} />
))}
</div>
) : (
<div className="text-center py-12">
<div className="w-16 h-16 bg-carbon-200 dark:bg-carbon-800 rounded-full flex items-center justify-center mx-auto mb-4">
<svg className="w-8 h-8 text-carbon-600 dark:text-carbon-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z" />
</svg>
</div>
<h3 className="text-h5 font-semibold text-carbon-950 dark:text-carbon-200 mb-2">Coming Soon</h3>
<p className="text-carbon-600 dark:text-carbon-400 max-w-md mx-auto">
We're preparing some excellent content about contextual AI and agent orchestration.
Check back soon for our first posts!
</p>
</div>
)}
</section>
<BlogFooter />
</main>
)
}