Skip to content

Add recent feature blog posts - #4540

Merged
lawrencecchen merged 9 commits into
mainfrom
task-blog-posts-passkeys-task-manager-session-restore
May 22, 2026
Merged

lawrencecchen merged 9 commits into
mainfrom
task-blog-posts-passkeys-task-manager-session-restore

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented May 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds recent cmux feature blog posts and demo media:

  • Passkey auth and browser cookie import
  • Task Manager and cmux top
  • Session restore SEO updates for Claude Code, Codex, OpenCode, Gemini CLI, Antigravity CLI, Grok Build CLI, and related agents
  • cmux Finder
  • cmux Vault
  • Markdown viewer improvements with credit to @tobi
  • Unread workspace shortcuts

Also registers the new blog routes in the blog index, sitemap, and agent-readable page list, with locale keys present across all supported message files.

Verification

  • bun tsc --noEmit
  • bun run build with local cmux web env defaults loaded

Docs/web only. No tagged app reload needed.


Note

Low Risk
Low risk content/SEO update: adds new localized blog pages and adjusts routing lists (blog index, sitemap, agent-readable pages) without changing application logic beyond navigation/metadata.

Overview
Adds six new localized feature blog posts (Finder, Vault, passkey auth, task manager, markdown viewer, unread shortcuts) with per-post generateMetadata including keywords/OpenGraph/Twitter and embedded demo videos/code snippets.

Refactors the blog index to render from a centralized blogPosts list, and registers the new routes across SEO surfaces (sitemap.ts, agentReadablePages) while updating session-restore post metadata/keywords and docs copy for additional supported agents and hook setup.

Reviewed by Cursor Bugbot for commit 790f31f. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features

    • Added six new blog posts (Passkey Authentication, Task Manager, Cmux Finder, Cmux Vault, Markdown Viewer, Unread Shortcuts) and updated the blog index to list them.
  • Documentation

    • Expanded Session Restore docs with new agent resume commands, added supported-agent rows, and extra feed/hook setup guidance.
  • Localization

    • Added/updated translations for all new posts and expanded session-restore copy across many locales.
  • SEO & Metadata

    • Added localized meta titles/descriptions/keywords and updated sitemap entries for the new routes.

Review Change Stack

@vercel

vercel Bot commented May 22, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment May 22, 2026 11:14am
cmux-staging Building Building Preview, Comment May 22, 2026 11:14am

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@coderabbitai

coderabbitai Bot commented May 22, 2026 •

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Adds multiple new localized blog pages and post entries, centralizes blog post data for index rendering, extends session-restore docs with hook commands and new agent rows, updates agent discovery and sitemap, and adds translation strings across many locales.

Changes

Blog Expansion & Content Updates

Layer / File(s) Summary
Blog data model and index refactoring
web/app/[locale]/components/blog-posts.ts, web/app/[locale]/blog/page.tsx
Introduces blogPosts collection containing slug, key, title, date, and summary for blog posts. Blog index page refactored to render posts from this collection using post.slug for URLs and post.key for localized translation lookups.
Passkey authentication blog post
web/app/[locale]/blog/passkey-auth/page.tsx
New blog post page exporting generateMetadata that builds localized SEO metadata (title, description, keywords, Open Graph, Twitter card, alternates) and PasskeyAuthPage component rendering translated content, back link, fixed date, video, and a bash code block for cmux browser import.
Task manager blog post
web/app/[locale]/blog/task-manager/page.tsx
New blog post page exporting generateMetadata that builds localized SEO metadata (title, description, keywords, OpenGraph, Twitter card, alternates) and TaskManagerPage component rendering translated content, back link, fixed date, and a bash code block for cmux top.
Cmux Finder / Vault / Markdown Viewer / Unread Shortcuts pages
web/app/[locale]/blog/cmux-finder/page.tsx, web/app/[locale]/blog/cmux-vault/page.tsx, web/app/[locale]/blog/markdown-viewer/page.tsx, web/app/[locale]/blog/unread-shortcuts/page.tsx
Adds four additional localized blog pages, each exporting generateMetadata and rendering localized title/date, videos, and multiple translated paragraphs (some include code/rich links).
Session restore blog and docs updates
web/app/[locale]/blog/session-restore/page.tsx, web/app/[locale]/docs/session-restore/page.tsx
Session restore blog post updated to derive keywords from translations and include an additional SEO paragraph. Session restore docs page extended with grok/antigravity hook setup commands and three new supported agent table rows: Grok, Antigravity CLI, and Hermes Agent, each with resume commands and feed-related translation keys.
Content translations and metadata strings
web/messages/*
Adds translation entries for new passkeyAuth, taskManager, cmuxFinder, cmuxVault, markdownViewer, unreadShortcuts posts across locales, expands sessionRestore content and metadata (seoP, agentP, metaKeywords), updates docs.sessionRestore.metaDescription, and introduces feedPrePostToolUse and feedHermes glossary/translation keys plus updated supportedNote references.
Routing and SEO discovery infrastructure
web/app/lib/agent-page-paths.ts, web/app/sitemap.ts
Registers new blog post routes (/blog/passkey-auth, /blog/task-manager, /blog/session-restore) in agent-readable pages list and updates sitemap with all blog routes, setting lastModified to 2026-05-22 for the main blog and new posts.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

A rabbit nibbling lines of code,
New posts and hooks along the road,
Translations sprout in every tongue,
Sitemap, pages, docs—together strung,
Hoppy merges, build well done! 🐇


Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Cmux Full Internationalization ❌ Error Four new user-facing blog posts added to all 20 locales via next-intl but contain only English text, violating full-internationalization.md translation requirements. Translate cmuxFinder, cmuxVault, markdownViewer, unreadShortcuts content and metadata into native languages for all 20 supported locales.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (15 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Add recent feature blog posts' directly and accurately summarizes the primary change: adding new blog post pages and associated content to the website.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed PR contains no Swift changes; all modifications are TypeScript/Next.js web app files and JSON translations. Swift actor isolation check not applicable.
Cmux Swift Blocking Runtime ✅ Passed PR contains no Swift code changes—only TypeScript/TSX blog pages and JSON localization files. The Swift blocking runtime check is not applicable.
Cmux No Hacky Sleeps ✅ Passed PR introduces new blog pages with zero timing anti-patterns (sleep, setTimeout, setInterval, polling). All async/await is legitimate Next.js/i18n patterns, not timing hacks.
Cmux Swift Concurrency ✅ Passed PR contains no Swift code changes; it only modifies TypeScript/JavaScript files and JSON translation files. The Swift concurrency check is not applicable.
Cmux Swift @Concurrent ✅ Passed PR contains no Swift code changes—only TypeScript/TSX and JSON files. The @concurrent annotation rule is not applicable to web-only changes.
Cmux Swift File And Package Boundaries ✅ Passed PR contains no Swift files; all changes are web-only (TypeScript, TSX, JSON). Custom check for Swift file/package boundaries is not applicable.
Cmux Swift Logging ✅ Passed PR contains no Swift code changes; check applies only to Swift app/runtime code. All changes are TypeScript/JSON (blog pages, translations, routing metadata).
Cmux User-Facing Error Privacy ✅ Passed No actual credentials/tokens exposed. Vendor names in agent table are appropriate. Docs state sensitive keys are dropped, protecting rather than exposing secrets.
Cmux Swiftui State Layout ✅ Passed PR contains only Next.js/React/TypeScript/JSON changes; zero SwiftUI code present, making SwiftUI state layout check not applicable.
Cmux Architecture Rethink ✅ Passed This PR contains only web/TypeScript/i18n changes. The swift-architectural-rethink.md check applies only to Swift code, which is absent here.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed This PR contains only web/TypeScript/Next.js changes (tsx, ts, json files). No Swift files are modified. The custom check for Swift auxiliary window close shortcuts does not apply.
Description check ✅ Passed The pull request description comprehensively addresses the template requirements with clear sections for Summary, Verification, and Checklist completion.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task-blog-posts-passkeys-task-manager-session-restore

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@greptile-apps

greptile-apps Bot commented May 22, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds six new feature blog posts (Finder, Vault, passkey auth, task manager, markdown viewer, unread shortcuts), updates the session-restore blog and docs with new agents (Grok Build CLI, Antigravity CLI, Hermes Agent), and propagates all new copy and metadata keys across all 20 locale files.

  • The blog index is refactored to render from the centralized blogPosts array in blog-posts.ts, and new routes are registered in sitemap.ts and agentReadablePages.
  • All six new blog pages follow the established pattern: generateMetadata reads keywords from the locale file, page content renders via next-intl, and demo videos are embedded inline.
  • The session-restore blog page gains a visible SEO paragraph (seoP) listing agent names; the docs page adds Grok, Antigravity CLI, and Hermes Agent rows with new feedPrePostToolUse / feedHermes feed-label keys across every locale.

Confidence Score: 5/5

Safe to merge — purely additive docs/web content with no changes to app logic, auth, or data handling.

All six new blog pages follow the established pattern (locale-backed metadata, t() rendering, video embeds). New translation keys are present in all 20 locale files including the previously-flagged passkey/task-manager/sessionRestore additions. The sitemap, agentReadablePages, and blog index are consistent with the new routes. No runtime logic is touched.

No files require special attention.

Important Files Changed

Filename Overview
web/app/[locale]/components/blog-posts.ts Adds six new posts to the centralized blogPosts list; hardcoded English title/summary fields are not rendered in the UI (page.tsx uses t() calls) and follow the pre-existing pattern.
web/app/[locale]/blog/page.tsx Switches from a local inline array to the shared blogPosts list; rendering still uses t() for titles, dates, and summaries.
web/app/[locale]/blog/markdown-viewer/page.tsx New blog page; uses t.rich("p4") with tobiLink renderer — all locale files include the matching rich-text tag.
web/app/[locale]/blog/session-restore/page.tsx Moves keywords into the locale file (consistent with new pages) and adds a visible seoP paragraph listing agent names; intentional content strategy, keys present across all locales.
web/app/[locale]/docs/session-restore/page.tsx Adds Grok Build CLI, Antigravity CLI, and Hermes Agent rows to the supported-agents table; new feedPrePostToolUse and feedHermes keys are present in all locale files.
web/app/sitemap.ts Adds the six new blog routes and session-restore to the sitemap with correct changeFrequency and priority values.
web/app/lib/agent-page-paths.ts Registers all six new blog routes and session-restore in agentReadablePages so they appear in llms.txt and are reachable as .md/.txt agent variants.
web/messages/en.json Adds all new blog namespaces (passkeyAuth, taskManager, cmuxFinder, cmuxVault, markdownViewer, unreadShortcuts) plus expanded sessionRestore copy; feedHermes and feedPrePostToolUse keys added to docs.sessionRestore.

Reviews (6): Last reviewed commit: "Polish blog copy translations" | Re-trigger Greptile

Comment thread web/messages/en.json
coderabbitai[bot]
coderabbitai Bot previously requested changes May 22, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@web/app/`[locale]/blog/passkey-auth/page.tsx:
- Around line 17-29: The metadata `keywords` array in the passkey-auth page is
hardcoded; add a `metaKeywords` entry under `blog.passkeyAuth` in every locale
catalog (matching locales from web/i18n/routing.ts) and then replace the
hardcoded array with the localized value by calling
t.raw("blog.passkeyAuth.metaKeywords") (or t.raw("metaKeywords") if using the
same message scope) when building the page metadata in
web/app/[locale]/blog/passkey-auth/page.tsx so the keywords are localized across
all locales.

In `@web/app/`[locale]/blog/session-restore/page.tsx:
- Line 71: The page uses t("seoP") which resolves to the translation key
blog.posts.sessionRestore.seoP but that key only exists in English; add
blog.posts.sessionRestore.seoP with the appropriate translated string to every
locale JSON listed in your i18n routing configuration so t("seoP") always
resolves, updating each locale file (matching the locales referenced in your
routing config) to include the same key and translated value.

In `@web/app/`[locale]/blog/task-manager/page.tsx:
- Around line 17-27: generateMetadata currently hardcodes the English keywords
array; update it to load localized keywords from next-intl by reading the
blog.taskManager.metaKeywords message instead. Add a metaKeywords array entry
for every locale in your messages JSON under the blog.taskManager namespace
(matching other keys like metaTitle/metaDescription), then change
generateMetadata to import/use next-intl (or the existing messages loader) to
fetch messages.blog.taskManager.metaKeywords and use that array for the keywords
field (fall back to the existing hardcoded list if the message is missing).
Ensure you reference the blog.taskManager.metaKeywords key and the
generateMetadata function when making the changes.

In `@web/app/`[locale]/docs/session-restore/page.tsx:
- Around line 116-121: The two i18n keys docs.sessionRestore.feedPrePostToolUse
and docs.sessionRestore.feedHermes are only defined in web/messages/en.json and
must be added to every supported locale listed in web/i18n/routing.ts (ja,
zh-CN, zh-TW, ko, de, es, fr, it, da, pl, ru, bs, ar, no, pt-BR, th, tr, km,
uk); update each locale JSON (e.g., web/messages/<locale>.json) to include these
keys with appropriate translations or, if translations aren’t available yet, add
the English text as placeholders so the app doesn’t break. Ensure the keys are
placed under the same docs.sessionRestore object structure in each file to match
the existing en.json format.

In `@web/messages/en.json`:
- Around line 111-118: The new blog/docs message keys added in
web/messages/en.json (e.g., blog.passkeyAuth.*, blog.taskManager.*,
blog.posts.passkeyAuth.*, blog.posts.taskManager.*, blog.posts.sessionRestore.*,
and docs.sessionRestore.* keys like metaDescription, feedPrePostToolUse,
feedHermes, supportedNote) are only present in English; update each locale file
referenced by web/i18n/routing.ts (all 19 non-en locales) to add the same keys
with appropriate translations or placeholders so non-English pages can render;
ensure key names match exactly (blog.passkeyAuth, blog.taskManager,
blog.posts.*, docs.sessionRestore.*) across every web/messages/<locale>.json so
routing and next-intl lookups succeed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 42d6349d-ae95-4ce9-ac20-05389e80665f

📥 Commits

Reviewing files that changed from the base of the PR and between bcd630e and 1c47a1a.

📒 Files selected for processing (9)
  • web/app/[locale]/blog/page.tsx
  • web/app/[locale]/blog/passkey-auth/page.tsx
  • web/app/[locale]/blog/session-restore/page.tsx
  • web/app/[locale]/blog/task-manager/page.tsx
  • web/app/[locale]/components/blog-posts.ts
  • web/app/[locale]/docs/session-restore/page.tsx
  • web/app/lib/agent-page-paths.ts
  • web/app/sitemap.ts
  • web/messages/en.json

Comment thread web/app/[locale]/blog/passkey-auth/page.tsx Outdated
Comment thread web/app/[locale]/blog/session-restore/page.tsx
Comment thread web/app/[locale]/blog/task-manager/page.tsx Outdated
Comment thread web/app/[locale]/docs/session-restore/page.tsx
Comment thread web/messages/en.json

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

2 issues found across 9 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="web/app/[locale]/docs/session-restore/page.tsx">

<violation number="1" location="web/app/[locale]/docs/session-restore/page.tsx:120">
P2: Add `feedPrePostToolUse` translations to all locale files. The new Antigravity CLI table row references this key, but it only exists in the English locale. Non-English users will see the raw key or missing translation in the table.</violation>
</file>

<file name="web/messages/en.json">

<violation number="1" location="web/messages/en.json:111">
P1: Newly added and modified localization keys in `web/messages/en.json` are not mirrored in the other 19 locale files. Project rules require key changes to be propagated to every supported locale listed in `web/i18n/routing.ts`.

(Based on your team's feedback about locale coverage for new localization keys.) [FEEDBACK_USED]</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread web/messages/en.json
Comment thread web/app/[locale]/docs/session-restore/page.tsx
coderabbitai[bot]
coderabbitai Bot previously requested changes May 22, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 11

Caution

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

⚠️ Outside diff range comments (10)
web/messages/ja.json (1)

168-257: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Japanese blog additions are shipped as English copy.

Lines 168-257 add user-facing Japanese-locale blog text and SEO metadata in English. This is partial localization for production-facing pages.

As per coding guidelines: changed web UI/metadata/message keys must come from locale-specific content across web/messages/ and should not use copied English to satisfy locale slots.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/ja.json` around lines 168 - 257, The ja.json entries for
passkeyAuth, taskManager, and sessionRestore (including fields p1/p2/p3, seoP,
summary, agentP and the metaTitle/metaDescription/metaKeywords blocks) contain
English copy instead of Japanese; replace all English strings with proper
Japanese translations for those keys so the Japanese locale is fully localized
(do not copy English to satisfy slots), ensuring the visible blog text and SEO
metadata are translated and semantically equivalent to the original English
content.
web/messages/fr.json (1)

168-257: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Localize newly added French blog content and SEO metadata.

Lines 168-257 add French-locale user-facing copy and metadata in English (title, summary, date, paragraphs, metaTitle, metaDescription, metaKeywords). This creates partial localization for production content.

As per coding guidelines: “web UI text, metadata, route copy, or message keys must be ... represented across all locales” and “Placeholder, copied English ... must not be used to satisfy a locale slot.” Based on learnings: fr is a high-confidence locale expected to have translated copy.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/fr.json` around lines 168 - 257, The fr.json additions contain
English copy and metadata for keys passkeyAuth (title, summary, date, p1–p3,
metaTitle, metaDescription, metaKeywords), taskManager (title, summary, p1–p4,
metaTitle, metaDescription, metaKeywords) and sessionRestore (seoP, summary,
agentP, metaDescription, metaKeywords); replace these English strings with
proper French translations (including translating metaKeywords into French
terms), do not use placeholders or copied English, and ensure the date string in
passkeyAuth is localized/translated if required so the fr locale contains fully
localized user-facing copy and SEO metadata.
web/messages/it.json (1)

168-257: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Italian locale entries for new blog routes are not localized.

Lines 168-257 introduce user-facing Italian blog/body/SEO copy in English. This breaks locale completeness for a production high-confidence locale.

As per coding guidelines: user-facing web message content must be locale-specific across web/messages/, and copied English cannot be used as a locale-slot placeholder.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/it.json` around lines 168 - 257, The Italian locale entries for
the blog routes contain English copy and must be localized: replace the English
strings under the keys "passkeyAuth" (fields title, summary, p1-p3, metaTitle,
metaDescription, metaKeywords), "taskManager" (title, summary, p1-p4, date,
metaTitle, metaDescription, metaKeywords) and "sessionRestore" (seoP, summary,
agentP, metaDescription, metaKeywords) with proper Italian translations (or
remove these entries from this locale and put the English text into the English
locale if you can't provide translations), ensuring no user-facing English
remains in the it.json locale file and preserving the exact keys/structure so
consuming code (e.g., page renderers) continues to work.
web/messages/ko.json (1)

167-257: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Localize newly added Korean user-facing strings instead of shipping English copy.

Line 167 onward introduces English blog/doc/SEO text in web/messages/ko.json (passkeyAuth, taskManager, sessionRestore, plus docs sessionRestore additions). This will render mixed-language UX and breaks locale completeness for Korean.

As per coding guidelines: “Placeholder, copied English, machine marker, TODO, or empty translations must not be used to satisfy a locale slot.”

Also applies to: 832-832, 858-858, 870-872

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/ko.json` around lines 167 - 257, The Korean locale file
web/messages/ko.json contains untranslated English strings for the keys
passkeyAuth, taskManager, and sessionRestore (including their p1/p2/p3,
metaTitle, metaDescription, metaKeywords, seoP, summary, and agentP fields);
replace these English entries with proper Korean translations (no placeholders
or TODOs), ensure metaKeywords are localized or omitted if not applicable, and
also fix the other referenced untranslated entries around lines mentioned (near
keys at 832, 858, 870–872) so the ko.json contains complete, natural Korean copy
throughout.
web/messages/no.json (1)

167-257: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Translate the new Norwegian locale entries instead of leaving English fallback text.

The newly added no.json values for blog content/SEO and docs session-restore copy are English (Line 167-257, Line 832, Line 858, Line 870-872). This creates partial localization in production.

As per coding guidelines: “Web UI text, API response copy, user-facing web data, metadata, route copy… must be … represented across all locales in web/messages/.”

Also applies to: 832-832, 858-858, 870-872

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/no.json` around lines 167 - 257, The new Norwegian locale file
left several entries in English — translate the blog/content and SEO strings
under the keys "passkeyAuth", "taskManager", and "sessionRestore" (including
p1/p2/p3, title, summary, metaTitle, metaDescription, metaKeywords and
seoP/agentP) into proper Norwegian, replacing the English fallback text so all
user-facing copy and metadata in no.json is fully localized; keep the original
key names and structure intact and ensure keywords are idiomatic Norwegian where
applicable.
web/messages/zh-TW.json (2)

832-858: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

zh-TW session-restore metadata/support note must be localized.

Line 832 and Line 858 are English user-facing docs strings in web/messages/zh-TW.json, causing partial locale coverage.

As per coding guidelines: “For production user-facing text, fail partial localization … ensure the new/changed message keys have translations across all supported locales’ JSON files under web/messages/.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/zh-TW.json` around lines 832 - 858, The zh-TW locale contains
English user-facing strings that must be localized; locate the English keys in
web/messages/zh-TW.json (e.g., "metaDescription", "supportedNote", and any other
English phrases between the shown diff block) and replace them with proper
Traditional Chinese translations for those message values, ensuring the keys
remain unchanged; after updating, run the locale consistency check to confirm
the same message keys exist across all web/messages/* locale JSON files so there
is no partial localization.

168-257: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

New zh-TW blog and SEO keys are still in English.

Line 168–257 introduces user-facing blog content/metadata in English, which is partial localization for a high-confidence locale.

As per coding guidelines: “For production changes, fail when … user-facing data changes must read from next-intl or another locale-specific source and update every locale listed in web/i18n/routing.ts with matching web/messages/ entries.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/zh-TW.json` around lines 168 - 257, The zh-TW messages block
(keys passkeyAuth, taskManager, sessionRestore and their meta entries) contains
English user-facing blog/SEO text; replace these English strings with proper
Traditional Chinese translations or wire them to next-intl so they are loaded
from the locale-specific source, and ensure the same keys exist/are updated
across all locale files listed in web/i18n/routing.ts; specifically update the
passkeyAuth, taskManager, sessionRestore objects and their
metaTitle/metaDescription/metaKeywords to localized content and confirm every
locale in web/messages/ has matching entries.
web/messages/uk.json (1)

917-957: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Session-restore docs copy regressed to English in uk.json.

Line 917 and Line 943 are fully English, and Line 955–957 introduces mixed-language terms in production docs text. This creates partial localization for a high-confidence locale.

As per coding guidelines: “For production changes, fail … user-facing data changes … and update every locale listed in web/i18n/routing.ts with matching web/messages/ entries.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/uk.json` around lines 917 - 957, The uk.json contains
untranslated English strings (e.g., "metaDescription", "agentResumeDesc") and
mixed-language tokens (e.g., "feedHermes") that regressed localization; replace
those English texts with proper Ukrainian translations for the keys shown in the
diff (metaDescription, agentResumeDesc, and feedHermes/mixed feed keys) and
ensure any inline tokens like <configLink> remain intact; then update every
other locale listed in web/i18n/routing.ts to have matching message keys/entries
(or revert the original translations if available) so production locales stay
synchronized and run the i18n validation/lint step before committing.
web/messages/zh-CN.json (2)

832-858: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

docs.sessionRestore contains untranslated English in zh-CN.

Line 832 (metaDescription) and Line 858 (supportedNote) are English in a production Chinese locale file, resulting in partial localization.

As per coding guidelines: “For production user-facing text, fail partial localization … and ensure … message keys have translations across all supported locales’ JSON files under web/messages/.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/zh-CN.json` around lines 832 - 858, The zh-CN locale has
untranslated English strings in docs.sessionRestore: specifically the keys
"metaDescription" and "supportedNote" (lines showing metaDescription and
supportedNote). Replace those English values with proper Chinese translations in
web/messages/zh-CN.json so the docs.sessionRestore object is fully localized;
ensure the updated Chinese text matches tone/terminology used elsewhere (e.g.,
"cmux 会恢复..." for metaDescription and a Chinese equivalent for supportedNote)
and verify the same message keys remain present and consistent across other
locale JSON files.

168-257: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

New zh-CN blog strings are untranslated (English fallback).

Line 168–257 adds user-facing post content and SEO keys in English. zh-CN is a high-confidence locale and should not ship English fallback for these new keys.

As per coding guidelines: “For production changes, fail … web UI, metadata … or user-facing data changes … and update every locale listed in web/i18n/routing.ts with matching web/messages/ entries.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/zh-CN.json` around lines 168 - 257, The zh-CN locale contains
new English fallback strings for the blog/SEO keys added under "passkeyAuth",
"taskManager", and "sessionRestore" (and related
metaTitle/metaDescription/metaKeywords) — update the Chinese translations for
each of these new keys so the high-confidence zh-CN locale does not ship
English. Locate the entries named passkeyAuth, taskManager, and sessionRestore
in the zh-CN messages file and replace the English p1/p2/p3/summary/seoP/agentP
and all metaTitle/metaDescription/metaKeywords values with proper Chinese
translations matching the content and tone of the originals; ensure every new
key present in other locales (post content and SEO keys) has a corresponding
translated value in this locale before merging.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@web/messages/da.json`:
- Around line 168-188: The new Danish locale entries currently contain English
fallback text; replace those English strings with proper Danish translations for
the keys referenced (blog.posts.passkeyAuth, blog.posts.taskManager,
blog.posts.sessionRestore, blog.passkeyAuth, blog.taskManager,
blog.sessionRestore.metaDescription, and docs.sessionRestore) so the da.json
file contains full Danish content rather than placeholders, and ensure any other
ranges called out (lines ~207-257, 832, 858) are likewise translated; locate the
entries by their JSON keys (e.g., "passkeyAuth", "taskManager",
"sessionRestore") and update the values to correct Danish strings consistent
with the locale registry in web/i18n/routing.ts.

In `@web/messages/de.json`:
- Around line 168-188: The German locale file contains English blog/post strings
(e.g., keys like "passkeyAuth", "taskManager", "sessionRestore" and the new
blog.posts.* / blog.* entries) that must be translated; replace the English text
for those keys in web/messages/de.json with proper German translations
(including titles, summaries, paragraphs, and seoP/agentP content) so there are
no leftover English placeholders, and verify all new user-facing keys introduced
in the diff are fully localized in the de.json file before merging.
- Line 832: The two English strings under the keys
docs.sessionRestore.metaDescription and docs.sessionRestore.supportedNote in
web/messages/de.json should be replaced with proper German translations to match
surrounding locale content; locate the entries for
docs.sessionRestore.metaDescription and docs.sessionRestore.supportedNote and
update their values with accurate German text (keeping punctuation and comma
usage consistent with other docs strings), then run any locale
linting/validation to ensure JSON and translation quality.

In `@web/messages/es.json`:
- Around line 168-188: The Spanish locale file contains new English blog and SEO
strings that must be translated: update the values under the keys "passkeyAuth",
"taskManager", and "sessionRestore" (and any other newly added blog.* entries
referenced in the diff around lines 207-257) with proper Spanish text for title,
summary, date, p1/p2/p3/p4 and seoP/agentP fields; keep the JSON keys intact,
preserve any inline code tags like <code>cmux hooks setup</code>, and ensure
dates remain correct formatting for the locale before committing.
- Line 832: The two message values docs.sessionRestore.metaDescription and
docs.sessionRestore.supportedNote in web/messages/es.json are still in English;
replace their English strings with proper Spanish translations (e.g.,
metaDescription -> "Cómo cmux restaura ventanas, espacios de trabajo, paneles,
directorios de trabajo, scrollback, historial del navegador y sesiones de
agentes como Claude Code, Codex, OpenCode, Gemini CLI, Antigravity CLI, Grok
Build CLI y otras después de reinstalar." and supportedNote -> "Nota: la
restauración de sesión admite la restauración de ventanas, paneles, directorios
y la mayoría de sesiones de agentes; el comportamiento puede variar según el
agente y la configuración."), ensuring special agent/product names remain
untranslated and punctuation/escaping is preserved; update both keys in the
es.json file.

In `@web/messages/fr.json`:
- Line 832: The French locale contains English fallback text for the keys
metaDescription and supportedNote; replace those English strings with proper
French translations for the user-facing documentation copy. Locate the JSON
entries "metaDescription" and "supportedNote" in the fr.json messages file and
update their values to fluent French equivalents (ensuring accents and
punctuation follow French localization conventions), then run any linter/locale
validation used by the repo to confirm the file remains valid JSON and the
translations render correctly.

In `@web/messages/it.json`:
- Line 832: Translate the two English metadata strings for the Italian locale by
replacing the current English values for the JSON keys "metaDescription" and
"supportedNote" in the it.json messages file with appropriate Italian
translations; ensure the translations maintain original meaning and mention the
same components (cmux restoring windows, workspaces, panes, working directories,
scrollback, browser history, Claude Code/Codex/OpenCode/Gemini CLI/Antigravity
CLI/Grok Build CLI/other agent sessions for metaDescription, and the
supportedNote content) and keep punctuation and formatting consistent with
surrounding entries.

In `@web/messages/ja.json`:
- Line 307: The ja.json locale still has untranslated texts for
docs.sessionRestore—specifically the keys metaDescription and supportedNote—so
update the Japanese translations for docs.sessionRestore.metaDescription and
docs.sessionRestore.supportedNote in web/messages/ja.json; replace the current
English sentences with concise, natural Japanese equivalents that cover
restoring windows/workspaces/panes/scrollback/browser history and supported
agents (Claude Code, Codex, OpenCode, Gemini CLI, Antigravity CLI, Grok Build
CLI, etc.), and ensure the strings follow existing locale style (full
localization, punctuation, and character encoding) before merging.

In `@web/messages/pt-BR.json`:
- Around line 168-188: The pt-BR locale file contains English fallback strings
in the objects "passkeyAuth", "taskManager", and "sessionRestore" (and other
added entries referenced in the comment); replace each English user-facing field
(title, summary, date, p1, p2, p3, p4, seoP, agentP, etc.) with proper Brazilian
Portuguese translations so the file contains only pt-BR copy, not English
placeholders, ensuring translations follow existing style and locale guidelines
and that no TODO/placeholder tokens remain in these keys.

In `@web/messages/ru.json`:
- Around line 168-188: The listed locale entries contain English text and must
be replaced with proper Russian translations: translate all string values under
the keys "passkeyAuth" (fields: title, summary, date, p1, p2, p3), "taskManager"
(fields: title, summary, date, p1–p4), and "sessionRestore" (fields: seoP,
summary, agentP) into Russian (no placeholders, no English fragments, no machine
markers), keep the existing JSON keys and punctuation intact, and ensure
dates/formats remain consistent with other ru.json entries so the file stays
fully localized and aligned with locale guidelines.

In `@web/messages/uk.json`:
- Around line 184-257: The Ukrainian locale file web/messages/uk.json currently
contains English blog copy and SEO metadata under the keys "passkeyAuth",
"taskManager", and "sessionRestore" (and their nested blog.posts.*
text/metaTitle/metaDescription/metaKeywords), so translate all user-facing
strings for those keys into Ukrainian and replace the English text; ensure you
update the blog.posts.passkeyAuth/taskManager/sessionRestore p1–p3/seoP/agentP
and the corresponding metaTitle, metaDescription, and metaKeywords entries with
accurate Ukrainian text, keeping the same JSON keys and structure so next-intl
and the routing locales continue to find them.

---

Outside diff comments:
In `@web/messages/fr.json`:
- Around line 168-257: The fr.json additions contain English copy and metadata
for keys passkeyAuth (title, summary, date, p1–p3, metaTitle, metaDescription,
metaKeywords), taskManager (title, summary, p1–p4, metaTitle, metaDescription,
metaKeywords) and sessionRestore (seoP, summary, agentP, metaDescription,
metaKeywords); replace these English strings with proper French translations
(including translating metaKeywords into French terms), do not use placeholders
or copied English, and ensure the date string in passkeyAuth is
localized/translated if required so the fr locale contains fully localized
user-facing copy and SEO metadata.

In `@web/messages/it.json`:
- Around line 168-257: The Italian locale entries for the blog routes contain
English copy and must be localized: replace the English strings under the keys
"passkeyAuth" (fields title, summary, p1-p3, metaTitle, metaDescription,
metaKeywords), "taskManager" (title, summary, p1-p4, date, metaTitle,
metaDescription, metaKeywords) and "sessionRestore" (seoP, summary, agentP,
metaDescription, metaKeywords) with proper Italian translations (or remove these
entries from this locale and put the English text into the English locale if you
can't provide translations), ensuring no user-facing English remains in the
it.json locale file and preserving the exact keys/structure so consuming code
(e.g., page renderers) continues to work.

In `@web/messages/ja.json`:
- Around line 168-257: The ja.json entries for passkeyAuth, taskManager, and
sessionRestore (including fields p1/p2/p3, seoP, summary, agentP and the
metaTitle/metaDescription/metaKeywords blocks) contain English copy instead of
Japanese; replace all English strings with proper Japanese translations for
those keys so the Japanese locale is fully localized (do not copy English to
satisfy slots), ensuring the visible blog text and SEO metadata are translated
and semantically equivalent to the original English content.

In `@web/messages/ko.json`:
- Around line 167-257: The Korean locale file web/messages/ko.json contains
untranslated English strings for the keys passkeyAuth, taskManager, and
sessionRestore (including their p1/p2/p3, metaTitle, metaDescription,
metaKeywords, seoP, summary, and agentP fields); replace these English entries
with proper Korean translations (no placeholders or TODOs), ensure metaKeywords
are localized or omitted if not applicable, and also fix the other referenced
untranslated entries around lines mentioned (near keys at 832, 858, 870–872) so
the ko.json contains complete, natural Korean copy throughout.

In `@web/messages/no.json`:
- Around line 167-257: The new Norwegian locale file left several entries in
English — translate the blog/content and SEO strings under the keys
"passkeyAuth", "taskManager", and "sessionRestore" (including p1/p2/p3, title,
summary, metaTitle, metaDescription, metaKeywords and seoP/agentP) into proper
Norwegian, replacing the English fallback text so all user-facing copy and
metadata in no.json is fully localized; keep the original key names and
structure intact and ensure keywords are idiomatic Norwegian where applicable.

In `@web/messages/uk.json`:
- Around line 917-957: The uk.json contains untranslated English strings (e.g.,
"metaDescription", "agentResumeDesc") and mixed-language tokens (e.g.,
"feedHermes") that regressed localization; replace those English texts with
proper Ukrainian translations for the keys shown in the diff (metaDescription,
agentResumeDesc, and feedHermes/mixed feed keys) and ensure any inline tokens
like <configLink> remain intact; then update every other locale listed in
web/i18n/routing.ts to have matching message keys/entries (or revert the
original translations if available) so production locales stay synchronized and
run the i18n validation/lint step before committing.

In `@web/messages/zh-CN.json`:
- Around line 832-858: The zh-CN locale has untranslated English strings in
docs.sessionRestore: specifically the keys "metaDescription" and "supportedNote"
(lines showing metaDescription and supportedNote). Replace those English values
with proper Chinese translations in web/messages/zh-CN.json so the
docs.sessionRestore object is fully localized; ensure the updated Chinese text
matches tone/terminology used elsewhere (e.g., "cmux 会恢复..." for metaDescription
and a Chinese equivalent for supportedNote) and verify the same message keys
remain present and consistent across other locale JSON files.
- Around line 168-257: The zh-CN locale contains new English fallback strings
for the blog/SEO keys added under "passkeyAuth", "taskManager", and
"sessionRestore" (and related metaTitle/metaDescription/metaKeywords) — update
the Chinese translations for each of these new keys so the high-confidence zh-CN
locale does not ship English. Locate the entries named passkeyAuth, taskManager,
and sessionRestore in the zh-CN messages file and replace the English
p1/p2/p3/summary/seoP/agentP and all metaTitle/metaDescription/metaKeywords
values with proper Chinese translations matching the content and tone of the
originals; ensure every new key present in other locales (post content and SEO
keys) has a corresponding translated value in this locale before merging.

In `@web/messages/zh-TW.json`:
- Around line 832-858: The zh-TW locale contains English user-facing strings
that must be localized; locate the English keys in web/messages/zh-TW.json
(e.g., "metaDescription", "supportedNote", and any other English phrases between
the shown diff block) and replace them with proper Traditional Chinese
translations for those message values, ensuring the keys remain unchanged; after
updating, run the locale consistency check to confirm the same message keys
exist across all web/messages/* locale JSON files so there is no partial
localization.
- Around line 168-257: The zh-TW messages block (keys passkeyAuth, taskManager,
sessionRestore and their meta entries) contains English user-facing blog/SEO
text; replace these English strings with proper Traditional Chinese translations
or wire them to next-intl so they are loaded from the locale-specific source,
and ensure the same keys exist/are updated across all locale files listed in
web/i18n/routing.ts; specifically update the passkeyAuth, taskManager,
sessionRestore objects and their metaTitle/metaDescription/metaKeywords to
localized content and confirm every locale in web/messages/ has matching
entries.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: a29e59bc-093b-4ad6-b5c1-3c67900c35b4

📥 Commits

Reviewing files that changed from the base of the PR and between 1c47a1a and 5a360f0.

📒 Files selected for processing (23)
  • web/app/[locale]/blog/passkey-auth/page.tsx
  • web/app/[locale]/blog/session-restore/page.tsx
  • web/app/[locale]/blog/task-manager/page.tsx
  • web/messages/ar.json
  • web/messages/bs.json
  • web/messages/da.json
  • web/messages/de.json
  • web/messages/en.json
  • web/messages/es.json
  • web/messages/fr.json
  • web/messages/it.json
  • web/messages/ja.json
  • web/messages/km.json
  • web/messages/ko.json
  • web/messages/no.json
  • web/messages/pl.json
  • web/messages/pt-BR.json
  • web/messages/ru.json
  • web/messages/th.json
  • web/messages/tr.json
  • web/messages/uk.json
  • web/messages/zh-CN.json
  • web/messages/zh-TW.json

Comment thread web/messages/da.json Outdated
Comment thread web/messages/de.json Outdated
Comment thread web/messages/de.json Outdated
Comment thread web/messages/es.json Outdated
Comment thread web/messages/es.json Outdated
Comment thread web/messages/it.json Outdated
Comment thread web/messages/ja.json Outdated
Comment thread web/messages/pt-BR.json Outdated
Comment thread web/messages/ru.json Outdated
Comment thread web/messages/uk.json

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

24 issues found across 23 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread web/messages/ko.json
Comment thread web/messages/pl.json
Comment thread web/messages/es.json Outdated
Comment thread web/messages/th.json Outdated
Comment thread web/messages/it.json Outdated
Comment thread web/messages/zh-TW.json
Comment thread web/messages/bs.json
Comment thread web/messages/ar.json Outdated
Comment thread web/messages/tr.json
Comment thread web/messages/tr.json
@lawrencecchen
lawrencecchen dismissed stale reviews from coderabbitai[bot] and coderabbitai[bot] May 22, 2026 08:24

Stale after dadbd39. The existing translated docs session restore strings were restored for non-English locales, and the review threads are resolved or outdated.

@lawrencecchen lawrencecchen changed the title Add blog posts for browser auth and task manager Add recent feature blog posts May 22, 2026
coderabbitai[bot]
coderabbitai Bot previously requested changes May 22, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 14

♻️ Duplicate comments (2)
web/messages/da.json (1)

190-227: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Localize newly added Danish blog and SEO copy instead of shipping English text.

The new Danish keys for the four added posts (content + metadata) are still English, which creates partial localization in production-facing route copy and SEO metadata.

As per coding guidelines, “For this PR’s new blog routes/pages and SEO metadata: ensure all user-facing web copy … and rendered metadata … [have] real translations in every supported locale,” and “Web message files must keep locale entries consistent and maintain alignment with the locale registry in web/i18n/routing.ts.”

Also applies to: 296-350

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/da.json` around lines 190 - 227, The new Danish message entries
(cmuxFinder, cmuxVault, markdownViewer, unreadShortcuts) contain English copy
for title, summary, date, and paragraph keys; replace each English string with
proper Danish translations for all user-facing text and SEO metadata fields so
the da.json file is fully localized, ensuring the keys "cmuxFinder",
"cmuxVault", "markdownViewer", and "unreadShortcuts" mirror the translations
used in other locales and remain consistent with the locale registry in
web/i18n/routing.ts; update the date formatting if needed for Danish locale and
verify no English strings remain in the added blocks (also apply same fixes to
the other affected range noted in the comment).
web/messages/ru.json (1)

190-227: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Russian locale includes English copy for newly added blog/SEO keys.

The new cmuxFinder, cmuxVault, markdownViewer, and unreadShortcuts entries (post body + metadata) are English in ru.json, which causes mixed-language rendering for Russian users and breaks full-locale parity for user-facing copy/SEO.

As per coding guidelines, “Placeholder, copied English, machine marker, TODO, or empty translations must not be used to satisfy a locale slot.”

Also applies to: 296-351

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/messages/ru.json` around lines 190 - 227, The ru.json contains English
text for the new blog/SEO keys; replace the English strings with proper Russian
translations for the keys "cmuxFinder", "cmuxVault", "markdownViewer", and
"unreadShortcuts" (translate title, summary and all p1..p5 fields) and ensure
you do not use placeholders or copied-English markers; also check and translate
the other newly added English entries later in the file (the additional blog/SEO
entries noted in the review) so the Russian locale is fully localized and
consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@web/messages/de.json`:
- Around line 190-227: The German locale file currently contains English copy
for the blog entries and their SEO metadata; translate all user-facing strings
for the keys cmuxFinder, cmuxVault, markdownViewer, and unreadShortcuts (titles,
summaries, dates/strings, p1..p5) and the matching SEO sections
(blog.cmuxFinder, blog.cmuxVault, blog.markdownViewer, blog.unreadShortcuts)
into natural German—replace every English string with native German copy (no
placeholders or English fallbacks), keep the same keys and structure
(cmuxFinder, cmuxVault, markdownViewer, unreadShortcuts and their blog.*
counterparts), and ensure dates/formats and any inline tags (e.g., <tobiLink>)
remain intact and correctly localized.

In `@web/messages/es.json`:
- Around line 190-227: The Spanish locale file contains English-only entries for
cmuxFinder, cmuxVault, markdownViewer, and unreadShortcuts; replace the English
copy and SEO metadata with proper Spanish translations for those keys
(cmuxFinder, cmuxVault, markdownViewer, unreadShortcuts) so the es.json is fully
localized and remains aligned with the locale registry; update title, summary,
date if necessary, and all p1–p5 strings for each key, mirroring the structure
used in other locales and keeping keys identical to ensure routing/i18n
compatibility.

In `@web/messages/fr.json`:
- Around line 190-227: The French locale file contains English strings for the
blog posts (keys cmuxFinder, cmuxVault, markdownViewer, unreadShortcuts and the
additional SEO/message blocks referenced at 296-350); replace each English value
(title, summary, date if desired, p1..p5 and any SEO/meta fields) with proper
French translations so the fr.json is fully localized and consistent with other
locale files, ensuring you update the exact keys cmuxFinder, cmuxVault,
markdownViewer, unreadShortcuts and the SEO/meta keys referenced in the later
block; keep string structure intact (no code changes), preserve placeholders
like <tobiLink> and the date format, and run a quick JSON validation after
editing.

In `@web/messages/it.json`:
- Around line 190-227: The Italian locale file contains English fallbacks for
the blog/SEO entries: translate and replace the English strings for the keys
"cmuxFinder", "cmuxVault", "markdownViewer", and "unreadShortcuts" in
web/messages/it.json (fields: title, summary, p1..p5 and date where applicable),
keeping any inline markup like <tobiLink> unchanged; also locate and fix the
duplicated English blocks referenced at lines ~296-350 (same keys or similar
blog routes) so all locale entries match the required Italian text; finally
ensure the updated keys remain consistent with the route/locales listed in
web/i18n/routing.ts so next-intl will pick up the translations.

In `@web/messages/ja.json`:
- Around line 190-227: The ja.json file still contains English copy for the blog
posts keyed under cmuxFinder, cmuxVault, markdownViewer, and unreadShortcuts
(translate title, summary, date, and p1..p5 where present) — replace each
English string with a natural Japanese translation; additionally translate the
corresponding SEO metadata block referenced in lines 296-350 (the SEO keys for
these posts) so the Japanese locale has matching translated entries for all
user-facing content and metadata.

In `@web/messages/ko.json`:
- Around line 190-227: The ko.json file still contains English for the new blog
posts and their SEO metadata; translate the user-facing keys for cmuxFinder,
cmuxVault, markdownViewer, and unreadShortcuts (title, summary, date, p1–p5 as
present) into Korean, and also translate the corresponding SEO metadata entries
referenced later (lines 296–350) so the Korean locale fully mirrors the English
additions; update the values in the same keys (cmuxFinder, cmuxVault,
markdownViewer, unreadShortcuts and their SEO objects) with accurate Korean
strings while preserving key names and date formats.

In `@web/messages/no.json`:
- Around line 190-227: The Norwegian locale file contains English copy for the
blog entries cmuxFinder, cmuxVault, markdownViewer, and unreadShortcuts (fields:
title, summary, date, p1..p5), so replace each English string with proper
Norwegian translations (including the date format/localization) for those keys
and any other blog.posts.* entries referenced around lines 296-351; update all
metadata and paragraph fields so no English placeholders remain and ensure
translations preserve any inline tags like <tobiLink>.

In `@web/messages/pl.json`:
- Around line 190-227: The Polish locale file pl.json contains new English blog
entries under keys cmuxFinder, cmuxVault, markdownViewer, and unreadShortcuts
(fields: title, summary, p1..p5 and date); replace each English string with a
proper Polish translation (preserve placeholders/tags like <tobiLink> and any
keyboard shortcut text), and also localize the other added blog.* entries
referenced around lines 296-351 the same way so no blog metadata or post content
remains in English. Ensure translations are natural Polish, keep the date format
as-is, and update all title/summary/body fields for those keys.

In `@web/messages/uk.json`:
- Around line 206-243: Translate the four blog post objects in
web/messages/uk.json — cmuxFinder, cmuxVault, markdownViewer, and
unreadShortcuts — into Ukrainian by replacing the English values for "title",
"summary", "date" (keep date format but translate month name), and all paragraph
keys ("p1".."p5") with Ukrainian text; ensure every user-facing string in those
objects is fully localized and preserved under the same keys so the app
continues to read them via next-intl/locales.
- Around line 296-351: Translate the English SEO fields for the keys cmuxFinder,
cmuxVault, markdownViewer, and unreadShortcuts by replacing metaTitle,
metaDescription, and each string in metaKeywords with accurate Ukrainian text;
update the entries so all user-facing strings are Ukrainian and preserve the
keyword list structure and meaning (keep keywords as separate strings) for the
existing symbols cmuxFinder.metaTitle/metaDescription/metaKeywords,
cmuxVault.metaTitle/metaDescription/metaKeywords,
markdownViewer.metaTitle/metaDescription/metaKeywords, and
unreadShortcuts.metaTitle/metaDescription/metaKeywords.

In `@web/messages/zh-CN.json`:
- Around line 190-227: Translate the four blog post entries in
web/messages/zh-CN.json for the keys "cmuxFinder", "cmuxVault",
"markdownViewer", and "unreadShortcuts" into Simplified Chinese, replacing each
English value for title, summary, date (if localized), and p1–p5 with accurate
Chinese text; ensure each user-facing field present in the English block is
provided in Chinese and matches the same keys so next-intl can load them for the
zh-CN locale.
- Around line 296-351: Translate the English SEO metadata for the keys
"cmuxFinder", "cmuxVault", "markdownViewer", and "unreadShortcuts" into
Simplified Chinese by replacing each metaTitle, metaDescription, and every
string in metaKeywords with accurate Simplified Chinese equivalents; update the
four objects in web/messages/zh-CN.json so the metaTitle/metaDescription fields
are Chinese sentences and each metaKeywords array contains Chinese keyword
strings matching the original intent (e.g., translate "cmux Finder", "preview
video in terminal", "Vault pane", "Codex sessions", "markdown preview",
"Cmd+Control+U" etc. into Simplified Chinese) while preserving the same keys and
JSON structure.

In `@web/messages/zh-TW.json`:
- Around line 190-227: Translate the four blog-post entries in
web/messages/zh-TW.json (keys cmuxFinder, cmuxVault, markdownViewer,
unreadShortcuts) into Traditional Chinese, replacing every English user-facing
string (title, summary, date, p1..p5) with accurate zh-TW text while preserving
special tokens/markup (e.g., keep the date string format and the <tobiLink> tag
in markdownViewer.p4 intact) and ensure every field present in the English block
is filled so the locale file fully mirrors the original structure.
- Around line 296-351: Translate the English SEO metadata for the four entries
into Traditional Chinese by replacing the values of metaTitle, metaDescription,
and each string in metaKeywords under the keys "cmuxFinder", "cmuxVault",
"markdownViewer", and "unreadShortcuts" in web/messages/zh-TW.json; ensure
accurate, natural Traditional Chinese translations that preserve original
meaning (e.g., "Introducing cmux Finder" → a localized title, full-sentence
metaDescriptions, and keyword arrays translated to Traditional Chinese) so the
zh-TW locale fully matches the other locales listed in web/i18n/routing.ts.

---

Duplicate comments:
In `@web/messages/da.json`:
- Around line 190-227: The new Danish message entries (cmuxFinder, cmuxVault,
markdownViewer, unreadShortcuts) contain English copy for title, summary, date,
and paragraph keys; replace each English string with proper Danish translations
for all user-facing text and SEO metadata fields so the da.json file is fully
localized, ensuring the keys "cmuxFinder", "cmuxVault", "markdownViewer", and
"unreadShortcuts" mirror the translations used in other locales and remain
consistent with the locale registry in web/i18n/routing.ts; update the date
formatting if needed for Danish locale and verify no English strings remain in
the added blocks (also apply same fixes to the other affected range noted in the
comment).

In `@web/messages/ru.json`:
- Around line 190-227: The ru.json contains English text for the new blog/SEO
keys; replace the English strings with proper Russian translations for the keys
"cmuxFinder", "cmuxVault", "markdownViewer", and "unreadShortcuts" (translate
title, summary and all p1..p5 fields) and ensure you do not use placeholders or
copied-English markers; also check and translate the other newly added English
entries later in the file (the additional blog/SEO entries noted in the review)
so the Russian locale is fully localized and consistent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5595b85c-94c8-4703-b6bc-0f9efb838fd6

📥 Commits

Reviewing files that changed from the base of the PR and between d205363 and 558ceaf.

⛔ Files ignored due to path filters (5)
  • web/public/blog/cmd-ctrl-u-cmd-option-u.mp4 is excluded by !**/*.mp4
  • web/public/blog/cmux-finder.mp4 is excluded by !**/*.mp4
  • web/public/blog/cmux-markdown-tobi.mp4 is excluded by !**/*.mp4
  • web/public/blog/cmux-vault.mp4 is excluded by !**/*.mp4
  • web/public/blog/passkey-browser-import.mp4 is excluded by !**/*.mp4
📒 Files selected for processing (28)
  • web/app/[locale]/blog/cmux-finder/page.tsx
  • web/app/[locale]/blog/cmux-vault/page.tsx
  • web/app/[locale]/blog/markdown-viewer/page.tsx
  • web/app/[locale]/blog/passkey-auth/page.tsx
  • web/app/[locale]/blog/unread-shortcuts/page.tsx
  • web/app/[locale]/components/blog-posts.ts
  • web/app/lib/agent-page-paths.ts
  • web/app/sitemap.ts
  • web/messages/ar.json
  • web/messages/bs.json
  • web/messages/da.json
  • web/messages/de.json
  • web/messages/en.json
  • web/messages/es.json
  • web/messages/fr.json
  • web/messages/it.json
  • web/messages/ja.json
  • web/messages/km.json
  • web/messages/ko.json
  • web/messages/no.json
  • web/messages/pl.json
  • web/messages/pt-BR.json
  • web/messages/ru.json
  • web/messages/th.json
  • web/messages/tr.json
  • web/messages/uk.json
  • web/messages/zh-CN.json
  • web/messages/zh-TW.json

Comment thread web/messages/de.json
Comment thread web/messages/es.json
Comment thread web/messages/fr.json
Comment thread web/messages/it.json
Comment thread web/messages/ja.json
Comment thread web/messages/uk.json
Comment thread web/messages/zh-CN.json
Comment thread web/messages/zh-CN.json
Comment thread web/messages/zh-TW.json
Comment thread web/messages/zh-TW.json
@lawrencecchen
lawrencecchen dismissed coderabbitai[bot]’s stale review May 22, 2026 10:53

Stale CodeRabbit review. The requested locale translations were addressed in d0bb7a5, and the latest CodeRabbit check is pass with review skipped.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

2 issues found across 20 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="web/messages/uk.json">

<violation number="1" location="web/messages/uk.json:225">
P1: The cmuxFinder.title should be in Ukrainian, not English. The original Ukrainian translation 'Представляємо cmux Finder' was correct and should be restored.

(Based on your team's feedback about keeping cmuxFinder title/metaTitle properly localized in Ukrainian) [FEEDBACK_USED]</violation>

<violation number="2" location="web/messages/uk.json:316">
P1: The cmuxFinder.metaTitle should be in Ukrainian, not English. The original Ukrainian translation 'Представляємо cmux Finder' was correct and should be restored.

(Based on your team's feedback about keeping cmuxFinder title/metaTitle properly localized in Ukrainian) [FEEDBACK_USED]</violation>
</file>

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread web/messages/uk.json
"metaTitle": "Відновлення сеансів у cmux"
},
"cmuxFinder": {
"metaTitle": "cmux Finder",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1: The cmuxFinder.metaTitle should be in Ukrainian, not English. The original Ukrainian translation 'Представляємо cmux Finder' was correct and should be restored.

(Based on your team's feedback about keeping cmuxFinder title/metaTitle properly localized in Ukrainian)

View Feedback

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/uk.json, line 316:

<comment>The cmuxFinder.metaTitle should be in Ukrainian, not English. The original Ukrainian translation 'Представляємо cmux Finder' was correct and should be restored.

(Based on your team's feedback about keeping cmuxFinder title/metaTitle properly localized in Ukrainian) </comment>

<file context>
@@ -313,7 +313,7 @@
     },
     "cmuxFinder": {
-      "metaTitle": "Представляємо cmux Finder",
+      "metaTitle": "cmux Finder",
       "metaDescription": "cmux v0.64+ містить файловий оглядач у стилі Finder, що показує відео, зображення, PDF і Markdown-файли у вашому workspace.",
       "metaKeywords": [
</file context>
Suggested change
"metaTitle": "cmux Finder",
"metaTitle": "Представляємо cmux Finder",

Comment thread web/messages/uk.json
"docsCta": "Прочитайте <link>документацію з відновлення сеансів</link> для команд setup, підтримуваних агентів і діагностики."
},
"cmuxFinder": {
"title": "cmux Finder",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1: The cmuxFinder.title should be in Ukrainian, not English. The original Ukrainian translation 'Представляємо cmux Finder' was correct and should be restored.

(Based on your team's feedback about keeping cmuxFinder title/metaTitle properly localized in Ukrainian)

View Feedback

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/uk.json, line 225:

<comment>The cmuxFinder.title should be in Ukrainian, not English. The original Ukrainian translation 'Представляємо cmux Finder' was correct and should be restored.

(Based on your team's feedback about keeping cmuxFinder title/metaTitle properly localized in Ukrainian) </comment>

<file context>
@@ -222,7 +222,7 @@
       },
       "cmuxFinder": {
-        "title": "Представляємо cmux Finder",
+        "title": "cmux Finder",
         "summary": "У cmux тепер є файловий оглядач, який показує відео, зображення, PDF і Markdown-файли.",
         "date": "22 травня 2026 р.",
</file context>

@lawrencecchen
lawrencecchen merged commit 5f29f3f into main May 22, 2026
20 of 22 checks passed
@lawrencecchen
lawrencecchen deleted the task-blog-posts-passkeys-task-manager-session-restore branch May 22, 2026 11:11

This branch was successfully deployed

1 active deployment
Preview – cmux — 790f31f6 Deployed May 22, 2026 by vercel[bot]
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