-
Notifications
You must be signed in to change notification settings - Fork 2.8k
MKT-69: Add /blog/[slug] post page with dynamic rendering #11019
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
- 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
- Create dynamic route for individual blog posts - Use force-dynamic for request-time publish gating - Require Node.js runtime for filesystem reads - Return 404 for drafts, future posts, or invalid slugs - Render Markdown with react-markdown + remark-gfm - No raw HTML rendering (safe by default) - Include consistent typography and styling Closes: MKT-69
Review complete. Previous issue fixed, but 1 new issue introduced.
Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues. |
|
🚀 Preview deployed! Your changes have been deployed to Vercel: Preview URL: https://roo-code-website-fyxsdiwuc-roo-code.vercel.app This preview will be updated automatically when you push new commits to this PR. |
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
| if (dateCompare !== 0) { | ||
| return dateCompare | ||
| } | ||
| return parsePublishTimePt(b.publish_time_pt) - parsePublishTimePt(a.publish_time_pt) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
parsePublishTimePt is used here but not imported. The import statement on line 7 only includes getNowPt from "./pt-time". This will cause a runtime error when getAllBlogPosts is called. Update line 7 to: import { getNowPt, parsePublishTimePt } from "./pt-time"
Fix it with Roo Code or mention @roomote and request a fix.
Related GitHub Issue
Linear issue: MKT-69
Roo Code Task Context (Optional)
View task on Roo Code Cloud
Description
Adds the
/blog/[slug]page that renders individual blog posts with request-time publish gating.Key implementation details:
export const dynamic = "force-dynamic"ensures publish gating at request timeexport const runtime = "nodejs"for filesystem readsreact-markdown+remark-gfm(no raw HTML)Build output shows dynamic rendering:
Test Procedure
pnpm -C apps/web-roo-code build/blog/prds-are-becoming-artifacts-of-the-pastin devPre-Submission Checklist
Screenshots / Videos
N/A - requires full stack for visual testing
Documentation Updates
Additional Notes
Dependencies (included via merge):
Security:
Get in Touch
Via Roo Code Cloud task link above
Important
Adds a dynamic
/blog/[slug]page with publish gating, markdown rendering, and metadata handling, including content management and validation incontent.ts./blog/[slug]page with dynamic rendering and publish gating usingdynamic = "force-dynamic"andruntime = "nodejs"inpage.tsx.page.tsx.react-markdownandremark-gfmwithout raw HTML inpage.tsx.getAllBlogPosts()andgetBlogPostBySlug()incontent.tsfor loading and filtering posts.zodincontent.ts.BlogContentErrorfor handling content validation errors incontent.ts.page.tsx.ogImageUrlfor generating image URLs for metadata inpage.tsx.gray-matterfor frontmatter parsing inpackage.json.This description was created by
for aa4c2d9. You can customize this summary. It will automatically update as commits are pushed.