* 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
* 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
* 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
* 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
- 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)
Next.js App Router serves app/icon.png (32x32 favicon) at /icon.png,
shadowing the 256x256 public/icon.png. Rename to /logo.png so the
high-res image is served for the site logo.
ThemeToggle was fixed-positioned over the hamburger menu on mobile.
Move it into SiteHeader so both controls sit together. Add
whitespace-nowrap to hero Download/GitHub buttons and flex-wrap
to their container so they don't break across lines on narrow screens.
- CI: replace Node/npm with Bun
- Add view-transition animations for theme toggle
- Set html background for flash-free theme switches
- UI refinements to download button, brew command, and layout
- Replace package-lock.json with bun.lock
- Minimal centered layout with Geist sans font
- Typing animation cycling through agent names
- Light/dark mode toggle via next-themes
- Download for Mac button linking to latest DMG
- Feature list, GitHub + Docs footer links
- Meta tags and Open Graph for SEO
- CI: add web typecheck job (tsc --noEmit)