Skip to content

web: update blog categories and categorize all articles#3966

Open
devin-ai-integration[bot] wants to merge 3 commits intomainfrom
devin/1771059342-update-blog-categories
Open

web: update blog categories and categorize all articles#3966
devin-ai-integration[bot] wants to merge 3 commits intomainfrom
devin/1771059342-update-blog-categories

Conversation

@devin-ai-integration
Copy link
Contributor

@devin-ai-integration devin-ai-integration bot commented Feb 14, 2026

web: update blog categories and categorize all articles

Summary

Replaces the old blog category set with new categories requested by the marketing team, and assigns a category to every existing article.

Old categories: Case Study, Products In-depth, Char Weekly, Productivity Hack, Engineering

New categories: Product, Comparisons, Engineering, Founders' notes, Guides, Char Weekly

Changes were made in three definition locations:

  • content-collections.ts — Zod enum schema
  • src/routes/_view/blog/index.tsx — public blog filter list
  • src/routes/admin/collections/index.tsx — admin CMS category selector

All 54 existing articles now have a category field in frontmatter. Previously only 4 articles had one.

Category mapping applied:

Category Article count What's in it
Comparisons 27 Tool roundups, alternatives, reviews (SEO content)
Engineering 10 Tech decisions, publishing stack, CMS choices
Guides 9 How-to articles, checklists
Founders' notes 5 Building-in-public reflections
Char Weekly 2 Weekly updates (kept as-is)
Product 1 "Hyprnote Is Now Char" announcement

Review & Testing Checklist for Human

  • Verify article categorization accuracy — Skim the category assignments in the diff, especially borderline cases: choosing-a-cms and developer-documentation-tools are tagged Engineering (not Comparisons), what-makes-reliable-ai-note-taker is tagged Comparisons (not Guides), can-you-transcribe-meetings-without-sending-data-to-cloud is tagged Guides (not Engineering)
  • Check "Founders' notes" renders correctly — the apostrophe in the category name should be verified on the blog page filter bar, desktop sidebar, and admin category dropdown
  • Test the blog page — visit /blog/ and verify category filters work, counts are correct, and articles show under the right categories
  • Test the admin CMS — open /admin/collections/, edit an article, and verify the category dropdown shows all 6 new options

Notes

  • The removed categories (Case Study, Products In-depth) had zero articles using them
  • Productivity HackComparisons migration applied to best-ai-notetaker.mdx
  • Typecheck passes (pnpm -r typecheck)

Requested by: @ComputelessComputer
Link to Devin run


Open with Devin

New categories: Product, Comparisons, Engineering, Founders' notes, Guides, Char Weekly

Category mapping for existing articles:
- Tool roundups/reviews/alternatives -> Comparisons
- Tech implementation/decisions -> Engineering
- Founder reflections/building in public -> Founders' notes
- How-to articles -> Guides
- Product announcements -> Product
- Weekly updates -> Char Weekly (kept)

Co-Authored-By: john@hyprnote.com <john@hyprnote.com>
@devin-ai-integration
Copy link
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR that start with 'DevinAI' or '@devin'.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@netlify
Copy link

netlify bot commented Feb 14, 2026

Deploy Preview for hyprnote-storybook canceled.

Name Link
🔨 Latest commit 1744696
🔍 Latest deploy log https://app.netlify.com/projects/hyprnote-storybook/deploys/69903bda49b25900089491ae

@netlify
Copy link

netlify bot commented Feb 14, 2026

Deploy Preview for hyprnote ready!

Name Link
🔨 Latest commit 1744696
🔍 Latest deploy log https://app.netlify.com/projects/hyprnote/deploys/69903bda7a7f190008e7805b
😎 Deploy Preview https://deploy-preview-3966--hyprnote.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Copy link
Contributor Author

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 3 potential issues.

🐛 1 issue in files not directly in the diff

🐛 Default frontmatter for new articles uses removed category "Case Study" (apps/web/src/functions/github-content.ts:115)

When creating a new article via the admin panel, getDefaultFrontmatter sets category: "Case Study" in the frontmatter template. Since this PR removed "Case Study" from the Zod enum in content-collections.ts, any newly created article will fail schema validation at build time.

Root Cause and Impact

The getDefaultFrontmatter function at apps/web/src/functions/github-content.ts:115 still uses "Case Study" as the default category for new articles. However, the Zod enum at apps/web/content-collections.ts:95-101 no longer includes "Case Study" — it was replaced with "Product", "Comparisons", "Founders' notes", and "Guides".

When an admin creates a new article (via createContentFile or createContentFileOnBranch), the generated frontmatter will contain category: "Case Study". This will cause the content-collections build to fail with a Zod validation error, since "Case Study" is not in the allowed enum values.

Impact: Every new article created through the admin CMS will fail to build until the category is manually corrected.

View 3 additional findings in Devin Review.

Open in Devin Review

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 MetadataPanel's category still lists old removed categories The MetadataPanel component in the admin CMS has a hardcoded <select> dropdown with the old category values (Case Study, Productivity Hack), missing the new categories (Product, Comparisons, Founders' notes, Guides). Root Cause and Impact At apps/web/src/routes/admin/collections/index.tsx:2203-2207, there is a raw <select> element with hardcoded old category options. While the PR updated the CATEGORIES constant (line 1977-1984) and the CategorySelect component that uses it, this separate <select> in MetadataPanel was missed. The old options are: <option value="Case Study">Case Study</option> <option value="Char Weekly">Char Weekly</option> <option value="Productivity Hack">Productivity Hack</option> <option value="Engineering">Engineering</option> The correct options should be: Product, Comparisons, Engineering, Founders' notes, Guides, Char Weekly. If an admin selects "Case Study" or "Productivity Hack" from this dropdown, the article will fail Zod validation at build time since those values are no longer in the schema enum. Additionally, the new categories (Product, Comparisons, Founders' notes, Guides) cannot be selected from this panel at all. Impact: Admins using this metadata panel view will see stale category options, potentially setting invalid categories that break the build, and cannot assign any of the new categories. (Refers to lines 2203-2207) Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚩 Duplicate category selector pattern in admin panel caused missed update

The admin CMS has two independent category selection UIs for articles: a CategorySelect component (used at line 2437 in a different editing view) and a raw <select> element hardcoded inside MetadataPanel (lines 2198-2208). The CategorySelect component references the shared CATEGORIES constant at apps/web/src/routes/admin/collections/index.tsx:1977-1984, which was properly updated. But the MetadataPanel's inline <select> has its own hardcoded option list that was missed.

This architectural duplication is the root cause of BUG-0002. Consider refactoring MetadataPanel to also use the CategorySelect component or at least reference the shared CATEGORIES constant, to prevent this class of bug from recurring.

(Refers to lines 2197-2208)

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Contributor Author

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Default frontmatter for new articles uses removed category "Case Study" (apps/web/src/functions/github-content.ts:115)

When creating a new article via the admin panel, getDefaultFrontmatter sets category: "Case Study" in the frontmatter template. Since this PR removed "Case Study" from the Zod enum in content-collections.ts, any newly created article will fail schema validation at build time.

Root Cause and Impact

The getDefaultFrontmatter function at apps/web/src/functions/github-content.ts:115 still uses "Case Study" as the default category for new articles. However, the Zod enum at apps/web/content-collections.ts:95-101 no longer includes "Case Study" — it was replaced with "Product", "Comparisons", "Founders' notes", and "Guides".

When an admin creates a new article (via createContentFile or createContentFileOnBranch), the generated frontmatter will contain category: "Case Study". This will cause the content-collections build to fail with a Zod validation error, since "Case Study" is not in the allowed enum values.

Impact: Every new article created through the admin CMS will fail to build until the category is manually corrected.

View 5 additional findings in Devin Review.

Open in Devin Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant