Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/web/content-collections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ const articles = defineCollection({
updated: z.string().optional(),
coverImage: z.string().optional(),
featured: z.boolean().optional(),
published: z.boolean().default(true),
published: z.boolean().default(false),
category: z
.enum([
"Case Study",
Expand Down
1 change: 1 addition & 0 deletions apps/web/content/articles/ai-meeting-summary-tools.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ meta_description: "Find the best AI meeting summary tool for your team. Compare
author: "John Jeong"
created: "2025-10-06"
coverImage: "https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/ai-meeting-summary-tools/cover.png"
published: true
---

You're in back-to-back meetings, someone just mentioned three critical action items, and you're already forgetting what was decided in the call before this one.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ meta_title: "7 Best AI Meeting Assistants for Taking Notes in 2025"
meta_description: "Discover the best AI meeting assistants for automated note-taking in 2025. Compare privacy, features & pricing to choose the right tool for your needs."
author: "Harshika"
created: "2025-08-04"
published: true
coverImage: https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_imageshttps://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/best-ai-meeting-assistant-for-taking-notes//cover.png
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ meta_title: "7 Best AI Notetakers for In-person Meetings"
meta_description: "Compare the top AI notetakers for in-person meetings. Find tools with mobile apps, offline recording, speaker ID, and real-time transcription features"
author: "Harshika"
created: "2025-09-03"
published: true
coverImage: "https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/best-ai-notetaker-for-in-person-meetings/cover.png"
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ meta_title: "7 Best AI Notetakers for Microsoft Teams in 2025"
meta_description: "Looking for the best AI notetaker for Microsoft Teams? Compare the top 7 solutions, including native and third-party options."
author: "John Jeong"
created: "2025-09-09"
published: true
coverImage: "https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/best-ai-notetaker-for-microsoft-teams/cover.png"
---

Expand Down
1 change: 1 addition & 0 deletions apps/web/content/articles/best-ai-notetaker-for-zoom.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ meta_title: "Best AI Notetaker for Zoom: Top 10 Options"
meta_description: "Find the best AI notetaker for Zoom with our 2025 guide. Compare real-time transcription, privacy options, CRM integrations, and pricing plans."
author: "Harshika"
created: "2025-09-06"
published: true
coverImage: "https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/best-ai-notetaker-for-zoom/cover.png"
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ meta_title: "7 Best AI Notetakers for Google Meet in 2025"
meta_description: "Google's native AI notes falling short? Find the right alternative by comparing the 7 best AI notetakers for Google Meet in 2025. Free & paid options included."
author: "John Jeong"
created: "2025-09-11"
published: true
coverImage: "https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/best-ai-notetakers-google-meet/cover.png"
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ meta_title: "2025’s Best Bot-Free AI Meeting Assistants"
meta_description: "Want AI meeting notes without bots joining your call? Here’s a list of the best bot-free AI meeting assistants for secure, distraction-free note-taking."
author: "John Jeong"
created: "2025-08-27"
published: true
coverImage: "https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_imageshttps://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/bot-free-ai-meeting-assistants/cover.png"
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Fix malformed coverImage and image URLs.

Lines 7 and 52 contain URLs that concatenate improperly, resulting in invalid paths. The string public_images merges directly with the https:// protocol without proper separation.

Line 7 (coverImage):
Current: public_imageshttps://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/...

Expected: public_images/blog/bot-free-ai-meeting-assistants/cover.png

Line 52 (img src):
Same issue — URL segment duplicated without separator.

Apply this diff to fix line 7:

-coverImage: "https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_imageshttps://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/bot-free-ai-meeting-assistants/cover.png"
+coverImage: "https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/bot-free-ai-meeting-assistants/cover.png"

Apply this diff to fix line 52:

-<img src="https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_imageshttps://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/bot-free-ai-meeting-assistants/hyprnote.webp" alt="Hyprnote"/>
+<img src="https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/bot-free-ai-meeting-assistants/hyprnote.webp" alt="Hyprnote"/>

Also applies to: 52-52

🤖 Prompt for AI Agents
In apps/web/content/articles/bot-free-ai-meeting-assistants.mdx around lines 7
and 52, the coverImage and img src URLs are malformed because the segment
"public_images" is concatenated directly with the full https:// host, producing
"public_imageshttps://..."; replace both occurrences with the correct full URL
that includes the missing path separator and blog folder, e.g.
"https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/bot-free-ai-meeting-assistants/cover.png"
for line 7 and the corresponding image filename path under the same
"/public_images/blog/bot-free-ai-meeting-assistants/" directory for line 52 so
the URLs are valid and not duplicated.

---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ meta_title: "Can You Transcribe Meetings Without Sending Data to the Cloud?"
meta_description: "Learn how to transcribe meetings without sending data to the cloud. Discover local AI tools like Hyprnote that keep conversations on-device and completely private."
author: "Harshika"
created: "2025-08-22"
published: true
coverImage: "https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/can-you-transcribe-meetings-without-sending-data-to-cloud/cover.png"
---

Expand Down
1 change: 1 addition & 0 deletions apps/web/content/articles/chatgpt-for-meeting-notes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ meta_title: "How to Use ChatGPT for Meeting Notes?"
meta_description: "Learn how to use ChatGPT for meeting notes with Record Mode & manual upload. Get proven prompts, privacy tips & better alternatives for professional use."
author: "Harshika"
created: "2025-09-25"
published: true
coverImage: "https://ijoptyyjrfqwaqhyxkxj.supabase.co/storage/v1/object/public/public_images/blog/chatgpt-for-meeting-notes/cover.png"
---

Expand Down
312 changes: 312 additions & 0 deletions apps/web/content/articles/choosing-a-cms.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,312 @@
---
display_title: "Choosing a CMS in 2025: A Guide for Technical Teams"
meta_title: "Choosing a CMS: Sanity vs Payload vs GitHub vs Keystatic"
meta_description: "A deep guide to choosing a CMS in 2025. Compare Git-based CMS, headless CMS like Sanity and Payload, Nextra-style frameworks, GitBook, and when you shouldn’t use a CMS at all."
author: "John Jeong"
created: "2025-11-28"
coverImage: "https://hyprnote.com/og/choosing-a-cms.png"
published: true
---

# Choosing a CMS in 2025: A Guide for Technical Teams

If you’re building a blog, docs, or a knowledge base in 2025, the options are… overwhelming.

Sanity or Payload?
Nextra or GitBook?
Git-based CMS like Keystatic?
Or just raw MDX in GitHub with zero CMS at all?

We went through the same decision for Hyprnote.
This post is my attempt to **map the territory** so you don’t have to burn as many cycles.

I’m not going to tell you “X is the best CMS.”
I’ll show you **what each category is good at**, what it quietly locks you into, and when you probably don’t need a CMS at all.

This is Part 3 in our publishing series:

- Part 1 – *Why We Write Our Blog in an IDE*
- Part 2 – *Why Our CMS Is GitHub*
- Part 3 – *This post: how to choose a CMS in 2025*

---

## Step 0: Decide What Problem You’re Actually Solving

“Which CMS should we use?” is the wrong first question.

Better questions:

1. **Who is writing most of the content?**
- engineers only
- mixed team (engineers + PMs + marketing)
- non-technical people only

2. **What are you publishing?**
- technical blog
- product docs / API reference
- internal knowledge base
- marketing pages / landing pages

3. **How often does content structure change?**
- almost never (simple posts, titles, tags)
- sometimes (new fields, types, locales)
- constantly (complex content models, multiple channels)

4. **How long should your content survive?**
- 6 months?
- 2–3 years?
- 10+ years and multiple stack rewrites?

Once you answer these, the CMS choice mostly falls out.

---

## The Four Big Buckets of CMS Options

Let’s define the buckets first:

1. **No CMS, just Git + MDX**
2. **Git-based CMS (visual UI on top of your repo)**
3. **Headless CMS (API-first like Sanity, Payload)**
4. **Hosted doc/knowledge platforms (GitBook, Notion, etc.)**

We’ll walk through each, then I’ll give you a “when to pick which” section.

---

## 1. No CMS: Just Git + MDX (What We Use)

This is what we do at Hyprnote:

- content lives as `.mdx` files in the repo
- we write in Zed / Cursor / VS Code
- GitHub is the CMS
- PRs are drafts, merges are publish
- CI handles link checking, OG generation, etc.

Pros:

- maximum **portability** (plain files last decades)
- works perfectly with modern frameworks (Next.js, TanStack Start, Astro) via MDX support [oai_citation:0‡Next.js](https://nextjs.org/docs/pages/guides/mdx?utm_source=chatgpt.com)
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# First, check if file exists and its size
wc -l apps/web/content/articles/choosing-a-cms.mdx

Repository: fastrepl/hyprnote

Length of output: 109


🏁 Script executed:

# Find all oai_citation markers with line numbers
rg -n 'oai_citation' apps/web/content/articles/choosing-a-cms.mdx

Repository: fastrepl/hyprnote

Length of output: 3684


Remove web search citation artifacts before publishing.

This file contains 18 oai_citation markers embedded throughout the content. These are unintended artifacts from web search or citation generation that will render as literal text in published content, breaking the user experience.

Found at lines: 91, 110, 112, 139, 145, 146, 153, 156, 157, 164, 184, 190, 199, 215, 294, 296, 298.

Examples:

[oai_citation:0‡Next.js](https://nextjs.org/docs/pages/guides/mdx?utm_source=chatgpt.com)
[oai_citation:1‡Keystatic](https://keystatic.com/?utm_source=chatgpt.com)

Remove all [oai_citation:*‡*] patterns before merging.

🤖 Prompt for AI Agents
In apps/web/content/articles/choosing-a-cms.mdx around lines 91-298, there are
unwanted web-search citation artifacts of the form [oai_citation:*‡*] present at
the listed lines; remove all occurrences of the pattern (e.g.
[oai_citation:0‡Next.js]) so they do not appear in published content by
searching the file for the regex \[oai_citation:[^\]]+\] and deleting each match
(or manually remove the 18 specific markers at lines 91, 110, 112, 139, 145,
146, 153, 156, 157, 164, 184, 190, 199, 215, 294, 296, 298), then save and
verify the rendered MDX no longer contains any oai_citation tokens.

- diffable, reviewable, scriptable
- no vendor lock-in, no schema migrations
- ideal if your writers are engineers

Cons:

- non-technical teammates need training or another surface
- no drag-and-drop media UI out of the box
- no built-in content dashboard, workflows, or roles

If your team is very technical and you’re early-stage, this is almost always the correct default. You can always add a Git-based or headless CMS later without throwing anything away.

---

## 2. Git-Based CMS: “UI for Your Repo” (Keystatic & Friends)

Git-based CMS tools give you a **visual editor that talks directly to your Git repo**. Your content is still Markdown/MDX/JSON/YAML in the repository, but non-technical people get a web UI.

**Keystatic** is a good example of the modern version of this: it makes Markdown, JSON, and YAML content in your codebase editable via a browser UI, and syncs changes directly to GitHub or the local file system, without introducing a separate database. [oai_citation:1‡Keystatic](https://keystatic.com/?utm_source=chatgpt.com)

Other players in this space include TinaCMS, Decap, etc., which a lot of devs compare as “Git-based CMS for React/Next.” [oai_citation:2‡DEV Community](https://dev.to/linkb15/top-5-git-based-cms-comparison-as-of-april-2024-4k1e?utm_source=chatgpt.com)

Pros:

- fits the **“content as code”** philosophy
- you keep all the benefits of Git (history, branches, PRs)
- non-engineers get a UI to edit content safely
- still portable (files in Git), no proprietary content lake
- good fit for Next.js / Remix / Astro setups

Cons:

- another admin app to host/configure
- the UI still has limits vs raw MDX
- you’re tied into their config models and upgrade cycle
- not as “enterprise omnichannel” as big headless CMSs

When to use this:

> You like our Git + MDX approach, but you want PMs / designers / marketing to be able to tweak copy and metadata without opening an IDE.
---

## 3. Headless CMS: Sanity, Payload, and the Heavy Hitters

Headless CMS = content backend with APIs. Frontend is up to you.

You define schemas, models, relationships, and the CMS exposes content via REST/GraphQL/other APIs to web, mobile, native apps, signage, whatever. [oai_citation:3‡Sanity.io](https://www.sanity.io/headless-cms?utm_source=chatgpt.com)

### Sanity

Sanity is one of the big names here:

- it offers a composable “Content Cloud” with an open-source Studio built in React/TypeScript, highly customizable, and aimed at flexible content modeling. [oai_citation:4‡Sanity.io](https://www.sanity.io/?utm_source=chatgpt.com)
- content is stored in their **Content Lake** as structured JSON, not HTML, so you can reuse it across multiple frontends. [oai_citation:5‡Pagepro](https://pagepro.co/blog/what-is-sanity/?utm_source=chatgpt.com)
- it provides real-time collaboration, visual editing, and omnichannel delivery.

This is great when you have multiple frontends, lots of content types, and non-technical editors who need good UX.

### Payload

Payload is a dev-first, code-first headless CMS built with Node.js, TypeScript and React, positioning itself as a Next.js-native backend framework. [oai_citation:6‡Payload](https://payloadcms.com/?utm_source=chatgpt.com)

- you configure everything in TypeScript
- it’s open-source (MIT), self-hostable, and can double as a headless CMS, app framework, or digital asset management layer. [oai_citation:7‡GitHub](https://github.com/payloadcms/payload?utm_source=chatgpt.com)
- it fits naturally into a modern JS/TS stack with Next.js-based projects. [oai_citation:8‡Payload](https://payloadcms.com/docs/getting-started/what-is-payload?utm_source=chatgpt.com)

Pros of headless CMS:

- powerful **schema & content modeling**
- omnichannel delivery (web, mobile, internal tools)
- good editorial UIs, roles, workflows
- often built-in localization, scheduling, etc. [oai_citation:9‡Sanity.io](https://www.sanity.io/headless-cms?utm_source=chatgpt.com)

Cons:

- more infra complexity (hosting, API auth, migrations)
- content now lives in a **proprietary structure** (export is possible, but not as simple as copying MDX files)
- your team must think in terms of “schemas” and “content models,” not just “posts”

When to use this:

> You’re not just running a blog. You’re running a **content platform** with multiple surfaces, locales, and non-technical editors who need structured workflows.
---

## 4. Docs / Knowledge Platforms: GitBook, Notion & Co.

Sometimes you don’t need a CMS. You need a **docs product**.

### GitBook

GitBook positions itself as a documentation + knowledge base platform for technical teams, with a polished block-based editor, site customization options, and Git Sync that lets you connect to GitHub/GitLab for a docs-as-code workflow. [oai_citation:10‡GitBook](https://gitbook.com/docs?utm_source=chatgpt.com)

It’s very good if you want:

- a hosted, beautiful docs site
- search, navigation, versioning, and collaboration
- optional Git synchronization for teams that still want Markdown in repos [oai_citation:11‡GitBook](https://gitbook.com/docs/guides/docs-best-practices/documentation-structure-tips?utm_source=chatgpt.com)

Notion, Confluence, etc. live in the same general category (less dev-focused, more general knowledge management).

Pros:

- **fastest path** to a nice-looking docs/knowledge base
- low setup cost, almost no infra
- very friendly for non-tech stakeholders
- often have built-in AI-assisted search/summary now [oai_citation:12‡GitBook](https://www.gitbook.com/?utm_source=chatgpt.com)

Cons:

- content portability is limited (exports often messy)
- integrating tightly into your product site can be harder
- you’re living inside someone else’s product roadmap

When to use this:

> You want a **docs site tomorrow**, UX matters more than control, and you don’t mind long-term platform dependency.
---

## 5. Special Case: Nextra & Friends (Frameworks, Not CMSs)

Tools like **Nextra** are not CMS platforms, but content-focused frameworks built on Next.js that make it easy to build docs/blog sites with Markdown/MDX and opinionated themes. [oai_citation:13‡Nextra](https://nextra.site/docs?utm_source=chatgpt.com)

Think of Nextra as:

- prebuilt docs/blog UI (sidebar, nav, search glue)
- MDX-first authoring
- great for developer docs & personal blogs

You still choose how to manage content (just files, Git-based CMS, headless CMS feeding MDX remotely, etc.).

This is the category Hyprnote’s stack rhymes with: modern React/MDX front-end, but content-first in Git.

---

## A Simple Decision Matrix (So You Don’t Overthink It)

You can ignore everything above and just use this:

| Situation | Likely Best Choice |
|----------|--------------------|
| Small, technical team, mostly engineers writing | **Git + MDX, no CMS** |
| Technical team, but PMs/design/marketing need to edit copy | **Git-based CMS** (Keystatic/Tina/etc.) |
| Product needs content across web, app, marketing, multiple locales | **Headless CMS** (Sanity, Payload, etc.) |
| You just need a docs/KB site ASAP | **Docs platform** (GitBook, maybe Notion early) |
| You want fine control over UI + MDX, but not heavy infra | **Nextra or similar framework** on top of Git |

If you’re not sure, default to:

> **Git + MDX now.
> Add a Git-based or headless CMS later _if_ reality forces you to.**
Most teams overestimate how much “CMS” they need for the first 2–3 years.

---

## Things People Don’t Talk About Enough

A few non-obvious things we learned while thinking about this for Hyprnote:

### 1. Lock-in doesn’t hurt until you’re tired and busy

Headless CMS and hosted doc platforms feel great in the first year. Export and migration problems show up **right when you least want to deal with them**: when the product is working and you’re stretched thin.

Plain files in Git are boring. Boring is good.

### 2. Editors become culture

If your team writes in Markdown/MDX in Git, your culture becomes:

- “open a PR”
- “leave a comment”
- “fix it in the repo”

If your team writes in a SaaS editor, your culture becomes:

- “who has access?”
- “which space is that in?”
- “did the integration break again?”

Neither is inherently “right,” but they lead to different organizations.

### 3. Your writers will change over time

Today your blog might be “founder + engineers.”
In two years, it might be “devrel + marketing + product + support.”

Choosing a stack that can evolve from **IDE-only → Git-based CMS → headless CMS** with minimal rewriting is underrated.

Git + MDX is a good foundation for that.

---

## So… What Would I Use If I Were Starting Today?

If I were a technical founder starting a new product today:

- For **blog + marketing + simple docs**
→ I’d start with **Next.js or TanStack Start + MDX + GitHub**, no CMS.
- When non-engineers need to edit regularly
→ I’d add a **Git-based CMS** like Keystatic on top. [oai_citation:14‡Keystatic](https://keystatic.com/?utm_source=chatgpt.com)
- If I ever hit real omnichannel, multi-locale complexity
→ I’d consider **Sanity or Payload** and accept the trade-offs. [oai_citation:15‡Next.js Templates](https://nextjstemplates.com/blog/headless-cms-nextjs?utm_source=chatgpt.com)
- For standalone internal knowledge bases
→ I’d probably just use **GitBook** and not overthink it. [oai_citation:16‡GitBook](https://gitbook.com/docs?utm_source=chatgpt.com)

That’s basically our philosophy behind Hyprnote’s own stack:
start with the simplest thing that respects **developer workflows, portability, and long-term ownership.**

The tools will change.
Your content shouldn’t have to.

---

**This is Part 3 of our series on building a modern publishing workflow.**

- Part 1 – *Why We Write Our Blog in an IDE (Not a WYSIWYG Editor)*
- Part 2 – *Why Our CMS Is GitHub*
- Part 3 – *Choosing a CMS in 2025: A Guide for Technical Teams*
Loading
Loading