Analysis

Blog Consolidation - Completed ✅

2026.02.1310 min read

Date: 2026-02-14
Reason: User request - Articles and blog should be one unified content hub
Status: /articles merged into /blog


Problem

Two separate content sections caused confusion:

  • /articles - Markdown-based articles
  • /blog - Mix of static pages + some hardcoded article links

This created:

  • ❌ Duplicate navigation links
  • ❌ Inconsistent URLs (/blog/X vs /articles/X)
  • ❌ Confusion about where to add new content
  • ❌ Harder maintenance

Solution

Single Content Hub: /blog

All content (static pages + markdown articles) now accessible under /blog:

  • /blog → Listing page (all content)
  • /blog/${slug} → Dynamic route for markdown articles
  • /blog/${folder}/ → Static pages with dedicated folders

Technical Changes

1. Moved Dynamic Route

app/articles/[slug]/page.tsx → app/blog/[slug]/page.tsx

What it does:

  • Reads markdown files from /articles/ folder
  • Renders with Streamdown (custom styling)
  • Generates static params for all .md files

2. Updated Blog Listing (/blog/page.tsx)

Before:

const articles = [...] // Hardcoded array

export default function BlogPage() {
  const featuredArticle = articles[0]
  // ...
}

After:

import { getAllArticles } from '@/lib/markdown'

const staticBlogPosts = [...] // Static-only posts

export default function BlogPage() {
  const markdownArticles = getAllArticles().map(...)
  const allArticles = [...markdownArticles, ...staticBlogPosts]
  const featuredArticle = allArticles[0]
  // ...
}

Result:

  • ✅ Markdown articles appear in blog listing
  • ✅ Static blog posts remain functional
  • ✅ Featured article can be from either source
  • ✅ Single unified grid view

3. Removed Duplicate Hardcoded Entries

Removed from static array:

  • bitcoin-volatility-predictions-2026
  • ethereum-vs-bitcoin-crash-2026-comparison
  • polymarket-volatility-trading-guide-2026
  • bitcoin-hedge-or-risk-asset-2026
  • why-altcoins-follow-bitcoin-2026

These now render dynamically from /articles/*.md files.

4. Added Redirect

File: app/articles/page.tsx

import { redirect } from 'next/navigation'

export default function ArticlesRedirect() {
  redirect('/blog')
}

Result: /articles/blog (permanent redirect)

5. Navigation Cleanup

Desktop Navigation:

- <Link href="/articles">ARTICLES</Link>
  <Link href="/blog">BLOG</Link>

Mobile Navigation:

- <Link href="/articles">ARTICLES</Link>
  <Link href="/blog">BLOG</Link>

Footer (Resources section):

- <Link href="/articles">Articles</Link>
  <Link href="/blog">Blog & Insights</Link>

Content Structure

Markdown Articles

Location: /articles/*.md
Route: /blog/${slug}
Render: Dynamic via /app/blog/[slug]/page.tsx

Examples:

  • /blog/bitcoin-volatility-predictions-2026
  • /blog/ethereum-vs-bitcoin-crash-2026-comparison
  • /blog/polymarket-volatility-trading-guide-2026

Features:

  • Frontmatter parsing (gray-matter)
  • Streamdown rendering (custom prose styles)
  • Auto-generated static params
  • SEO metadata

Static Blog Posts

Location: /app/blog/${folder}/page.tsx
Route: /blog/${folder}/
Render: Static component

Examples:

  • /blog/blackrock-bitcoin-etf-volatility-risk-2026/
  • /blog/trading-psychology/
  • /blog/volatility-trading-strategies/

Features:

  • Custom layouts
  • Interactive components
  • Dedicated styling

URL Mapping

Old URLNew URLStatus
/articles/blog✅ Redirects
/articles/${slug}/blog/${slug}✅ Works
/blog/${slug}/blog/${slug}✅ Same
/blog/${folder}//blog/${folder}/✅ Same

Adding New Content (Future)

✅ Correct Way

All new content goes to /blog:

Option 1: Markdown Article (Recommended for most content)

  1. Create articles/${slug}.md
  2. Add frontmatter:
    ---
    title: "Your Title"
    category: "Analysis"
    date: "2026.02.14"
    readTime: "10 min read"
    excerpt: "Brief description..."
    ---
    
  3. Write markdown content
  4. Deploy → Auto-appears at /blog/${slug}

Option 2: Static Page (For complex/interactive posts)

  1. Create app/blog/${slug}/page.tsx
  2. Build custom React component
  3. Deploy → Accessible at /blog/${slug}/

Option 3: Add to Listing (For external/placeholder links)

  1. Edit app/blog/page.tsx
  2. Add to staticBlogPosts array:
    {
      id: X,
      slug: "your-slug",
      title: "Your Title",
      excerpt: "Description...",
      category: "Category",
      readTime: "X min read",
      date: "2026.XX.XX",
      icon: IconComponent,
    }
    

❌ Wrong Way

DO NOT:

  • ❌ Create new /articles routes
  • ❌ Add articles to /app/articles/
  • ❌ Link to /articles/${slug} in code

If you catch yourself doing this:
STOP → Use /blog instead


Migration Stats

Files Changed: 7

  • app/articles/[slug]/page.tsxapp/blog/[slug]/page.tsx (moved)
  • app/articles/page.tsx (redirect only)
  • app/blog/page.tsx (merged logic)
  • app/components/Navigation.tsx (removed links)
  • app/layout.tsx (removed footer link)
  • MEMORY.md (future reference)

Lines Changed: 29 insertions, 239 deletions (net -210 lines)

Result:

  • Simpler codebase
  • Single source of truth
  • Better user experience
  • Easier maintenance

Testing Checklist

After deployment (2-3 min):

  • Visit /blog → Shows all content (markdown + static)
  • Featured article displays correctly
  • Grid shows remaining posts
  • Click markdown article → Renders with Streamdown styles
  • Click static blog post → Loads dedicated page
  • Visit /articles → Redirects to /blog
  • Visit /articles/${slug} → 404 (expected, use /blog now)
  • Navigation has "BLOG" link only (no "ARTICLES")
  • Footer has no "Articles" link

Future Maintenance

When adding new content:

  1. Create markdown file in /articles/ folder
  2. Or create static page in /app/blog/${slug}/
  3. Verify it appears in /blog listing
  4. Never use /articles routes again

Memory updated:

"All new blog content goes to /blog only (not /articles - merged 2026-02-14)."


Status: ✅ Complete
Deployed: Commit 5cfdebf

Single content hub achieved! 📝

Share This Article