aboutsummaryrefslogblamecommitdiffstats
path: root/packages/website/ts/@next/pages/landing.tsx
blob: 6371bba82535ffcd9954e8285ea16ec610428fb4 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                               

                                       
 
                                       
 
                                                              
                                                                                         

                                                            
 

                                                                          

                                                                               
 









                                                                     
 











































                                                             

                                                                



























                                                                                                   


                                           


                                         


                                      










                                                                                                   
                                                                                                     
                                               
                                                                                     





                                          


                               



                                          



                                              





                                          


                              



                                          



                                    





                                          


                               



                                          





                                          

                              




                                                                      

                                                                                     



                       

                  



                                      
                                  
                                                        

                                             

                         



                                      
                                  
                                                        

                                             


                         
               
  
 




                                                      
 


                                 

                           





                            
  
import * as React from 'react';
import * as _ from 'lodash';
import styled from 'styled-components';

import {colors} from 'ts/style/colors';

import {Button, ButtonWrap} from 'ts/@next/components/button';
import {Column, Section, Wrap, WrapCentered, WrapGrid} from 'ts/@next/components/layout';
import {SiteWrap} from 'ts/@next/components/siteWrap';
import {Heading, Paragraph} from 'ts/@next/components/text';

import LogoOutlined from 'ts/@next/icons/illustrations/logo-outlined.svg';
import ProtocolIcon from 'ts/@next/icons/illustrations/protocol.svg';
import ReadyToBuildIcon from 'ts/@next/icons/illustrations/ready-to-build.svg';
import SupportIcon from 'ts/@next/icons/illustrations/support.svg';

/**
    Note(ez): Maybe when we're done at least with a basic structure,
    we can take out each section into e.g. LandingSectionIntro.tsx in
    @next/sections/landing ? so then our routes would only look like

    <SiteWrap>
        <LandingSectionIntro />
        <LandingSectionWhatever />
    </SiteWrap>
*/

interface ProjectLogo {
    name: string;
    imageUrl?: string;
}

const projects: ProjectLogo[] = [
    {
        name: 'Radar Relay',
        imageUrl: '/images/@next/relayer-logos/logo_1.png',
    },
    {
        name: 'Paradex',
        imageUrl: '/images/@next/relayer-logos/logo_5.png',
    },
    {
        name: 'Amadeus',
        imageUrl: '/images/@next/relayer-logos/logo_3.png',
    },
    {
        name: 'The Ocean X',
        imageUrl: '/images/@next/relayer-logos/logo_4.png',
    },
    {
        name: 'Paradex',
        imageUrl: '/images/@next/relayer-logos/logo_5.png',
    },
    {
        name: 'Decent EX',
        imageUrl: '/images/@next/relayer-logos/logo_2.1.png',
    },
    {
        name: 'dEX',
        imageUrl: '/images/@next/relayer-logos/logo_2.2.png',
    },
    {
        name: 'OpenRelay',
        imageUrl: '/images/@next/relayer-logos/logo_2.3.png',
    },
    {
        name: 'DDEX',
        imageUrl: '/images/@next/relayer-logos/logo_2.png',
    },
];

export const NextLanding: React.StatelessComponent<{}> = () => (
    <SiteWrap theme="dark">
        <Section>
            <Wrap>
                <Column colWidth="1/2">
                    <Heading size="large">
                        Powering Decentralized Exchange
                    </Heading>

                    <Paragraph size="medium">
                        0x is the best solution for adding exchange functionality to your business.
                    </Paragraph>

                    <ButtonWrap>
                        <Button inline>
                            Get Started
                        </Button>

                        <Button transparent inline>
                            Learn More
                        </Button>
                    </ButtonWrap>
                </Column>

                <Column colWidth="1/2">
                    <LogoOutlined/>
                </Column>
            </Wrap>
        </Section>

        <Section
            bgColor={colors.backgroundDark}
            isPadLarge={true}>
            <WrapCentered width="narrow">
                <ProtocolIcon/>

                <Paragraph
                    size="large"
                    isCentered={true}>
                    0x is an open protocol that enables the peer-to-peer exchange of Ethereum-based
                    tokens. Anyone in the world can use 0x to service a wide variety of markets
                    ranging from gaming items to financial instruments to assets that could have
                    near existed before.
                </Paragraph>

                <Button href="#" transparent>
                    Discover how developers use 0x
                </Button>
            </WrapCentered>

            {/* Note you can also pass in a string "large/default" or a number for custom margins */}
            <Wrap padding={['large', 0, 0, 0]}>
                {/* NOTE: this probably should be withComponent as part of a <dl> */}
                <Column
                    colWidth="1/3"
                    isNoPadding={true}>
                    <Heading
                        size="medium"
                        isCentered={true}>
                        873,435
                    </Heading>

                    <Paragraph
                        isMuted={0.4}
                        isCentered={true}
                        isNoMargin={true}>
                        Number of transactions
                    </Paragraph>
                </Column>

                <Column
                    colWidth="1/3"
                    isNoPadding={true}>
                    <Heading
                        size="medium"
                        isCentered={true}>
                        $203M
                    </Heading>

                    <Paragraph
                        isMuted={0.4}
                        isCentered={true}
                        isNoMargin={true}>
                        Total volume
                    </Paragraph>
                </Column>

                <Column
                    colWidth="1/3"
                    isNoPadding={true}>
                    <Heading
                        size="medium"
                        isCentered={true}>
                        227,372
                    </Heading>

                    <Paragraph
                        isMuted={0.4}
                        isCentered={true}
                        isNoMargin={true}>
                        Number of relayers
                    </Paragraph>
                </Column>
            </Wrap>
        </Section>

        <Section
            isPadLarge={true}>
            <WrapCentered>
                <Heading size="small">You're in good company</Heading>
            </WrapCentered>

            <WrapGrid width="narrow">
                {_.map(projects, (item: ProjectLogo, index) => (
                    <Project key={index} name={item.name} imageUrl={item.imageUrl} />
                ))}
            </WrapGrid>
        </Section>

        <Section>
            <Wrap>
                <Column
                    bgColor="#003831"
                    colWidth="1/2"
                    isPadLarge={true}>
                    <WrapCentered>
                        <ReadyToBuildIcon width="150" />
                        Ready to build on 0x?
                    </WrapCentered>
                </Column>

                <Column
                    bgColor="#003831"
                    colWidth="1/2"
                    isPadLarge={true}>
                    <WrapCentered>
                        <ReadyToBuildIcon width="150" />
                        Ready to build on 0x?
                    </WrapCentered>
                </Column>
            </Wrap>
        </Section>
    </SiteWrap>
);

const Project = ({ name, imageUrl }: ProjectLogo) => (
    <StyledProject>
        <img src={imageUrl} alt={name} />
    </StyledProject>
);

const StyledProject = styled.div`
    width: 80px;
    height: 116px;
    border: 1px solid blue;
    margin: 30px 60px;

    img {
        object-fit: contain;
        width: 100%;
        height: 100%;
    }
`;