Item 8 — wire the 5 real articles into /blog, retire the backdated orphan
The live /blog showed "How to Read Line Movement Like a Sharp" dated 2026-03-22 — an orphaned, uncommitted file that predates the product. Meanwhile 5 genuinely-real articles sat in content/articles/, unwired. - blog.ts now reads content/articles (not the untracked content/blog). Maps `excerpt` → description, skips `status: draft`, reads explicit `slug`. - Added honest dates (2026-07-17, the real publish day) + flipped the 5 articles to `status: published`. Real content: how-vyndr-grades-a-prop, why-our-misses-are-public, what-clv-is, how-streaks-lie, the-vyndr-originals. - Retired the orphan: /blog/line-movement-guide 301s to /blog (next.config). - Added a minimal, dependency-free, XSS-safe markdown renderer so headers/bold render as HTML instead of literal "##". Each article keeps title/date/ read-time + the existing OG/JSON-LD metadata (affiliate-review ready). Richer media (images/charts) is the separate design train. Web build exit 0 (SSGs all 5 slugs); backend suite unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { getAllPosts, getPostBySlug } from '@/lib/blog';
|
||||
import { getAllPosts, getPostBySlug, renderMarkdown } from '@/lib/blog';
|
||||
import { notFound } from 'next/navigation';
|
||||
import type { Metadata } from 'next';
|
||||
|
||||
@@ -48,9 +48,10 @@ export default async function BlogPost({ params }: { params: Promise<{ slug: str
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
<div className="prose prose-invert max-w-none text-[var(--text)] leading-relaxed whitespace-pre-wrap">
|
||||
{post.content}
|
||||
</div>
|
||||
<div
|
||||
className="prose prose-invert max-w-none text-[var(--text)] leading-relaxed"
|
||||
dangerouslySetInnerHTML={{ __html: renderMarkdown(post.content) }}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<script
|
||||
|
||||
Reference in New Issue
Block a user