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 URL | New URL | Status |
|---|---|---|
/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)
- Create
articles/${slug}.md - Add frontmatter:
--- title: "Your Title" category: "Analysis" date: "2026.02.14" readTime: "10 min read" excerpt: "Brief description..." --- - Write markdown content
- Deploy → Auto-appears at
/blog/${slug}
Option 2: Static Page (For complex/interactive posts)
- Create
app/blog/${slug}/page.tsx - Build custom React component
- Deploy → Accessible at
/blog/${slug}/
Option 3: Add to Listing (For external/placeholder links)
- Edit
app/blog/page.tsx - Add to
staticBlogPostsarray:{ 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
/articlesroutes - ❌ 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.tsx→app/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:
- Create markdown file in
/articles/folder - Or create static page in
/app/blog/${slug}/ - Verify it appears in
/bloglisting - Never use
/articlesroutes again
Memory updated:
"All new blog content goes to
/blogonly (not /articles - merged 2026-02-14)."
Status: ✅ Complete
Deployed: Commit 5cfdebf
Single content hub achieved! 📝