From 5e0be60c30bfb65ccc1a1fd9f354b5c1c6359689 Mon Sep 17 00:00:00 2001 From: anthonyrawlins Date: Sun, 19 Oct 2025 00:23:51 +1100 Subject: [PATCH] Release v1.2.0: Newspaper-style layout with major UI refinements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This release transforms PING into a sophisticated newspaper-style digital publication with enhanced readability and professional presentation. Major Features: - New FeaturedPostHero component with full-width newspaper design - Completely redesigned homepage with responsive newspaper grid layout - Enhanced PostCard component with refined typography and spacing - Improved mobile-first responsive design (mobile → tablet → desktop → 2XL) - Archive section with multi-column layout for deeper content discovery Technical Improvements: - Enhanced blog post validation and error handling in lib/blog.ts - Better date handling and normalization for scheduled posts - Improved Dockerfile with correct content volume mount paths - Fixed port configuration (3025 throughout stack) - Updated Tailwind config with refined typography and newspaper aesthetics - Added getFeaturedPost() function for hero selection UI/UX Enhancements: - Professional newspaper-style borders and dividers - Improved dark mode styling throughout - Better content hierarchy and visual flow - Enhanced author bylines and metadata presentation - Refined color palette with newspaper sophistication Documentation: - Added DESIGN_BRIEF_NEWSPAPER_LAYOUT.md detailing design principles - Added TESTING_RESULTS_25_POSTS.md with test scenarios This release establishes PING as a premium publication platform for AI orchestration and contextual intelligence thought leadership. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- DESIGN_BRIEF_NEWSPAPER_LAYOUT.md | 159 ++++++++++ Dockerfile | 6 +- TESTING_RESULTS_25_POSTS.md | 115 +++++++ app/globals.css | 72 +---- app/page.tsx | 281 +++++++++++++++--- app/posts/[slug]/page.tsx | 30 +- app/rss.xml/route.ts | 3 + components/BlogFooter.tsx | 93 +++--- components/BlogHeader.tsx | 55 ++-- components/FeaturedPostHero.tsx | 121 ++++++++ components/PostCard.tsx | 100 +++---- components/ThreeLogo.tsx | 3 +- .../posts/2025/02/2025-02-24-latentspace.md | 37 +++ .../posts/2025/02/2025-02-25-chroma.md | 36 +++ .../posts/2025/02/2025-02-26-on-prem-gpus.md | 54 ++++ .../posts/2025/02/2025-02-27-Beyond-RAG.md | 52 ++++ .../02/2025-02-28-role-aware-encryption.md | 68 +++++ ...-03-01-ai-safety-in-multi-agent-systems.md | 43 +++ ...5-03-02-temporal-reasoning-in-ai-agents.md | 34 +++ .../2025-03-03-are-knowledge-graphs-enough.md | 36 +++ .../03/2025-03-04-ai-human-collaboration.md | 39 +++ .../2025/03/2025-03-05-neural-symbolic.md | 24 ++ ...2025-03-06-trouble-with-context-windows.md | 45 +++ .../posts/2025/03/2025-03-07-git-fail-ai.md | 40 +++ .../2025/03/2025-03-08-curated-context.md | 39 +++ .../03/2025-03-09-small-models-big-impact.md | 34 +++ .../2025/03/2025-03-10-data-privacy-ai.md | 42 +++ .../2025/03/2025-03-11-temporal-memory-ai.md | 38 +++ .../03/2025-03-12-rethinking-search-agents.md | 38 +++ .../2025/03/2025-03-13-myth-infinite-scale.md | 34 +++ .../03/2025-03-14-distributed-reasoning.md | 40 +++ ...025-03-15-hierarchical-reasoning-models.md | 36 +++ .../03/2025-03-16-trust-explainability.md | 41 +++ .../03/2025-03-17-future-context-hybrid.md | 40 +++ content.bak/posts/README.txt | 58 ++++ content.bak/posts/welcome-to-chorus-blog.md | 67 +++++ docker-compose.yml | 2 +- lib/blog.ts | 57 +++- package.json | 2 +- tailwind.config.js | 75 +++-- 40 files changed, 1865 insertions(+), 324 deletions(-) create mode 100644 DESIGN_BRIEF_NEWSPAPER_LAYOUT.md create mode 100644 TESTING_RESULTS_25_POSTS.md create mode 100644 components/FeaturedPostHero.tsx create mode 100644 content.bak/posts/2025/02/2025-02-24-latentspace.md create mode 100644 content.bak/posts/2025/02/2025-02-25-chroma.md create mode 100644 content.bak/posts/2025/02/2025-02-26-on-prem-gpus.md create mode 100644 content.bak/posts/2025/02/2025-02-27-Beyond-RAG.md create mode 100644 content.bak/posts/2025/02/2025-02-28-role-aware-encryption.md create mode 100644 content.bak/posts/2025/03/2025-03-01-ai-safety-in-multi-agent-systems.md create mode 100644 content.bak/posts/2025/03/2025-03-02-temporal-reasoning-in-ai-agents.md create mode 100644 content.bak/posts/2025/03/2025-03-03-are-knowledge-graphs-enough.md create mode 100644 content.bak/posts/2025/03/2025-03-04-ai-human-collaboration.md create mode 100644 content.bak/posts/2025/03/2025-03-05-neural-symbolic.md create mode 100644 content.bak/posts/2025/03/2025-03-06-trouble-with-context-windows.md create mode 100644 content.bak/posts/2025/03/2025-03-07-git-fail-ai.md create mode 100644 content.bak/posts/2025/03/2025-03-08-curated-context.md create mode 100644 content.bak/posts/2025/03/2025-03-09-small-models-big-impact.md create mode 100644 content.bak/posts/2025/03/2025-03-10-data-privacy-ai.md create mode 100644 content.bak/posts/2025/03/2025-03-11-temporal-memory-ai.md create mode 100644 content.bak/posts/2025/03/2025-03-12-rethinking-search-agents.md create mode 100644 content.bak/posts/2025/03/2025-03-13-myth-infinite-scale.md create mode 100644 content.bak/posts/2025/03/2025-03-14-distributed-reasoning.md create mode 100644 content.bak/posts/2025/03/2025-03-15-hierarchical-reasoning-models.md create mode 100644 content.bak/posts/2025/03/2025-03-16-trust-explainability.md create mode 100644 content.bak/posts/2025/03/2025-03-17-future-context-hybrid.md create mode 100644 content.bak/posts/README.txt create mode 100644 content.bak/posts/welcome-to-chorus-blog.md diff --git a/DESIGN_BRIEF_NEWSPAPER_LAYOUT.md b/DESIGN_BRIEF_NEWSPAPER_LAYOUT.md new file mode 100644 index 0000000..b671114 --- /dev/null +++ b/DESIGN_BRIEF_NEWSPAPER_LAYOUT.md @@ -0,0 +1,159 @@ +# CHORUS PING! - Newspaper-Style Blog Design Brief + +## Vision Statement +Transform CHORUS PING! from a traditional blog layout into a sophisticated, newspaper-style digital publication that reflects the authority and depth of our AI content while maintaining the distinctive CHORUS brand identity. + +## Design Inspiration +- **BBC News**: Clean hierarchy, excellent typography, sophisticated content organization +- **The Guardian**: Progressive enhancement, excellent mobile experience, clear content categorization +- **Financial Times**: Premium feel, data-rich presentations, professional authority +- **Wired**: Tech-forward design, engaging visuals, modern layouts + +## Core Design Principles + +### 1. Editorial Authority +- Establish CHORUS as a thought leader in AI orchestration and contextual intelligence +- Create clear content hierarchy that guides readers through complex technical topics +- Use typography and spacing to create reading flow similar to premium publications + +### 2. Information Density with Clarity +- Display more content without overwhelming the user +- Use progressive disclosure - headlines first, then summaries, then full content +- Implement smart content categorization and filtering + +### 3. Responsive Editorial Design +- Mobile-first approach with newspaper-quality typography at all screen sizes +- Flexible grid system that adapts content density to viewport +- Touch-friendly navigation that doesn't compromise desktop experience + +## Layout Architecture + +### Featured Articles Section (Limit: 5 maximum) +**Design**: Horizontal full-width panels in a sophisticated list layout +- **Large Featured (1-2 posts)**: Hero-style cards with large imagery area, headline, author, excerpt +- **Medium Featured (2-3 posts)**: Streamlined horizontal cards with smaller imagery, prominent headlines +- **Article Card Components**: + - High-quality placeholder imagery or AI-generated visuals + - Clear author attribution with professional headshots + - Publication date and read time + - Tag pills for topic categorization + - Excerpt text (2-3 lines) + +### Recent Articles Grid +**Design**: Multi-column newspaper-style grid +- **Desktop**: 3-column grid with varied card heights for visual interest +- **Tablet**: 2-column responsive grid +- **Mobile**: Single column with horizontal card style + +### Content Categories +**Primary Topics** (matching our content strategy): +- **AI Orchestration**: Agent coordination, workflow management +- **Contextual Intelligence**: RAG, knowledge graphs, temporal reasoning +- **Enterprise AI**: Implementation, governance, scaling +- **Research**: Latest papers, emerging techniques, industry analysis +- **Case Studies**: Real-world implementations, lessons learned + +## Typography & Visual Hierarchy + +### Font Strategy +- **Headlines**: Maintain CHORUS font-logo for brand consistency +- **Body Text**: Professional serif for readability (consider Inter, system fonts) +- **UI Elements**: Clean sans-serif (existing Carbon theme) + +### Content Hierarchy +1. **Primary Headlines**: Large, bold, scannable +2. **Secondary Headlines**: Medium weight, clear categorization +3. **Bylines**: Author, date, read time - professional formatting +4. **Excerpts**: Engaging preview text that encourages click-through +5. **Metadata**: Tags, categories, sharing - subtle but accessible + +## Advanced Features (Future Phases) + +### Phase 2: Enhanced Navigation +- **Topic Pages**: Dedicated landing pages for each major category +- **Author Pages**: Professional author profiles with article archives +- **Search & Filter**: Advanced content discovery +- **Related Articles**: Intelligent content recommendations + +### Phase 3: Interactive Elements +- **Reading Progress**: Article progress indicators +- **Save for Later**: Bookmark functionality +- **Newsletter Integration**: Email subscription with curated content +- **Social Proof**: View counts, social sharing, engagement metrics + +### Phase 4: Editorial Tools +- **Publishing Calendar**: Visual content planning +- **Series Management**: Multi-part article series +- **Featured Content Rotation**: Automated or manual feature promotion +- **Analytics Dashboard**: Content performance insights + +## Brand Integration + +### CHORUS Visual Identity +- **Color Palette**: Maintain carbon/mulberry/ocean theme with newspaper sophistication +- **Logo Integration**: Three.js logo in header, subtle brand elements throughout +- **Visual Style**: Clean, professional, technically sophisticated + +### Content Voice +- **Authoritative**: Position as industry thought leadership +- **Accessible**: Complex topics explained clearly +- **Forward-Looking**: Focus on emerging trends and future implications +- **Practical**: Balance theory with actionable insights + +## Technical Considerations + +### Performance Requirements +- **Fast Loading**: Optimized images, lazy loading, efficient rendering +- **SEO Optimized**: Structured data, semantic HTML, optimized metadata +- **Accessibility**: WCAG compliance, keyboard navigation, screen reader friendly + +### Content Management +- **Markdown Workflow**: Maintain current content creation process +- **Dynamic Rendering**: Continue volume-mounted content approach +- **Scheduled Publishing**: Robust publication timing +- **Content Validation**: Ensure frontmatter consistency + +### Development Approach +- **Progressive Enhancement**: Start with core functionality, add sophistication +- **Component Library**: Reusable newspaper-style components +- **Design System**: Consistent spacing, typography, interaction patterns +- **Testing**: A/B testing for layout effectiveness + +## Success Metrics + +### User Engagement +- **Time on Site**: Increased reading duration +- **Page Depth**: More articles consumed per session +- **Return Visits**: Higher reader retention +- **Content Discovery**: Better navigation between related articles + +### Brand Positioning +- **Industry Recognition**: References and links from other AI publications +- **Subscriber Growth**: Newsletter and RSS subscriptions +- **Social Engagement**: Shares and discussions on professional platforms +- **Thought Leadership**: Speaking opportunities, collaboration requests + +## Implementation Phases + +### Phase 1: Core Layout (Immediate) +- Implement featured articles horizontal panels (max 5) +- Create newspaper-style grid for recent articles +- Establish responsive typography system +- Basic content categorization + +### Phase 2: Enhanced Features (Next Sprint) +- Author pages and advanced metadata +- Improved mobile experience +- Search and filtering capabilities +- Related articles suggestions + +### Phase 3: Editorial Tools (Future) +- Publishing workflow improvements +- Analytics and performance tracking +- Advanced content management features +- Interactive elements and engagement tools + +## Conclusion +This newspaper-style redesign positions CHORUS PING! as a premium publication in the AI space, matching the sophistication of our technical content with a professional, authoritative presentation that encourages deeper engagement and establishes thought leadership in contextual AI orchestration. + +The approach balances immediate improvements (better featured content presentation) with a long-term vision for a comprehensive digital publication platform that serves both casual readers and technical professionals seeking authoritative insights into AI orchestration and contextual intelligence. \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 4ff2b41..bdd17ea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -42,9 +42,9 @@ COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static -# Create directories for mounted volumes -RUN mkdir -p /app/posts /app/scheduled -RUN chown -R nextjs:nodejs /app/posts /app/scheduled +# Create directories for mounted volumes (match app paths) +RUN mkdir -p /app/content/posts /app/content/scheduled +RUN chown -R nextjs:nodejs /app/content USER nextjs diff --git a/TESTING_RESULTS_25_POSTS.md b/TESTING_RESULTS_25_POSTS.md new file mode 100644 index 0000000..6a1afe2 --- /dev/null +++ b/TESTING_RESULTS_25_POSTS.md @@ -0,0 +1,115 @@ +# Blog Layout Testing Results - 25+ Posts + +## Summary +Successfully tested the CHORUS PING! blog with 25 dummy posts to evaluate layout scaling and featured post handling. Made significant improvements to simplify the featured post logic and improve user experience. + +## Before Improvements +- **Total Featured Posts**: 7 (too many, cluttered) +- **Recent Posts**: 6 +- **Total Articles Displayed**: 13+ +- **Layout Issues**: + - Overwhelming number of featured posts + - Poor visual hierarchy + - Difficult to scan content + - Not scalable for newspaper-style layout + +## After Improvements +- **Featured Post**: 1 (most recent post automatically) +- **Recent Posts**: 6 (starting from 2nd most recent) +- **Total Articles Displayed**: 7 +- **Layout Benefits**: + - Clean, scannable layout + - Clear visual hierarchy + - Single prominent featured article + - Ready for newspaper-style redesign + +## Technical Changes Made + +### 1. Simplified Featured Post Logic +**File**: `/lib/blog.ts` +```typescript +// OLD: Multiple featured posts based on frontmatter flag +export function getFeaturedPosts(): BlogPost[] { + const allPosts = getSortedPostsData() + return allPosts.filter(post => post.featured) +} + +// NEW: Single featured post (most recent) +export function getFeaturedPost(): BlogPost | null { + const allPosts = getSortedPostsData() + return allPosts.length > 0 ? allPosts[0] : null +} +``` + +### 2. Updated Homepage Layout +**File**: `/app/page.tsx` +```typescript +// OLD: Multiple featured posts in grid +const featuredPosts = getFeaturedPosts() +const recentPosts = allPosts.slice(0, 6) + +// NEW: Single featured post, adjusted recent posts +const featuredPost = getFeaturedPost() +const recentPosts = allPosts.slice(1, 7) // Skip first post since it's featured +``` + +### 3. Improved Section Structure +- **Featured Post Section**: Single, prominent article with larger card design +- **Recent Posts Section**: Grid of 6 articles (excluding the featured one) +- **Eliminated**: Dependency on `featured: true` frontmatter flag + +## Content Analysis +**Generated 25 test posts with**: +- **Authors**: 4 different authors (Anthony Rawlins, Sarah Chen, Marcus Rodriguez, Dr. Elena Vasquez) +- **Publication Dates**: Spread across 2023-2025 +- **Tags**: Mixed combinations from AI/orchestration topics +- **Reading Times**: 3-8 minutes varied +- **Content Quality**: Realistic AI-focused content matching domain expertise + +## Layout Scaling Observations + +### ✅ What Works Well +1. **Single Featured Post**: Creates clear focus point +2. **Grid Layout**: Handles 6 recent posts elegantly +3. **Responsive Design**: Scales well across screen sizes +4. **Visual Hierarchy**: Clear distinction between featured and recent +5. **Performance**: No significant slowdown with 25+ posts + +### 🔄 Areas for Newspaper-Style Improvement +1. **Featured Section**: Could use full-width horizontal layout +2. **Content Density**: More articles could be shown newspaper-style +3. **Categorization**: Topic-based sections would improve organization +4. **Typography**: Could be more newspaper-like with better font hierarchy +5. **Pagination**: May need "Load More" or pagination for 25+ posts + +## Next Steps for Newspaper Design + +### Phase 1: Enhanced Featured Section +- Convert featured post to full-width horizontal panel +- Add larger imagery area and better typography +- Consider 2-3 sub-featured posts in smaller panels + +### Phase 2: Content Organization +- Implement topic-based sections (AI Orchestration, Research, etc.) +- Add "Load More" functionality for older posts +- Create author pages and topic filtering + +### Phase 3: Visual Polish +- Newspaper-style typography improvements +- Better use of whitespace and visual hierarchy +- Enhanced mobile experience + +## Performance Notes +- **Dynamic Rendering**: Successfully reads 25+ posts at request time +- **Load Time**: No noticeable performance degradation +- **Memory Usage**: Efficient handling of large content volume +- **SEO Impact**: Single featured post improves content prioritization + +## Conclusion +The simplified featured post logic significantly improves the blog's usability and scalability. The layout now supports the vision of a newspaper-style publication while maintaining clean, scannable content presentation. Ready for the next phase of newspaper-style redesign as outlined in the design brief. + +## Test Environment +- **Local Development**: `http://localhost:3024` +- **Content Location**: `modules/blog/content/posts/` (25 dummy posts) +- **Backup**: Original content preserved in `content-backup/` +- **Testing Date**: August 28, 2025 \ No newline at end of file diff --git a/app/globals.css b/app/globals.css index 5015e32..4ba8a81 100644 --- a/app/globals.css +++ b/app/globals.css @@ -194,78 +194,14 @@ body { } -/* CHORUS Blog Typography */ -.prose { - @apply max-w-none text-carbon-950 dark:text-carbon-100; -} - -.prose h1 { - @apply text-h2 font-sans font-thin text-carbon-950 dark:text-mulberry-100 mb-8; -} - -.prose h2 { - @apply text-h3 font-logo text-carbon-950 dark:text-mulberry-200 mb-6 mt-12; -} - -.prose h3 { - @apply text-h4 font-sans text-carbon-950 dark:text-mulberry-300 mb-4 mt-8; -} - -.prose h4 { - @apply text-h5 font-sans text-carbon-800 dark:text-mulberry-400 mb-3 mt-6; -} - -.prose h5 { - @apply text-h6 font-sans text-carbon-700 dark:text-mulberry-500 mb-3 mt-6; -} - -.prose h6 { - @apply text-h7 font-sans text-carbon-600 dark:text-mulberry-600 mb-2 mt-4; -} - -.prose p { - @apply text-base leading-relaxed mb-6 text-carbon-800 dark:text-carbon-200; -} - -.prose a { - @apply text-ocean-600 dark:text-ocean-400 hover:text-ocean-800 dark:hover:text-ocean-300 transition-colors underline decoration-ocean-500/30 hover:decoration-ocean-600/50 dark:hover:decoration-ocean-400/50; -} - -.prose strong { - @apply text-carbon-950 dark:text-carbon-100 font-semibold; -} - -.prose code { - @apply bg-carbon-200 dark:bg-carbon-800 text-eucalyptus-700 dark:text-eucalyptus-400 px-2 py-1 rounded-sm font-mono text-sm; -} - -.prose pre { - @apply bg-carbon-100 dark:bg-carbon-900 border border-carbon-300 dark:border-carbon-700 rounded-lg overflow-x-auto p-4 mb-6; -} - -.prose pre code { - @apply bg-transparent text-carbon-950 dark:text-carbon-200 p-0; -} - -.prose blockquote { - @apply border-l-4 border-carbon-400 dark:border-mulberry-600 pl-6 italic text-carbon-600 dark:text-carbon-300 my-6; -} - -.prose ul { - @apply list-disc pl-6 mb-6 space-y-2; -} - -.prose ol { - @apply list-decimal pl-6 mb-6 space-y-2; -} - -.prose li { - @apply text-carbon-800 dark:text-carbon-200; -} /* Blog-specific utilities */ .blog-container { @apply max-w-4xl mx-auto px-4 sm:px-6 lg:px-8; + + padding-bottom: 0; + margin-bottom: 0; + border-bottom: none; } .blog-meta { diff --git a/app/page.tsx b/app/page.tsx index 431145d..24d999f 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,68 +1,253 @@ -import { getSortedPostsData, getFeaturedPosts } from '@/lib/blog' +import { getSortedPostsData, getFeaturedPost } from '@/lib/blog' import BlogHeader from '@/components/BlogHeader' import BlogFooter from '@/components/BlogFooter' import PostCard from '@/components/PostCard' +import FeaturedPostHero from '@/components/FeaturedPostHero' -export default function HomePage() { +// Force dynamic rendering to pick up volume-mounted content +export const dynamic = 'force-dynamic' + +export default async function HomePage() { const allPosts = getSortedPostsData() - const featuredPosts = getFeaturedPosts() - const recentPosts = allPosts.slice(0, 6) + const featuredPost = getFeaturedPost() + const recentPosts = allPosts.slice(1, 7) // Skip the first post since it's featured + const additionalPosts = allPosts.slice(8, 20) // Additional posts for newspaper columns return (
- {/* Hero Section */} -
-
-

- Informed Agentic AI -

-

- Deep dives into AI orchestration, agent coordination, and the future of - intelligent systems from the team building CHORUS. -

+ {/* Featured Post - Full Width Hero */} + {featuredPost && ( + + )} + + {/* Recent Posts - Responsive Newspaper Layout */} +
+ {/* Section Header - Newspaper Style */} +
+ {recentPosts.length > 0 ? ( +
+ {/* Main Content Area - Primary Articles */} +
+
+ {recentPosts.slice(0, 4).map((post) => ( + + ))} +
+
+ + {/* Sidebar Articles - Only on 2XL+ screens if more articles available */} + {/* {recentPosts.length > 4 && ( + + )} */} +
+ ) : ( +
+
+ + + +
+

Coming Soon

+

+ We're preparing some excellent content about contextual AI and agent orchestration. + Check back soon for our first posts! +

+
+ )}
- {/* Featured Posts */} - {featuredPosts.length > 0 && ( -
-

Featured Posts

-
- {featuredPosts.map((post) => ( - - ))} + {/* Newspaper Column Layout - Additional Articles */} + {additionalPosts.length > 0 && ( +
+
+ {/* Section Header */} +
+
+
+

+ Archive +

+

+ Deeper insights and analysis +

+
+
+
+ + {/* Flexbox Newspaper Columns - 4 Narrow Equal Columns */} +
+ {/* Column 1 */} + + + {/* Column 2 */} + + + {/* Column 3 */} + + + {/* Column 4 */} + +
+ + {/* Mobile/Tablet Fallback - Single Column */} +
)} - {/* Recent Posts */} -
-

Recent Posts

- {recentPosts.length > 0 ? ( -
- {recentPosts.map((post) => ( - - ))} -
- ) : ( -
-
- - - -
-

Coming Soon

-

- We're preparing some excellent content about contextual AI and agent orchestration. - Check back soon for our first posts! -

-
- )} -
-
) -} \ No newline at end of file +} diff --git a/app/posts/[slug]/page.tsx b/app/posts/[slug]/page.tsx index 24f72fd..df96e8d 100644 --- a/app/posts/[slug]/page.tsx +++ b/app/posts/[slug]/page.tsx @@ -1,6 +1,6 @@ import { notFound } from 'next/navigation' import { MDXRemote } from 'next-mdx-remote/rsc' -import { getPostData, getAllPostSlugs } from '@/lib/blog' +import { getPostData } from '@/lib/blog' import BlogHeader from '@/components/BlogHeader' import BlogFooter from '@/components/BlogFooter' import Link from 'next/link' @@ -15,10 +15,8 @@ interface PostPageProps { }> } -export async function generateStaticParams() { - const slugs = getAllPostSlugs() - return slugs.map(({ params }) => ({ slug: params.slug })) -} +// Force dynamic rendering - no static generation +export const dynamic = 'force-dynamic' export async function generateMetadata({ params }: PostPageProps) { const { slug } = await params @@ -102,38 +100,38 @@ export default async function PostPage({ params }: PostPageProps) { ))} -

+

{post.title}

-

+

{post.description}

-
+
-
- +
+ {post.author.name.charAt(0)}
-

+

{post.author.name}

{post.author.role && ( -

+

{post.author.role}

)}
-
-