Repository navigation
Redirect cmux.dev to cmux.com with 301s - #1716
Conversation
Middleware intercepts requests to cmux.dev and www.cmux.dev, issuing 301 permanent redirects to cmux.com while preserving the full path, query string, and locale prefix. All internal references (sitemap, robots.txt, metadataBase, OpenGraph URLs, JSON-LD structured data, canonical URLs, legal pages, i18n message strings) now point to cmux.com. Unchanged: - PostHog proxy at r.cmux.dev (requires separate DNS config) - Testimonial quotes referencing cmux.dev (user-generated content)
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
📝 WalkthroughWalkthroughDomain migration from Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
📝 Coding Plan
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
web/proxy.ts (1)
7-19: Redirect logic is correct; consider case-insensitive host matching for robustness.The implementation correctly:
- Preserves path and query string via URL object manipulation
- Enforces HTTPS on the redirect target
- Uses 301 (permanent redirect) which is appropriate for domain migration
- Correctly excludes subdomains like
r.cmux.dev(exact match only)However, HTTP
Hostheaders are case-insensitive per RFC 7230. While browsers typically send lowercase, a case-insensitive comparison would be more robust.♻️ Optional: case-insensitive host comparison
export default function middleware(request: NextRequest) { - const host = request.headers.get("host") ?? ""; + const host = (request.headers.get("host") ?? "").toLowerCase(); // 301 redirect cmux.dev (and www.cmux.dev) to cmux.com, preserving path and query if (host === "cmux.dev" || host === "www.cmux.dev") {🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/proxy.ts` around lines 7 - 19, The host comparison in middleware currently does exact match and should be made case-insensitive: normalize the retrieved host (the variable host from request.headers.get("host")) to lowercase (or perform a case-insensitive comparison) before comparing to "cmux.dev" and "www.cmux.dev" so the redirect logic in middleware (which builds a URL, sets url.host and url.protocol and returns NextResponse.redirect) still works but robustly handles Host headers with mixed case; leave the intlMiddleware(request) fallback unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@web/messages/es.json`:
- Line 578: The translation key "kataring" was modified to change the
testimonial quote domain from "cmux.dev" to "cmux.com"; revert that change so
the value for "kataring" remains the original quote containing "cmux.dev" (i.e.,
restore the original string value for the "kataring" key) to comply with the PR
rule that testimonial quotes referencing cmux.dev must remain unchanged.
In `@web/messages/ru.json`:
- Line 578: The testimonial value for the key "kataring" was changed from
"Перешёл на cmux.dev" to "Перешёл на cmux.com"; revert this change so the value
remains exactly "Перешёл на cmux.dev" (do not rewrite or alter the testimonial
quote content for the "kataring" entry).
In `@web/messages/zh-TW.json`:
- Line 578: The change modified a user testimonial value for the key "kataring"
in zh-TW.json from "換到 cmux.dev 了" to "換到 cmux.com 了"; revert that value back to
the original quoted user content ("換到 cmux.dev 了") so testimonial quotes
referencing cmux.dev remain unchanged (update the "kataring" entry accordingly).
---
Nitpick comments:
In `@web/proxy.ts`:
- Around line 7-19: The host comparison in middleware currently does exact match
and should be made case-insensitive: normalize the retrieved host (the variable
host from request.headers.get("host")) to lowercase (or perform a
case-insensitive comparison) before comparing to "cmux.dev" and "www.cmux.dev"
so the redirect logic in middleware (which builds a URL, sets url.host and
url.protocol and returns NextResponse.redirect) still works but robustly handles
Host headers with mixed case; leave the intlMiddleware(request) fallback
unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: a40bdcb3-f2b2-4e2b-8fe9-0510c5974ffb
📒 Files selected for processing (25)
web/app/[locale]/(legal)/privacy-policy/page.tsxweb/app/[locale]/(legal)/terms-of-service/page.tsxweb/app/[locale]/layout.tsxweb/app/robots.tsweb/app/sitemap.tsweb/messages/ar.jsonweb/messages/bs.jsonweb/messages/da.jsonweb/messages/de.jsonweb/messages/en.jsonweb/messages/es.jsonweb/messages/fr.jsonweb/messages/it.jsonweb/messages/ja.jsonweb/messages/km.jsonweb/messages/ko.jsonweb/messages/no.jsonweb/messages/pl.jsonweb/messages/pt-BR.jsonweb/messages/ru.jsonweb/messages/th.jsonweb/messages/tr.jsonweb/messages/zh-CN.jsonweb/messages/zh-TW.jsonweb/proxy.ts
| "northprint": "Probe cmux porque se veia bien, y es bueno", | ||
| "indykish": "cmux esta bastante bien.", | ||
| "kataring": "Me cambie a cmux.dev", | ||
| "kataring": "Me cambie a cmux.com", |
There was a problem hiding this comment.
Do not rewrite user testimonial quote content.
This line changes user-quote text from cmux.dev to cmux.com, but the PR objective explicitly says testimonial quotes referencing cmux.dev should remain unchanged.
Proposed fix
- "kataring": "Me cambie a cmux.com",
+ "kataring": "Me cambie a cmux.dev",📝 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.
| "kataring": "Me cambie a cmux.com", | |
| "kataring": "Me cambie a cmux.dev", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@web/messages/es.json` at line 578, The translation key "kataring" was
modified to change the testimonial quote domain from "cmux.dev" to "cmux.com";
revert that change so the value for "kataring" remains the original quote
containing "cmux.dev" (i.e., restore the original string value for the
"kataring" key) to comply with the PR rule that testimonial quotes referencing
cmux.dev must remain unchanged.
| "northprint": "Попробовал cmux потому что выглядел хорошо, и он хорош", | ||
| "indykish": "cmux довольно хорош.", | ||
| "kataring": "Перешёл на cmux.dev", | ||
| "kataring": "Перешёл на cmux.com", |
There was a problem hiding this comment.
Do not rewrite testimonial quote content.
Line 578 changes a user testimonial from cmux.dev to cmux.com, but the PR objective explicitly says testimonial quotes referencing cmux.dev should remain unchanged.
Suggested revert
- "kataring": "Перешёл на cmux.com",
+ "kataring": "Перешёл на cmux.dev",📝 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.
| "kataring": "Перешёл на cmux.com", | |
| "kataring": "Перешёл на cmux.dev", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@web/messages/ru.json` at line 578, The testimonial value for the key
"kataring" was changed from "Перешёл на cmux.dev" to "Перешёл на cmux.com";
revert this change so the value remains exactly "Перешёл на cmux.dev" (do not
rewrite or alter the testimonial quote content for the "kataring" entry).
| "northprint": "試了 cmux,確實不錯", | ||
| "indykish": "cmux 蠻好用的。", | ||
| "kataring": "換到 cmux.dev 了", | ||
| "kataring": "換到 cmux.com 了", |
There was a problem hiding this comment.
Do not rewrite quoted user testimonial content.
Line 578 changes a user quote from cmux.dev to cmux.com, but this PR’s stated objective says testimonial quotes referencing cmux.dev should remain unchanged as user content.
Suggested fix
- "kataring": "換到 cmux.com 了",
+ "kataring": "換到 cmux.dev 了",📝 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.
| "kataring": "換到 cmux.com 了", | |
| "kataring": "換到 cmux.dev 了", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@web/messages/zh-TW.json` at line 578, The change modified a user testimonial
value for the key "kataring" in zh-TW.json from "換到 cmux.dev 了" to "換到 cmux.com
了"; revert that value back to the original quoted user content ("換到 cmux.dev 了")
so testimonial quotes referencing cmux.dev remain unchanged (update the
"kataring" entry accordingly).
There was a problem hiding this comment.
10 issues found across 25 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/messages/bs.json">
<violation number="1" location="web/messages/bs.json:578">
P2: Keep user-generated testimonial text unchanged; this edit rewrites the quote and conflicts with the stated migration scope.</violation>
</file>
<file name="web/messages/no.json">
<violation number="1" location="web/messages/no.json:578">
P2: Do not rewrite this user-generated testimonial; keep the original `cmux.dev` quote text unchanged.</violation>
</file>
<file name="web/messages/zh-TW.json">
<violation number="1" location="web/messages/zh-TW.json:578">
P2: Revert this testimonial edit to preserve user-generated quote text; changing `cmux.dev` to `cmux.com` here alters quoted content and conflicts with the migration rule for testimonials.</violation>
</file>
<file name="web/messages/ru.json">
<violation number="1" location="web/messages/ru.json:578">
P2: Do not rewrite user-generated testimonial text; this change alters the original quote content.</violation>
</file>
<file name="web/messages/km.json">
<violation number="1" location="web/messages/km.json:574">
P2: This modifies user-generated testimonial content; keep testimonial domain references unchanged as stated in the migration plan.</violation>
</file>
<file name="web/messages/en.json">
<violation number="1" location="web/messages/en.json:580">
P2: This modifies a user-generated testimonial quote; keep the original quoted wording instead of rewriting the domain.</violation>
</file>
<file name="web/messages/pt-BR.json">
<violation number="1" location="web/messages/pt-BR.json:578">
P2: Do not rewrite user-generated testimonial text here; this changes the original quote content.</violation>
</file>
<file name="web/messages/ja.json">
<violation number="1" location="web/messages/ja.json:578">
P2: This change rewrites a user testimonial quote (`cmux.dev` → `cmux.com`) instead of preserving the original user-generated text.</violation>
</file>
<file name="web/messages/da.json">
<violation number="1" location="web/messages/da.json:578">
P2: This changes a user testimonial quote (`cmux.dev` → `cmux.com`) even though testimonial text is supposed to remain unchanged user-generated content.</violation>
</file>
<file name="web/messages/it.json">
<violation number="1" location="web/messages/it.json:578">
P2: This edit alters user-generated testimonial wording. Keep the original `cmux.dev` text instead of rewriting the quote to `cmux.com`.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| "northprint": "Probao sam cmux jer je izgledao dobro — dobar je", | ||
| "indykish": "cmux je prilično dobar.", | ||
| "kataring": "Prešao sam na cmux.dev", | ||
| "kataring": "Prešao sam na cmux.com", |
There was a problem hiding this comment.
P2: Keep user-generated testimonial text unchanged; this edit rewrites the quote and conflicts with the stated migration scope.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/bs.json, line 578:
<comment>Keep user-generated testimonial text unchanged; this edit rewrites the quote and conflicts with the stated migration scope.</comment>
<file context>
@@ -575,7 +575,7 @@
"northprint": "Probao sam cmux jer je izgledao dobro — dobar je",
"indykish": "cmux je prilično dobar.",
- "kataring": "Prešao sam na cmux.dev",
+ "kataring": "Prešao sam na cmux.com",
"scottw": "Ovo je bio tako koristan nalaz. Ne mogu ga dovoljno preporučiti.",
"johnblythe": "uzeo ovo tokom vikenda i volio sam ga. čekao sam nešto ovako.",
</file context>
| "northprint": "Prøvde cmux siden det så bra ut — det er bra", | ||
| "indykish": "cmux er ganske bra.", | ||
| "kataring": "Byttet til cmux.dev", | ||
| "kataring": "Byttet til cmux.com", |
There was a problem hiding this comment.
P2: Do not rewrite this user-generated testimonial; keep the original cmux.dev quote text unchanged.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/no.json, line 578:
<comment>Do not rewrite this user-generated testimonial; keep the original `cmux.dev` quote text unchanged.</comment>
<file context>
@@ -575,7 +575,7 @@
"northprint": "Prøvde cmux siden det så bra ut — det er bra",
"indykish": "cmux er ganske bra.",
- "kataring": "Byttet til cmux.dev",
+ "kataring": "Byttet til cmux.com",
"scottw": "Dette har vært et så nyttig funn. Kan ikke anbefale det nok.",
"johnblythe": "lastet dette ned i helgen og elsket det. har ventet på noe slikt.",
</file context>
| "kataring": "Byttet til cmux.com", | |
| "kataring": "Byttet til cmux.dev", |
| "northprint": "試了 cmux,確實不錯", | ||
| "indykish": "cmux 蠻好用的。", | ||
| "kataring": "換到 cmux.dev 了", | ||
| "kataring": "換到 cmux.com 了", |
There was a problem hiding this comment.
P2: Revert this testimonial edit to preserve user-generated quote text; changing cmux.dev to cmux.com here alters quoted content and conflicts with the migration rule for testimonials.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/zh-TW.json, line 578:
<comment>Revert this testimonial edit to preserve user-generated quote text; changing `cmux.dev` to `cmux.com` here alters quoted content and conflicts with the migration rule for testimonials.</comment>
<file context>
@@ -575,7 +575,7 @@
"northprint": "試了 cmux,確實不錯",
"indykish": "cmux 蠻好用的。",
- "kataring": "換到 cmux.dev 了",
+ "kataring": "換到 cmux.com 了",
"scottw": "非常有用的發現。強烈推薦。",
"johnblythe": "週末用了,很喜歡。一直在等這樣的工具。",
</file context>
| "kataring": "換到 cmux.com 了", | |
| "kataring": "換到 cmux.dev 了", |
| "northprint": "Попробовал cmux потому что выглядел хорошо, и он хорош", | ||
| "indykish": "cmux довольно хорош.", | ||
| "kataring": "Перешёл на cmux.dev", | ||
| "kataring": "Перешёл на cmux.com", |
There was a problem hiding this comment.
P2: Do not rewrite user-generated testimonial text; this change alters the original quote content.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/ru.json, line 578:
<comment>Do not rewrite user-generated testimonial text; this change alters the original quote content.</comment>
<file context>
@@ -575,7 +575,7 @@
"northprint": "Попробовал cmux потому что выглядел хорошо, и он хорош",
"indykish": "cmux довольно хорош.",
- "kataring": "Перешёл на cmux.dev",
+ "kataring": "Перешёл на cmux.com",
"scottw": "Невероятно полезная находка. Рекомендую всем.",
"johnblythe": "скачал на выходных и полюбил. ждал чего-то подобного.",
</file context>
| "northprint": "សាកល្បង cmux ព្រោះវាមើលទៅល្អ — វាល្អពិតមែន", | ||
| "indykish": "cmux ល្អដែរ។", | ||
| "kataring": "ប្ដូរមកប្រើ cmux.dev", | ||
| "kataring": "ប្ដូរមកប្រើ cmux.com", |
There was a problem hiding this comment.
P2: This modifies user-generated testimonial content; keep testimonial domain references unchanged as stated in the migration plan.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/km.json, line 574:
<comment>This modifies user-generated testimonial content; keep testimonial domain references unchanged as stated in the migration plan.</comment>
<file context>
@@ -571,7 +571,7 @@
"northprint": "សាកល្បង cmux ព្រោះវាមើលទៅល្អ — វាល្អពិតមែន",
"indykish": "cmux ល្អដែរ។",
- "kataring": "ប្ដូរមកប្រើ cmux.dev",
+ "kataring": "ប្ដូរមកប្រើ cmux.com",
"scottw": "នេះជាការរកឃើញដ៏មានប្រយោជន៍។ ខ្ញុំណែនាំវាខ្លាំងណាស់។",
"johnblythe": "ទាញយកមកចុងសប្តាហ៍កន្លងមក ហើយចូលចិត្តវា។ រង់ចាំអ្វីបែបនេះយូរហើយ។",
</file context>
| "northprint": "Tried cmux since it looked good — it's good", | ||
| "indykish": "cmux is pretty good.", | ||
| "kataring": "Switched to cmux.dev", | ||
| "kataring": "Switched to cmux.com", |
There was a problem hiding this comment.
P2: This modifies a user-generated testimonial quote; keep the original quoted wording instead of rewriting the domain.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/en.json, line 580:
<comment>This modifies a user-generated testimonial quote; keep the original quoted wording instead of rewriting the domain.</comment>
<file context>
@@ -577,7 +577,7 @@
"northprint": "Tried cmux since it looked good — it's good",
"indykish": "cmux is pretty good.",
- "kataring": "Switched to cmux.dev",
+ "kataring": "Switched to cmux.com",
"scottw": "This has been such a useful find. I can't recommend it enough.",
"johnblythe": "grabbed this over the weekend and loved it. been waiting for something like this.",
</file context>
| "northprint": "Experimentei o cmux porque parecia bom — é bom", | ||
| "indykish": "cmux é bem bom.", | ||
| "kataring": "Migrei para o cmux.dev", | ||
| "kataring": "Migrei para o cmux.com", |
There was a problem hiding this comment.
P2: Do not rewrite user-generated testimonial text here; this changes the original quote content.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/pt-BR.json, line 578:
<comment>Do not rewrite user-generated testimonial text here; this changes the original quote content.</comment>
<file context>
@@ -575,7 +575,7 @@
"northprint": "Experimentei o cmux porque parecia bom — é bom",
"indykish": "cmux é bem bom.",
- "kataring": "Migrei para o cmux.dev",
+ "kataring": "Migrei para o cmux.com",
"scottw": "Essa foi uma descoberta muito útil. Recomendo demais.",
"johnblythe": "baixei no fim de semana e adorei. estava esperando algo assim.",
</file context>
| "northprint": "cmux良さそうなので入れてみたけれど、良い", | ||
| "indykish": "cmux、かなりいい。", | ||
| "kataring": "cmux.dev に乗り換えた", | ||
| "kataring": "cmux.com に乗り換えた", |
There was a problem hiding this comment.
P2: This change rewrites a user testimonial quote (cmux.dev → cmux.com) instead of preserving the original user-generated text.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/ja.json, line 578:
<comment>This change rewrites a user testimonial quote (`cmux.dev` → `cmux.com`) instead of preserving the original user-generated text.</comment>
<file context>
@@ -575,7 +575,7 @@
"northprint": "cmux良さそうなので入れてみたけれど、良い",
"indykish": "cmux、かなりいい。",
- "kataring": "cmux.dev に乗り換えた",
+ "kataring": "cmux.com に乗り換えた",
"scottw": "本当に便利な発見だった。みんなにおすすめしたい。",
"johnblythe": "週末に入れて気に入った。こういうのをずっと待ってた。",
</file context>
| "kataring": "cmux.com に乗り換えた", | |
| "kataring": "cmux.dev に乗り換えた", |
| "northprint": "Prøvede cmux da det så godt ud — det er godt", | ||
| "indykish": "cmux er ret godt.", | ||
| "kataring": "Skiftede til cmux.dev", | ||
| "kataring": "Skiftede til cmux.com", |
There was a problem hiding this comment.
P2: This changes a user testimonial quote (cmux.dev → cmux.com) even though testimonial text is supposed to remain unchanged user-generated content.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/da.json, line 578:
<comment>This changes a user testimonial quote (`cmux.dev` → `cmux.com`) even though testimonial text is supposed to remain unchanged user-generated content.</comment>
<file context>
@@ -575,7 +575,7 @@
"northprint": "Prøvede cmux da det så godt ud — det er godt",
"indykish": "cmux er ret godt.",
- "kataring": "Skiftede til cmux.dev",
+ "kataring": "Skiftede til cmux.com",
"scottw": "Det har været sådan et nyttigt fund. Jeg kan ikke anbefale det nok.",
"johnblythe": "hentede det i weekenden og elskede det. har ventet på noget som dette.",
</file context>
| "kataring": "Skiftede til cmux.com", | |
| "kataring": "Skiftede til cmux.dev", |
| "northprint": "Ho provato cmux perché sembrava buono, ed è buono", | ||
| "indykish": "cmux è piuttosto buono.", | ||
| "kataring": "Sono passato a cmux.dev", | ||
| "kataring": "Sono passato a cmux.com", |
There was a problem hiding this comment.
P2: This edit alters user-generated testimonial wording. Keep the original cmux.dev text instead of rewriting the quote to cmux.com.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At web/messages/it.json, line 578:
<comment>This edit alters user-generated testimonial wording. Keep the original `cmux.dev` text instead of rewriting the quote to `cmux.com`.</comment>
<file context>
@@ -575,7 +575,7 @@
"northprint": "Ho provato cmux perché sembrava buono, ed è buono",
"indykish": "cmux è piuttosto buono.",
- "kataring": "Sono passato a cmux.dev",
+ "kataring": "Sono passato a cmux.com",
"scottw": "È stata una scoperta così utile. Non lo consiglio mai abbastanza.",
"johnblythe": "l'ho preso nel weekend e mi è piaciuto. aspettavo qualcosa del genere.",
</file context>
| "kataring": "Sono passato a cmux.com", | |
| "kataring": "Sono passato a cmux.dev", |
…ai#1716) Redirect cmux.dev to cmux.com with 301s for SEO
Summary
Migrates the website from cmux.dev to cmux.com. Middleware intercepts requests to cmux.dev and www.cmux.dev, issuing 301 permanent redirects to cmux.com while preserving the full path, query string, and locale prefix.
All internal references updated: sitemap, robots.txt, metadataBase, OpenGraph URLs, JSON-LD structured data, canonical URLs, legal pages, and all 18 i18n message files.
Unchanged (intentionally):
r.cmux.dev(requires separate DNS setup forr.cmux.com)Pre-merge checklist
Vercel / DNS setup (do before or at merge time)
cmux.comas a domain on the Vercel projectwww.cmux.comas a domain (redirect tocmux.com)cmux.devas an active domain (the middleware handles 301 redirects)www.cmux.devas an active domain alias (not redirect) so existing appPOST /api/feedbackcalls still work (301 converts POST to GET, breaking the endpoint for old app versions)r.cmux.devCNAME still resolves after any DNS changes (PostHog proxy)Google Search Console
cmux.comproperty in GSChttps://cmux.com/sitemap.xmlin the cmux.com GSC propertyVerification after deploy
curl -I https://cmux.dev/returns 301 tohttps://cmux.com/curl -I https://www.cmux.dev/returns 301 tohttps://cmux.com/curl -I https://cmux.dev/ja/docsreturns 301 tohttps://cmux.com/ja/docs(locale preserved)curl -I https://cmux.dev/blog/introducing-cmuxreturns 301 tohttps://cmux.com/blog/introducing-cmuxcurl -I https://cmux.dev/docs/getting-started?ref=fooreturns 301 with query preservedhttps://cmux.com/sitemap.xmlshows cmux.com URLs (not cmux.dev)https://cmux.com/robots.txtpoints to cmux.com/sitemap.xmlhttps://cmux.com/confirms metadataBase, OG URLs, JSON-LD all say cmux.comPOST https://www.cmux.dev/api/feedbackstill works (not redirected, served directly)Follow-up items (separate PRs)
r.cmux.comPostHog proxy, update posthog.tsxEnsemble notes
Claude critic: Use Vercel dashboard domain redirect for cmux.dev instead of middleware for edge performance. Critical blind spot: 301 redirects break POST requests (Swift app feedback endpoint). Keep www.cmux.dev as active alias.
Gemini: Recommends Vercel project domain settings over middleware. Warns about i18n redirect loops and Sparkle auto-updater URL breakage. Agrees 301 is correct status code.
Consensus: All models agree on 301 redirects, updating all internal references, GSC Change of Address tool, and keeping cmux.dev serving for a transition period. The middleware approach in this PR works but could be replaced by Vercel dashboard config for better edge performance.
Test plan
Summary by cubic
Redirect cmux.dev (and www) to cmux.com with 301s while preserving path, query, and locale. Updated all URLs and metadata to cmux.com across sitemap, robots.txt, canonical, OpenGraph, JSON-LD, legal pages, and i18n strings.
cmux.comandwww.cmux.comin Vercel (www redirects to root).cmux.devactive; keepwww.cmux.devas an alias (do not redirect) so POST/api/feedbackkeeps working.r.cmux.devstill resolves (PostHog proxy).https://cmux.com/sitemap.xml.Written for commit a2b40e2. Summary will update on new commits.
Summary by CodeRabbit
New Features
Chores