* Add tab color feature to sidebar workspaces
Lets users assign a custom background color to any sidebar workspace tab
via a right-click "Tab Color" submenu. The primary motivation is working
across multiple projects simultaneously — coloring tabs by project makes
it instant to visually locate the right workspace without reading the title.
- Workspace: adds `customColor: String?` (@Published hex string) and
`setCustomColor()` setter
- TabManager: adds `setTabColor(tabId:color:)` convenience method
- ContentView: 16-color dark palette (all luminance < 0.30, white text
always readable), `Color(hex:)` extension, `coloredCircleImage(hex:)`
helper to render bitmapped NSImage circles (needed because macOS menus
strip SwiftUI foregroundColor from SF Symbols), updated `backgroundColor`
to use custom color at full/70%/35% opacity for active/inactive/
multi-selected states, "Tab Color" submenu in context menu with
"Clear Color" option, and a 1.5pt `Color.primary` border overlay on
the active tab for clear selection indication when custom colors are set
* Add workspace tab color schemes with settings and debug toggles
* Remove Kelly scheme and keep only original tab color palette
* Preserve neutral grayscale when brightening tab colors
* Harden UpdatePill UI test polling timeouts
---------
Co-authored-by: Andreas Fruth <andreas.fruth@gmail.com>
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
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.
Release changelogs now credit contributors inline (Bun-style):
- Per-entry "thanks @user!" for community code contributions
- Per-entry "thanks @user for the report!" for bug reporters
- "Thanks to N contributors!" summary section at bottom of each release
- Core team (lawrencecchen, austinywang) excluded from per-entry callouts
* 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.
* 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
* 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
- 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"
## 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
* Address PR 242 follow-ups for titlebar and browser background
* Restore titlebar border per follow-up scope
* Refresh browser under-page color with Ghostty opacity
* Browser: theme blank page fallback for about:blank
* Browser: keep new tabs webview-less until first nav