cmux/web/app/[locale]/(legal)/eula/page.tsx
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

206 lines
7.3 KiB
TypeScript

import type { Metadata } from "next";
export const metadata: Metadata = {
title: "EULA — cmux",
description: "End-User License Agreement for cmux",
};
export default function EulaPage() {
return (
<>
<h1>EULA</h1>
<p>Last updated: December 2, 2025</p>
<p>
Please read this End-User License Agreement carefully before
downloading or using cmux.
</p>
<h2>Interpretation and Definitions</h2>
<p>For the purposes of this Agreement:</p>
<ul>
<li>
<strong>&ldquo;Agreement&rdquo;</strong> means this End-User License
Agreement that forms the entire agreement between You and the Company
regarding the use of the Application.
</li>
<li>
<strong>&ldquo;Application&rdquo;</strong> means the cmux desktop
application for macOS, a native terminal application built on Ghostty.
</li>
<li>
<strong>&ldquo;Company&rdquo;</strong> (referred to as &ldquo;the
Company&rdquo;, &ldquo;We&rdquo;, &ldquo;Us&rdquo; or
&ldquo;Our&rdquo;) refers to Manaflow.
</li>
<li>
<strong>&ldquo;Content&rdquo;</strong> refers to content such as text,
code, images, or other information that can be created, processed, or
displayed by the Application.
</li>
<li>
<strong>&ldquo;Country&rdquo;</strong> refers to the United States.
</li>
<li>
<strong>&ldquo;Device&rdquo;</strong> means any macOS computer that
can run the Application.
</li>
<li>
<strong>&ldquo;You&rdquo;</strong> means the individual accessing or
using the Application.
</li>
</ul>
<h2>Acknowledgment</h2>
<p>
By downloading or using the Application, You are agreeing to be bound
by the terms of this Agreement. If You do not agree, do not download or
use the Application.
</p>
<p>
The Application is licensed, not sold, to You by the Company for use
strictly in accordance with the terms of this Agreement.
</p>
<h2>License</h2>
<h3>Scope of License</h3>
<p>
The Company grants You a revocable, non-exclusive, non-transferable,
limited license to download, install and use the Application strictly in
accordance with this Agreement, for your personal or internal business
purposes including commercial use in connection with software
development.
</p>
<h3>License Restrictions</h3>
<p>You agree not to, and You will not permit others to:</p>
<ul>
<li>
License, sell, rent, lease, assign, distribute, transmit, host, or
otherwise commercially exploit the Application or make it available to
any third party
</li>
<li>
Remove, alter or obscure any proprietary notice (including copyright
or trademark) of the Company
</li>
<li>
Modify, make derivative works of, disassemble, decrypt, reverse
compile or reverse engineer any part of the Application
</li>
</ul>
<h2>Intellectual Property</h2>
<p>
The Application, including all copyrights, patents, trademarks, trade
secrets and other intellectual property rights, is and shall remain the
sole and exclusive property of the Company.
</p>
<p>
You retain ownership of any code or content you create using the
Application.
</p>
<h2>Modifications and Updates</h2>
<p>
The Company reserves the right to modify, suspend or discontinue the
Application at any time, with or without notice and without liability to
You.
</p>
<p>
The Company may provide updates, patches, bug fixes, and other
modifications. Updates may modify or remove certain features. You agree
that all updates are subject to the terms of this Agreement.
</p>
<h2>Third-Party Services</h2>
<p>
The Application integrates with third-party services including Ghostty
(terminal rendering engine), Sentry (error tracking), and Sparkle
(auto-update framework). You acknowledge that the Company shall not be
responsible for any third-party services, including their accuracy,
completeness, or quality.
</p>
<h2>Term and Termination</h2>
<p>
This Agreement shall remain in effect until terminated by You or the
Company. The Company may terminate this Agreement at any time for any
reason.
</p>
<p>
This Agreement will terminate immediately if you fail to comply with any
provision. You may also terminate by deleting the Application and all
copies from your Device.
</p>
<p>
Upon termination, You shall cease all use of the Application and delete
all copies from your Device.
</p>
<h2>No Warranties</h2>
<p>
The Application is provided &ldquo;AS IS&rdquo; and &ldquo;AS
AVAILABLE&rdquo; without warranty of any kind. The Company expressly
disclaims all warranties, whether express, implied, statutory or
otherwise, including all implied warranties of merchantability, fitness
for a particular purpose, title and non-infringement.
</p>
<p>
Some jurisdictions do not allow the exclusion of certain types of
warranties, so some of the above exclusions may not apply to You.
</p>
<h2>Limitation of Liability</h2>
<p>
The entire liability of the Company under this Agreement shall be
limited to the amount actually paid by You for the Application, or 100
USD if You haven&rsquo;t purchased anything.
</p>
<p>
To the maximum extent permitted by law, in no event shall the Company
be liable for any special, incidental, indirect, or consequential
damages whatsoever.
</p>
<h2>Indemnification</h2>
<p>
You agree to indemnify and hold the Company harmless from any claim or
demand, including reasonable attorneys&rsquo; fees, due to or arising
out of your use of the Application or violation of this Agreement.
</p>
<h2>Severability and Waiver</h2>
<p>
If any provision of this Agreement is held to be unenforceable, it will
be changed and interpreted to accomplish its objectives to the greatest
extent possible, and the remaining provisions will continue in full
force and effect.
</p>
<h2>Governing Law</h2>
<p>
The laws of the United States, excluding conflicts of law rules, shall
govern this Agreement and your use of the Application.
</p>
<h2>Changes to This Agreement</h2>
<p>
The Company reserves the right to modify this Agreement at any time. If
a revision is material, we will provide at least 30 days&rsquo; notice.
By continuing to use the Application after revisions become effective,
You agree to be bound by the revised terms.
</p>
<h2>Contact Us</h2>
<p>If you have any questions about this Agreement:</p>
<ul>
<li>
Email us at{" "}
<a href="mailto:founders@manaflow.com">founders@manaflow.com</a>
</li>
</ul>
</>
);
}