Files
sim/apps
Waleed 004955d934 refactor(blog): split AEO/GEO content into a new /library section (#5516)
* refactor(blog): split AEO/GEO content into a new /library section

Blog was mixing hand-written editorial posts with listicle/comparison/how-to
posts optimized for answer engines. Extract a generic content engine
(lib/content) shared by both sections, move the 6 AEO/GEO posts into a new
/library route tree, and keep /blog editorial-only.

- lib/content: generic registry factory, MDX components, SEO builders
- lib/blog + lib/library: thin per-section instantiations over the shared engine
- app/(landing)/library: mirrors the blog route tree via shared Content*Page components
- app/sitemap.ts, app/robots.ts, navbar: updated for the new section
- next.config.ts: permanent redirects from moved /blog/<slug> URLs to /library/<slug>

* fix(blog): thread route id through buildAuthorMetadata for canonical URL

Author pages for unknown/unmatched ids fell back to author?.id, which is
undefined when no post matches — collapsing canonical/OG URLs to
{basePath}/authors/ instead of {basePath}/authors/{id}. Pass the route id
explicitly so canonical always resolves correctly.

* fix(blog): address Greptile review — RSS lastBuildDate, shared author cache, dead-export docs

- RSS lastBuildDate now uses updated ?? date so edits after publication are
  reflected, matching the per-item pubDate semantics (blog + library)
- Author JSON is now cached once per authorsDir at module scope instead of
  once per registry instantiation, since blog and library point at the same
  directory
- Documented getNavPosts as reserved-but-unwired, matching the existing
  PLATFORM_MENU/SOLUTIONS_MENU convention in the navbar

* fix(blog): dedupe featured posts from ContentIndexPage pagination pool

A featured post older than POSTS_PER_PAGE would appear both on page 1's
featured row (sorted to the front) and again on its natural date-sorted
page, since only page 1 excluded featured posts from the remaining list.
Carve featured posts out of the paginated pool up front so pagination stays
consistent and duplicate-free across all pages.

* fix(blog): RSS lastBuildDate reflects the whole feed, not just the newest item

lastBuildDate only looked at items[0]'s updated/date, so revising an older
post already in the feed wouldn't advance it. Extract the max-across-posts
logic sitemap.ts already had into a shared lib/content/utils helper
(latestModified) and use it in both RSS routes and the sitemap, so a
revision to any feed item is reflected.
2026-07-08 13:55:54 -07:00
..