Repository navigation
Add waitlist link to platforms FAQ answer - #7307
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughIntroduces a new ChangesFAQ Waitlist CTA
Estimated code review effort: 2 (Simple) | ~10 minutes Sequence Diagram(s)sequenceDiagram
participant User
participant FaqPlatformAnswer
participant posthog
participant WaitlistDialog
User->>FaqPlatformAnswer: click waitlist button
FaqPlatformAnswer->>posthog: capture cmuxterm_waitlist_opened event
FaqPlatformAnswer->>FaqPlatformAnswer: setOpen(true)
FaqPlatformAnswer->>WaitlistDialog: render with target="any", open=true, location
User->>WaitlistDialog: interact with dialog
WaitlistDialog->>FaqPlatformAnswer: onOpenChange(false)
Related Issues: None found. Related PRs: None found. Suggested labels: frontend, i18n Suggested reviewers: None identified. 🐰 A rabbit clicks a waitlist door, Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 error, 1 warning)
✅ Passed checks (23 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
Greptile SummaryThis PR adds a new
Confidence Score: 5/5Safe to merge — marketing-site FAQ copy change that reuses existing waitlist dialog and analytics patterns with no auth or data-path impact. The new component is a faithful copy of the WaitlistCallout pattern: native button element, explicit type="button", identical PostHog event shape, and the same target={open ? "any" : null} idiom already used by the existing dialog callers. No new data flows, no auth boundaries crossed, and the FAQ JSON-LD is unaffected by the new tag. No files require special attention. The 18 remaining locale message files were flagged in a previous review thread as missing the waitlist chunk — that discussion is already open on this PR. Important Files Changed
Sequence Diagram%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
participant User
participant FaqPlatformAnswer
participant PostHog
participant WaitlistDialog
User->>FaqPlatformAnswer: Click "Join the waitlist"
FaqPlatformAnswer->>PostHog: "capture("cmuxterm_waitlist_opened", {location:"faq", platform:"any"})"
FaqPlatformAnswer->>FaqPlatformAnswer: setOpen(true)
FaqPlatformAnswer->>WaitlistDialog: "open=true, target="any", location="faq""
WaitlistDialog->>User: Show platform checkboxes + email form
User->>WaitlistDialog: Submit email + platforms
WaitlistDialog->>WaitlistDialog: verifyWaitlistEmail()
WaitlistDialog->>PostHog: POST /e/ cmuxterm_waitlist_signup
WaitlistDialog->>WaitlistDialog: notifyWaitlistSlack()
WaitlistDialog->>User: Show success state
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
participant User
participant FaqPlatformAnswer
participant PostHog
participant WaitlistDialog
User->>FaqPlatformAnswer: Click "Join the waitlist"
FaqPlatformAnswer->>PostHog: "capture("cmuxterm_waitlist_opened", {location:"faq", platform:"any"})"
FaqPlatformAnswer->>FaqPlatformAnswer: setOpen(true)
FaqPlatformAnswer->>WaitlistDialog: "open=true, target="any", location="faq""
WaitlistDialog->>User: Show platform checkboxes + email form
User->>WaitlistDialog: Submit email + platforms
WaitlistDialog->>WaitlistDialog: verifyWaitlistEmail()
WaitlistDialog->>PostHog: POST /e/ cmuxterm_waitlist_signup
WaitlistDialog->>WaitlistDialog: notifyWaitlistSlack()
WaitlistDialog->>User: Show success state
Reviews (3): Last reviewed commit: "Add waitlist link to platforms FAQ answe..." | Re-trigger Greptile |
| "faqGhosttyA": "cmux is not a fork of Ghostty. It uses <link>libghostty</link> as a library for terminal rendering, the same way apps use WebKit for web views. Ghostty is a standalone terminal; cmux is a different app built on top of its rendering engine.", | ||
| "faqPlatformQ": "What platforms does it support?", | ||
| "faqPlatformA": "macOS only, for now. cmux is a native Swift + AppKit app.", | ||
| "faqPlatformA": "macOS only, for now. cmux is a native Swift + AppKit app. <waitlist>Join the waitlist</waitlist> to hear when Linux, Windows, and Android are ready.", |
There was a problem hiding this comment.
Waitlist link missing from 18 locales
faqPlatformA was updated with the <waitlist> chunk only in en.json and ja.json, but web/i18n/routing.ts defines 20 supported locales. The remaining 18 — zh-CN, zh-TW, ko, de, es, fr, it, da, pl, ru, bs, ar, no, pt-BR, th, tr, km, and uk — still carry the old message without the tag. When FaqPlatformAnswer calls t.rich("faqPlatformA", { waitlist: ... }) on any of those locales, the waitlist renderer is never invoked because the message string contains no <waitlist> tokens, so the button never appears and users see only the old macOS-only sentence with no path to the waitlist. The feature is silently absent on 18 of 20 supported locales.
Rule Used: Flag production user-facing text that is not fully... (source)
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ccfd1700b3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| return ( | ||
| <> | ||
| <p className="text-muted"> | ||
| {t.rich("faqPlatformA", { |
There was a problem hiding this comment.
Add the waitlist chunk to every locale
For routed locales other than English/Japanese, deepMergeMessages keeps the locale-specific home.faqPlatformA value, and those files still contain the old plain string without a <waitlist> tag (for example web/messages/de.json:81 and web/messages/zh-CN.json:81). In those locales, this t.rich call never invokes the waitlist renderer, so the new FAQ waitlist CTA silently disappears even though the locale is served via web/i18n/routing.ts. Please update all routed locale message files or render the CTA outside the translated chunk so every locale gets the link.
Useful? React with 👍 / 👎.
The "What platforms does it support?" FAQ answer now ends with an inline "Join the waitlist" trigger that opens the generic waitlist dialog (target "any"), the same dialog used by WaitlistCallout. New client component FaqPlatformAnswer renders the answer via t.rich with a <waitlist> chunk and captures cmuxterm_waitlist_opened with location "faq". JSON-LD stripTags already drops the new tag. Copy updated in en.json and ja.json. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
85e8ab3 to
24164c6
Compare
…ng, themes) Delta: #7318/#7319 mouse cursor-shape + right/middle drag forwarding, #7320 ghostty upstream, #6664 iOS themes, #7196 iOS scroll, #7257/#7307 web, #7329 CLI suggestions, #7222 codex resume update-suppression. Conflicts resolved keeping HEAD structure: - GhosttyTerminalView.swift: took main's viewDidEndLiveResize + resetCursorRects (cursor-shape #7318; ghosttyMouseShape/ghosttyMouseCursor already in HEAD). - Mobile/MobileHostService.swift: union (kept HEAD sharedRequestActivity + main publicStatusPayload theme payload #6664). - project.pbxproj: union-dedup, normalized; test-wiring green. - swift-file-length-budget.tsv regenerated. #7222 (codex update-check suppression) partially landed: the CMUXAgentLaunch package part (AgentResumeArgv.codexUpdateCheckSuppressionOverride) auto-merged and is present; the app-target files (+CodexUpdateCheck.swift + test) extend SurfaceResumeCommandCanonicalizer, a type HEAD dissolved into the CmuxWorkspaces package, so they can't compile and the suppression was never wired (call site was in the HEAD-deleted +PortableAgentExecutable). Removed those two files; re-wire recorded in merge-deferred-gaps. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The "What platforms does it support?" FAQ answer was static text. It now ends with an inline Join the waitlist trigger that opens the generic waitlist dialog (target
any), the same dialogWaitlistCalloutuses.New client component
FaqPlatformAnswerrenders the answer witht.richand a<waitlist>chunk, and capturescmuxterm_waitlist_openedwithlocation: "faq". The FAQ JSON-LD already strips tags, so the new chunk drops out of structured data. Copy updated inen.jsonandja.json.🤖 Generated with Claude Code
Note
Low Risk
Marketing copy and a small client FAQ widget only; no auth, API, or data-model changes.
Overview
The “What platforms does it support?” FAQ answer is no longer plain text: it now includes an inline Join the waitlist control that opens the same generic
WaitlistDialog(target: "any") used elsewhere on the landing page.A new client component
FaqPlatformAnswerrendersfaqPlatformAviat.richwith a<waitlist>chunk styled like other FAQ links, firescmuxterm_waitlist_openedwithlocation: "faq", and wires dialog open state. The home page swaps the static<p>for this component.EN and JA copy now mention Linux/Windows/Android and embed the waitlist phrase in the translation string. FAQ JSON-LD still uses
stripTags, so the<waitlist>markup is dropped from structured answers.Reviewed by Cursor Bugbot for commit 24164c6. Bugbot is set up for automated code reviews on this repo. Configure here.
Summary by cubic
Adds an inline “Join the waitlist” link to the “What platforms does it support?” FAQ. Opens the generic waitlist dialog and logs an open event from the FAQ. EN/JA copy updated; structured data unchanged.
New Features
FaqPlatformAnswerwith an inline waitlist trigger; opensWaitlistDialog(target: "any") and capturescmuxterm_waitlist_openedwithlocation: "faq".Refactors
WorkspaceDetailView.swiftfrom 694→697 to unblock checks; no app code changes.Written for commit 85e8ab3. Summary will update on new commits.
Summary by CodeRabbit
New Features
Bug Fixes