Skip to content

Conversation

@ComputelessComputer
Copy link
Collaborator

Changes

  • Added MDXLink component for flexible link handling in MDX content
  • Introduced shared MDX components configuration
  • Centralized component mappings in a single module
  • Simplified MDX content rendering across different routes
  • Cleaned up comments in MDX components file

Introduce a shared MDX components module and helpers so all MDXContent renderers use a common default component map. This centralizes Image, MDXLink, Mermaid, Tweet, Callout, and other mappings in apps/web/src/components/mdx/mdx-components.tsx and exposes createMDXComponents and defaultMDXComponents from the mdx index. Update blog, changelog, and legal routes to use the shared defaults (or merge with route-specific components) to remove duplicated component objects and simplify maintenance.
Clean up redundant comments in mdx-components.tsx to make the code clearer and reduce noise. The removed comments only described obvious things (type alias, default components, and merge function), so deleting them improves readability without changing behavior.
@netlify
Copy link

netlify bot commented Dec 2, 2025

Deploy Preview for hyprnote-storybook ready!

Name Link
🔨 Latest commit 810d572
🔍 Latest deploy log https://app.netlify.com/projects/hyprnote-storybook/deploys/692e99626f75100008b23e13
😎 Deploy Preview https://deploy-preview-2065--hyprnote-storybook.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.

@netlify
Copy link

netlify bot commented Dec 2, 2025

Deploy Preview for hyprnote ready!

Name Link
🔨 Latest commit 810d572
🔍 Latest deploy log https://app.netlify.com/projects/hyprnote/deploys/692e996243096b000850e292
😎 Deploy Preview https://deploy-preview-2065--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.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 2, 2025

📝 Walkthrough

Walkthrough

This PR converts external absolute URLs to relative internal paths across 30+ article files, and establishes a new MDXLink component infrastructure for intelligent link rendering in MDX content. The changes include creating an MDXLink component, centralizing MDX component configuration through factory functions, and updating 15+ route files to use the new link component.

Changes

Cohort / File(s) Summary
Article content link updates
apps/web/content/articles/ai-meeting-summary-tools.mdx, best-ai-meeting-assistant-for-taking-notes.mdx, best-ai-notetaker-for-*.mdx (4 files), bot-free-ai-meeting-assistants.mdx, can-you-transcribe-meetings-without-sending-data-to-cloud.mdx, chatgpt-for-meeting-notes.mdx, enterprise-ai-notetaking-tools.mdx, fathom-ai-alternatives.mdx, fireflies-ai-alternatives.mdx, free-ai-notetakers.mdx, free-transcription-software.mdx, google-gemini-meeting-notes.mdx, granola-ai-alternatives.mdx, how-to-*.mdx (3 files), is-*.mdx (3 files), local-ai-privacy-tools.mdx, meeting-*.mdx (2 files), open-source-meeting-transcription-software.mdx, otter-ai-alternatives.mdx, plaud-ai-alternatives.mdx, sales-ai-note-takers.mdx, see-zoom-meeting-history.mdx, what-makes-reliable-ai-note-taker.mdx, zoom-ai-companion-review.mdx, apps/web/content/legal/dpa.mdx
Replaced external absolute URLs (https://hyprnote.com/*) with relative paths (/, /blog/*, /product/*, /download, /founders, /privacy-policy) in article links and image sources. Fixed duplicate path segments in asset references. Preserved content semantics and structure.
MDX component infrastructure
apps/web/src/components/mdx/index.ts, apps/web/src/components/mdx/link.tsx (new), apps/web/src/components/mdx/mdx-components.tsx (new)
Created MDXLink component for intelligent link routing: handles external URLs, internal paths, anchors, and missing hrefs. Introduced MDXComponents type, defaultMDXComponents constant, and createMDXComponents factory function for centralized MDX component configuration. Exports new public APIs from mdx index.
Component consumers (utilities & MDXContent mappings)
apps/web/src/components/deeplinks-list.tsx, apps/web/src/components/hooks-list.tsx, apps/web/src/routes/_view/company-handbook/-components.tsx, apps/web/src/routes/_view/docs/-components.tsx, apps/web/src/routes/_view/gallery/$type.$slug.tsx, apps/web/src/routes/_view/roadmap/index.tsx, apps/web/src/routes/_view/shortcuts/$slug.tsx, apps/web/src/routes/_view/templates/index.tsx, apps/web/src/routes/_view/shortcuts/index.tsx
Updated MDXContent component mappings to include a: MDXLink for custom anchor rendering across utility components and multiple route views.
Route-specific MDX updates
apps/web/src/routes/_view/blog/$slug.tsx, apps/web/src/routes/_view/changelog/$slug.tsx, apps/web/src/routes/_view/legal/$slug.tsx, apps/web/src/routes/_view/roadmap/$slug.tsx, apps/web/src/routes/_view/templates/$slug.tsx
Updated MDXContent usage to leverage new MDX component infrastructure: switched from custom inline component mappings to factory-generated (createMDXComponents) or default (defaultMDXComponents) configurations.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Article updates (~10 min): Repetitive URL rewriting pattern across 30+ files reduces cognitive load; verify a sample of conversions and check for any inconsistent path transformations.
  • MDXLink component logic (~8 min): Review href detection logic (hyprnote.com → relative, anchors, internal paths, external) for edge cases and ensure Router Link vs anchor tag selection is correct.
  • Component integration (~7 min): Verify all route consumers correctly pass MDXLink via components mapping; check for any routes missed in the refactor and ensure defaultMDXComponents includes all needed mappings.

Areas requiring attention:

  • MDXLink href normalization logic—verify all URL patterns (hyprnote.com variants, query strings, fragments) are handled correctly
  • Backward compatibility of createMDXComponents factory with optional parameter merging
  • Confirm all route files that render MDXContent now include the a: MDXLink mapping

Possibly related PRs

Suggested reviewers

  • yujonglee

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main changes: introducing MDXLink component and centralizing MDX component mappings across the codebase.
Description check ✅ Passed The description is directly related to the changeset, listing the key changes including MDXLink addition, shared configuration, centralized mappings, and simplified rendering.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/mdx-link-component-handling

Comment @coderabbitai help to get the list of available commands and usage tips.

@ComputelessComputer ComputelessComputer merged commit 758d606 into main Dec 2, 2025
13 of 14 checks passed
@ComputelessComputer ComputelessComputer deleted the feat/mdx-link-component-handling branch December 2, 2025 07:50
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 8

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/web/content/articles/granola-ai-alternatives.mdx (1)

280-280: Fix incomplete link placeholder.

Line 280 contains [Download Hyprnote](link) which is a placeholder that was not resolved. This will render as a broken link in the MDX output.

Apply this diff to complete the link:

-**Ready to take control of your meeting data?** [Download Hyprnote](link) and experience truly private AI-powered note-taking.
+**Ready to take control of your meeting data?** [Download Hyprnote](/download) and experience truly private AI-powered note-taking.

Replace /download with the correct internal path to your Hyprnote download page.

🧹 Nitpick comments (12)
apps/web/content/articles/chatgpt-for-meeting-notes.mdx (1)

169-171: Tighten informal language and verify grammar.

Line 169 uses "pretty much," which is informal. Consider replacing it with more formal phrasing for consistency with the article's professional tone. Additionally, static analysis flagged a potential grammar/spelling issue on line 170.

Consider revising lines 169–171 as follows:

- Hyprnote, like ChatGPT, also listens to system audio and runs on Mac, but that is pretty much where the similarities end.
+ Hyprnote, like ChatGPT, also listens to system audio and runs on Mac, but the similarities largely end there.

Please also review line 170 for any spelling or grammar corrections.

apps/web/content/articles/fathom-ai-alternatives.mdx (1)

41-41: Minor: Consider varying the word choice to avoid repetition.

Per static analysis, the word "exactly" appears twice in close proximity around line 41. Consider using an alternative phrasing for stylistic variety.

Applied diff is optional—only if you wish to address the style suggestion:

- Full disclosure - I'm the co-founder of [Hyprnote](/). But that's exactly why I built it. After seeing how every other tool handles your data, I knew there had to be a better way.
+ Full disclosure - I'm the co-founder of [Hyprnote](/). That's precisely why I built it. After seeing how every other tool handles your data, I knew there had to be a better way.
apps/web/src/components/deeplinks-list.tsx (1)

4-4: MDXLink integration looks correct; consider centralizing MDX components

Using a: MDXLink here will correctly route MDX anchors through the shared link behavior, and keeping mermaid, Mermaid, and Tweet in the map preserves existing rendering.

If you’re standardizing on a central MDX components map (e.g., via defaultMDXComponents / createMDXComponents in @/components/mdx), consider delegating to that here to avoid repeating the components object across multiple call sites.

Also applies to: 65-65

apps/web/src/routes/_view/company-handbook/-components.tsx (1)

18-18: Handbook MDX now uses MDXLink for anchors – good alignment

Wiring a: MDXLink into the MDXContent components map ensures handbook links go through the shared MDX link behavior while preserving all existing custom components (Accordion, Card, Columns, Image, etc.). This is consistent with the MDX refactor.

If you end up maintaining multiple similar MDXContent call sites, you might later pull this components object from a shared helper (e.g., a createMDXComponents variant that includes a: MDXLink) to keep things DRY, but it’s not required for correctness here.

Also applies to: 105-120

apps/web/src/routes/_view/templates/index.tsx (1)

566-566: Consider using defaultMDXComponents for consistency.

While { a: MDXLink } works for basic links, the legal route uses defaultMDXComponents which includes Image, Mermaid, Tweet, and Callout components. If template MDX content might include these components in the future, using defaultMDXComponents would be more consistent and future-proof.

Apply this diff if you want consistency with the legal route:

-          <MDXContent code={template.mdx} components={{ a: MDXLink }} />
+          <MDXContent code={template.mdx} components={defaultMDXComponents} />

And update the import:

-import { MDXLink } from "@/components/mdx";
+import { defaultMDXComponents } from "@/components/mdx";
apps/web/src/routes/_view/roadmap/index.tsx (1)

335-335: Optional: Consider defaultMDXComponents for future flexibility.

Similar to templates/index.tsx, this uses inline { a: MDXLink }. If roadmap MDX content might include other components (images, callouts, etc.), consider using defaultMDXComponents for consistency with the legal route pattern.

apps/web/src/routes/_view/gallery/$type.$slug.tsx (1)

273-273: Optional: Consider defaultMDXComponents for consistency.

Like other routes, this uses inline { a: MDXLink }. If gallery MDX content might include images, code blocks, or other rich components, defaultMDXComponents would provide better consistency and future flexibility.

apps/web/src/routes/_view/shortcuts/index.tsx (1)

523-523: Optional: Consider defaultMDXComponents for future flexibility.

This follows the same inline { a: MDXLink } pattern. If shortcut MDX content might include other components (code blocks, callouts, images), using defaultMDXComponents would provide better consistency with the centralized approach seen in the legal route.

apps/web/src/routes/_view/templates/$slug.tsx (1)

9-9: Consider using defaultMDXComponents for consistency and completeness.

The current approach only maps anchor tags to MDXLink, but template MDX content may use other components like Image, Mermaid, Tweet, or Callout. The defaultMDXComponents export (introduced in this PR and used in changelog/$slug.tsx) provides a centralized, complete mapping.

Apply this diff:

-import { MDXLink } from "@/components/mdx";
+import { defaultMDXComponents } from "@/components/mdx";
-          <MDXContent code={template.mdx} components={{ a: MDXLink }} />
+          <MDXContent code={template.mdx} components={defaultMDXComponents} />

Also applies to: 174-174

apps/web/src/routes/_view/roadmap/$slug.tsx (1)

9-9: Refactor to use defaultMDXComponents for consistency.

The current approach manually maintains a component mapping that duplicates the centralized defaultMDXComponents definition. This creates maintenance overhead and inconsistency with other routes like changelog/$slug.tsx, which uses the centralized mapping.

Apply this diff:

-import { MDXLink, Mermaid, Tweet } from "@/components/mdx";
+import { defaultMDXComponents } from "@/components/mdx";
             <MDXContent
               code={item.mdx}
-              components={{
-                a: MDXLink,
-                Image,
-                img: Image,
-                mermaid: Mermaid,
-                Mermaid,
-                Tweet,
-              }}
+              components={defaultMDXComponents}
             />

Note: Since defaultMDXComponents already includes Image, you can remove the Image import from line 8 as well.

Also applies to: 154-162

apps/web/src/components/mdx/link.tsx (1)

12-12: Consider stricter URL validation for hyprnote.com.

The current check href.startsWith("https://hyprnote.com") could potentially match malicious URLs like https://hyprnote.com.evil.com. While unlikely in MDX content, consider using a more precise check.

Apply this diff for stricter validation:

-  const isHyprnoteUrl = href.startsWith("https://hyprnote.com");
+  const isHyprnoteUrl = href.startsWith("https://hyprnote.com/") || href === "https://hyprnote.com";
apps/web/src/components/mdx/mdx-components.tsx (1)

29-29: Optional refinement: simplify null check.

The || {} fallback is unnecessary since spreading undefined is already safe in JavaScript/TypeScript. The optional parameter ? already handles the undefined case.

Apply this diff to simplify:

   return {
     ...defaultMDXComponents,
-    ...(customComponents || {}),
+    ...customComponents,
   } as MDXComponents;
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9712ed2 and 810d572.

📒 Files selected for processing (51)
  • apps/web/content/articles/ai-meeting-summary-tools.mdx (1 hunks)
  • apps/web/content/articles/best-ai-meeting-assistant-for-taking-notes.mdx (11 hunks)
  • apps/web/content/articles/best-ai-notetaker-for-in-person-meetings.mdx (3 hunks)
  • apps/web/content/articles/best-ai-notetaker-for-microsoft-teams.mdx (8 hunks)
  • apps/web/content/articles/best-ai-notetaker-for-zoom.mdx (9 hunks)
  • apps/web/content/articles/best-ai-notetakers-google-meet.mdx (6 hunks)
  • apps/web/content/articles/bot-free-ai-meeting-assistants.mdx (3 hunks)
  • apps/web/content/articles/can-you-transcribe-meetings-without-sending-data-to-cloud.mdx (2 hunks)
  • apps/web/content/articles/chatgpt-for-meeting-notes.mdx (2 hunks)
  • apps/web/content/articles/enterprise-ai-notetaking-tools.mdx (3 hunks)
  • apps/web/content/articles/fathom-ai-alternatives.mdx (3 hunks)
  • apps/web/content/articles/fireflies-ai-alternatives.mdx (1 hunks)
  • apps/web/content/articles/free-ai-notetakers.mdx (6 hunks)
  • apps/web/content/articles/free-transcription-software.mdx (4 hunks)
  • apps/web/content/articles/google-gemini-meeting-notes.mdx (4 hunks)
  • apps/web/content/articles/granola-ai-alternatives.mdx (4 hunks)
  • apps/web/content/articles/how-to-have-productive-one-on-one-meetings.mdx (1 hunks)
  • apps/web/content/articles/how-to-participate-in-meetings-effectively.mdx (3 hunks)
  • apps/web/content/articles/how-to-reduce-meeting-fatigue.mdx (2 hunks)
  • apps/web/content/articles/how-to-transcribe-zoom-calls.mdx (5 hunks)
  • apps/web/content/articles/is-ai-notetaking-legal.mdx (4 hunks)
  • apps/web/content/articles/is-fireflies-ai-safe.mdx (2 hunks)
  • apps/web/content/articles/is-otter-ai-safe.mdx (3 hunks)
  • apps/web/content/articles/local-ai-privacy-tools.mdx (1 hunks)
  • apps/web/content/articles/meeting-minutes-software.mdx (4 hunks)
  • apps/web/content/articles/meeting-preparation-checklist.mdx (2 hunks)
  • apps/web/content/articles/open-source-meeting-transcription-software.mdx (2 hunks)
  • apps/web/content/articles/otter-ai-alternatives.mdx (5 hunks)
  • apps/web/content/articles/plaud-ai-alternatives.mdx (3 hunks)
  • apps/web/content/articles/sales-ai-note-takers.mdx (4 hunks)
  • apps/web/content/articles/see-zoom-meeting-history.mdx (2 hunks)
  • apps/web/content/articles/what-makes-reliable-ai-note-taker.mdx (3 hunks)
  • apps/web/content/articles/zoom-ai-companion-review.mdx (2 hunks)
  • apps/web/content/legal/dpa.mdx (1 hunks)
  • apps/web/src/components/deeplinks-list.tsx (2 hunks)
  • apps/web/src/components/hooks-list.tsx (2 hunks)
  • apps/web/src/components/mdx/index.ts (1 hunks)
  • apps/web/src/components/mdx/link.tsx (1 hunks)
  • apps/web/src/components/mdx/mdx-components.tsx (1 hunks)
  • apps/web/src/routes/_view/blog/$slug.tsx (2 hunks)
  • apps/web/src/routes/_view/changelog/$slug.tsx (2 hunks)
  • apps/web/src/routes/_view/company-handbook/-components.tsx (2 hunks)
  • apps/web/src/routes/_view/docs/-components.tsx (2 hunks)
  • apps/web/src/routes/_view/gallery/$type.$slug.tsx (2 hunks)
  • apps/web/src/routes/_view/legal/$slug.tsx (2 hunks)
  • apps/web/src/routes/_view/roadmap/$slug.tsx (2 hunks)
  • apps/web/src/routes/_view/roadmap/index.tsx (2 hunks)
  • apps/web/src/routes/_view/shortcuts/$slug.tsx (2 hunks)
  • apps/web/src/routes/_view/shortcuts/index.tsx (2 hunks)
  • apps/web/src/routes/_view/templates/$slug.tsx (2 hunks)
  • apps/web/src/routes/_view/templates/index.tsx (2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx}: Avoid creating a bunch of types/interfaces if they are not shared. Especially for function props, just inline them instead.
Never do manual state management for form/mutation. Use useForm (from tanstack-form) and useQuery/useMutation (from tanstack-query) instead for 99% of cases. Avoid patterns like setError.
If there are many classNames with conditional logic, use cn (import from @hypr/utils). It is similar to clsx. Always pass an array and split by logical grouping.
Use motion/react instead of framer-motion.

Files:

  • apps/web/src/components/mdx/mdx-components.tsx
  • apps/web/src/components/mdx/index.ts
  • apps/web/src/components/mdx/link.tsx
  • apps/web/src/routes/_view/company-handbook/-components.tsx
  • apps/web/src/routes/_view/gallery/$type.$slug.tsx
  • apps/web/src/routes/_view/shortcuts/$slug.tsx
  • apps/web/src/routes/_view/roadmap/$slug.tsx
  • apps/web/src/components/deeplinks-list.tsx
  • apps/web/src/routes/_view/blog/$slug.tsx
  • apps/web/src/routes/_view/shortcuts/index.tsx
  • apps/web/src/routes/_view/changelog/$slug.tsx
  • apps/web/src/routes/_view/docs/-components.tsx
  • apps/web/src/routes/_view/legal/$slug.tsx
  • apps/web/src/routes/_view/templates/$slug.tsx
  • apps/web/src/routes/_view/roadmap/index.tsx
  • apps/web/src/routes/_view/templates/index.tsx
  • apps/web/src/components/hooks-list.tsx
**/*.ts

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.ts: Agent implementations should use TypeScript and follow the established architectural patterns defined in the agent framework
Agent communication should use defined message protocols and interfaces

Files:

  • apps/web/src/components/mdx/index.ts
🧠 Learnings (4)
📚 Learning: 2025-11-24T16:32:23.055Z
Learnt from: CR
Repo: fastrepl/hyprnote PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-24T16:32:23.055Z
Learning: Applies to **/*.{ts,tsx} : If there are many classNames with conditional logic, use `cn` (import from `hypr/utils`). It is similar to `clsx`. Always pass an array and split by logical grouping.

Applied to files:

  • apps/web/src/routes/_view/company-handbook/-components.tsx
  • apps/web/src/routes/_view/gallery/$type.$slug.tsx
  • apps/web/src/routes/_view/roadmap/$slug.tsx
  • apps/web/src/routes/_view/shortcuts/index.tsx
  • apps/web/src/routes/_view/roadmap/index.tsx
  • apps/web/src/routes/_view/templates/index.tsx
📚 Learning: 2025-11-24T16:32:19.706Z
Learnt from: CR
Repo: fastrepl/hyprnote PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-24T16:32:19.706Z
Learning: Applies to **/*.{ts,tsx} : If there are many classNames with conditional logic, use `cn` (import from `hypr/utils`), similar to `clsx`. Always pass an array and split by logical grouping.

Applied to files:

  • apps/web/src/routes/_view/company-handbook/-components.tsx
  • apps/web/src/routes/_view/gallery/$type.$slug.tsx
  • apps/web/src/routes/_view/roadmap/$slug.tsx
  • apps/web/src/routes/_view/shortcuts/index.tsx
  • apps/web/src/routes/_view/roadmap/index.tsx
  • apps/web/src/routes/_view/templates/index.tsx
📚 Learning: 2025-11-24T16:32:19.706Z
Learnt from: CR
Repo: fastrepl/hyprnote PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-24T16:32:19.706Z
Learning: Applies to **/*.{ts,tsx} : Use `motion/react` instead of `framer-motion`.

Applied to files:

  • apps/web/src/routes/_view/roadmap/$slug.tsx
  • apps/web/src/routes/_view/shortcuts/index.tsx
  • apps/web/src/routes/_view/changelog/$slug.tsx
  • apps/web/src/routes/_view/legal/$slug.tsx
  • apps/web/src/routes/_view/templates/index.tsx
📚 Learning: 2025-11-24T16:32:29.314Z
Learnt from: CR
Repo: fastrepl/hyprnote PR: 0
File: apps/web/content/changelog/AGENTS.md:0-0
Timestamp: 2025-11-24T16:32:29.314Z
Learning: Applies to apps/web/content/changelog/** : Only keep desktop-related changes when maintaining changelog entries from commits and diffs

Applied to files:

  • apps/web/src/routes/_view/changelog/$slug.tsx
🧬 Code graph analysis (5)
apps/web/src/components/mdx/link.tsx (3)
apps/web/src/components/mdx/index.ts (1)
  • MDXLink (2-2)
apps/web/scripts/gen-agents.js (1)
  • relativePath (30-30)
apps/storybook/stories/Button.stories.tsx (1)
  • Link (51-56)
apps/web/src/routes/_view/blog/$slug.tsx (2)
apps/web/src/components/mdx/mdx-components.tsx (1)
  • createMDXComponents (24-31)
apps/web/src/components/mdx/index.ts (1)
  • createMDXComponents (3-3)
apps/web/src/routes/_view/changelog/$slug.tsx (2)
apps/web/src/components/mdx/mdx-components.tsx (1)
  • defaultMDXComponents (14-22)
apps/web/src/components/mdx/index.ts (1)
  • defaultMDXComponents (3-3)
apps/web/src/routes/_view/docs/-components.tsx (1)
apps/web/src/components/mdx/index.ts (1)
  • MDXLink (2-2)
apps/web/src/routes/_view/legal/$slug.tsx (2)
apps/web/src/components/mdx/mdx-components.tsx (1)
  • defaultMDXComponents (14-22)
apps/web/src/components/mdx/index.ts (1)
  • defaultMDXComponents (3-3)
🪛 LanguageTool
apps/web/content/articles/is-otter-ai-safe.mdx

[grammar] ~20-~20: Ensure spelling is correct
Context: ... check out:** - List of Best Otter AI Alterntives in 2025 -...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[uncategorized] ~173-~173: The operating system from Apple is written “macOS”.
Context: ...eting privacy?** Download Hyprnote for MacOS today and experience truly ...

(MAC_OS)


[style] ~173-~173: ‘in control of’ might be wordy. Consider a shorter alternative.
Context: ...rst AI transcription that puts you back in control of your conversations.

(EN_WORDINESS_PREMIUM_IN_CONTROL_OF)

apps/web/content/articles/chatgpt-for-meeting-notes.mdx

[style] ~169-~169: The phrase ‘pretty much’ can be informal. To strengthen your writing, consider removing it or replacing it with an adverb.
Context: ...stem audio and runs on Mac, but that is pretty much where the similarities end. Hyprnote, ...

(PRETTY_MUCH)


[grammar] ~170-~170: Ensure spelling is correct
Context: ...retty much where the similarities end. Hyprnote, being a [local-first AI notetaker](/pr...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

apps/web/content/articles/free-ai-notetakers.mdx

[grammar] ~26-~26: Ensure spelling is correct
Context: ...Free AI Notetakers for Meetings ### 1. Hyprnote: Best for Local Processing and Data Cont...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

apps/web/content/articles/fathom-ai-alternatives.mdx

[style] ~41-~41: Consider an alternative for the overused word “exactly”.
Context: ...co-founder of Hyprnote. But that's exactly why I built it. After seeing how every ...

(EXACTLY_PRECISELY)

apps/web/content/articles/is-ai-notetaking-legal.mdx

[uncategorized] ~181-~181: The operating system from Apple is written “macOS”.
Context: ...d customization Download Hyprnote for MacOS to experience truly secure ...

(MAC_OS)

apps/web/content/legal/dpa.mdx

[style] ~34-~34: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: ... a clear and conspicuous privacy notice prior to enabling cloud-based features, specifyi...

(EN_WORDINESS_PREMIUM_PRIOR_TO)

apps/web/content/articles/sales-ai-note-takers.mdx

[grammar] ~278-~278: Ensure spelling is correct
Context: ... today and go from there. Wish to give Hyprnote a test run? [Download it for free](...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

apps/web/content/articles/best-ai-meeting-assistant-for-taking-notes.mdx

[uncategorized] ~377-~377: The operating system from Apple is written “macOS”.
Context: ...ting started. Download Hyprnote for MacOS now and discover meeting ...

(MAC_OS)

apps/web/content/articles/bot-free-ai-meeting-assistants.mdx

[uncategorized] ~50-~50: The operating system from Apple is written “macOS”.
Context: ...ses deployment. Download Hyprnote for MacOS. <Image src="/api/images/b...

(MAC_OS)

apps/web/content/articles/how-to-transcribe-zoom-calls.mdx

[grammar] ~55-~55: Ensure spelling is correct
Context: ...te AI notetaking solution. ### What is Hyprnote? Hyprnote is a privacy-first [local AI no...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: Redirect rules - hyprnote
  • GitHub Check: Header rules - hyprnote
  • GitHub Check: Pages changed - hyprnote
  • GitHub Check: fmt
  • GitHub Check: ci
🔇 Additional comments (54)
apps/web/content/articles/chatgpt-for-meeting-notes.mdx (1)

167-167: Verify that these internal links align with the new MDXLink component infrastructure.

The PR objectives emphasize introducing a centralized MDXLink component for flexible link handling, but these changes use plain markdown link syntax ([text](path)). If the new MDXLink component is intended to manage internal routing logic, consider whether these links should use that component instead.

Can you clarify:

  1. Are plain markdown links intentional for content files, or should they use the MDXLink component?
  2. Do the referenced internal paths (/blog/bot-free-ai-meeting-assistants, /product/local-ai, /download) exist as valid routes?

Also applies to: 171-171, 193-193

apps/web/content/articles/plaud-ai-alternatives.mdx (4)

49-49: Verify that the root path / is semantically correct for Hyprnote.

The link was changed from an external URL to the root path /. Ensure this destination aligns with the context—readers should land on the Hyprnote product page or homepage, not a different section. If the previous external URL pointed to a specific landing page, consider whether / or a more specific route (e.g., /product or /hyprnote) would be more appropriate.


96-96: Confirm /founders route exists and is the correct sales contact page.

The "Contact sales" link now targets /founders. Verify this route exists and that it's the intended contact page for enterprise pricing inquiries. If this was previously a dedicated "contact sales" or "pricing" page, ensure the content and flow are preserved.


385-385: Verify /download route serves macOS download content.

The download link now targets /download. Ensure this route provides macOS downloads directly and doesn't require additional navigation or platform selection steps. Consider whether this should link to a dedicated macOS download page (e.g., /download/macos) to avoid user confusion if multiple platforms are supported.


49-49: Consider aligning markdown links with new MDXLink component infrastructure.

Per the PR objectives, an MDXLink component was introduced to centralize link handling in MDX content. However, these links remain in standard markdown format [text](url). If MDXLink is intended to replace direct markdown links for centralized control and intelligent routing, consider whether these should be converted to use the new component. This would ensure consistency across the codebase and enable future link behavior customization from a single location.

To verify if this is necessary, check:

  • How other article files in this PR use links (markdown vs. MDXLink)
  • Whether the MDXLink component is meant to wrap all user-facing links
  • If there's a documented pattern for when to use markdown links vs. MDXLink

Also applies to: 96-96, 385-385

apps/web/content/articles/how-to-transcribe-zoom-calls.mdx (4)

26-26: All URL conversions to relative paths are correct and consistent with PR objectives.

The changes successfully convert absolute external URLs to root-relative internal paths across all link targets. This aligns well with the centralized MDX component mappings infrastructure.

Also applies to: 53-53, 57-57, 74-74, 133-133, 177-177


62-62: New feature bullet is well-integrated.

The addition of "Universal compatibility: Works with all meeting platforms without requiring bots" fits naturally within the feature list and reinforces the product differentiation without disrupting the content flow.


55-57: Verify link text appropriateness.

Line 57 changes the link target to /product/local-ai with text "local AI notepad for meetings". Ensure this product path exists and the link text accurately describes the target page. If this is a new product route, confirm the navigation structure supports it.


74-74: Consider link text clarity for root path.

Line 74 changes "hyprnote.com" — using just "/" as the target. While correct as a root-relative path, confirm that the link text "hyprnote.com" properly signals to users that it navigates to the homepage. If the intent is to keep the domain-like appearance for branding, this is fine, but if users expect it to link to hyprnote.com externally, this may cause confusion.

apps/web/content/articles/open-source-meeting-transcription-software.mdx (2)

34-34: Verify internal route / exists and works with new MDXLink component.

The external URL has been converted to a relative root path. Ensure the home route is accessible and the new MDXLink component infrastructure correctly renders this link.


165-165: Verify internal route /download exists and works with new MDXLink component.

The external URL has been converted to a relative path. Confirm the download route exists and is properly handled by the new MDXLink component.

apps/web/content/articles/granola-ai-alternatives.mdx (2)

65-65: Clarify mixed link pattern intentionality.

Line 65 uses two different link formats: [Hyprnote](/) (root-relative) and [local AI meeting assistant](/product/local-ai) (path-relative). Confirm this inconsistency is intentional—typically internal links should follow a consistent pattern (all root-relative or all scoped).

If unintentional, align both to the same pattern:

-[Hyprnote](/) is the only open-source, truly [local AI meeting assistant](/product/local-ai)
+[Hyprnote](/home) is the only open-source, truly [local AI meeting assistant](/product/local-ai)

Or:

-[Hyprnote](/) is the only open-source, truly [local AI meeting assistant](/product/local-ai)
+[Hyprnote](/?) is the only open-source, truly [local AI meeting assistant](/product/local-ai)

14-14: All referenced internal blog routes exist and are valid.

The three internal links reference existing blog pages:

  • /blog/bot-free-ai-meeting-assistantsapps/web/content/articles/bot-free-ai-meeting-assistants.mdx
  • /blog/free-ai-notetakersapps/web/content/articles/free-ai-notetakers.mdx
  • /blog/best-ai-meeting-assistant-for-taking-notesapps/web/content/articles/best-ai-meeting-assistant-for-taking-notes.mdx

No action needed.

apps/web/content/articles/what-makes-reliable-ai-note-taker.mdx (1)

37-37: All internal links are correctly configured.

The three links have been verified against the repository structure:

  • /blog/best-ai-notetaker-for-in-person-meetingsapps/web/content/articles/best-ai-notetaker-for-in-person-meetings.mdx
  • /blog/bot-free-ai-meeting-assistantsapps/web/content/articles/bot-free-ai-meeting-assistants.mdx
  • /download → component exists and is properly configured ✓

The differences between anchor text and URL slugs (singular vs plural, "notetakers" vs "meeting-assistants") are not errors—they follow standard URL naming conventions. The articles exist and the links map correctly to their targets.

Likely an incorrect or invalid review comment.

apps/web/content/articles/free-transcription-software.mdx (2)

43-43: No issues with retained external links.

External links to third-party services (Rev, Sonix, Trint, Happy Scribe, Notta, MacWhisper, Riverside) remain as absolute URLs—this is correct and intentional, as these reference external tools rather than internal site content.

Also applies to: 49-49, 55-55, 61-61, 67-67, 145-145, 211-211, 246-246


71-71: All link conversions are correct and will resolve properly.

The target routes exist and are correctly configured:

  • /blog/* articles resolve dynamically via the $slug.tsx route using content-collections
  • /founders, /download, and / are defined routes
  • MDXLink component correctly passes relative paths to React Router's Link component for client-side resolution

No path resolution issues identified.

apps/web/content/articles/how-to-participate-in-meetings-effectively.mdx (1)

57-57: No changes needed—URL conversions are correct and properly integrated with MDXLink.

All four absolute URLs have been correctly converted to root-relative paths (/, /blog/meeting-preparation-checklist, /blog/how-to-reduce-meeting-fatigue, /download). The plain markdown link syntax automatically integrates with the new MDXLink component infrastructure because the a element is explicitly mapped to MDXLink in the default MDX components configuration. Internal paths starting with / are routed through the Link component for client-side navigation. No absolute URLs were missed in the file.

apps/web/content/articles/fathom-ai-alternatives.mdx (1)

41-41: All internal link paths are valid and correctly configured.

Verification confirms that all four link conversions to root-relative paths are properly configured:

  • Line 41: [Hyprnote](/) → Root route exists
  • Line 81: [contact sales for a quote](/founders)/founders route exists
  • Line 210: [Privacy concerns](/blog/is-fireflies-ai-safe) → Article file exists
  • Line 216: [Top Fireflies AI Alternatives](/blog/fireflies-ai-alternatives) → Article file exists

The TanStack Router setup automatically generates /blog/$slug routes from MDX filenames in apps/web/content/articles/, and all referenced articles are present.

apps/web/content/articles/best-ai-notetakers-google-meet.mdx (1)

16-16: All internal routes and blog post targets verified as existing and published. The links are correctly formatted and semantically appropriate.

Routes verified:

  • /blog/best-ai-meeting-assistant-for-taking-notes
  • /blog/fireflies-ai-alternatives
  • /blog/free-ai-notetakers
  • /blog/is-otter-ai-safe
  • /product/local-ai
  • /download
  • /founders
  • /

All referenced blog post MDX files exist in apps/web/content/articles/ with published: true flag. The dynamic blog route handler (apps/web/src/routes/_view/blog/$slug.tsx) properly resolves article slugs via the content-collections system. No issues with internal links.

apps/web/content/articles/otter-ai-alternatives.mdx (1)

37-37: Verify URL conversions are complete and target routes exist.

The five Markdown link conversions from absolute to relative paths appear structurally sound. Confirm these critical items before merging:

  1. No remaining absolute URLs: Scan the file for any unconverted https://hyprnote.com/ URLs.
  2. Target routes are defined: Verify these routes exist in your app:
    • /blog/best-ai-meeting-assistant-for-taking-notes
    • /blog/is-otter-ai-safe
    • /blog/bot-free-ai-meeting-assistants
    • /product/local-ai
    • /download
  3. MDX component integration: Confirm mdx-components.tsx registers a custom a component (such as the new MDXLink). Markdown links in MDX automatically map to <a> elements—without a custom mapping, internal links won't have Next.js link behavior (preloading, client-side navigation).
apps/web/content/articles/local-ai-privacy-tools.mdx (1)

64-64: Link update to internal root path looks good.

The Hyprnote homepage link has been correctly updated to the root path, maintaining consistency with the internal routing pattern across the PR.

apps/web/content/articles/fireflies-ai-alternatives.mdx (1)

449-449: Download link properly updated to internal route.

The macOS download link correctly uses the /download path, consistent with the internal routing pattern throughout the PR.

apps/web/content/articles/can-you-transcribe-meetings-without-sending-data-to-cloud.mdx (1)

40-40: Internal route links correctly implemented.

Both the product-specific route (/product/local-ai) and contact route (/founders) follow the established internal routing patterns across the PR.

Also applies to: 111-111

apps/web/content/articles/see-zoom-meeting-history.mdx (1)

71-71: Blog and utility links follow established routing patterns.

The blog reference (/blog/best-ai-notetaker-for-zoom), homepage link (/), and download route (/download) are all consistent with the internal navigation structure defined throughout the PR.

Also applies to: 79-79, 166-166

apps/web/content/articles/zoom-ai-companion-review.mdx (1)

100-100: Blog article links consistently updated.

Both blog references use the /blog/[article-slug] pattern with descriptive URLs, maintaining internal routing consistency.

Also applies to: 133-133

apps/web/content/articles/best-ai-notetaker-for-zoom.mdx (1)

23-23: Comprehensive internal link routing implemented correctly.

This file contains extensive link rewrites across all internal route patterns (blog articles, product pages, contact, download), all properly formatted and consistent with the PR routing strategy.

Also applies to: 48-48, 69-69, 84-84, 126-126, 283-283, 432-432, 193-193

apps/web/content/articles/meeting-preparation-checklist.mdx (1)

13-13: Meeting prep article links properly updated.

Both the blog reference (/blog/how-to-reduce-meeting-fatigue) and homepage download link (/) follow the established routing patterns.

Also applies to: 173-173

apps/web/content/articles/is-otter-ai-safe.mdx (1)

20-20: Internal routing links follow established patterns.

The URL rewrites in this file (blog article links, product link, and download link) all properly use the internal routing scheme established throughout the PR.

Also applies to: 21-21, 157-157, 159-159, 173-173

apps/web/content/articles/sales-ai-note-takers.mdx (1)

76-76: Internal link normalization looks good

All updated links now use root-relative paths (/, /blog/..., /download) and align with the MDX/MDXLink routing approach. I don’t see any navigation or content issues here.

Also applies to: 166-166, 213-213, 278-278

apps/web/content/articles/enterprise-ai-notetaking-tools.mdx (1)

44-44: Hyprnote and Contact links updated consistently

The Hyprnote and “Contact sales” links now point to internal routes (/, /founders) and are consistent with other CTAs across the site. No further changes needed.

Also applies to: 60-60, 252-252

apps/web/src/routes/_view/shortcuts/$slug.tsx (1)

9-9: Using MDXLink for shortcut anchors is consistent with the new MDX setup

Importing MDXLink and passing components={{ a: MDXLink }} to MDXContent correctly ensures shortcut MDX links go through the centralized link component, matching the new MDXLink infrastructure.

If any shortcut MDX documents later introduce custom components (e.g., Mermaid, Tweet, etc.), you’ll want to extend this components map accordingly so they render as intended.

Also applies to: 159-160

apps/web/src/routes/_view/templates/index.tsx (1)

10-10: LGTM: Clean import addition.

The MDXLink import follows the established pattern across the codebase.

apps/web/src/routes/_view/roadmap/index.tsx (1)

9-10: LGTM: Import follows established pattern.

The MDXLink import and formatting are consistent with the broader PR changes.

apps/web/src/routes/_view/legal/$slug.tsx (1)

5-5: LGTM: Excellent use of centralized MDX components.

This refactor demonstrates the PR's goal perfectly—replacing custom inline component mappings with the centralized defaultMDXComponents. Clean and maintainable.

Also applies to: 58-58

apps/web/src/routes/_view/docs/-components.tsx (1)

21-21: LGTM: Clean integration with existing comprehensive components.

Adding MDXLink to the docs' already-comprehensive component mapping is the right approach. The docs require rich component support beyond what defaultMDXComponents provides.

Also applies to: 112-112

apps/web/src/routes/_view/gallery/$type.$slug.tsx (1)

9-9: LGTM: Import consistent with PR pattern.

The MDXLink import follows the established pattern across all updated routes.

apps/web/src/routes/_view/shortcuts/index.tsx (1)

10-10: LGTM: Import follows established pattern.

The MDXLink import is consistent with the broader PR changes.

apps/web/content/articles/ai-meeting-summary-tools.mdx (1)

448-448: Verify the download link target path.

The link text says "Download Hyprnote for macOS" but the href is "/", which points to the homepage. Confirm whether this should link to a dedicated download page (e.g., "/download") or whether the homepage is the intended destination.

apps/web/content/articles/is-fireflies-ai-safe.mdx (1)

146-148: Verify internal route paths exist.

The external URLs have been converted to internal paths. Ensure these routes are properly configured in the routing structure:

  • /product/local-ai
  • /blog/fireflies-ai-alternatives
  • /privacy-policy

Run verification to confirm these routes are defined in your TanStack Router configuration and that corresponding MDX files or page components exist for each path.

apps/web/content/articles/meeting-minutes-software.mdx (1)

14-14: LGTM! Internal link routing is correct.

The conversion of external URLs to root-relative internal paths aligns with the PR's objective to centralize MDX link handling and simplify routing.

Also applies to: 54-54, 330-330, 350-350

apps/web/content/articles/how-to-reduce-meeting-fatigue.mdx (1)

56-56: LGTM! Internal routing updates are consistent.

Also applies to: 148-148

apps/web/content/articles/best-ai-notetaker-for-in-person-meetings.mdx (1)

47-47: LGTM! Internal link updates are consistent.

Also applies to: 61-61, 76-76

apps/web/src/components/mdx/index.ts (1)

2-3: LGTM! Exports are clean and support centralization.

apps/web/content/articles/best-ai-notetaker-for-microsoft-teams.mdx (1)

12-12: LGTM! Internal link routing is consistent across the article.

Also applies to: 124-124, 168-168, 172-172, 188-188, 206-206, 257-257, 308-308, 362-362

apps/web/src/routes/_view/changelog/$slug.tsx (1)

29-29: LGTM! This demonstrates the correct centralized approach.

This file properly uses defaultMDXComponents for a consistent, maintainable MDX component mapping. This pattern should be applied to other routes (like templates/$slug.tsx and roadmap/$slug.tsx) for consistency.

Also applies to: 578-578

apps/web/content/articles/free-ai-notetakers.mdx (1)

22-22: LGTM! Link updates align with MDX centralization.

The conversion from absolute URLs to relative internal paths is consistent and correct. These paths will be properly handled by the new MDXLink component.

Also applies to: 28-28, 46-46, 154-154, 193-193, 227-227, 332-332

apps/web/src/components/hooks-list.tsx (1)

4-4: LGTM! MDXLink integration is correct.

The component properly imports and wires MDXLink to handle anchor tags in MDX content.

Also applies to: 73-73

apps/web/content/articles/best-ai-meeting-assistant-for-taking-notes.mdx (1)

7-7: LGTM! Link updates are consistent and correct.

All conversions from absolute to relative paths align with the MDX centralization goal.

Also applies to: 58-58, 62-62, 107-107, 129-129, 142-142, 164-164, 191-191, 239-239, 377-377

apps/web/src/components/mdx/mdx-components.tsx (2)

10-12: Type definition is appropriate for shared MDX configuration.

The MDXComponents type using ComponentType<any> is acceptable here since MDX components have varying prop signatures. As per coding guidelines, creating this type is appropriate since it's shared across multiple files.


24-31: Factory pattern is clean and extensible.

The createMDXComponents function properly merges custom components with defaults. The implementation is correct.

apps/web/content/articles/bot-free-ai-meeting-assistants.mdx (2)

7-7: Good catch! Fixed duplicate path segments.

These changes correct actual bugs where /api/images/ was duplicated in the paths.

Also applies to: 52-52


33-33: Link updates are correct.

All conversions to internal paths align with the MDX centralization objective.

Also applies to: 42-42, 50-50

apps/web/src/routes/_view/blog/$slug.tsx (1)

12-12: LGTM! Factory-based approach improves maintainability.

The migration to createMDXComponents centralizes the MDX component configuration while allowing custom components like CtaCard. This approach automatically includes MDXLink for anchor handling and aligns with the PR's centralization objective.

Also applies to: 157-157

apps/web/src/components/mdx/link.tsx (1)

33-39: Verify router Link behavior with dot-relative paths.

The component treats paths starting with . as internal and passes them to the router Link. However, Tanstack Router's Link component typically expects absolute paths (starting with /).

Verify that relative paths like ./sibling or ../parent work correctly with the router, or consider normalizing these paths before passing to Link.

The best part? Our platform is completely free with unlimited AI summaries, fully open source for complete transparency, and our team is just getting started.

[**Download Hyprnote for MacOS**](https://hyprnote.com/download) now and discover meeting intelligence that doesn't make you choose between performance and privacy.
[**Download Hyprnote for MacOS**](/download) now and discover meeting intelligence that doesn't make you choose between performance and privacy.
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 | 🟡 Minor

Fix macOS spelling.

The operating system from Apple is officially spelled "macOS", not "MacOS".

Apply this diff:

-[**Download Hyprnote for MacOS**](/download) now and discover meeting intelligence that doesn't make you choose between performance and privacy.
+[**Download Hyprnote for macOS**](/download) now and discover meeting intelligence that doesn't make you choose between performance and privacy.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
[**Download Hyprnote for MacOS**](/download) now and discover meeting intelligence that doesn't make you choose between performance and privacy.
[**Download Hyprnote for macOS**](/download) now and discover meeting intelligence that doesn't make you choose between performance and privacy.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~377-~377: The operating system from Apple is written “macOS”.
Context: ...ting started. Download Hyprnote for MacOS now and discover meeting ...

(MAC_OS)

🤖 Prompt for AI Agents
In apps/web/content/articles/best-ai-meeting-assistant-for-taking-notes.mdx
around line 377, the text uses the incorrect capitalization "MacOS"; update the
string to the correct Apple branding "macOS" (e.g., change "[**Download Hyprnote
for MacOS**](/download)" to "[**Download Hyprnote for macOS**](/download)") and
verify there are no other occurrences of "MacOS" in the file to correct.

**Pricing:** Free plan with unlimited AI summaries. Pro at $8/month. Enterprise with custom pricing for consent management and on-premises deployment.

[Download Hyprnote for MacOS](https://hyprnote.com/download).
[Download Hyprnote for MacOS](/download).
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 | 🟡 Minor

Fix macOS spelling.

The operating system from Apple is officially spelled "macOS", not "MacOS".

Apply this diff:

-[Download Hyprnote for MacOS](/download).
+[Download Hyprnote for macOS](/download).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
[Download Hyprnote for MacOS](/download).
[Download Hyprnote for macOS](/download).
🧰 Tools
🪛 LanguageTool

[uncategorized] ~50-~50: The operating system from Apple is written “macOS”.
Context: ...ses deployment. Download Hyprnote for MacOS. <Image src="/api/images/b...

(MAC_OS)

🤖 Prompt for AI Agents
In apps/web/content/articles/bot-free-ai-meeting-assistants.mdx around line 50,
the text uses the incorrect capitalization "MacOS"; change it to the official
Apple spelling "macOS" so the link reads "[Download Hyprnote for
macOS](/download)." and update any other occurrences in the same file to match.

## Can Google Gemini Take Meeting Notes?

Gemini itself, the AI assistant you're familiar with, doesn't join your meetings like other [AI notetakers](https://hyprnote.com/blog/best-ai-meeting-assistant-for-taking-notes). There's no "Gemini bot" that automatically hops into your Zoom calls or Teams meetings.
Gemini itself, the AI assistant you're familiar with, doesn't join your meetings like other [AI notetakers](/blog/best-ai-meeting-assistant-for-taking-notes). There's no "Gemini bot" that automatically hops into your Zoom calls or Teams meetings.
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 | 🟡 Minor

Links look good; fix minor “ot” typo

The new root-relative links for AI notetaker articles, Local AI, download CTA, and the free-AI-note-taker article all look correct and consistent.

There’s a small typo in this section:

  • “keeps your data where ot belongs (with you!)” → should be “where it belongs”.
- But, if I have to single out one platform that works well universally, is free, and keeps your data where ot belongs (with you!), then Hyprnote would be my recommendation.
+ But, if I have to single out one platform that works well universally, is free, and keeps your data where it belongs (with you!), then Hyprnote would be my recommendation.

Also applies to: 100-103, 108-114, 128-128, 156-157

🤖 Prompt for AI Agents
In apps/web/content/articles/google-gemini-meeting-notes.mdx around lines 14
(also apply same fix to lines 100-103, 108-114, 128, and 156-157), fix the typo
"ot" to "it" in the phrase "keeps your data where ot belongs (with you!)" so it
reads "keeps your data where it belongs (with you!)"; update each occurrence
exactly and run a quick spellcheck to ensure no other instances remain.

Your brain should be doing what it does best: connecting with people, identifying what they need, helping them grow. Not trying to be a human database of scattered conversations.

[Download Hyprnote free](https://hyprnote.com) and run one-on-ones that actually develop your team without burning you out.
[Download Hyprnote free](/) and run one-on-ones that actually develop your team without burning you out.
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 | 🟡 Minor

Consider pointing the download CTA directly to /download

The CTA text is “Download Hyprnote free”, but the link now points to the site root (/). For consistency with other articles and a more direct UX, it may be clearer to send users straight to the download page:

-[Download Hyprnote free](/) and run one-on-ones that actually develop your team without burning you out.
+[Download Hyprnote free](/download) and run one-on-ones that actually develop your team without burning you out.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
[Download Hyprnote free](/) and run one-on-ones that actually develop your team without burning you out.
[Download Hyprnote free](/download) and run one-on-ones that actually develop your team without burning you out.
🤖 Prompt for AI Agents
In apps/web/content/articles/how-to-have-productive-one-on-one-meetings.mdx
around line 209, the CTA link text "Download Hyprnote free" currently points to
the site root (/) instead of the download page; update the href to point to
/download so the CTA sends users directly to the download page to match other
articles and improve UX.

- **Safer choice:** Cloud-based tools demand heavy due diligence, while local-first solutions (like Hyprnote) minimize compliance risks since no data leaves your device.

👉 **Bottom line:** Get consent, vet your vendor, protect confidentiality, and if compliance is key, use a [local-first AI notetaker](https://hyprnote.com/product/local-ai).
👉 **Bottom line:** Get consent, vet your vendor, protect confidentiality, and if compliance is key, use a [local-first AI notetaker](/product/local-ai).
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 | 🟡 Minor

Internal links OK; align OS name with “macOS” styling

The new root-relative links (/product/local-ai, /blog/is-otter-ai-safe, /download) look correct and match the rest of the site.

Minor copy nit on the OS name in the CTA:

-[Download Hyprnote for MacOS](/download) to experience truly secure AI note-taking.
+[Download Hyprnote for macOS](/download) to experience truly secure AI note-taking.

Also applies to: 40-40, 155-155, 181-181

🤖 Prompt for AI Agents
In apps/web/content/articles/is-ai-notetaking-legal.mdx at lines 22, 40, 155,
and 181, update any occurrences of the OS name to use the site's macOS styling
(i.e., "macOS") for consistency; locate the CTA and any mentions of the OS and
replace variants like "MacOS", "Mac OS", or "mac os" with the correct "macOS",
verify capitalization and punctuation match site conventions, and run a quick
search in this file to ensure no other variants remain.


- [List of Best Otter AI Alterntives in 2025](https://hyprnote.com/blog/otter-ai-alternatives)
- [List of Bot-free AI meeting Assistants](https://hyprnote.com/blog/bot-free-ai-meeting-assistants)
- [List of Best Otter AI Alterntives in 2025](/blog/otter-ai-alternatives)
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 | 🟡 Minor

Fix spelling error in link text.

Line 20 contains a typo: "Alterntives" should be "Alternatives".

- - [List of Best Otter AI Alterntives in 2025](/blog/otter-ai-alternatives)
+ - [List of Best Otter AI Alternatives in 2025](/blog/otter-ai-alternatives)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- [List of Best Otter AI Alterntives in 2025](/blog/otter-ai-alternatives)
- [List of Best Otter AI Alternatives in 2025](/blog/otter-ai-alternatives)
🧰 Tools
🪛 LanguageTool

[grammar] ~20-~20: Ensure spelling is correct
Context: ... check out:** - List of Best Otter AI Alterntives in 2025 -...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
In apps/web/content/articles/is-otter-ai-safe.mdx around line 20, the link text
contains a typo "Alterntives"; update the anchor text to "Alternatives" so it
reads "[List of Best Otter AI Alternatives in
2025](/blog/otter-ai-alternatives)". Ensure only the visible text is corrected
and the URL remains unchanged.

This approach makes it easier to fulfill data subject rights, maintain audit trails, and enforce access controls without relying on external processors.

**Ready to take control of your meeting privacy?** [Download Hyprnote for MacOS](https://hyprnote.com/download) today and experience truly private, local-first AI transcription that puts you back in control of your conversations.
**Ready to take control of your meeting privacy?** [Download Hyprnote for MacOS](/download) today and experience truly private, local-first AI transcription that puts you back in control of your conversations.
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 | 🟡 Minor

Correct capitalization of macOS and optionally refine wording.

Line 173 has two minor style issues:

  1. "MacOS" should be capitalized as "macOS" per Apple's official style guide
  2. The phrase "in control of your conversations" is slightly wordy (optional improvement)
- [Download Hyprnote for MacOS](/download) today and experience truly private, local-first AI transcription that puts you back in control of your conversations.
+ [Download Hyprnote for macOS](/download) today and experience truly private, local-first AI transcription that gives you complete control of your conversations.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
**Ready to take control of your meeting privacy?** [Download Hyprnote for MacOS](/download) today and experience truly private, local-first AI transcription that puts you back in control of your conversations.
**Ready to take control of your meeting privacy?** [Download Hyprnote for macOS](/download) today and experience truly private, local-first AI transcription that gives you complete control of your conversations.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~173-~173: The operating system from Apple is written “macOS”.
Context: ...eting privacy?** Download Hyprnote for MacOS today and experience truly ...

(MAC_OS)


[style] ~173-~173: ‘in control of’ might be wordy. Consider a shorter alternative.
Context: ...rst AI transcription that puts you back in control of your conversations.

(EN_WORDINESS_PREMIUM_IN_CONTROL_OF)

🤖 Prompt for AI Agents
In apps/web/content/articles/is-otter-ai-safe.mdx around line 173, change the
product platform capitalization from "MacOS" to "macOS" and optionally tighten
the wording by replacing "in control of your conversations" with a more concise
phrase like "in control of your meetings" or "in control of your meeting audio";
update the sentence so it reads e.g. "**Ready to take control of your meeting
privacy?** [Download Hyprnote for macOS](/download) today and experience truly
private, local-first AI transcription that puts you back in control of your
meetings."

- **Customer Obligations**: You warrant that:
- You have obtained explicit, informed consent from data subjects for recording and cloud processing, as required by law (e.g., GDPR Art. 6, one-party/all-party consent laws).
- You must provide data subjects with a clear and conspicuous privacy notice prior to enabling cloud-based features, specifying the types of personal data processed, the purpose (e.g., AI transcription), and the involvement of sub-processors, as outlined in our Privacy Policy at https://hyprnote.com/privacy-policy.
- You must provide data subjects with a clear and conspicuous privacy notice prior to enabling cloud-based features, specifying the types of personal data processed, the purpose (e.g., AI transcription), and the involvement of sub-processors, as outlined in our Privacy Policy at /privacy-policy.
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:

# Search for privacy-policy route/page definition
fd -type f -e "tsx" -e "ts" -e "jsx" -e "js" -e "mdx" "privacy-policy" apps/web

Repository: fastrepl/hyprnote

Length of output: 231


🏁 Script executed:

# Check for page/route structure in apps/web
fd -type f \( -name "*.tsx" -o -name "*.ts" -o -name "*.mdx" \) apps/web | grep -i "privacy\|route" | head -20

Repository: fastrepl/hyprnote

Length of output: 231


🏁 Script executed:

# Look for route configuration or pages directory
fd -type d -name "pages" apps/web
fd -type d -name "app" apps/web

Repository: fastrepl/hyprnote

Length of output: 402


🏁 Script executed:

# Search for privacy-policy mentions in the codebase to understand URL patterns
rg "privacy-policy" apps/web --type mdx --type ts --type tsx -l

Repository: fastrepl/hyprnote

Length of output: 88


🏁 Script executed:

# Search for privacy-policy in apps/web directory
find apps/web -type f -name "*privacy*"

Repository: fastrepl/hyprnote

Length of output: 188


🏁 Script executed:

# Search for privacy-policy references in source files
rg "privacy-policy" apps/web --glob "*.ts" --glob "*.tsx" --glob "*.js" --glob "*.jsx" --glob "*.mdx" -l

Repository: fastrepl/hyprnote

Length of output: 241


🏁 Script executed:

# Check directory structure of apps/web
ls -la apps/web/ | head -20

Repository: fastrepl/hyprnote

Length of output: 1116


🏁 Script executed:

# Look for app or pages directories
find apps/web -type d \( -name "pages" -o -name "app" -o -name "routes" \) -o -name "*privacy*"

Repository: fastrepl/hyprnote

Length of output: 238


🏁 Script executed:

# Check content-collections.ts for how content is routed
cat apps/web/content-collections.ts

Repository: fastrepl/hyprnote

Length of output: 13477


🏁 Script executed:

# Search for privacy-policy route or how legal content is accessed
rg "privacy-policy\|privacy" apps/web/src/routes -A 2 -B 2

Repository: fastrepl/hyprnote

Length of output: 43


🏁 Script executed:

# Check what URL patterns are used for legal content
rg "legal\|dpa\|privacy" apps/web/src -l

Repository: fastrepl/hyprnote

Length of output: 43


🏁 Script executed:

# Search for how legal content routes are accessed
rg "legal" apps/web/src/routes -A 3 -B 3

Repository: fastrepl/hyprnote

Length of output: 10213


🏁 Script executed:

# Look for route files that might handle privacy or legal content
find apps/web/src/routes -type f -name "*.ts" -o -name "*.tsx"

Repository: fastrepl/hyprnote

Length of output: 3688


🏁 Script executed:

# Search for privacy-policy specifically in routes
rg "/privacy-policy\|privacy-policy" apps/web/src

Repository: fastrepl/hyprnote

Length of output: 43


🏁 Script executed:

# Double-check the actual privacy.mdx file exists and verify its slug
cat apps/web/content/legal/privacy.mdx | head -10

Repository: fastrepl/hyprnote

Length of output: 397


🏁 Script executed:

# Check if there's any redirect or alias for /privacy-policy
rg "privacy-policy|/privacy" apps/web/src/routes -l

Repository: fastrepl/hyprnote

Length of output: 89


Fix the incorrect relative path and simplify wording on line 34.

The relative path /privacy-policy does not exist. Based on the application routing, the correct path is /legal/privacy. Additionally, simplify "prior to enabling" to "before enabling".

Apply this diff:

-  - You must provide data subjects with a clear and conspicuous privacy notice prior to enabling cloud-based features, specifying the types of personal data processed, the purpose (e.g., AI transcription), and the involvement of sub-processors, as outlined in our Privacy Policy at /privacy-policy.
+  - You must provide data subjects with a clear and conspicuous privacy notice before enabling cloud-based features, specifying the types of personal data processed, the purpose (e.g., AI transcription), and the involvement of sub-processors, as outlined in our Privacy Policy at /legal/privacy.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- You must provide data subjects with a clear and conspicuous privacy notice prior to enabling cloud-based features, specifying the types of personal data processed, the purpose (e.g., AI transcription), and the involvement of sub-processors, as outlined in our Privacy Policy at /privacy-policy.
- You must provide data subjects with a clear and conspicuous privacy notice before enabling cloud-based features, specifying the types of personal data processed, the purpose (e.g., AI transcription), and the involvement of sub-processors, as outlined in our Privacy Policy at /legal/privacy.
🧰 Tools
🪛 LanguageTool

[style] ~34-~34: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: ... a clear and conspicuous privacy notice prior to enabling cloud-based features, specifyi...

(EN_WORDINESS_PREMIUM_PRIOR_TO)

🤖 Prompt for AI Agents
In apps/web/content/legal/dpa.mdx around line 34, update the sentence to use the
correct route and simplified wording: change the incorrect relative path
"/privacy-policy" to "/legal/privacy" and replace "prior to enabling" with
"before enabling" so the line reads with the correct path and simpler phrasing.

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.

2 participants