320 lines
8.1 KiB
TypeScript

import * as _ from 'lodash';
import * as React from 'react';
import styled from 'styled-components';
import { colors } from 'ts/style/colors';
import { AboutPageLayout } from 'ts/components/aboutPageLayout';
import { DocumentTitle } from 'ts/components/document_title';
import { Column, Section } from 'ts/components/newLayout';
import { Heading, Paragraph } from 'ts/components/text';
import { WebsitePaths } from 'ts/types';
import { documentConstants } from 'ts/utils/document_meta_constants';
interface TeamMember {
name: string;
title: string;
imageUrl?: string;
}
const team: TeamMember[] = [
{
imageUrl: '/images/team/willw.jpg',
name: 'Will Warren',
title: 'Co-founder & CEO',
},
{
imageUrl: '/images/team/amirb.jpg',
name: 'Amir Bandeali',
title: 'Co-founder & CTO',
},
{
imageUrl: '/images/team/fabiob.jpg',
name: 'Fabio Berger',
title: 'Engineering Manager',
},
{
imageUrl: '/images/team/alexv.jpg',
name: 'Alex Xu',
title: 'Director of Operations',
},
{
imageUrl: '/images/team/leol.jpg',
name: 'Leonid Logvinov',
title: 'Engineer',
},
{
imageUrl: '/images/team/benb.jpg',
name: 'Ben Burns',
title: 'Designer',
},
{
imageUrl: '/images/team/brandonm.jpg',
name: 'Brandon Millman',
title: 'Senior Engineer',
},
{
imageUrl: '/images/team/toms.jpg',
name: 'Tom Schmidt',
title: 'Product Lead',
},
{
imageUrl: '/images/team/jacobe.jpg',
name: 'Jacob Evans',
title: 'Ecosystem Engineer',
},
{
imageUrl: '/images/team/blake.jpg',
name: 'Blake Henderson',
title: 'Ecosystem Programs Lead',
},
{
imageUrl: '/images/team/zack.jpg',
name: 'Zack Skelly',
title: 'Lead Recruiter',
},
{
imageUrl: '/images/team/greg.jpg',
name: 'Greg Hysen',
title: 'Blockchain Engineer',
},
{
imageUrl: '/images/team/remcoB.jpg',
name: 'Remco Bloemen',
title: 'Technical Fellow',
},
{
imageUrl: '/images/team/francesco.jpg',
name: 'Francesco Agosti',
title: 'Engineer',
},
{
imageUrl: '/images/team/melo.jpg',
name: 'Mel Oberto',
title: 'People Operations Specialist',
},
{
imageUrl: '/images/team/chrisk.jpg',
name: 'Chris Kalani',
title: 'Director of Design',
},
{
imageUrl: '/images/team/alexb.jpg',
name: 'Alex Browne',
title: 'Senior Engineer',
},
{
imageUrl: '/images/team/peterz.jpg',
name: 'Peter Zeitz',
title: 'Research Fellow',
},
{
imageUrl: '/images/team/clayr.jpg',
name: 'Clay Robbins',
title: 'Ecosystem Development Lead',
},
{
imageUrl: '/images/team/mattt.jpg',
name: 'Matt Taylor',
title: 'Marketing Lead',
},
{
imageUrl: '/images/team/eugenea.jpg',
name: 'Eugene Aumson',
title: 'Engineer',
},
{
imageUrl: '/images/team/weijew.jpg',
name: 'Weijie Wu',
title: 'Research Fellow',
},
{
imageUrl: '/images/team/rahuls.jpg',
name: 'Rahul Singireddy',
title: 'Relayer Success Manager',
},
{
imageUrl: '/images/team/jasons.jpg',
name: 'Jason Somensatto',
title: 'Strategic Legal Counsel',
},
{
imageUrl: '/images/team/steve.jpg',
name: 'Steve Klebanoff',
title: 'Senior Engineer',
},
{
imageUrl: '/images/team/xiannyn.jpg',
name: 'Xianny Ng',
title: 'Engineer',
},
{
imageUrl: '/images/team/brento.jpg',
name: 'Brent Oshiro',
title: 'Community Engagement Lead',
},
{
imageUrl: '/images/team/marcs.jpg',
name: 'Marc Savino',
title: 'Technical Sourcer',
},
{
imageUrl: '/images/team/danielp.png',
name: 'Daniel Pyrathon',
title: 'Engineer',
},
{
imageUrl: '/images/team/lawrencef.jpg',
name: 'Lawrence Forman',
title: 'Engineer',
},
{
imageUrl: '/images/team/paulv.jpg',
name: 'Paul Vienhage',
title: 'Research Engineer',
},
];
const advisors: TeamMember[] = [
{
imageUrl: '/images/team/advisors/frede.jpg',
name: 'Fred Ehrsam',
title: 'Advisor',
},
{
imageUrl: '/images/team/advisors/olafc.jpg',
name: 'Olaf Carlson-Wee',
title: 'Advisor',
},
{
imageUrl: '/images/team/advisors/joeyk.jpg',
name: 'Joey Krug',
title: 'Advisor',
},
{
imageUrl: '/images/team/advisors/lindax.jpg',
name: 'Linda Xie',
title: 'Advisor',
},
{
imageUrl: '/images/team/advisors/davids.jpg',
name: 'David Sacks',
title: 'Advisor',
},
];
export const NextAboutTeam = () => (
<AboutPageLayout
title="We are a global, growing team"
description={
<Paragraph size="medium" marginBottom="60px" isMuted={0.65}>
We are a distributed team with backgrounds in engineering, academic research, business, and design. The
0x Core Team is passionate about accelerating the adoption decentralized technology and believe in its
potential to be an equalizing force in the world. Join us and do the most impactful work of your life.
</Paragraph>
// tslint:disable-next-line:jsx-curly-spacing
}
linkLabel="Join the team"
to={WebsitePaths.AboutJobs}
>
<DocumentTitle {...documentConstants.TEAM} />
<Section maxWidth="1170px" wrapWidth="100%" isFlex={true} flexBreakpoint="900px">
<Column>
<Heading size="medium">0x Team</Heading>
</Column>
<Column width="70%" maxWidth="800px">
<StyledGrid>
{_.map(team, (info: TeamMember, index: number) => (
<Member key={`team-${index}`} name={info.name} title={info.title} imageUrl={info.imageUrl} />
))}
</StyledGrid>
</Column>
</Section>
<Section bgColor="#F3F6F4" maxWidth="1170px" wrapWidth="100%" flexBreakpoint="900px" isFlex={true}>
<Column>
<Heading size="medium">Advisors</Heading>
</Column>
<Column width="70%" maxWidth="800px">
<StyledGrid>
{_.map(advisors, (info: TeamMember, index: number) => (
<Member key={`advisor-${index}`} name={info.name} title={info.title} imageUrl={info.imageUrl} />
))}
</StyledGrid>
</Column>
</Section>
</AboutPageLayout>
);
const StyledGrid = styled.div`
&:after {
content: '';
clear: both;
}
`;
const Member = ({ name, title, imageUrl }: TeamMember) => (
<StyledMember>
<img src={imageUrl} alt={name} />
<Name>{name}</Name>
<MemberTitle isMuted={0.5} size={14}>
{title}
</MemberTitle>
</StyledMember>
);
const StyledMember = styled.div`
margin-bottom: 10px;
float: left;
width: calc(50% - 15px);
margin-right: 15px;
@media (max-width: 600px) {
&:nth-child(2n + 1) {
clear: left;
}
}
img,
svg {
width: 100%;
height: auto;
object-fit: contain;
margin-bottom: 10px;
}
@media (min-width: 600px) {
width: calc(33.3333% - 30px);
margin-right: 20px;
&:nth-child(3n + 1) {
clear: left;
}
}
@media (min-width: 900px) {
width: calc(25% - 30px);
&:nth-child(3n + 1) {
clear: none;
}
&:nth-child(4n + 1) {
clear: left;
}
}
`;
const Name = styled.h3`
color: ${colors.textDarkPrimary};
font-size: 14px;
line-height: 1;
margin: 0;
`;
const MemberTitle = styled(Paragraph)`
font-size: 14px;
`;