Commit graph

73 commits

Author SHA1 Message Date
Lawrence Chen
4b878b48f0
Add /nightly page (#1378)
* Add /nightly page with localized content for all 18 locales

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Use actual nightly icon, remove Homebrew and How it works sections

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Change warning callout to plain text

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Remove subtitle from nightly page

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add GitHub and Discord #nightly-bugs links to warning text and README

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 07:41:30 -07:00
Lawrence Chen
cf75da8f8a
Internationalize website with next-intl for 19 languages (#1216)
* Add i18n framework with next-intl for 19 languages

Set up complete internationalization infrastructure:
- Install next-intl v4 with App Router support
- Create i18n config (routing, request, navigation)
- Add middleware for automatic locale detection from Accept-Language
- Restructure all routes under app/[locale]/
- Extract UI strings to messages/en.json
- Update all components to use useTranslations()
- Add language switcher dropdown in footer
- Support RTL for Arabic and Khmer
- Update sitemap with locale alternates
- Add generateStaticParams for all 19 locales

Languages: en, ja, zh-CN, zh-TW, ko, de, es, fr, it, da, pl, ru, bs, ar, no, pt-BR, th, tr, km

Locale detection: auto-detect from browser Accept-Language header,
with cookie persistence and locale prefix only for non-default (en).

* Add translations for de, fr, it, ja, zh-CN, zh-TW

* Add translations for ar, bs, da, es, km, no, pl, pt-BR, ru, th, tr

* Convert docs and legal pages to use useTranslations()

* Add i18n to keyboard shortcuts component

* Add i18n to wall-of-love, add missing blog posts to sitemap

* Add keyboard shortcuts and wallOfLove translations to all locales

* Update bun lockfile for next-intl dependency

* Fix t.rich() configPath: pass ReactNode not function for {var} interpolation

* Fix configPath: use rich text tag instead of plain interpolation for ReactNode

* Fix t.rich() interpolation: use rich text tags for all ReactNode placeholders

Changed {legacy}, {openShortcut}, {jumpShortcut} from plain variable
interpolation to <tag>content</tag> format so t.rich() gets proper
functions instead of values.

* Escape ICU curly braces in socketCallout rich text across all locales

* Fix i18n issues: Khmer RTL, zh-CN quality, locale-aware testimonials, hardcoded strings

- Fix Khmer (km) incorrectly marked as RTL (it's LTR, only Arabic is RTL)
- Fix zh-CN/zh-TW taglinePrefix to mention terminals and open source
- Add locale-aware testimonial translations: show original text, translate
  for non-matching locales, skip translation when locale matches original
- Translate hardcoded English table content in notifications page
- Add testimonial translations to all 19 locale files
- Remove unused setRequestLocale import and params from home page

* Address PR review comments: metadata localization, blog fixes, legal pages, accessibility

- Convert hardcoded metadata to generateMetadata with getTranslations on all docs, blog, community, and wall-of-love pages
- Fix blog canonical/OG URLs to be locale-aware
- Fix introducing-cmux .split(": ") by using separate label/desc translation keys
- Revert legal page titles to English (legal content stays English-only)
- Add focus-visible ring to language switcher for keyboard accessibility
- Preserve query string and hash when switching locale
- Convert site-footer to server component (remove unnecessary "use client")
- Remove .toLowerCase() on translated text in community page
- Add /docs/browser-automation and /wall-of-love to sitemap
- Fix keyboard-shortcuts jump link visibility with trimmed query
- Deduplicate blogSlugs by importing from blog-posts.ts
- Add typingCodingAgents/typingMultitasking translation keys to all locales
- Fix Spanish accent/tilde issues in es.json testimonials
- Fix nested <a> tag in homepage keyboard shortcuts feature
- Remove unused setRequestLocale import from homepage

* Convert remaining layout/index metadata to generateMetadata

- Root layout: locale-aware title, description, OG, and Twitter card metadata
- Docs layout: translated title template
- Blog layout: translated title template
- Blog index: locale-aware metadata

* Add translated metadata keys to all locales, fix docs redirect

- Add meta.title/description/ogDescription to all 18 non-English locales
- Add docs.layoutTitle, blog.layoutTitle/metaTitle/metaDescription to all locales
- Add blog post metadata (zenOfCmux, cmdShiftU, showHnLaunch, introducingCmux) to all locales
- Add community.metaTitle/metaDescription to all locales
- Fix docs index redirect to preserve locale prefix

* Add translated docs page metaTitle keys to all locales
2026-03-12 05:36:58 -07:00
austinpower1258
9676f39357 docs: add changelog entries for 0.62.0 2026-03-07 13:32:17 -08:00
Lawrence Chen
cda9c54adc
Change feedback recipient to feedback@manaflow.com (#1007) 2026-03-06 00:36:35 -08:00
Lawrence Chen
5041796eb2
Polish feedback help menu copy (#1003) 2026-03-05 22:58:49 -08:00
Lawrence Chen
29054dc709
Add sidebar help menu to footer (#958)
* Add sidebar help menu

* Fix help menu test wiring

* Fix help menu accessibility

* Use native popup for help menu

* Use icon button for sidebar help

* Add feedback composer and feedback API

* Allow preview builds without feedback env

* Tighten feedback upload limits

* Adjust sidebar footer padding

* Tighten sidebar footer spacing

* Add link affordances to help menu

* Polish sidebar feedback composer

* Move feedback icon to trailing edge

* Normalize help menu trailing icon sizes

* Enlarge help menu trailing icons

* Reduce help menu link icon size

* Shrink help menu link arrow

* Reduce help menu link arrow again

* Fix feedback message editor focus

* Add send feedback keyboard shortcut

* Polish feedback launch and delivery
2026-03-05 21:00:42 -08:00
Lawrence Chen
f5de515376
Add prev/next nav to blog posts, reduce index gap (#859)
* Add prev/next navigation to blog posts, reduce index gap

* Add download/GitHub CTA to all blog posts via layout

* Track blog post slug in PostHog download/GitHub click events
2026-03-04 01:52:56 -08:00
Lawrence Chen
66384358b6
Fix video layout shift on blog post (#858) 2026-03-04 01:37:30 -08:00
Lawrence Chen
9b78ef4726
Add blog post: My Favorite Feature: Cmd+Shift+U (#852)
* Add blog post about Cmd+Shift+U (Jump to Latest Unread)

* Rewrite blog post to remove AI rhetorical patterns

* Add video, trim post to two paragraphs
2026-03-04 01:35:11 -08:00
Lawrence Chen
a5de92e9d6
Add customizable notification sound (#839)
* Add customizable notification sound setting

Adds a "Notification Sound" picker in Settings > App that lets users
choose from macOS system sounds (Default, Basso, Blow, Glass, etc.)
or silence notifications entirely with "None".

Closes https://github.com/manaflow-ai/cmux/issues/608

* Add custom notification command with env vars and sound preview

Users can set a shell command in Settings > App > Notification Command
that runs on every notification. CMUX_NOTIFICATION_TITLE,
CMUX_NOTIFICATION_SUBTITLE, and CMUX_NOTIFICATION_BODY env vars are
set. Also adds a play button to preview system sounds and docs.
2026-03-04 00:12:05 -08:00
Lawrence Chen
a086ebc0f3
Add @tonkotsuboy_com testimonial to wall of love (#785) 2026-03-03 00:48:01 -08:00
Lawrence Chen
0cad7e0126
Reduce spacing under Changelog heading (#774)
Remove top padding on the first article and reduce the gap between
the heading and version list from 32px to 16px.
2026-03-02 20:11:47 -08:00
Lawrence Chen
aaf6a24165
Show GitHub star badge in mobile header (#735)
Removed the `hidden md:flex` wrapper so the GitHubStarsBadge renders on
all screen sizes. Made the component reusable with optional `location`
and `className` props. Replaced the plain "GitHub" text link in the
mobile drawer with the star badge component.
2026-03-01 19:07:20 -08:00
Lawrence Chen
7f9e04826a
Fade in GitHub stars badge and reduce right padding (#703)
Stars badge now fades in over 500ms instead of popping in abruptly.
Reduced right padding from pr-2 to pr-1.
2026-03-01 18:53:06 -08:00
Lawrence Chen
2e2e190bf4
Add GitHub star count to site header (#673)
* Add GitHub star count to site header

Fetches star count from GitHub API via /api/github-stars with 5-minute
server-side caching (ISR + stale-while-revalidate). Shows formatted
count (e.g. "2.2k") next to the GitHub link in both desktop nav and
mobile drawer.

* Move star count to separate badge left of download button

GitHub icon + formatted count as its own clickable element in the
right header section, separate from the nav links. Desktop only.

* Center GitHub stars badge vertically in header

* Add right padding to GitHub stars badge
2026-02-28 17:02:19 -08:00
Lawrence Chen
851c706db7
Redesign changelog page with feature highlights (#630)
* Redesign changelog page with feature highlights and visual hierarchy

Major releases now show narrative summaries, feature highlight cards
(with image support for screenshots), colored section badges, and
contributor avatars. Minor releases stay compact. Adds changelog-media.ts
as a supplementary data layer alongside CHANGELOG.md.

* Use Next.js Image for optimized loading and GitHub avatar remotes

* Add screenshots for Open With and Tab Colors features

* Add workspace metadata screenshot

* Switch to single-column inline layout, add command palette screenshot

* Conductor-style titles, narrower body, narrative descriptions, reorder features

* Add pin workspace and tab context menu screenshots, remove subtitle

* Add View Changelog link to front page, add DevTools to 0.60.0

* Add CJK input screenshot to 0.60.0

* Read real PNG dimensions at build time, add proper sizes attribute

* Fix image overflow: wrap in overflow-hidden container, add max-w-full

* Fix CSS cascade: move docs-content styles into @layer base

Unlayered CSS beats @layer utilities in the cascade, so .docs-content
rules (margins, padding, list-style) were overriding Tailwind utilities
on ul, li, h2 elements in the changelog page. Moving them into
@layer base lets utilities win without needing !important hacks.

* Switch docs-content spacing from margin to padding

Margins were collapsing and conflicting with Tailwind layout utilities
in the changelog. Padding doesn't collapse and can't interfere with
external spacing set by parent containers.

* Fix changelog layout: use flex column + inline styles for all spacing

Block layout was collapsing when articles had media content (h2, feature
divs, section divs all rendered at the same position). Switching to
display:flex + flex-direction:column on articles and using inline styles
for all spacing guarantees proper vertical stacking regardless of
docs-content CSS interference.

* Remove border from changelog images

* Replace devtools screenshot with cmux inspecting cmux.dev
2026-02-27 03:41:52 -08:00
Lawrence Chen
d3cf9335d2
Add browser automation docs page (#622)
* Add browser automation docs page (#594)

Comprehensive reference for all cmux browser subcommands: navigation,
waiting, DOM interaction, inspection, JS eval, state management,
tabs, dialogs, frames, and downloads. Includes common patterns section.

* Remove unnecessary callout from browser automation docs
2026-02-27 00:42:50 -08:00
Lawrence Chen
ccf320389c
Add "The Zen of cmux" blog post (#624)
* Add "The Zen of cmux" blog post

New blog post about cmux's philosophy: composable primitives over
opinionated solutions. Added to blog index and README.

* List all cmux primitives in blog post

Terminal, browser, notifications, workspaces, splits, tabs, and a CLI
to control all of it.

* Add Zen of cmux section to README
2026-02-27 00:24:47 -08:00
Lawrence Chen
4419dc981e
Add Max Forsey testimonial to wall of love (#614) 2026-02-26 23:43:45 -08:00
Lawrence Chen
2dea894e76
Add @connorelsea testimonial to wall of love (#531) 2026-02-25 19:53:55 -08:00
Lawrence Chen
d7dbde3535
Add Edward Grefenstette testimonial to wall of love (#529) 2026-02-25 19:16:23 -08:00
Lawrence Chen
b75637530a
Add @BChris91 testimonial to wall of love (#507) 2026-02-25 16:51:01 -08:00
Lawrence Chen
ec08d0aaa2
Add @johnblythe testimonial to wall of love (#503)
Add John Blythe's tweet to the testimonials array (appears on both the
front page and /wall-of-love). Include avatar image.
2026-02-25 16:30:59 -08:00
Lawrence Chen
83a6fd3457 Add Scott Watermasysk testimonial to wall of love 2026-02-25 16:05:14 -08:00
Lawrence Chen
b84cfa4bb2
Clarify session restore limits in docs (#472) 2026-02-25 03:02:56 -08:00
Lawrence Chen
161e7538f2
Add new testimonials to wall of love (#427)
* Add three new testimonials to wall of love

- Norihiro Narayama (@northprint) — Japanese testimonial with subtle translation
- Kishore Neelamegam (@indykish)
- かたりん (@kataring) — Japanese testimonial with subtle translation

* Add あさざ (@asaza_0928) testimonial to wall of love

* Move あさざ testimonial to third position
2026-02-23 23:34:25 -08:00
Lawrence Chen
8dc4f5bd05
Fix ASCII diagram font rendering on concepts page (#420)
* Fix ASCII diagram rendering: use system mono font for box-drawing chars

Geist Mono renders box-drawing characters (┌─┐│└┘) at double width,
breaking alignment in the concepts page diagram. Use system monospace
fonts (Menlo, Monaco, Consolas) for ascii-variant code blocks, which
handle these characters at correct single width.

* Fix CSS specificity: code element was overriding pre font-family

.docs-content code sets font-family to Geist Mono, which overrides
the system mono font set on the parent pre element. Geist Mono is
loaded with Latin subset only, lacking box-drawing glyphs (U+2500-257F),
so browsers fall back to CJK-aware fonts that render them double-width.

Fix: add font-family: inherit to .docs-content pre code so code
elements inside pre blocks inherit the correct font from their parent.
2026-02-23 20:19:45 -08:00
Lawrence Chen
f502f84144
Add Read the Docs link below bottom CTA on homepage (#411)
* Add "Read the Docs" link below bottom CTA on homepage

* Increase top padding on Read the Docs link

* Reduce docs horizontal padding on mobile

* Align docs content with header on mobile, increase top padding

* Make sticky header fully opaque with subtle bottom border

* Fix sticky header on mobile by containing horizontal overflow in content area

Wide content (hierarchy diagrams, code blocks) was causing horizontal
page scroll, which breaks position:sticky on mobile browsers. Added
overflow-x:hidden to the main content area (below the header in DOM)
and overflow-x:auto to docs pre blocks so they scroll internally.

* Remove bottom border from sticky header
2026-02-23 20:09:44 -08:00
Lawrence Chen
018554cc47
Fix theme toggle using system preference instead of selected theme (#326)
Tailwind v4 defaults dark: utilities to @media (prefers-color-scheme)
strategy. Add @custom-variant to use class-based dark mode matching
the next-themes ThemeProvider attribute="class" configuration.

Fixes https://github.com/manaflow-ai/cmux/issues/325
2026-02-22 17:10:11 -08:00
Lawrence Chen
c51a5bf7cf
Merge pull request #316 from 0xble/feat/rename-workspace-keybind
Add keyboard shortcut to rename current workspace
2026-02-22 17:00:19 -08:00
Lawrence Chen
26d44e84da
Fix changelog page rendering markdown links as raw text (#320)
The InlineCode component only handled backtick code spans but ignored
markdown links, causing PR/issue references to display as raw
[#N](url) text instead of clickable links. Rename to InlineMarkdown
and add link parsing to the split regex.
2026-02-22 16:24:59 -08:00
Lawrence Chen
f7457055f1
Add sidebar metadata CLI subcommands and API docs (#305)
* Add sidebar metadata CLI subcommands and API docs

Expose set-status, clear-status, list-status, set-progress,
clear-progress, log, clear-log, list-log, and sidebar-state as
proper CLI subcommands with --help support and usage() listing.
Previously these only existed as raw socket commands.

Also adds a "Sidebar metadata commands" section to the docs site
API reference page.

* Quote multi-word values in socket command strings

Fix set-progress --label and log message forwarding to properly
quote values before sending to the socket tokenizer. Without
quoting, multi-word labels like "Build step one" would be split
into separate tokens. Also quote --source values for consistency.

* Fix socket quoting: escape backslashes and quote status values

Add socketQuote() helper that escapes both backslashes and double
quotes before wrapping in quotes. Apply it to:
- set-status value (prevents --flags in values being parsed as options)
- set-status --icon and --color values
- set-progress --label
- log --source and message text

Fixes values like "pytest --maxfail=1" or "C:\new\build" being
mangled by the socket tokenizer.

* Escape newlines in socketQuote to prevent socket framing breakage

The socket protocol uses newline as message terminator, so embedded
newlines/carriage returns in values would truncate the command.

* Parse flags before positionals in set-status, clear-status, set-progress

Fixes flags-first invocation like `cmux set-status --workspace workspace:2
build compiling` which previously grabbed `--workspace` as the key.
Now all flags are extracted first, then positional args are validated.
2026-02-22 16:06:32 -08:00
Brian Le
1824d1a8f1
feat(shortcuts): add rename-workspace keybind 2026-02-22 18:38:34 -05:00
Lawrence Chen
6d64ca938e
Add Reddit testimonial from u/afruth to wall of love (#314) 2026-02-22 15:37:22 -08:00
Lawrence Chen
1809b06867
Add Nick Schrock testimonial and subtitles to wall of love (#297)
* Add Nick Schrock testimonial and subtitles to wall of love

- Add Nick Schrock (@schrockn, Dagster Labs founder, GraphQL co-creator) testimonial
- Add subtitle field for notable contributors (Mitchell Hashimoto, Nick Schrock)
- Render subtitle in TestimonialCard between name and handle

* Add Nick Schrock profile photo

* Download avatar images to repo instead of hotlinking

* Show subtitle after name in attribution lines
2026-02-22 01:48:29 -08:00
Lawrence Chen
19f6f9137e
Sync homepage features with README (#280)
* Sync homepage features with README

Add missing features: Notification panel, In-app browser, Ghostty
compatible. Update existing descriptions to match README (notification
rings, vertical tabs, socket API renamed to Scriptable).

* Shorten notification feature descriptions

* Remove Ghostty compatible from homepage features

* Move Vertical tabs to top of features list

* Remove Notification panel from homepage features

* Shorten Scriptable feature description

* Fix notification rings description: panes only
2026-02-21 06:36:19 -08:00
Lawrence Chen
14603bd9f8
Set community gap to 16px, add dingyi China tweet to blog post (#279)
- Fix community section gap (6px → 16px)
- Add dingyi tweet showing cmux went semi-viral in China
- Change "semi-viral in Japan" to "viral in Japan" + "semi-viral in China"
2026-02-21 06:26:55 -08:00
Lawrence Chen
64bb248f20
Replace blur placeholder with opacity fade-in on hero screenshot (#278) 2026-02-21 06:24:59 -08:00
Lawrence Chen
4f1d120d2e
Fix Show HN blog summary: hit #2, Mitchell Hashimoto, viral in Japan (#277) 2026-02-21 06:19:14 -08:00
Lawrence Chen
be9b994a79
Add homepage wall of love, FAQ, blog post, footer redesign, and SEO improvements
## Summary
- Add Community (testimonials) section to homepage with inline avatars
- Add FAQ section sourced from HN discussion questions
- Add hero screenshot with next/image optimization
- Add Show HN blog post with react-tweet embeds, star history chart, and HN quotes
- Redesign footer with 4-column grid layout (Product, Resources, Legal, Social)
- Add Download/GitHub CTA buttons at bottom of homepage and blog post
- Add dev spacing controls for features, FAQ, and community sections
- Fix hydration error (JSON-LD moved to head)
- SEO: full metadata on blog posts, robots.txt, blog pages in sitemap, canonical URLs
- Replace em dashes site-wide, fix notification descriptions

## Testing
- `bun tsc --noEmit` passes clean
- Dev server verified on port 3001

## Related
- Task: Add wall of love to main web page + landing screenshot
2026-02-21 06:16:38 -08:00
Lawrence Chen
9c48d18666
Add wall of love page (#243)
* Add wall of love page with community testimonials

New /wall-of-love route showcasing quotes from X and Hacker News,
featuring Mitchell Hashimoto, Oliver Kriška, Joe Riddle, Marc,
johnthedebs, and dchu17. Masonry card layout with profile pics
and platform badges.

* Use YC logo for Hacker News testimonials
2026-02-21 04:25:00 -08:00
Lawrence Chen
9a8005a57f
Update Discord invite links to new permanent URL (#238)
Replace old discord.com/invite/QRxkhZgY with discord.gg/xsgFEVrWCZ
across README, community page, and nav footer.
2026-02-21 01:14:12 -08:00
Lawrence Chen
01313b6c9a Expand default HTTP host allowlist for local dev 2026-02-20 19:55:59 -08:00
Lawrence Chen
c6675c1a88 Clarify optional 0.0.0.0 allowlist usage 2026-02-20 19:49:02 -08:00
Lawrence Chen
a210d77f7f Clarify embedded browser allowlist wording and docs 2026-02-20 19:45:57 -08:00
Lawrence Chen
df9ba6dcd9
Fix #155: remap-aware bonsplit tooltips + browser split shortcuts (#200)
* Issue #155: remap bonsplit tooltips and add browser split shortcuts

* Fix split button mousedown feedback regression

* Match split button sizing with main
2026-02-20 15:17:00 -08:00
Lawrence Chen
c40ec75616
docs(web): refresh API access modes and socket examples (#196)
* docs(web): refresh API socket and automation mode docs

* docs(web): fix v1 JSON note and restore API metadata scope
2026-02-20 14:19:48 -08:00
Austin Wang
a804a8e767
Update landing page discord invite link
Merged by manaflow for task kn7d8qr7jvjsv3wf1axwq77gs981ha9j.
2026-02-20 14:09:31 -08:00
Austin Wang
bd9871d6c4
Fix CLI symlink path in docs
Merged by manaflow for task kn78rbgm4extfnpjcazqmw9c7d81hgdb.
2026-02-20 13:53:26 -08:00
Lawrence Chen
cb86322e98
Remove docs-site, add PostHog analytics to web (#66)
- Delete docs-site/ (superseded by web/app/docs)
- Add posthog-js with Vercel reverse proxy at /cdata to bypass adblockers
- Track pageviews (SPA-aware), download clicks (hero/navbar/mobile_drawer),
  and GitHub link clicks (hero/navbar/mobile_drawer/footer)
2026-02-18 04:00:04 -08:00