diff --git a/public/privacy/index.html b/public/privacy/index.html new file mode 100644 index 0000000..bb41f3a --- /dev/null +++ b/public/privacy/index.html @@ -0,0 +1,227 @@ + + + + + + Privacy Policy for Rosetta + + + + + +
+ Back to home +

Privacy Policy for Rosetta

+

Last updated: May 22, 2026

+ +

+ 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. +

+ +

1. Information We Collect

+

+ 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. +

+ + +

2. Information We Do Not Collect for Advertising

+

+ We do not use third-party advertising SDKs, advertising trackers, or + cross-app tracking. We do not sell your personal information. +

+ +

3. How We Use Information

+

We use information only to:

+ + +

4. End-to-End Encryption

+

+ 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. +

+ +

5. Sharing of Information

+

We may share limited information only with:

+ +

+ Any service provider that processes user data for us must protect it + consistently with this Privacy Policy. +

+ +

6. Retention

+

+ 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. +

+ +

7. Your Choices and Rights

+

+ 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. +

+

+ 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. +

+ +

8. Children

+

+ 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. +

+ +

9. International Transfers

+

+ ROSETTA CLOUD SERVICES LIMITED may process information in countries other + than where you live. Where required, we use appropriate safeguards for + international transfers. +

+ +

10. Security

+

+ 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. +

+ +

11. Changes to This Policy

+

+ 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. +

+ +

12. Contact

+

ROSETTA CLOUD SERVICES LIMITED +Registered address: +UNIT 704C 7/F BLK 3 NAN FUNG IND CITY +18 TIN HAU RD +TUEN MUN +HONG KONG

+

Email: admin@rosetta.im

+

Phone: +852 2891 0030

+
+ + diff --git a/public/terms/index.html b/public/terms/index.html new file mode 100644 index 0000000..49d56c5 --- /dev/null +++ b/public/terms/index.html @@ -0,0 +1,257 @@ + + + + + + Terms of Use for Rosetta + + + + + +
+ Back to home +

Terms of Use for Rosetta

+

Last updated: May 22, 2026

+ +

+ 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"). +

+

+ By downloading, installing, or using Rosetta, you agree to these Terms. +

+ +

1. Agreement Between You and Rosetta

+

+ 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. +

+ +

2. License

+

+ 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. +

+

+ You may not copy, modify, reverse engineer, decompile, resell, + sublicense, rent, lease, or distribute Rosetta except as permitted by + applicable law. +

+ +

3. Privacy

+

+ Your use of Rosetta is also governed by our Privacy Policy, available at + https://rosetta.im/privacy/. +

+ +

4. Encrypted Messaging

+

+ 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. +

+ +

5. Acceptable Use

+

You agree not to use Rosetta to:

+ + +

6. No Emergency Use

+

+ 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. +

+ +

7. User Content

+

+ 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. +

+ +

8. Updates and Availability

+

+ 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. +

+ +

9. Fees

+

+ 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. +

+ +

10. Maintenance and Support

+

+ 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. +

+

Support contact: admin@rosetta.im

+ +

11. Warranty

+

+ 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. +

+ +

12. Product Claims

+

+ 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. +

+ +

13. Intellectual Property Claims

+

+ 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. +

+ +

14. Legal Compliance

+

+ 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. +

+ +

15. Third-Party Beneficiary

+

+ 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. +

+ +

16. Termination

+

+ 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. +

+ +

17. Limitation of Liability

+

+ 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. +

+ +

18. Governing Law

+

+ These Terms are governed by the laws of Hong Kong, unless local consumer + protection law requires otherwise. +

+ +

19. Contact

+

ROSETTA CLOUD SERVICES LIMITED +Registered address: +UNIT 704C 7/F BLK 3 NAN FUNG IND CITY +18 TIN HAU RD +TUEN MUN +HONG KONG

+

Email: admin@rosetta.im

+

Phone: +852 2891 0030

+
+ + diff --git a/src/App.tsx b/src/App.tsx index 1584ba2..cfc00f4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,6 +7,7 @@ import { FeaturesGrid } from './components/FeaturesGrid/FeaturesGrid'; import { SEO } from './components/SEO/SEO'; import './style.css' import { MessageSteps } from './components/MessageSteps/MessageSteps'; +import { Footer } from './components/Footer/Footer'; export default function App() { @@ -17,6 +18,7 @@ export default function App() { + ) -} \ No newline at end of file +} diff --git a/src/components/DownloadCenter/DownloadCenter.tsx b/src/components/DownloadCenter/DownloadCenter.tsx index 6cf1c24..3a48575 100644 --- a/src/components/DownloadCenter/DownloadCenter.tsx +++ b/src/components/DownloadCenter/DownloadCenter.tsx @@ -33,14 +33,14 @@ interface UpdateItem { const fetchUpdates = async (): Promise => { try { 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, arch: item.arch, version: item.version, 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 archOrder = ['arm64', 'x64', 'universal'] const platformComparison = platformOrder.indexOf(a.platform) - platformOrder.indexOf(b.platform); @@ -174,4 +174,4 @@ export function DownloadCenter() { ); -} \ No newline at end of file +} diff --git a/src/components/FeaturesGrid/FeaturesGrid.tsx b/src/components/FeaturesGrid/FeaturesGrid.tsx index 31e384f..df27858 100644 --- a/src/components/FeaturesGrid/FeaturesGrid.tsx +++ b/src/components/FeaturesGrid/FeaturesGrid.tsx @@ -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 type { ReactNode } from 'react'; import classes from './FeaturesGrid.module.css'; import { RosettaLogo } from '../RosettaLogo/RosettaLogo'; -export const MOCKDATA = [ +const MOCKDATA = [ { icon: IconGauge, title: 'Performance', @@ -43,9 +44,9 @@ export const MOCKDATA = [ ]; interface FeatureProps { - icon: React.FC; - title: React.ReactNode; - description: React.ReactNode; + icon: TablerIcon; + title: ReactNode; + description: ReactNode; } export function Feature({ icon: Icon, title, description }: FeatureProps) { @@ -94,4 +95,4 @@ export function FeaturesGrid() { ); -} \ No newline at end of file +} diff --git a/src/components/Footer/Footer.module.css b/src/components/Footer/Footer.module.css new file mode 100644 index 0000000..69bf702 --- /dev/null +++ b/src/components/Footer/Footer.module.css @@ -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); +} diff --git a/src/components/Footer/Footer.tsx b/src/components/Footer/Footer.tsx new file mode 100644 index 0000000..ce02c5f --- /dev/null +++ b/src/components/Footer/Footer.tsx @@ -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 ( + + ); +}