Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.

MKT-68: Add /blog index page with dynamic rendering - #11018

Closed
ghost wants to merge 6 commits into
mainfrom
feature/MKT-68-blog-index-page
Closed

MKT-68: Add /blog index page with dynamic rendering#11018
ghost wants to merge 6 commits into
mainfrom
feature/MKT-68-blog-index-page

Conversation

@ghost

@ghost ghost commented Jan 27, 2026

Copy link
Copy Markdown

Related GitHub Issue

Linear issue: MKT-68

Roo Code Task Context (Optional)

View task on Roo Code Cloud

Description

Adds the /blog index page that lists published posts with request-time publish gating.

Key implementation details:

  1. Dynamic rendering: export const dynamic = "force-dynamic" ensures publish gating is evaluated at request time (no caching)
  2. Node.js runtime: export const runtime = "nodejs" required for filesystem reads
  3. Content loading: Uses getAllBlogPosts() from MKT-67 content pipeline
  4. Display: Shows title, description, date ("Posted YYYY-MM-DD"), and up to 3 tags
  5. Empty state: Shows friendly message when no posts are published

Build output shows dynamic rendering:

ƒ /blog                                  173 B         104 kB

Test Procedure

  1. Build passes: pnpm -C apps/web-roo-code build
  2. Visit /blog in dev: pnpm -C apps/web-roo-code dev
  3. Verify first post appears (after publish date/time in PT)
  4. Click post to navigate to /blog/[slug] (requires MKT-69)

Pre-Submission Checklist

  • Issue Linked: This PR is linked to Linear issue MKT-68
  • Scope: Blog index page only
  • Self-Review: Verified dynamic rendering and Node.js runtime
  • Testing: Build and lint pass
  • Documentation Impact: N/A
  • Contribution Guidelines: Reviewed

Screenshots / Videos

N/A - requires full stack for visual testing

Documentation Updates

  • No documentation updates required

Additional Notes

Dependencies:

  • MKT-67: Content pipeline (included via merge)
  • MKT-73: First post (included via merge)

Enables:

  • MKT-69: Blog post page (/blog/[slug])

Get in Touch

Via Roo Code Cloud task link above


Important

Adds a dynamic /blog index page with publish gating, using Node.js for filesystem reads and content validation.

  • Behavior:
    • Adds /blog index page in page.tsx with dynamic rendering using export const dynamic = "force-dynamic".
    • Uses Node.js runtime for filesystem reads with export const runtime = "nodejs".
    • Displays title, description, date, and up to 3 tags for each post.
    • Shows a message when no posts are published.
  • Content Loading:
    • Implements getAllBlogPosts() in content.ts to load and filter posts based on publish status.
    • Validates frontmatter using zod schema in types.ts.
    • Handles errors with BlogContentError class in content.ts.
  • Dependencies:
    • Adds gray-matter to package.json for parsing markdown frontmatter.
  • Misc:
    • Adds a sample blog post prds-are-becoming-artifacts-of-the-past.md.
    • Updates index.ts to export new blog functions and types.

This description was created by Ellipsis for a273d37. You can customize this summary. It will automatically update as commits are pushed.

- Add gray-matter for frontmatter parsing
- Create BlogPost type and zod schema for validation
- Implement PT timezone helpers (getNowPt, parsePublishTimePt)
- Implement content loading (getAllBlogPosts, getBlogPostBySlug)
- Implement isPublished for request-time publish gating
- Add validation for frontmatter and duplicate slugs
- Create content/blog directory for markdown files

Closes: MKT-67
…he Past

Adds the first canonical blog post to validate the content pipeline:
- Title: PRDs Are Becoming Artifacts of the Past
- Slug: prds-are-becoming-artifacts-of-the-past
- Status: published
- Publish date: 2026-01-12 at 9:00am PT

Content sourced from Office Hours S01E15 with Paige Bailey.

Closes: MKT-73
- Create blog index page at /blog
- Use force-dynamic for request-time publish gating
- Require Node.js runtime for filesystem reads
- Display posts with title, description, and date
- Add empty state when no posts are published
- Include tags display (up to 3)

Closes: MKT-68
@ghost

ghost commented Jan 27, 2026

Copy link
Copy Markdown
Author

Rooviewer Clock   See task on Roo Cloud

All issues resolved. The missing parsePublishTimePt import has been added.

  • Fix publish_time_pt sorting in content.ts - string comparison produces incorrect ordering for times in h:mmam/pm format
Previous reviews

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

@github-actions

github-actions Bot commented Jan 27, 2026

Copy link
Copy Markdown
Contributor

🚀 Preview deployed!

Your changes have been deployed to Vercel:

Preview URL: https://roo-code-website-dhigmg86i-roo-code.vercel.app

This preview will be updated automatically when you push new commits to this PR.

Comment thread apps/web-roo-code/src/lib/blog/content.ts Outdated
@mp-roocode mp-roocode self-assigned this Jan 27, 2026
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
@mp-roocode

Copy link
Copy Markdown
Contributor

@roomote fix failing tests

@ghost

ghost commented Jan 28, 2026

Copy link
Copy Markdown
Author

Fixaroo Clock   See task on Roo Cloud

Fixed the reported issues. All local checks passed.

View commit | Revert commit

@mp-roocode

Copy link
Copy Markdown
Contributor

This was a Linear test, no need to merge

@mp-roocode mp-roocode closed this Jan 30, 2026
@github-project-automation github-project-automation Bot moved this from New to Done in Roo Code Roadmap Jan 30, 2026
@github-project-automation github-project-automation Bot moved this from Triage to Done in Roo Code Roadmap Jan 30, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

No open projects
Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants