diff --git a/packages/website/package.json b/packages/website/package.json
index a40b23b551..65b0fa3a6a 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -57,7 +57,6 @@
"rc-slider": "^8.6.3",
"react": "^16.5.2",
"react-copy-to-clipboard": "^5.0.0",
- "react-document-title": "^2.0.3",
"react-dom": "^16.5.2",
"react-flickity-component": "^3.1.0",
"react-headroom": "2.2.2",
diff --git a/packages/website/public/index.html b/packages/website/public/index.html
index fcc1ffe098..1cd35f1332 100644
--- a/packages/website/public/index.html
+++ b/packages/website/public/index.html
@@ -3,16 +3,7 @@
-
-
-
-
-
- 0x: The Protocol for Trading Tokens
diff --git a/packages/website/ts/components/document_title.tsx b/packages/website/ts/components/document_title.tsx
new file mode 100644
index 0000000000..81fb021a5f
--- /dev/null
+++ b/packages/website/ts/components/document_title.tsx
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { Helmet } from 'react-helmet';
+
+import { DocumentMetadata } from '../utils/document_meta_constants';
+
+export interface DocumentTitleProps extends DocumentMetadata {}
+
+export const DocumentTitle: React.StatelessComponent = ({ title, description }) => (
+
+ {title}
+
+
+
+
+);
diff --git a/packages/website/ts/components/portal/portal.tsx b/packages/website/ts/components/portal/portal.tsx
index 6ebbf8d1fb..3d7c672583 100644
--- a/packages/website/ts/components/portal/portal.tsx
+++ b/packages/website/ts/components/portal/portal.tsx
@@ -2,7 +2,6 @@ import { colors, Link } from '@0x/react-shared';
import { BigNumber } from '@0x/utils';
import * as _ from 'lodash';
import * as React from 'react';
-import * as DocumentTitle from 'react-document-title';
import { Route, RouteComponentProps, Switch } from 'react-router-dom';
import { Blockchain } from 'ts/blockchain';
@@ -234,7 +233,6 @@ export class Portal extends React.Component {
return (
-
-
-
+
diff --git a/packages/website/ts/pages/about/mission.tsx b/packages/website/ts/pages/about/mission.tsx
index ab8949faec..69fe07f15b 100644
--- a/packages/website/ts/pages/about/mission.tsx
+++ b/packages/website/ts/pages/about/mission.tsx
@@ -1,14 +1,15 @@
import * as _ from 'lodash';
import * as React from 'react';
-import DocumentTitle from 'react-document-title';
import styled from 'styled-components';
import { AboutPageLayout } from 'ts/components/aboutPageLayout';
import { Definition } from 'ts/components/definition';
+import { DocumentTitle } from 'ts/components/document_title';
import { Image } from 'ts/components/image';
import { Column, Section } from 'ts/components/newLayout';
import { Heading } from 'ts/components/text';
import { constants } from 'ts/utils/constants';
+import { documentConstants } from 'ts/utils/document_meta_constants';
const values = [
{
@@ -38,7 +39,7 @@ export const NextAboutMission = () => (
linkLabel="Our mission and values"
href={constants.URL_MISSION_AND_VALUES_BLOG_POST}
>
-
+
diff --git a/packages/website/ts/pages/about/press.tsx b/packages/website/ts/pages/about/press.tsx
index 03003d6561..1ffa11d1fb 100644
--- a/packages/website/ts/pages/about/press.tsx
+++ b/packages/website/ts/pages/about/press.tsx
@@ -1,12 +1,13 @@
import * as _ from 'lodash';
import * as React from 'react';
-import DocumentTitle from 'react-document-title';
import styled from 'styled-components';
import { AboutPageLayout } from 'ts/components/aboutPageLayout';
import { Button } from 'ts/components/button';
+import { DocumentTitle } from 'ts/components/document_title';
import { Column, FlexWrap } from 'ts/components/newLayout';
import { Paragraph } from 'ts/components/text';
+import { documentConstants } from 'ts/utils/document_meta_constants';
interface HighlightProps {
logo: string;
@@ -66,7 +67,7 @@ export const NextAboutPress = () => (
>
}
>
-
+
);
diff --git a/packages/website/ts/pages/about/team.tsx b/packages/website/ts/pages/about/team.tsx
index 808fea0496..82506a3cf0 100644
--- a/packages/website/ts/pages/about/team.tsx
+++ b/packages/website/ts/pages/about/team.tsx
@@ -1,14 +1,15 @@
import * as _ from 'lodash';
import * as React from 'react';
-import DocumentTitle from 'react-document-title';
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;
@@ -194,7 +195,7 @@ export const NextAboutTeam = () => (
linkLabel="Join the team"
to={WebsitePaths.AboutJobs}
>
-
+
0x Team
diff --git a/packages/website/ts/pages/credits.tsx b/packages/website/ts/pages/credits.tsx
index fa0aa3c57c..50dc185fc3 100644
--- a/packages/website/ts/pages/credits.tsx
+++ b/packages/website/ts/pages/credits.tsx
@@ -4,11 +4,13 @@ import * as React from 'react';
import { Banner } from 'ts/components/banner';
import { Button } from 'ts/components/button';
import { CenteredDefinition } from 'ts/components/centeredDefinition';
+import { DocumentTitle } from 'ts/components/document_title';
import { Hero } from 'ts/components/hero';
import { ModalContact, ModalContactType } from 'ts/components/modals/modal_contact';
import { FlexWrap, Section } from 'ts/components/newLayout';
import { SiteWrap } from 'ts/components/siteWrap';
import { Heading } from 'ts/components/text';
+import { documentConstants } from 'ts/utils/document_meta_constants';
export interface CreditsProps {}
@@ -24,6 +26,7 @@ export class Credits extends React.Component {
public render(): React.ReactNode {
return (
+
-
+
diff --git a/packages/website/ts/pages/ecosystem.tsx b/packages/website/ts/pages/ecosystem.tsx
index 8e367b21f7..455fc3a099 100644
--- a/packages/website/ts/pages/ecosystem.tsx
+++ b/packages/website/ts/pages/ecosystem.tsx
@@ -1,16 +1,17 @@
import * as _ from 'lodash';
import * as React from 'react';
-import DocumentTitle from 'react-document-title';
import styled from 'styled-components';
import { colors } from 'ts/style/colors';
import { Button } from 'ts/components/button';
+import { DocumentTitle } from 'ts/components/document_title';
import { Icon } from 'ts/components/icon';
import { Column, Section, WrapGrid } from 'ts/components/newLayout';
import { SiteWrap } from 'ts/components/siteWrap';
import { Heading, Paragraph } from 'ts/components/text';
import { constants } from 'ts/utils/constants';
+import { documentConstants } from 'ts/utils/document_meta_constants';
interface BenefitProps {
title: string;
@@ -55,7 +56,7 @@ const benefits: BenefitProps[] = [
export const NextEcosystem = () => (
-
+
diff --git a/packages/website/ts/pages/faq/faq.tsx b/packages/website/ts/pages/faq/faq.tsx
index 548db1d1d1..b86a1ca322 100644
--- a/packages/website/ts/pages/faq/faq.tsx
+++ b/packages/website/ts/pages/faq/faq.tsx
@@ -1,7 +1,7 @@
import { colors, Styles } from '@0x/react-shared';
import * as _ from 'lodash';
import * as React from 'react';
-import * as DocumentTitle from 'react-document-title';
+import { DocumentTitle } from 'ts/components/document_title';
import { Footer } from 'ts/components/old_footer';
import { TopBar } from 'ts/components/top_bar/top_bar';
import { Question } from 'ts/pages/faq/question';
@@ -9,6 +9,7 @@ import { Dispatcher } from 'ts/redux/dispatcher';
import { FAQQuestion, FAQSection, WebsitePaths } from 'ts/types';
import { configs } from 'ts/utils/configs';
import { constants } from 'ts/utils/constants';
+import { documentConstants } from 'ts/utils/document_meta_constants';
import { Translate } from 'ts/utils/translate';
export interface FAQProps {
@@ -412,7 +413,7 @@ export class FAQ extends React.Component {
public render(): React.ReactNode {
return (
-
+
diff --git a/packages/website/ts/pages/governance/governance.tsx b/packages/website/ts/pages/governance/governance.tsx
index e6f2ee812d..28604b2ba6 100644
--- a/packages/website/ts/pages/governance/governance.tsx
+++ b/packages/website/ts/pages/governance/governance.tsx
@@ -1,11 +1,11 @@
import { BigNumber } from '@0x/utils';
import * as _ from 'lodash';
import * as React from 'react';
-import DocumentTitle from 'react-document-title';
import styled from 'styled-components';
import { Banner } from 'ts/components/banner';
import { Button } from 'ts/components/button';
+import { DocumentTitle } from 'ts/components/document_title';
import { ModalContact } from 'ts/components/modals/modal_contact';
import { Column, FlexWrap, Section } from 'ts/components/newLayout';
import { SiteWrap } from 'ts/components/siteWrap';
@@ -17,6 +17,7 @@ import { VoteInfo, VoteValue } from 'ts/pages/governance/vote_form';
import { VoteStats } from 'ts/pages/governance/vote_stats';
import { colors } from 'ts/style/colors';
import { configs } from 'ts/utils/configs';
+import { documentConstants } from 'ts/utils/document_meta_constants';
import { utils } from 'ts/utils/utils';
interface LabelInterface {
@@ -109,7 +110,7 @@ export class Governance extends React.Component {
const { isVoteReceived, tally } = this.state;
return (
-
+
diff --git a/packages/website/ts/pages/instant.tsx b/packages/website/ts/pages/instant.tsx
index 586665d5ba..81785e59ca 100644
--- a/packages/website/ts/pages/instant.tsx
+++ b/packages/website/ts/pages/instant.tsx
@@ -1,12 +1,12 @@
import { utils as sharedUtils } from '@0x/react-shared';
import * as _ from 'lodash';
import * as React from 'react';
-import DocumentTitle from 'react-document-title';
import styled, { keyframes } from 'styled-components';
import { Banner } from 'ts/components/banner';
import { Button } from 'ts/components/button';
import { Definition } from 'ts/components/definition';
+import { DocumentTitle } from 'ts/components/document_title';
import { Hero } from 'ts/components/hero';
import { Section, SectionProps } from 'ts/components/newLayout';
import { SiteWrap } from 'ts/components/siteWrap';
@@ -14,6 +14,7 @@ import { Heading, Paragraph } from 'ts/components/text';
import { Configurator } from 'ts/pages/instant/configurator';
import { colors } from 'ts/style/colors';
import { WebsitePaths } from 'ts/types';
+import { documentConstants } from 'ts/utils/document_meta_constants';
import { utils } from 'ts/utils/utils';
import { ModalContact } from '../components/modals/modal_contact';
@@ -88,7 +89,7 @@ export class Next0xInstant extends React.Component {
public render(): React.ReactNode {
return (
-
+
{
public render(): React.ReactNode {
return (
-
+
diff --git a/packages/website/ts/pages/launch_kit.tsx b/packages/website/ts/pages/launch_kit.tsx
index dd4de4d999..b3f09e6d2a 100644
--- a/packages/website/ts/pages/launch_kit.tsx
+++ b/packages/website/ts/pages/launch_kit.tsx
@@ -1,17 +1,15 @@
import * as _ from 'lodash';
import * as React from 'react';
-import DocumentTitle from 'react-document-title';
-
-import { Hero } from 'ts/components/hero';
-
import { Banner } from 'ts/components/banner';
import { Button } from 'ts/components/button';
import { Definition } from 'ts/components/definition';
+import { DocumentTitle } from 'ts/components/document_title';
+import { Hero } from 'ts/components/hero';
import { Icon } from 'ts/components/icon';
-import { SiteWrap } from 'ts/components/siteWrap';
-
import { Section } from 'ts/components/newLayout';
+import { SiteWrap } from 'ts/components/siteWrap';
import { constants } from 'ts/utils/constants';
+import { documentConstants } from 'ts/utils/document_meta_constants';
import { ModalContact } from '../components/modals/modal_contact';
@@ -36,7 +34,7 @@ export class NextLaunchKit extends React.Component {
public render(): React.ReactNode {
return (
-
+
{
public render(): React.ReactNode {
return (
+
(
-
+
diff --git a/packages/website/ts/pages/why.tsx b/packages/website/ts/pages/why.tsx
index 48888d10a7..784d42bd8e 100644
--- a/packages/website/ts/pages/why.tsx
+++ b/packages/website/ts/pages/why.tsx
@@ -1,17 +1,18 @@
import * as _ from 'lodash';
import * as React from 'react';
-import DocumentTitle from 'react-document-title';
import ScrollableAnchor, { configureAnchors } from 'react-scrollable-anchor';
import styled from 'styled-components';
import { Banner } from 'ts/components/banner';
import { Button } from 'ts/components/button';
import { Definition } from 'ts/components/definition';
+import { DocumentTitle } from 'ts/components/document_title';
import { Hero } from 'ts/components/hero';
import { Column, Section, WrapSticky } from 'ts/components/newLayout';
import { SiteWrap } from 'ts/components/siteWrap';
import { Slide, Slider } from 'ts/components/slider/slider';
import { Heading } from 'ts/components/text';
+import { documentConstants } from 'ts/utils/document_meta_constants';
import { ModalContact } from '../components/modals/modal_contact';
@@ -99,7 +100,7 @@ export class NextWhy extends React.Component {
);
return (
-
+
=3.31.2", # HACK! this is web3's dependency!
# above works around https://github.com/ethereum/web3.py/issues/1179
"mypy_extensions",
- "web3",
],
extras_require={
"dev": [