diff --git a/landing/asset-meta-data.js b/landing/asset-meta-data.js index 4035020c4..cff212511 100644 --- a/landing/asset-meta-data.js +++ b/landing/asset-meta-data.js @@ -1,80 +1,80 @@ // @flow import css from './landing.css'; export type Asset = { +alt: string, +url: string, +title: string, +description: string, +imageStyle: string, +infoStyle: string, }; -export const assetUrl = 'https://dh9fld3hutpxf.cloudfront.net'; +export const assetsCacheURLPrefix = 'https://dh9fld3hutpxf.cloudfront.net'; export const assetMetaData = [ { alt: 'a mobile phone screen highlighting chat and DAO voting', - url: `${assetUrl}/Header`, + url: `${assetsCacheURLPrefix}/Header`, imageStyle: css.heroImage, infoStyle: css.heroInfo, title: 'Header', description: '', }, { alt: 'a mobile phone screen highlighting chat organization', - url: `${assetUrl}/Federated`, + url: `${assetsCacheURLPrefix}/Federated`, imageStyle: css.federatedImage, infoStyle: css.federatedInfo, title: 'Federated', description: `Comm is a protocol paired with an app. Each community hosts its own backend, which we call a keyserver. Our keyserver software is built to be forked.`, }, { alt: 'a web app screen highlighting web3 apps in Comm', - url: `${assetUrl}/Customizable`, + url: `${assetsCacheURLPrefix}/Customizable`, imageStyle: css.customizableImage, infoStyle: css.customizableInfo, title: 'Customizable', description: `Write mini-apps and custom modules in React. Skin your community. Customize your tabs and your home page.`, }, { alt: 'a mobile phone screen highlighting a conversation', - url: `${assetUrl}/E2E-encrypted`, + url: `${assetsCacheURLPrefix}/E2E-encrypted`, imageStyle: css.encryptedImage, infoStyle: css.encryptedInfo, title: 'E2E-encrypted', description: `Comm started as a project to build a private, decentralized alternative to Discord. Privacy is in our DNA.`, }, { alt: 'a mobile phone user information screen', - url: `${assetUrl}/Sovereign`, + url: `${assetsCacheURLPrefix}/Sovereign`, imageStyle: css.sovereignImage, infoStyle: css.sovereignInfo, title: 'Sovereign', description: `Log in with your wallet. Use ENS as your username. On Comm, your identity and data are yours to control.`, }, { alt: 'a web app screen highlighting web3 apps in Comm', - url: `${assetUrl}/Open-Source`, + url: `${assetsCacheURLPrefix}/Open-Source`, imageStyle: css.openSourceImage, infoStyle: css.openSourceInfo, title: 'Open Source', description: `All of our code is open source. Keyservers, iOS/Android app, our cloud services… all of it. We believe in open platforms.`, }, { alt: 'a mobile phone notification options screen', - url: `${assetUrl}/Less-Noisy`, + url: `${assetsCacheURLPrefix}/Less-Noisy`, imageStyle: css.lessNoisyImage, infoStyle: css.lessNoisyInfo, title: 'Less Noisy', description: `We let each user decide what they want to follow with detailed notif controls and a powerful unified inbox.`, }, ]; diff --git a/landing/keyservers.react.js b/landing/keyservers.react.js index 240e74d5e..4bd734e11 100644 --- a/landing/keyservers.react.js +++ b/landing/keyservers.react.js @@ -1,148 +1,148 @@ // @flow import { create } from '@lottiefiles/lottie-interactivity'; import * as React from 'react'; -import { assetUrl } from './asset-meta-data'; +import { assetsCacheURLPrefix } from './asset-meta-data'; import css from './keyservers.css'; import ReadDocsButton from './read-docs-btn.react'; import StarBackground from './star-background.react'; const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect; function Keyservers(): React.Node { React.useEffect(() => { import('@lottiefiles/lottie-player'); }, []); const onEyeIllustrationLoad = React.useCallback(() => { create({ mode: 'scroll', player: '#eye-illustration', actions: [ { visibility: [0, 1], type: 'seek', frames: [0, 720], }, ], }); }, []); const onCloudIllustrationLoad = React.useCallback(() => { create({ mode: 'scroll', player: '#cloud-illustration', actions: [ { visibility: [0, 0.2], type: 'stop', frames: [0], }, { visibility: [0.2, 1], type: 'seek', frames: [0, 300], }, ], }); }, []); const [eyeNode, setEyeNode] = React.useState(null); useIsomorphicLayoutEffect(() => { if (!eyeNode) { return; } eyeNode.addEventListener('load', onEyeIllustrationLoad); return () => eyeNode.removeEventListener('load', onEyeIllustrationLoad); }, [eyeNode, onEyeIllustrationLoad]); const [cloudNode, setCloudNode] = React.useState(null); useIsomorphicLayoutEffect(() => { if (!cloudNode) { return; } cloudNode.addEventListener('load', onCloudIllustrationLoad); return () => cloudNode.removeEventListener('load', onCloudIllustrationLoad); }, [cloudNode, onCloudIllustrationLoad]); return (
The Internet is broken today. Private user data is owned by mega-corporations and farmed for their benefit.
E2E encryption has the potential to change this equation. But it's constrained by a crucial limitation.
Sophisticated applications rely on servers to do things that your devices simply can't.
That's why E2E encryption only works for simple chat apps today. There's no way to build a robust server layer that has access to your data without leaking that data to corporations.
In the future, people have their own servers.
Your keyserver is the home of your digital identity. It owns your private keys and your personal data. It's your password manager, your crypto bank, your digital surrogate, and your second brain.