diff --git a/packages/web/components/templates/landing/LandingSection.tsx b/packages/web/components/templates/landing/LandingSection.tsx index a4890ab5a..456ba4382 100644 --- a/packages/web/components/templates/landing/LandingSection.tsx +++ b/packages/web/components/templates/landing/LandingSection.tsx @@ -2,11 +2,11 @@ import { HStack, VStack, Box } from '../../elements/LayoutPrimitives' import { CSS, styled } from '@stitches/react' type LandingSectionProps = { - titleText: string, - descriptionText: React.ReactElement, - icon: React.ReactElement, - image: React.ReactElement, - containerStyles?: CSS, + titleText: string + descriptionText: React.ReactElement + icon?: React.ReactElement + image: React.ReactElement + containerStyles?: CSS } const MainContainer = styled(HStack, { @@ -25,66 +25,40 @@ const titleTextStyles = { }, '@xl': { fontSize: 45, - } + }, } const descriptionTextStyles = { color: 'rgb(125, 125, 125)', } -const iconContainerStyles = { - width: 56, - height: 56, - background: 'white', - border: '1px solid rgba(61, 61, 61, 0.08)', - boxSizing: 'border-box', - borderRadius: '50%', - '@mdDown': { - width: 32, - height: 32, - padding: 5, - }, -} - const imageContainerStyles = { width: '50%', + alignSelf: 'center', '@mdDown': { - width: 0, - display: 'none', - } + width: '100%', + }, } const layoutStyles = { width: '50%', - padding: 10, + alignSelf: 'center', + padding: 20, '@mdDown': { width: '100%', - } -} - -const innerLayoutStyles = { - maxWidth: 480, - alignSelf: 'center', - '@mdDown': { - alignItems: 'center', }, } - + export function LandingSection(props: LandingSectionProps): JSX.Element { - return ( - - - - - {props.icon} - - {props.titleText} - {props.descriptionText} - + return ( + + + + {props.titleText} + {props.descriptionText} - - {props.image} - - - ) + + {props.image} + + ) } diff --git a/packages/web/components/templates/landing/LandingSectionsContainer.tsx b/packages/web/components/templates/landing/LandingSectionsContainer.tsx index a954888c3..cb72c640c 100644 --- a/packages/web/components/templates/landing/LandingSectionsContainer.tsx +++ b/packages/web/components/templates/landing/LandingSectionsContainer.tsx @@ -1,8 +1,7 @@ import Link from 'next/link' -import { VStack, Box, SpanBox } from '../../elements/LayoutPrimitives' -import { CurvedUnderlineIcon } from '../../elements/images/CurvedUnderlineIcon' +import { VStack, Box } from '../../elements/LayoutPrimitives' import { Button } from '../../elements/Button' -import { MagnifyingGlass, Palette, EnvelopeSimple, FloppyDisk, ArrowRight } from 'phosphor-react' +import { ArrowRight } from 'phosphor-react' import { LandingSection } from './LandingSection' const buttonStyles = { @@ -10,23 +9,30 @@ const buttonStyles = { borderRadius: 4, px: 30, background: 'rgb(255, 210, 52)', - color: '#3D3D3D' + color: '#3D3D3D', } const arrowStyles = { - marginLeft: 10, + marginLeft: 10, padding: 2, } export function GetStartedButton(): JSX.Element { return ( - ) } @@ -36,7 +42,8 @@ const containerStyles = { pt: 32, pb: 100, width: '100%', - background: 'linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)), linear-gradient(0deg, rgba(253, 250, 236, 0.7), rgba(253, 250, 236, 0.7))', + background: + 'linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)), linear-gradient(0deg, rgba(253, 250, 236, 0.7), rgba(253, 250, 236, 0.7))', '@mdDown': { pt: 50, }, @@ -45,38 +52,15 @@ const containerStyles = { }, '@xl': { px: '100px', - } -} - -const titleStyles = { - fontWeight: '600', - fontSize: '24', - textAlign: 'center', - lineHeight: '36px', - color: '#FF9B3E', - '@mdDown': { - fontSize: 16, - letterSpacing: '0.02em' - } -} - -const subTitleText = { - fontSize: 64, - maxWidth: 590, - fontWeight: '700', - textAlign: 'center', - lineHeight: '70px', - mb: 30, - '@mdDown': { - maxWidth: 295, - fontSize: 32, - lineHeight: '40px', - } + }, } const reversedSectionStyles = { flexDirection: 'row-reverse', - marginBottom: 20 + marginBottom: 20, + '@mdDown': { + width: '100%', + }, } const callToActionStyles = { @@ -84,13 +68,13 @@ const callToActionStyles = { borderRadius: '24px', boxSizing: 'border-box', border: '1px solid #D8D7D5', - boxShadow: '0px 7px 8px rgba(32, 31, 29, 0.03), 0px 18px 24px rgba(32, 31, 29, 0.03)', + boxShadow: + '0px 7px 8px rgba(32, 31, 29, 0.03), 0px 18px 24px rgba(32, 31, 29, 0.03)', padding: 40, marginTop: 64, - height: 330, - '@mdDown': { - display: 'none', - }, + minheight: 330, + width: 'inherit', + '@md': { width: '100%', }, @@ -105,21 +89,14 @@ const callToActionText = { fontSize: 64, lineHeight: '70px', textAlign: 'center', - maxWidth: 500 -} - -const underlineIconStyles = { - height: '5px', - alignSelf: 'normal', - position: 'relative', - bottom: 20, + padding: '20px', } type LandingSectionsContainerProps = { - hideFirst?: boolean, - hideSecond?: boolean, - hideThird?: boolean, - hideFourth?: boolean, + hideFirst?: boolean + hideSecond?: boolean + hideThird?: boolean + hideFourth?: boolean } export function LandingSectionsContainer({ @@ -128,110 +105,152 @@ export function LandingSectionsContainer({ hideThird = false, hideFourth = false, }: LandingSectionsContainerProps): JSX.Element { - const iconColor = 'rgb(255, 210, 52)' + // const iconColor = 'rgb(255, 210, 52)' return ( - + + + landingHero-1 + + {!hideFirst && ( - Omnivore strips away the ads, trackers, and clutter and - formats pages for easy reading without distractions. The - text-focused view also makes articles smaller and quicker - to load. + Omnivore strips away the ads, trackers, and clutter and formats + pages for easy reading without distractions. The text-focused view + also makes articles smaller and quicker to load.

} image={ landing-1 } - icon={} /> )} {!hideSecond && ( -

- Read actively, not passively. Highlight key sections and add - notes as you read. You can access your highlights and notes any - time — they stay with your articles forever. -

-

- Fun fact: research shows that highlighting while you read - improves retention and makes you a more effective reader. -

- - } - image={ - landing-2 - } - icon={} - containerStyles={reversedSectionStyles} - /> - )} - {!hideThird && ( - - Send subscriptions directly to your Omnivore library, and - read them on your own time, away from the constant distractions - and interruptions of your email inbox. -

- } - image={ - landing-3 - } - icon={} - /> - )} - {!hideFourth && ( - -

With the Omnivore app for iOS and Android and extensions for all +

+ With the Omnivore app for iOS and Android and extensions for all major web browsers, you can add to your reading list any time.

-

Saved articles remain in your Omnivore library forever — even if the - site where you found them goes away. Access them any time in our reader - view or in their original format. +

+ Saved articles remain in your Omnivore library forever — even if + the site where you found them goes away. Access them any time in + our reader view or in their original format.

} image={ landing-4 } - icon={} containerStyles={reversedSectionStyles} /> )} - - - Sign up for free - + {!hideThird && ( + + Send subscriptions directly to your Omnivore library, and read + them on your own time, away from the constant distractions and + interruptions of your email inbox. +

+ } + image={ + landing-4 + } + /> + )} + {!hideFourth && ( + + Read what you want, not what some algorithm says you should. Keep + your reading organized and easily available with labels, filters, + and fully indexed text searches. +

+ } + image={ + landing-5 + } + containerStyles={reversedSectionStyles} + /> + )} + + The intuitive command palette puts basic and advanced functionality + at your fingertips. Keyboard shortcuts for all features mean your + hands never have to leave the keyboard. Our open-source app allows + integrations with knowledge bases and note-taking apps, using + plug-ins or by triggering webhooks. +

+ } + image={ + landing-6 + } + /> + + Lorem IpsumRead what you want, not what some algorithm says you + should. Keep your reading organized and easily available with + labels, filters, and fully indexed text searches. +

+ } + image={ + landing-7 + } + containerStyles={reversedSectionStyles} + /> + + Get Started With Omnivore Today
diff --git a/packages/web/pages/about.tsx b/packages/web/pages/about.tsx index c6c505f96..c0dd858bb 100644 --- a/packages/web/pages/about.tsx +++ b/packages/web/pages/about.tsx @@ -1,5 +1,8 @@ import { VStack, Box } from './../components/elements/LayoutPrimitives' -import { LandingSectionsContainer, GetStartedButton } from '../components/templates/landing/LandingSectionsContainer' +import { + LandingSectionsContainer, + GetStartedButton, +} from '../components/templates/landing/LandingSectionsContainer' import { LandingHeader } from '../components/templates/landing/LandingHeader' import { LandingFooter } from '../components/templates/landing/LandingFooter' @@ -7,14 +10,13 @@ const mobileContainerStyles = { alignSelf: 'center', marginTop: 80, maxWidth: 960, - px: '2vw', '@md': { px: '6vw', }, '@xl': { px: '120px', - } + }, } const headingStyles = { @@ -24,12 +26,15 @@ const headingStyles = { lineHeight: '53px', padding: '10px', paddingBottom: '0px', + textAlign: 'center', } - const subHeadingStyles = { color: 'rgb(125, 125, 125)', padding: '10px', + textAlign: 'center', + width: '100%', + fontWeight: '600', } export default function LandingPage(): JSX.Element { @@ -38,18 +43,34 @@ export default function LandingPage(): JSX.Element { - Omnivore is the read-it-later app for serious readers. - - Distraction free. Privacy focused. Open source. + + Omnivore is the read-it-later app for serious readers. - - Save interesting articles, newsletter subscriptions, and documents and - read them later — focused and distraction free. Add notes and highlights. - Organize your reading list the way you want and sync it across all your - devices. + Distraction free. Privacy focused. Open source. - + + + Save interesting articles, newsletter subscriptions, and documents + and read them later — focused and distraction free. Add notes and + highlights. Organize your reading list the way you want and sync it + across all your devices. + + @@ -59,5 +80,3 @@ export default function LandingPage(): JSX.Element { ) } - - diff --git a/packages/web/public/static/landing/landingPage-1.png b/packages/web/public/static/landing/landingPage-1.png new file mode 100644 index 000000000..e3bd5d7b2 Binary files /dev/null and b/packages/web/public/static/landing/landingPage-1.png differ diff --git a/packages/web/public/static/landing/landingPage-2.png b/packages/web/public/static/landing/landingPage-2.png new file mode 100644 index 000000000..422b44d0d Binary files /dev/null and b/packages/web/public/static/landing/landingPage-2.png differ diff --git a/packages/web/public/static/landing/landingPage-3.png b/packages/web/public/static/landing/landingPage-3.png new file mode 100644 index 000000000..f398ba13f Binary files /dev/null and b/packages/web/public/static/landing/landingPage-3.png differ diff --git a/packages/web/public/static/landing/landingPage-4.png b/packages/web/public/static/landing/landingPage-4.png new file mode 100644 index 000000000..563675e28 Binary files /dev/null and b/packages/web/public/static/landing/landingPage-4.png differ diff --git a/packages/web/public/static/landing/landingPage-5.png b/packages/web/public/static/landing/landingPage-5.png new file mode 100644 index 000000000..723483910 Binary files /dev/null and b/packages/web/public/static/landing/landingPage-5.png differ diff --git a/packages/web/public/static/landing/landingPage-6.png b/packages/web/public/static/landing/landingPage-6.png new file mode 100644 index 000000000..f2d7d3d9b Binary files /dev/null and b/packages/web/public/static/landing/landingPage-6.png differ diff --git a/packages/web/public/static/landing/landingPage-7.png b/packages/web/public/static/landing/landingPage-7.png new file mode 100644 index 000000000..eac6671bd Binary files /dev/null and b/packages/web/public/static/landing/landingPage-7.png differ