forked from Rosetta/landing
Compare commits
4 Commits
8efaafb833
...
legal-page
| Author | SHA1 | Date | |
|---|---|---|---|
| 2eab462ed6 | |||
| a26785eb18 | |||
| 580a0da008 | |||
| 633c338c16 |
@@ -4,14 +4,14 @@
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Rosetta - Secure & Private Messaging | End-to-End Encrypted Chat</title>
|
<title>Rosetta - Secure & Private Messaging | End-to-End Encrypted Chat</title>
|
||||||
<meta name="description" content="Rosetta is a secure, fast, and private messaging app with military-grade end-to-end encryption. Download for macOS, Windows, and Linux. No phone number required." />
|
<meta name="description" content="Rosetta is a secure, fast, and private messaging app with military-grade end-to-end encryption. Download for Windows, Linux, and Android. No phone number required." />
|
||||||
<meta name="keywords" content="secure messaging, encrypted chat, private messenger, end-to-end encryption, secure communication" />
|
<meta name="keywords" content="secure messaging, encrypted chat, private messenger, end-to-end encryption, secure communication" />
|
||||||
<meta name="author" content="Rosetta Team" />
|
<meta name="author" content="Rosetta Team" />
|
||||||
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
|
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://rosetta.im/" />
|
<meta property="og:url" content="https://rosetta.im/" />
|
||||||
<meta property="og:title" content="Rosetta - Secure Messaging for Everyone" />
|
<meta property="og:title" content="Rosetta - Secure Messaging for Everyone" />
|
||||||
<meta property="og:description" content="End-to-end encrypted messaging app with zero-knowledge architecture. Download for macOS, Windows, Linux." />
|
<meta property="og:description" content="End-to-end encrypted messaging app with zero-knowledge architecture. Download for Windows, Linux, and Android." />
|
||||||
<meta property="og:image" content="/og-image.png" />
|
<meta property="og:image" content="/og-image.png" />
|
||||||
<meta property="og:site_name" content="Rosetta" />
|
<meta property="og:site_name" content="Rosetta" />
|
||||||
<meta property="og:locale" content="en_US" />
|
<meta property="og:locale" content="en_US" />
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
"description": "Secure end-to-end encrypted messaging application",
|
"description": "Secure end-to-end encrypted messaging application",
|
||||||
"url": "https://rosetta.im",
|
"url": "https://rosetta.im",
|
||||||
"applicationCategory": "CommunicationApplication",
|
"applicationCategory": "CommunicationApplication",
|
||||||
"operatingSystem": ["Windows", "macOS", "Linux", "Android"],
|
"operatingSystem": ["Windows", "Linux", "Android"],
|
||||||
"offers": {
|
"offers": {
|
||||||
"@type": "Offer",
|
"@type": "Offer",
|
||||||
"price": "0",
|
"price": "0",
|
||||||
|
|||||||
227
public/privacy/index.html
Normal file
227
public/privacy/index.html
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Privacy Policy for Rosetta</title>
|
||||||
|
<meta
|
||||||
|
name="description"
|
||||||
|
content="Privacy Policy for Rosetta by ROSETTA CLOUD SERVICES LIMITED: how data is handled in the end-to-end encrypted messenger."
|
||||||
|
/>
|
||||||
|
<link rel="canonical" href="https://rosetta.im/privacy/" />
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
color-scheme: light dark;
|
||||||
|
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #1f2937;
|
||||||
|
background: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
background: linear-gradient(180deg, rgba(0, 102, 255, 0.04), rgba(255, 255, 255, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
width: min(880px, calc(100% - 40px));
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 56px 0 72px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #0066ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin: 0 0 8px;
|
||||||
|
font-size: clamp(32px, 5vw, 48px);
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-top: 36px;
|
||||||
|
font-size: 22px;
|
||||||
|
line-height: 1.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
p,
|
||||||
|
li {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.muted {
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.address {
|
||||||
|
white-space: pre-line;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
color: #f3f4f6;
|
||||||
|
background: #101113;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: linear-gradient(180deg, rgba(0, 102, 255, 0.12), rgba(16, 17, 19, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
.muted {
|
||||||
|
color: #a1a1aa;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<main>
|
||||||
|
<a class="back" href="/">Back to home</a>
|
||||||
|
<h1>Privacy Policy for Rosetta</h1>
|
||||||
|
<p class="muted">Last updated: May 22, 2026</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Rosetta IM is operated by ROSETTA CLOUD SERVICES LIMITED ("Rosetta",
|
||||||
|
"we", "us", or "our"). This Privacy Policy explains how we handle
|
||||||
|
information when you use Rosetta, our end-to-end encrypted messaging
|
||||||
|
application, and our website at https://rosetta.im.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>1. Information We Collect</h2>
|
||||||
|
<p>
|
||||||
|
Rosetta is designed to minimize data collection. Registration does not
|
||||||
|
require a phone number, email address, or real name. The app uses
|
||||||
|
cryptographic keys and technical identifiers needed to operate the
|
||||||
|
service.
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Account and cryptographic data: public keys, account identifiers, and
|
||||||
|
related technical data needed to identify users and deliver encrypted
|
||||||
|
messages. Private keys are intended to remain on your device.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Encrypted messages and media in transit: message text, files, and
|
||||||
|
media are encrypted before they are sent. Our servers are designed to
|
||||||
|
relay encrypted payloads and encrypted message keys, not to read
|
||||||
|
message contents.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Device and app data: app version, operating system, platform,
|
||||||
|
architecture, update request data, IP address, timestamps, and server
|
||||||
|
logs needed for security, reliability, abuse prevention, and update
|
||||||
|
delivery.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Support communications: if you contact us, we may process your email
|
||||||
|
address, message content, and any information you choose to provide.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>2. Information We Do Not Collect for Advertising</h2>
|
||||||
|
<p>
|
||||||
|
We do not use third-party advertising SDKs, advertising trackers, or
|
||||||
|
cross-app tracking. We do not sell your personal information.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>3. How We Use Information</h2>
|
||||||
|
<p>We use information only to:</p>
|
||||||
|
<ul>
|
||||||
|
<li>provide, maintain, and secure Rosetta;</li>
|
||||||
|
<li>route encrypted messages between users;</li>
|
||||||
|
<li>deliver app updates and downloads;</li>
|
||||||
|
<li>detect abuse, prevent fraud, and protect service integrity;</li>
|
||||||
|
<li>respond to support requests;</li>
|
||||||
|
<li>comply with legal obligations.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>4. End-to-End Encryption</h2>
|
||||||
|
<p>
|
||||||
|
Rosetta is designed so that message content is encrypted before it
|
||||||
|
reaches our servers. Our servers are not intended to have access to
|
||||||
|
decrypted message contents or decrypted media. Messages are stored on
|
||||||
|
users' devices rather than as readable message history on our servers.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>5. Sharing of Information</h2>
|
||||||
|
<p>We may share limited information only with:</p>
|
||||||
|
<ul>
|
||||||
|
<li>infrastructure and hosting providers that help us operate Rosetta;</li>
|
||||||
|
<li>professional advisers, if necessary;</li>
|
||||||
|
<li>
|
||||||
|
authorities or other parties when required by law or to protect rights,
|
||||||
|
safety, and security.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Any service provider that processes user data for us must protect it
|
||||||
|
consistently with this Privacy Policy.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>6. Retention</h2>
|
||||||
|
<p>
|
||||||
|
Encrypted message data in transit is processed only as needed to deliver
|
||||||
|
the service. Technical logs and support communications are retained only
|
||||||
|
for as long as reasonably necessary for security, reliability, support,
|
||||||
|
legal, and operational purposes.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>7. Your Choices and Rights</h2>
|
||||||
|
<p>
|
||||||
|
Depending on where you live, you may have rights to access, correct,
|
||||||
|
delete, or object to certain processing of your personal information. To
|
||||||
|
make a request, contact us at admin@rosetta.im.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Because Rosetta minimizes account data and uses cryptographic
|
||||||
|
identifiers, some requests may require you to provide information that
|
||||||
|
helps us verify control of the relevant account or keys.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>8. Children</h2>
|
||||||
|
<p>
|
||||||
|
Rosetta is not directed to children under 13, or the minimum age required
|
||||||
|
in your jurisdiction. If we learn that we have collected personal
|
||||||
|
information from a child without required consent, we will take
|
||||||
|
appropriate steps to delete it.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>9. International Transfers</h2>
|
||||||
|
<p>
|
||||||
|
ROSETTA CLOUD SERVICES LIMITED may process information in countries other
|
||||||
|
than where you live. Where required, we use appropriate safeguards for
|
||||||
|
international transfers.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>10. Security</h2>
|
||||||
|
<p>
|
||||||
|
We use technical and organizational measures designed to protect
|
||||||
|
information. No system is perfectly secure, and users are responsible for
|
||||||
|
protecting their devices, private keys, and account access.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>11. Changes to This Policy</h2>
|
||||||
|
<p>
|
||||||
|
We may update this Privacy Policy from time to time. If we make material
|
||||||
|
changes, we will update the "Last updated" date and, where appropriate,
|
||||||
|
provide additional notice.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>12. Contact</h2>
|
||||||
|
<p class="address">ROSETTA CLOUD SERVICES LIMITED
|
||||||
|
Registered address:
|
||||||
|
UNIT 704C 7/F BLK 3 NAN FUNG IND CITY
|
||||||
|
18 TIN HAU RD
|
||||||
|
TUEN MUN
|
||||||
|
HONG KONG</p>
|
||||||
|
<p>Email: <a href="mailto:admin@rosetta.im">admin@rosetta.im</a></p>
|
||||||
|
<p>Phone: <a href="tel:+85228910030">+852 2891 0030</a></p>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
257
public/terms/index.html
Normal file
257
public/terms/index.html
Normal file
@@ -0,0 +1,257 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Terms of Use for Rosetta</title>
|
||||||
|
<meta
|
||||||
|
name="description"
|
||||||
|
content="Terms of Use and End User License Agreement for Rosetta by ROSETTA CLOUD SERVICES LIMITED."
|
||||||
|
/>
|
||||||
|
<link rel="canonical" href="https://rosetta.im/terms/" />
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
color-scheme: light dark;
|
||||||
|
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #1f2937;
|
||||||
|
background: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
background: linear-gradient(180deg, rgba(0, 102, 255, 0.04), rgba(255, 255, 255, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
width: min(880px, calc(100% - 40px));
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 56px 0 72px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #0066ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin: 0 0 8px;
|
||||||
|
font-size: clamp(32px, 5vw, 48px);
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-top: 36px;
|
||||||
|
font-size: 22px;
|
||||||
|
line-height: 1.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
p,
|
||||||
|
li {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.muted {
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.address {
|
||||||
|
white-space: pre-line;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
color: #f3f4f6;
|
||||||
|
background: #101113;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: linear-gradient(180deg, rgba(0, 102, 255, 0.12), rgba(16, 17, 19, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
.muted {
|
||||||
|
color: #a1a1aa;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<main>
|
||||||
|
<a class="back" href="/">Back to home</a>
|
||||||
|
<h1>Terms of Use for Rosetta</h1>
|
||||||
|
<p class="muted">Last updated: May 22, 2026</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
These Terms of Use and End User License Agreement ("Terms") govern your
|
||||||
|
use of Rosetta, an end-to-end encrypted messaging application operated by
|
||||||
|
ROSETTA CLOUD SERVICES LIMITED ("Rosetta", "we", "us", or "our").
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
By downloading, installing, or using Rosetta, you agree to these Terms.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>1. Agreement Between You and Rosetta</h2>
|
||||||
|
<p>
|
||||||
|
These Terms are concluded between you and ROSETTA CLOUD SERVICES LIMITED
|
||||||
|
only, and not with Apple. We, not Apple, are solely responsible for
|
||||||
|
Rosetta and its content.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>2. License</h2>
|
||||||
|
<p>
|
||||||
|
We grant you a limited, non-exclusive, non-transferable, revocable
|
||||||
|
license to use Rosetta for personal or lawful business communication on
|
||||||
|
Apple-branded products that you own or control, as permitted by the Apple
|
||||||
|
Media Services Terms and Conditions, including applicable Family Sharing,
|
||||||
|
volume purchasing, or Legacy Contacts rules.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You may not copy, modify, reverse engineer, decompile, resell,
|
||||||
|
sublicense, rent, lease, or distribute Rosetta except as permitted by
|
||||||
|
applicable law.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>3. Privacy</h2>
|
||||||
|
<p>
|
||||||
|
Your use of Rosetta is also governed by our Privacy Policy, available at
|
||||||
|
<a href="/privacy/">https://rosetta.im/privacy/</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>4. Encrypted Messaging</h2>
|
||||||
|
<p>
|
||||||
|
Rosetta is designed for end-to-end encrypted communication. You are
|
||||||
|
responsible for protecting your device, private keys, and access
|
||||||
|
credentials. If you lose access to your device or keys, we may not be
|
||||||
|
able to restore your messages or account data.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>5. Acceptable Use</h2>
|
||||||
|
<p>You agree not to use Rosetta to:</p>
|
||||||
|
<ul>
|
||||||
|
<li>violate any law or regulation;</li>
|
||||||
|
<li>infringe the rights of others;</li>
|
||||||
|
<li>send spam, malware, scams, threats, harassment, or unlawful content;</li>
|
||||||
|
<li>
|
||||||
|
attempt to disrupt, overload, reverse engineer, or compromise Rosetta
|
||||||
|
or its infrastructure;
|
||||||
|
</li>
|
||||||
|
<li>impersonate another person or misrepresent your identity;</li>
|
||||||
|
<li>use Rosetta for any prohibited or sanctioned activity.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>6. No Emergency Use</h2>
|
||||||
|
<p>
|
||||||
|
Rosetta is not designed for emergency calls, emergency messaging, or
|
||||||
|
communications where failure or delay could cause death, personal injury,
|
||||||
|
or serious damage. Use official emergency channels when needed.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>7. User Content</h2>
|
||||||
|
<p>
|
||||||
|
You retain ownership of the content you create or send through Rosetta.
|
||||||
|
You grant us the limited rights necessary to operate the service, such as
|
||||||
|
routing encrypted messages and maintaining service security. We do not
|
||||||
|
claim ownership of your messages or files.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>8. Updates and Availability</h2>
|
||||||
|
<p>
|
||||||
|
We may update, modify, suspend, or discontinue Rosetta or parts of the
|
||||||
|
service at any time. Some features may require an internet connection or
|
||||||
|
a compatible device and operating system.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>9. Fees</h2>
|
||||||
|
<p>
|
||||||
|
Rosetta is currently offered as a free application unless stated
|
||||||
|
otherwise. If paid features, subscriptions, or in-app purchases are
|
||||||
|
introduced through Apple, Apple's payment and subscription terms will
|
||||||
|
apply.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>10. Maintenance and Support</h2>
|
||||||
|
<p>
|
||||||
|
ROSETTA CLOUD SERVICES LIMITED is solely responsible for providing
|
||||||
|
maintenance and support for Rosetta. Apple has no obligation to provide
|
||||||
|
maintenance or support services for Rosetta.
|
||||||
|
</p>
|
||||||
|
<p>Support contact: <a href="mailto:admin@rosetta.im">admin@rosetta.im</a></p>
|
||||||
|
|
||||||
|
<h2>11. Warranty</h2>
|
||||||
|
<p>
|
||||||
|
Rosetta is provided "as is" and "as available" to the maximum extent
|
||||||
|
permitted by law. If Rosetta fails to conform to any applicable warranty,
|
||||||
|
you may notify Apple, and Apple may refund the purchase price, if any,
|
||||||
|
for the app. To the maximum extent permitted by law, Apple has no other
|
||||||
|
warranty obligation for Rosetta.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>12. Product Claims</h2>
|
||||||
|
<p>
|
||||||
|
ROSETTA CLOUD SERVICES LIMITED, not Apple, is responsible for addressing
|
||||||
|
any claims relating to Rosetta, including product liability claims, legal
|
||||||
|
or regulatory claims, and claims under consumer protection or similar
|
||||||
|
laws.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>13. Intellectual Property Claims</h2>
|
||||||
|
<p>
|
||||||
|
If a third party claims that Rosetta or your use of Rosetta infringes
|
||||||
|
intellectual property rights, ROSETTA CLOUD SERVICES LIMITED, not Apple,
|
||||||
|
is responsible for the investigation, defense, settlement, and discharge
|
||||||
|
of that claim.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>14. Legal Compliance</h2>
|
||||||
|
<p>
|
||||||
|
You represent that you are not located in a country subject to a U.S.
|
||||||
|
Government embargo or designated by the U.S. Government as a "terrorist
|
||||||
|
supporting" country, and that you are not listed on any U.S. Government
|
||||||
|
list of prohibited or restricted parties.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>15. Third-Party Beneficiary</h2>
|
||||||
|
<p>
|
||||||
|
Apple and Apple's subsidiaries are third-party beneficiaries of these
|
||||||
|
Terms. Upon your acceptance of these Terms, Apple has the right to
|
||||||
|
enforce these Terms against you as a third-party beneficiary.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>16. Termination</h2>
|
||||||
|
<p>
|
||||||
|
We may suspend or terminate access to Rosetta if you violate these Terms,
|
||||||
|
create risk for other users, or use the service unlawfully. You may stop
|
||||||
|
using Rosetta at any time.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>17. Limitation of Liability</h2>
|
||||||
|
<p>
|
||||||
|
To the maximum extent permitted by law, ROSETTA CLOUD SERVICES LIMITED
|
||||||
|
will not be liable for indirect, incidental, special, consequential, or
|
||||||
|
punitive damages, or for loss of data, profits, goodwill, or business
|
||||||
|
opportunities arising from your use of Rosetta.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>18. Governing Law</h2>
|
||||||
|
<p>
|
||||||
|
These Terms are governed by the laws of Hong Kong, unless local consumer
|
||||||
|
protection law requires otherwise.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>19. Contact</h2>
|
||||||
|
<p class="address">ROSETTA CLOUD SERVICES LIMITED
|
||||||
|
Registered address:
|
||||||
|
UNIT 704C 7/F BLK 3 NAN FUNG IND CITY
|
||||||
|
18 TIN HAU RD
|
||||||
|
TUEN MUN
|
||||||
|
HONG KONG</p>
|
||||||
|
<p>Email: <a href="mailto:admin@rosetta.im">admin@rosetta.im</a></p>
|
||||||
|
<p>Phone: <a href="tel:+85228910030">+852 2891 0030</a></p>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -7,6 +7,7 @@ import { FeaturesGrid } from './components/FeaturesGrid/FeaturesGrid';
|
|||||||
import { SEO } from './components/SEO/SEO';
|
import { SEO } from './components/SEO/SEO';
|
||||||
import './style.css'
|
import './style.css'
|
||||||
import { MessageSteps } from './components/MessageSteps/MessageSteps';
|
import { MessageSteps } from './components/MessageSteps/MessageSteps';
|
||||||
|
import { Footer } from './components/Footer/Footer';
|
||||||
|
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
@@ -17,6 +18,7 @@ export default function App() {
|
|||||||
<FeaturesGrid></FeaturesGrid>
|
<FeaturesGrid></FeaturesGrid>
|
||||||
<MessageSteps></MessageSteps>
|
<MessageSteps></MessageSteps>
|
||||||
<DownloadCenter></DownloadCenter>
|
<DownloadCenter></DownloadCenter>
|
||||||
|
<Footer></Footer>
|
||||||
</MantineProvider>
|
</MantineProvider>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,13 +5,12 @@ import {
|
|||||||
Flex,
|
Flex,
|
||||||
Text,
|
Text,
|
||||||
Title,
|
Title,
|
||||||
useComputedColorScheme,
|
|
||||||
useMantineTheme,
|
useMantineTheme,
|
||||||
} from '@mantine/core';
|
} from '@mantine/core';
|
||||||
import classes from './DownloadCenter.module.css';
|
import classes from './DownloadCenter.module.css';
|
||||||
import { RosettaLogo } from '../RosettaLogo/RosettaLogo';
|
import { RosettaLogo } from '../RosettaLogo/RosettaLogo';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { FaApple, FaWindows } from 'react-icons/fa';
|
import { FaWindows } from 'react-icons/fa';
|
||||||
import { FcAndroidOs, FcLinux } from 'react-icons/fc';
|
import { FcAndroidOs, FcLinux } from 'react-icons/fc';
|
||||||
import { Switch } from '../Switch/Switch';
|
import { Switch } from '../Switch/Switch';
|
||||||
import { IconDownload } from '@tabler/icons-react';
|
import { IconDownload } from '@tabler/icons-react';
|
||||||
@@ -33,15 +32,15 @@ interface UpdateItem {
|
|||||||
const fetchUpdates = async (): Promise<DownloadFeature[]> => {
|
const fetchUpdates = async (): Promise<DownloadFeature[]> => {
|
||||||
try {
|
try {
|
||||||
const response = await fetch('https://sdu.rosetta.im/updates/all');
|
const response = await fetch('https://sdu.rosetta.im/updates/all');
|
||||||
const data = await response.json();
|
const data = (await response.json()) as { items?: UpdateItem[] };
|
||||||
|
|
||||||
return (data.items || []).map((item: UpdateItem) => ({
|
return (data.items || []).map((item) => ({
|
||||||
platform: item.platform,
|
platform: item.platform,
|
||||||
arch: item.arch,
|
arch: item.arch,
|
||||||
version: item.version,
|
version: item.version,
|
||||||
link: new URL(item.downloadUrl, 'https://sdu.rosetta.im').toString(),
|
link: new URL(item.downloadUrl, 'https://sdu.rosetta.im').toString(),
|
||||||
})).sort((a : any, b : any) => {
|
})).sort((a, b) => {
|
||||||
const platformOrder = ['darwin', 'linux', 'win32', 'android'];
|
const platformOrder = ['linux', 'win32', 'android'];
|
||||||
const archOrder = ['arm64', 'x64', 'universal']
|
const archOrder = ['arm64', 'x64', 'universal']
|
||||||
const platformComparison = platformOrder.indexOf(a.platform) - platformOrder.indexOf(b.platform);
|
const platformComparison = platformOrder.indexOf(a.platform) - platformOrder.indexOf(b.platform);
|
||||||
if (platformComparison !== 0) {
|
if (platformComparison !== 0) {
|
||||||
@@ -57,9 +56,8 @@ const fetchUpdates = async (): Promise<DownloadFeature[]> => {
|
|||||||
|
|
||||||
export function DownloadCenter() {
|
export function DownloadCenter() {
|
||||||
const theme = useMantineTheme();
|
const theme = useMantineTheme();
|
||||||
const colorScheme = useComputedColorScheme();
|
|
||||||
const [kernels, setKernels] = useState<DownloadFeature[]>([]);
|
const [kernels, setKernels] = useState<DownloadFeature[]>([]);
|
||||||
const [targetPlatforms, setTargetPlatforms] = useState<string[]>(['darwin', 'linux', 'win32', 'android']);
|
const [targetPlatforms, setTargetPlatforms] = useState<string[]>(['linux', 'win32', 'android']);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchUpdates().then(setKernels);
|
fetchUpdates().then(setKernels);
|
||||||
@@ -69,14 +67,11 @@ export function DownloadCenter() {
|
|||||||
let targetPlatforms: string[] = [];
|
let targetPlatforms: string[] = [];
|
||||||
switch(value){
|
switch(value){
|
||||||
case 'All':
|
case 'All':
|
||||||
targetPlatforms = ['darwin', 'linux', 'win32', 'android'];
|
targetPlatforms = ['linux', 'win32', 'android'];
|
||||||
break;
|
break;
|
||||||
case 'Windows':
|
case 'Windows':
|
||||||
targetPlatforms = ['win32'];
|
targetPlatforms = ['win32'];
|
||||||
break;
|
break;
|
||||||
case 'macOS':
|
|
||||||
targetPlatforms = ['darwin'];
|
|
||||||
break;
|
|
||||||
case 'Android':
|
case 'Android':
|
||||||
targetPlatforms = ['android'];
|
targetPlatforms = ['android'];
|
||||||
break;
|
break;
|
||||||
@@ -89,8 +84,6 @@ export function DownloadCenter() {
|
|||||||
|
|
||||||
const translatePlatformToOsName = (platform: string) => {
|
const translatePlatformToOsName = (platform: string) => {
|
||||||
switch(platform){
|
switch(platform){
|
||||||
case 'darwin':
|
|
||||||
return 'macOS';
|
|
||||||
case 'linux':
|
case 'linux':
|
||||||
return 'Linux';
|
return 'Linux';
|
||||||
case 'win32':
|
case 'win32':
|
||||||
@@ -104,8 +97,6 @@ export function DownloadCenter() {
|
|||||||
|
|
||||||
const translatePlatformAndArchToCpuName = (platform : string, arch: string) => {
|
const translatePlatformAndArchToCpuName = (platform : string, arch: string) => {
|
||||||
switch(platform){
|
switch(platform){
|
||||||
case 'darwin':
|
|
||||||
return arch === 'arm64' ? 'Apple Silicon' : 'Intel';
|
|
||||||
case 'linux':
|
case 'linux':
|
||||||
return arch === 'arm64' ? 'ARM64' : 'x64';
|
return arch === 'arm64' ? 'ARM64' : 'x64';
|
||||||
case 'win32':
|
case 'win32':
|
||||||
@@ -121,9 +112,6 @@ export function DownloadCenter() {
|
|||||||
const features = kernels.filter((v) => targetPlatforms.includes(v.platform)).map((feature) => (
|
const features = kernels.filter((v) => targetPlatforms.includes(v.platform)).map((feature) => (
|
||||||
<Card key={feature.link} radius="md" className={classes.card} padding="xl">
|
<Card key={feature.link} radius="md" className={classes.card} padding="xl">
|
||||||
<Flex direction={'column'} align="center" justify={'center'}>
|
<Flex direction={'column'} align="center" justify={'center'}>
|
||||||
{feature.platform === 'darwin' && <FaApple size={50} color={
|
|
||||||
colorScheme == 'dark' ? 'white' : 'black'
|
|
||||||
} />}
|
|
||||||
{feature.platform === 'linux' && <FcLinux size={50} />}
|
{feature.platform === 'linux' && <FcLinux size={50} />}
|
||||||
{feature.platform === 'win32' && <FaWindows size={50} color={theme.colors.blue[6]} />}
|
{feature.platform === 'win32' && <FaWindows size={50} color={theme.colors.blue[6]} />}
|
||||||
{feature.platform === 'android' && <FcAndroidOs size={50} />}
|
{feature.platform === 'android' && <FcAndroidOs size={50} />}
|
||||||
@@ -131,14 +119,6 @@ export function DownloadCenter() {
|
|||||||
{translatePlatformToOsName(feature.platform)} - {translatePlatformAndArchToCpuName(feature.platform, feature.arch)}
|
{translatePlatformToOsName(feature.platform)} - {translatePlatformAndArchToCpuName(feature.platform, feature.arch)}
|
||||||
</Text>
|
</Text>
|
||||||
<Text c="dimmed" fz="sm" ta={'center'} mt="xs">
|
<Text c="dimmed" fz="sm" ta={'center'} mt="xs">
|
||||||
{feature.platform == 'darwin' && <>
|
|
||||||
{feature.arch == 'arm64' && <>
|
|
||||||
Download this version if you have a Mac with Apple Silicon (M1, M2 chips).
|
|
||||||
</>}
|
|
||||||
{feature.arch == 'x64' && <>
|
|
||||||
Download this version if you have a Mac with an Intel processor, which was most likely manufactured before 2020.
|
|
||||||
</>}
|
|
||||||
</>}
|
|
||||||
{feature.platform == 'linux' && <>This version is for Linux and comes as an AppImage for the GUI versions.</>}
|
{feature.platform == 'linux' && <>This version is for Linux and comes as an AppImage for the GUI versions.</>}
|
||||||
{feature.platform == 'win32' && <>Download this version of you have computer on Windows 10 or later.</>}
|
{feature.platform == 'win32' && <>Download this version of you have computer on Windows 10 or later.</>}
|
||||||
{feature.platform == 'android' && <>This version is for Android devices and all architectures.</>}
|
{feature.platform == 'android' && <>This version is for Android devices and all architectures.</>}
|
||||||
@@ -165,7 +145,7 @@ export function DownloadCenter() {
|
|||||||
</Text>
|
</Text>
|
||||||
|
|
||||||
<Flex justify={'center'} mt={'lg'}>
|
<Flex justify={'center'} mt={'lg'}>
|
||||||
<Switch onChange={switchTarget} data={['All', 'Windows', 'macOS', 'Linux', 'Android']}></Switch>
|
<Switch onChange={switchTarget} data={['All', 'Windows', 'Linux', 'Android']}></Switch>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
|
||||||
<Flex gap="xl" justify={'center'} wrap={'wrap'} align={'center'} mt={50}>
|
<Flex gap="xl" justify={'center'} wrap={'wrap'} align={'center'} mt={50}>
|
||||||
@@ -174,4 +154,4 @@ export function DownloadCenter() {
|
|||||||
</Container>
|
</Container>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import { IconGauge, IconLock, IconMessage2, IconServer, IconUser, IconUsersGroup } from '@tabler/icons-react';
|
import { IconGauge, IconLock, IconMessage2, IconServer, IconUser, IconUsersGroup, type TablerIcon } from '@tabler/icons-react';
|
||||||
import { Container, Flex, SimpleGrid, Text, ThemeIcon, Title } from '@mantine/core';
|
import { Container, Flex, SimpleGrid, Text, ThemeIcon, Title } from '@mantine/core';
|
||||||
|
import type { ReactNode } from 'react';
|
||||||
import classes from './FeaturesGrid.module.css';
|
import classes from './FeaturesGrid.module.css';
|
||||||
import { RosettaLogo } from '../RosettaLogo/RosettaLogo';
|
import { RosettaLogo } from '../RosettaLogo/RosettaLogo';
|
||||||
|
|
||||||
export const MOCKDATA = [
|
const MOCKDATA = [
|
||||||
{
|
{
|
||||||
icon: IconGauge,
|
icon: IconGauge,
|
||||||
title: 'Performance',
|
title: 'Performance',
|
||||||
@@ -43,9 +44,9 @@ export const MOCKDATA = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
interface FeatureProps {
|
interface FeatureProps {
|
||||||
icon: React.FC<any>;
|
icon: TablerIcon;
|
||||||
title: React.ReactNode;
|
title: ReactNode;
|
||||||
description: React.ReactNode;
|
description: ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Feature({ icon: Icon, title, description }: FeatureProps) {
|
export function Feature({ icon: Icon, title, description }: FeatureProps) {
|
||||||
@@ -94,4 +95,4 @@ export function FeaturesGrid() {
|
|||||||
</Container>
|
</Container>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
17
src/components/Footer/Footer.module.css
Normal file
17
src/components/Footer/Footer.module.css
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
.footer {
|
||||||
|
padding: var(--mantine-spacing-xl) var(--mantine-spacing-md);
|
||||||
|
border-top: 1px solid light-dark(var(--mantine-color-gray-2), var(--mantine-color-dark-5));
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal {
|
||||||
|
max-width: 720px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.links {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
gap: var(--mantine-spacing-md);
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-top: var(--mantine-spacing-xs);
|
||||||
|
}
|
||||||
24
src/components/Footer/Footer.tsx
Normal file
24
src/components/Footer/Footer.tsx
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import { Anchor, Text } from '@mantine/core';
|
||||||
|
import classes from './Footer.module.css';
|
||||||
|
|
||||||
|
const LEGAL_NAME = 'ROSETTA CLOUD SERVICES LIMITED';
|
||||||
|
|
||||||
|
export function Footer() {
|
||||||
|
const currentYear = new Date().getFullYear();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<footer className={classes.footer}>
|
||||||
|
<Text c="dimmed" fz="sm" ta="center" className={classes.legal}>
|
||||||
|
© {currentYear} {LEGAL_NAME}. All rights reserved.
|
||||||
|
</Text>
|
||||||
|
<nav className={classes.links} aria-label="Legal information">
|
||||||
|
<Anchor href="/privacy/" size="sm" c="dimmed">
|
||||||
|
Privacy Policy
|
||||||
|
</Anchor>
|
||||||
|
<Anchor href="/terms/" size="sm" c="dimmed">
|
||||||
|
Terms of Use
|
||||||
|
</Anchor>
|
||||||
|
</nav>
|
||||||
|
</footer>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@ interface SEOProps {
|
|||||||
|
|
||||||
export function SEO({
|
export function SEO({
|
||||||
title = 'Rosetta - Secure Messaging for Everyone',
|
title = 'Rosetta - Secure Messaging for Everyone',
|
||||||
description = 'End-to-end encrypted messaging app with military-grade security. Download for macOS, Windows, Linux.',
|
description = 'End-to-end encrypted messaging app with military-grade security. Download for Windows, Linux, and Android.',
|
||||||
ogImage = '/og-image.png',
|
ogImage = '/og-image.png',
|
||||||
keywords = 'secure messaging, encrypted chat, private messenger'
|
keywords = 'secure messaging, encrypted chat, private messenger'
|
||||||
}: SEOProps) {
|
}: SEOProps) {
|
||||||
|
|||||||
Reference in New Issue
Block a user