From d2e62239bd109d5d27af2cd20885c5879a4f5b4c Mon Sep 17 00:00:00 2001
From: Mike Nikles
Date: Fri, 12 Mar 2021 12:33:17 +0000
Subject: [PATCH 1/4] Create the rebrand branch; add an animations deliverables
placeholder page.
---
src/pages/rebrand/animations.tsx | 9 +++++++++
1 file changed, 9 insertions(+)
create mode 100644 src/pages/rebrand/animations.tsx
diff --git a/src/pages/rebrand/animations.tsx b/src/pages/rebrand/animations.tsx
new file mode 100644
index 000000000..bced8d497
--- /dev/null
+++ b/src/pages/rebrand/animations.tsx
@@ -0,0 +1,9 @@
+import React from 'react'
+
+const AnimationsPage: React.FunctionComponent<{}> = () => (
+ <>
+ TBD: Add animation deliverables.
+ >
+);
+
+export default AnimationsPage;
From bc206f4458530d836e8d32471d88fed1b82097e2 Mon Sep 17 00:00:00 2001
From: Nisar Hassan Naqvi
Date: Wed, 17 Mar 2021 13:02:28 +0000
Subject: [PATCH 2/4] setup tailwind.
---
.babelrc | 11 +-
.gitpod.yml | 16 +-
gatsby-browser.js | 1 +
package.json | 9 +-
.../gatsby-remark-gitpod/package-lock.json | 31 +-
src/pages/index.tsx | 169 +------
tailwind.config.js | 11 +
yarn.lock | 449 ++++++++++++++++--
8 files changed, 505 insertions(+), 192 deletions(-)
create mode 100644 tailwind.config.js
diff --git a/.babelrc b/.babelrc
index 970673e67..0fa923123 100644
--- a/.babelrc
+++ b/.babelrc
@@ -8,11 +8,20 @@
"node": "6.10.3"
}
}
+ ],
+ [
+ "babel-preset-gatsby",
+ {
+ "targets": {
+ "browsers": [">0.25%", "not dead"]
+ }
+ }
]
],
"plugins": [
"@babel/plugin-proposal-class-properties",
"@babel/plugin-transform-object-assign",
- "@babel/plugin-proposal-object-rest-spread"
+ "@babel/plugin-proposal-object-rest-spread",
+ "babel-plugin-macros"
]
}
diff --git a/.gitpod.yml b/.gitpod.yml
index 5bba2fa33..3b415631e 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -12,21 +12,23 @@ vscode:
- jpoissonnier.vscode-styled-components@0.0.29:7hF8G3VtB+HNearI5Zw+NA==
- paulmolluzzo.convert-css-in-js@1.1.3:YnjK47pXScU3DMFfQzkkOw==
+ - lightyen.tailwindcss-intellisense-twin@0.7.4:Z6ktluLCqwxpOSSVZcyWvQ==
+
github:
prebuilds:
# enable for the master/default branch (defaults to true)
master: true
- # enable for all branches in this repo (defaults to false)
+# enable for all branches in this repo (defaults to false)
branches: true
- # enable for pull requests coming from this repo (defaults to true)
+# enable for pull requests coming from this repo (defaults to true)
pullRequests: true
- # enable for pull requests coming from forks (defaults to false)
+# enable for pull requests coming from forks (defaults to false)
pullRequestsFromForks: true
- # add a check to pull requests (defaults to true)
+# add a check to pull requests (defaults to true)
addCheck: true
- # add a "Review in Gitpod" button as a comment to pull requests (defaults to false)
+# add a "Review in Gitpod" button as a comment to pull requests (defaults to false)
addComment: false
- # add a "Review in Gitpod" button to the pull request's description (defaults to false)
+# add a "Review in Gitpod" button to the pull request's description (defaults to false)
addBadge: false
- # add a label once the prebuild is ready to pull requests (defaults to false)
+# add a label once the prebuild is ready to pull requests (defaults to false)
addLabel: false
diff --git a/gatsby-browser.js b/gatsby-browser.js
index 99cb7bd17..5efbd9a09 100644
--- a/gatsby-browser.js
+++ b/gatsby-browser.js
@@ -1 +1,2 @@
+import "tailwindcss/dist/base.min.css";
require("prismjs/themes/prism-solarizedlight.css");
diff --git a/package.json b/package.json
index 5581d51cc..2fae9de63 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
},
"dependencies": {
"@emotion/core": "^10.0.28",
- "@emotion/styled": "^10.0.27",
+ "@emotion/styled": "^11.1.5",
"@sendgrid/mail": "^7.2.6",
"babel-plugin-styled-components": "^1.10.7",
"bowser": "^2.9.0",
@@ -35,7 +35,7 @@
"gatsby-plugin-algolia-docsearch": "^1.0.5",
"gatsby-plugin-canonical-urls": "^2.3.2",
"gatsby-plugin-catch-links": "^2.3.3",
- "gatsby-plugin-emotion": "^4.3.2",
+ "gatsby-plugin-emotion": "^6.1.0",
"gatsby-plugin-exclude": "^1.0.2",
"gatsby-plugin-feed": "^2.5.3",
"gatsby-plugin-google-analytics": "^2.3.2",
@@ -68,6 +68,7 @@
"typescript": "^3.9.3"
},
"devDependencies": {
+ "@emotion/react": "^11.1.5",
"@types/aws-lambda": "^8.10.63",
"@types/classnames": "^2.2.10",
"@types/node": "^14.0.6",
@@ -79,9 +80,11 @@
"netlify-lambda": "^2.0.1",
"prettier": "^2.0.5",
"rimraf": "^3.0.2",
+ "tailwindcss": "^2.0.3",
"tslint": "^6.1.2",
"tslint-config-blvd": "^1.2.1",
"tslint-config-prettier": "^1.18.0",
- "tslint-plugin-prettier": "^2.3.0"
+ "tslint-plugin-prettier": "^2.3.0",
+ "twin.macro": "^2.3.0"
}
}
diff --git a/plugins/gatsby-remark-gitpod/package-lock.json b/plugins/gatsby-remark-gitpod/package-lock.json
index 4b54ad5bd..a08992844 100644
--- a/plugins/gatsby-remark-gitpod/package-lock.json
+++ b/plugins/gatsby-remark-gitpod/package-lock.json
@@ -1,8 +1,37 @@
{
"name": "gatsby-remark-gitpod",
"version": "1.0.0",
- "lockfileVersion": 1,
+ "lockfileVersion": 2,
"requires": true,
+ "packages": {
+ "": {
+ "version": "1.0.0",
+ "dependencies": {
+ "unist-util-visit": "^1.4.0"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz",
+ "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw=="
+ },
+ "node_modules/unist-util-visit": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz",
+ "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==",
+ "dependencies": {
+ "unist-util-visit-parents": "^2.0.0"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz",
+ "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==",
+ "dependencies": {
+ "unist-util-is": "^2.1.2"
+ }
+ }
+ },
"dependencies": {
"unist-util-is": {
"version": "2.1.2",
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index 89668eb13..5e4df816e 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -1,156 +1,19 @@
-import React from 'react'
-
-import IndexLayout from '../layouts/index'
-import Banner from '../components/index/Banner'
-import TrustedBy from '../components/TrustedBy'
-import SaveHours from '../components/index/SaveHours'
-import FeatureCards from '../components/FeatureCards'
-import Testimonials from '../components/index/Testimonials'
-import GetStarted from '../components/index/GetStarted'
-import MoreInfo from '../components/MoreInfo'
-// import Gatsby from '../resources/gatsby.svg'
-import GitLab from '../resources/gitlab-logo.svg'
-import FreeCodeCamp from '../resources/freecodecamp.svg'
-import DWaveLogo from '../resources/dwave.svg'
-import GoogleLogo from '../resources/google.svg'
-import OpenAILogo from '../resources/openai.svg'
-import SauceLabsLogo from '../resources/sauce-labs.svg'
-import FacebookLogo from '../resources/facebook.svg'
-import CodeInstituteLogo from '../resources/code.svg'
-import FourGeeksAcademyLogo from '../resources/4-geeks-academy.png'
-import TheiaIDELogo from '../resources/theia-grey.svg'
-// import VueLogo from '../resources/vuejs.svg'
-import UberLogo from '../resources/uber.svg'
-import AmazonLogo from '../resources/amazon.svg'
-import IntelLogo from '../resources/intel.svg'
-import { features } from '../contents/index'
-import SecurityAndOSS from '../components/index/SecurityAndOSS'
-// import ProductivityWithGitpod from '../components/index/ProductivityWithGitpod'
-
-const IndexPage: React.SFC<{}> = () => (
-
-
-
- Trusted by Visionary Teams >}
- brands={[
- {
- alt: 'GitLab',
- url: 'https://about.gitlab.com/',
- svg: GitLab,
- className: 'grey-logo'
- },
- {
- alt: 'freeCodeCamp',
- url: 'https://www.freecodecamp.org/',
- svg: FreeCodeCamp,
- className: 'fcc'
- },
- {
- alt: 'D-Wave',
- url: 'https://www.dwavesys.com/',
- svg: DWaveLogo,
- transform: 'scale(1.3)',
- className: 'dwave-logo'
- },
- {
- alt: 'Google',
- url: 'https://about.google/',
- svg: GoogleLogo,
- transform: 'scale(0.9)',
- className: 'grey-logo'
- },
- {
- alt: 'Amazon',
- url: 'https://www.aboutamazon.com',
- svg: AmazonLogo,
- transform: 'scale(0.9) translateY(5px)',
- className: 'grey-logo'
- },
- {
- alt: 'Facebook',
- url: 'https://about.fb.com/',
- svg: FacebookLogo,
- className: 'grey-logo'
- },
- {
- alt: 'Uber',
- url: 'https://www.uber.com',
- svg: UberLogo,
- className: 'grey-logo'
- },
- {
- alt: 'OpenAI',
- url: 'https://openai.com/',
- svg: OpenAILogo,
- transform: 'scale(1.1)',
- className: 'grey-logo'
- },
- {
- alt: 'Sauce Labs',
- url: 'https://saucelabs.com/',
- svg: SauceLabsLogo,
- className: 'grey-logo'
- },
- {
- alt: 'Intel',
- url: 'https://www.intel.com',
- svg: IntelLogo,
- transform: 'scale(0.8)',
- className: 'grey-logo'
- },
- {
- alt: 'Eclipse Theia',
- url: 'https://theia-ide.org',
- svg: TheiaIDELogo,
- transform: 'scale(1.1)',
- className: 'grey-logo'
- },
- {
- alt: 'Code Institute',
- url: 'https://codeinstitute.net/',
- svg: CodeInstituteLogo,
- className: 'grey-logo'
- },
- {
- alt: '4Geeks Academy',
- url: 'https://www.4geeksacademy.co/',
- svg: FourGeeksAcademyLogo,
- className: 'four-geeks grey-logo'
- }
- // {
- // alt: 'Gatsby',
- // url: 'https://www.gatsbyjs.org/',
- // svg: Gatsby,
- // className: 'gatsby-logo'
- // },
- // {
- // alt: 'Vue.js',
- // url: 'https://vuejs.org/',
- // svg: VueLogo,
- // className: 'vue-logo'
- // },
- ]}
- />
-
- {/* */}
-
-
-
-
-
-
-
-
-
-
-
-
-
+import React from 'react';
+
+import tw from "twin.macro";
+
+const Button = tw.button`
+ bg-blue-500
+ hover:bg-blue-800
+ text-white
+ p-2
+ rounded
+`
+
+const IndexPage = () => (
+ <>
+ A Nice Button
+ >
)
-
export default IndexPage
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 000000000..62dfdaf3f
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,11 @@
+module.exports = {
+ purge: [],
+ darkMode: false, // or 'media' or 'class'
+ theme: {
+ extend: {},
+ },
+ variants: {
+ extend: {},
+ },
+ plugins: [],
+}
diff --git a/yarn.lock b/yarn.lock
index acddeea9d..1be9d25f1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -85,6 +85,13 @@
dependencies:
"@babel/types" "^7.10.4"
+"@babel/helper-annotate-as-pure@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab"
+ integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==
+ dependencies:
+ "@babel/types" "^7.12.13"
+
"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3"
@@ -195,6 +202,13 @@
dependencies:
"@babel/types" "^7.10.4"
+"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.7.0":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0"
+ integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==
+ dependencies:
+ "@babel/types" "^7.12.13"
+
"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359"
@@ -220,6 +234,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
+"@babel/helper-plugin-utils@^7.12.13":
+ version "7.13.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af"
+ integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==
+
"@babel/helper-regex@^7.10.4":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0"
@@ -274,6 +293,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
+"@babel/helper-validator-identifier@^7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
+ integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
+
"@babel/helper-wrap-function@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87"
@@ -307,6 +331,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037"
integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==
+"@babel/parser@^7.12.5":
+ version "7.13.11"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.11.tgz#f93ebfc99d21c1772afbbaa153f47e7ce2f50b88"
+ integrity sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q==
+
"@babel/plugin-proposal-async-generator-functions@^7.10.4":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558"
@@ -465,6 +494,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
+"@babel/plugin-syntax-jsx@^7.12.1", "@babel/plugin-syntax-jsx@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15"
+ integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
@@ -744,7 +780,7 @@
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx" "^7.10.4"
-"@babel/plugin-transform-react-jsx@^7.10.4", "@babel/plugin-transform-react-jsx@^7.3.0":
+"@babel/plugin-transform-react-jsx@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2"
integrity sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==
@@ -754,6 +790,17 @@
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx" "^7.10.4"
+"@babel/plugin-transform-react-jsx@^7.12.1":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.17.tgz#dd2c1299f5e26de584939892de3cfc1807a38f24"
+ integrity sha512-mwaVNcXV+l6qJOuRhpdTEj8sT/Z0owAVWf9QujTZ0d2ye9X/K+MTOTSizcgKOj18PGnTc/7g1I4+cIUjsKhBcw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.12.13"
+ "@babel/helper-module-imports" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.12.13"
+ "@babel/plugin-syntax-jsx" "^7.12.13"
+ "@babel/types" "^7.12.17"
+
"@babel/plugin-transform-react-pure-annotations@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz#3eefbb73db94afbc075f097523e445354a1c6501"
@@ -1014,6 +1061,15 @@
lodash "^4.17.19"
to-fast-properties "^2.0.0"
+"@babel/types@^7.12.13", "@babel/types@^7.12.17":
+ version "7.13.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80"
+ integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.12.11"
+ lodash "^4.17.19"
+ to-fast-properties "^2.0.0"
+
"@bugsnag/browser@^7.3.5":
version "7.3.5"
resolved "https://registry.yarnpkg.com/@bugsnag/browser/-/browser-7.3.5.tgz#31a10983247804b58894bd1dc5a998b89195c780"
@@ -1078,15 +1134,33 @@
dependencies:
"@babel/plugin-syntax-jsx" "^7.2.0"
-"@emotion/babel-preset-css-prop@^10.0.27":
- version "10.0.27"
- resolved "https://registry.yarnpkg.com/@emotion/babel-preset-css-prop/-/babel-preset-css-prop-10.0.27.tgz#58868d9a6afee0eeaeb0fa9dc5ccb1b12d4f786b"
- integrity sha512-rducrjTpLGDholp0l2l4pXqpzAqYYGMg/x4IteO0db2smf6zegn6RRZdDnbaoMSs63tfPWgo2WukT1/F1gX/AA==
+"@emotion/babel-plugin@^11.1.2", "@emotion/babel-plugin@^11.2.0":
+ version "11.2.0"
+ resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.2.0.tgz#f25c6df8ec045dad5ae6ca63df0791673b98c920"
+ integrity sha512-lsnQBnl3l4wu/FJoyHnYRpHJeIPNkOBMbtDUIXcO8luulwRKZXPvA10zd2eXVN6dABIWNX4E34en/jkejIg/yA==
dependencies:
- "@babel/plugin-transform-react-jsx" "^7.3.0"
- "@babel/runtime" "^7.5.5"
+ "@babel/helper-module-imports" "^7.7.0"
+ "@babel/plugin-syntax-jsx" "^7.12.1"
+ "@babel/runtime" "^7.7.2"
+ "@emotion/hash" "^0.8.0"
+ "@emotion/memoize" "^0.7.5"
+ "@emotion/serialize" "^1.0.0"
+ babel-plugin-macros "^2.6.1"
+ convert-source-map "^1.5.0"
+ escape-string-regexp "^4.0.0"
+ find-root "^1.1.0"
+ source-map "^0.5.7"
+ stylis "^4.0.3"
+
+"@emotion/babel-preset-css-prop@^11.2.0":
+ version "11.2.0"
+ resolved "https://registry.yarnpkg.com/@emotion/babel-preset-css-prop/-/babel-preset-css-prop-11.2.0.tgz#c7e945f56b2610b438f0dc8ae5253fc55488de0e"
+ integrity sha512-9XLQm2eLPYTho+Cx1LQTDA1rATjoAaB4O+ds55XDvoAa+Z16Hhg8y5Vihj3C8E6+ilDM8SV5A9Z6z+yj0YIRBg==
+ dependencies:
+ "@babel/plugin-transform-react-jsx" "^7.12.1"
+ "@babel/runtime" "^7.7.2"
+ "@emotion/babel-plugin" "^11.2.0"
"@emotion/babel-plugin-jsx-pragmatic" "^0.1.5"
- babel-plugin-emotion "^10.0.27"
"@emotion/cache@^10.0.27":
version "10.0.29"
@@ -1098,6 +1172,17 @@
"@emotion/utils" "0.11.3"
"@emotion/weak-memoize" "0.2.5"
+"@emotion/cache@^11.1.3":
+ version "11.1.3"
+ resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.1.3.tgz#c7683a9484bcd38d5562f2b9947873cf66829afd"
+ integrity sha512-n4OWinUPJVaP6fXxWZD9OUeQ0lY7DvtmtSuqtRWT0Ofo/sBLCVSgb4/Oa0Q5eFxcwablRKjUXqXtNZVyEwCAuA==
+ dependencies:
+ "@emotion/memoize" "^0.7.4"
+ "@emotion/sheet" "^1.0.0"
+ "@emotion/utils" "^1.0.0"
+ "@emotion/weak-memoize" "^0.2.5"
+ stylis "^4.0.3"
+
"@emotion/core@^10.0.14", "@emotion/core@^10.0.28":
version "10.0.35"
resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.35.tgz#513fcf2e22cd4dfe9d3894ed138c9d7a859af9b3"
@@ -1119,7 +1204,7 @@
"@emotion/utils" "0.11.3"
babel-plugin-emotion "^10.0.27"
-"@emotion/hash@0.8.0":
+"@emotion/hash@0.8.0", "@emotion/hash@^0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
@@ -1131,11 +1216,36 @@
dependencies:
"@emotion/memoize" "0.7.4"
+"@emotion/is-prop-valid@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.0.tgz#29ef6be1e946fb4739f9707def860f316f668cde"
+ integrity sha512-9RkilvXAufQHsSsjQ3PIzSns+pxuX4EW8EbGeSPjZMHuMx6z/MOzb9LpqNieQX4F3mre3NWS2+X3JNRHTQztUQ==
+ dependencies:
+ "@emotion/memoize" "^0.7.4"
+
"@emotion/memoize@0.7.4":
version "0.7.4"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
+"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
+ integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==
+
+"@emotion/react@^11.1.5":
+ version "11.1.5"
+ resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.1.5.tgz#15e78f9822894cdc296e6f4e0688bac8120dfe66"
+ integrity sha512-xfnZ9NJEv9SU9K2sxXM06lzjK245xSeHRpUh67eARBm3PBHjjKIZlfWZ7UQvD0Obvw6ZKjlC79uHrlzFYpOB/Q==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@emotion/cache" "^11.1.3"
+ "@emotion/serialize" "^1.0.0"
+ "@emotion/sheet" "^1.0.1"
+ "@emotion/utils" "^1.0.0"
+ "@emotion/weak-memoize" "^0.2.5"
+ hoist-non-react-statics "^3.3.1"
+
"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16":
version "0.11.16"
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad"
@@ -1147,11 +1257,27 @@
"@emotion/utils" "0.11.3"
csstype "^2.5.7"
+"@emotion/serialize@^1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.1.tgz#322cdebfdbb5a88946f17006548191859b9b0855"
+ integrity sha512-TXlKs5sgUKhFlszp/rg4lIAZd7UUSmJpwaf9/lAEFcUh2vPi32i7x4wk7O8TN8L8v2Ol8k0CxnhRBY0zQalTxA==
+ dependencies:
+ "@emotion/hash" "^0.8.0"
+ "@emotion/memoize" "^0.7.4"
+ "@emotion/unitless" "^0.7.5"
+ "@emotion/utils" "^1.0.0"
+ csstype "^3.0.2"
+
"@emotion/sheet@0.9.4":
version "0.9.4"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5"
integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==
+"@emotion/sheet@^1.0.0", "@emotion/sheet@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.0.1.tgz#245f54abb02dfd82326e28689f34c27aa9b2a698"
+ integrity sha512-GbIvVMe4U+Zc+929N1V7nW6YYJtidj31lidSmdYcWozwoBIObXBnaJkKNDjZrLm9Nc0BR+ZyHNaRZxqNZbof5g==
+
"@emotion/styled-base@^10.0.27":
version "10.0.31"
resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a"
@@ -1162,7 +1288,7 @@
"@emotion/serialize" "^0.11.15"
"@emotion/utils" "0.11.3"
-"@emotion/styled@^10.0.14", "@emotion/styled@^10.0.27":
+"@emotion/styled@^10.0.14":
version "10.0.27"
resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf"
integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==
@@ -1170,12 +1296,23 @@
"@emotion/styled-base" "^10.0.27"
babel-plugin-emotion "^10.0.27"
+"@emotion/styled@^11.1.5":
+ version "11.1.5"
+ resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.1.5.tgz#3d7bfa58b346e48315f65ee956aeef81f0bea8e0"
+ integrity sha512-nIq7pOBEDqT5xSFbclQ3XFy0q8C9EUU8ECqKN2kJKGxKh+vLz/x26kEih4aOpoAsyzc+R60rQxh7VJiLTUEdmg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@emotion/babel-plugin" "^11.1.2"
+ "@emotion/is-prop-valid" "^1.1.0"
+ "@emotion/serialize" "^1.0.0"
+ "@emotion/utils" "^1.0.0"
+
"@emotion/stylis@0.8.5":
version "0.8.5"
resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
-"@emotion/unitless@0.7.5":
+"@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.5":
version "0.7.5"
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
@@ -1185,7 +1322,12 @@
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924"
integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==
-"@emotion/weak-memoize@0.2.5":
+"@emotion/utils@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.0.0.tgz#abe06a83160b10570816c913990245813a2fd6af"
+ integrity sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==
+
+"@emotion/weak-memoize@0.2.5", "@emotion/weak-memoize@^0.2.5":
version "0.2.5"
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
@@ -1209,6 +1351,13 @@
reflect-metadata "^0.1.12"
tslib "^1.8.1"
+"@fullhuman/postcss-purgecss@^3.1.3":
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz#47af7b87c9bfb3de4bc94a38f875b928fffdf339"
+ integrity sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA==
+ dependencies:
+ purgecss "^3.1.3"
+
"@graphql-tools/schema@^6.0.14":
version "6.2.4"
resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.2.4.tgz#cc4e9f5cab0f4ec48500e666719d99fc5042481d"
@@ -2973,11 +3122,30 @@ acorn-jsx@^5.0.1, acorn-jsx@^5.2.0:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
+acorn-node@^1.6.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8"
+ integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==
+ dependencies:
+ acorn "^7.0.0"
+ acorn-walk "^7.0.0"
+ xtend "^4.0.2"
+
+acorn-walk@^7.0.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+ integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
acorn@^6.1.1, acorn@^6.4.1:
version "6.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
+acorn@^7.0.0:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
acorn@^7.1.1, acorn@^7.2.0:
version "7.4.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
@@ -3621,7 +3789,7 @@ babel-plugin-lodash@3.3.4:
lodash "^4.17.10"
require-package-name "^2.0.1"
-babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.8.0:
+babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.6.1, babel-plugin-macros@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
@@ -4181,7 +4349,7 @@ bytes@3.0.0:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
-bytes@3.1.0:
+bytes@3.1.0, bytes@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
@@ -4356,7 +4524,7 @@ camel-case@4.1.1:
pascal-case "^3.1.1"
tslib "^1.10.0"
-camelcase-css@2.0.1:
+camelcase-css@2.0.1, camelcase-css@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
@@ -4604,6 +4772,11 @@ clean-deep@^3.0.2, clean-deep@^3.3.0:
lodash.isplainobject "^4.0.6"
lodash.transform "^4.6.0"
+clean-set@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/clean-set/-/clean-set-1.1.2.tgz#76d8bf238c3e27827bfa73073ecdfdc767187070"
+ integrity sha512-cA8uCj0qSoG9e0kevyOWXwPaELRPVg5Pxp6WskLMwerx257Zfnh8Nl0JBH59d7wQzij2CK7qEfJQK3RjuKKIug==
+
clean-stack@^2.0.0, clean-stack@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
@@ -4847,6 +5020,14 @@ color-string@^1.5.2:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
+color-string@^1.5.4:
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014"
+ integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
color@3.0.x:
version "3.0.0"
resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a"
@@ -4863,11 +5044,24 @@ color@^3.0.0, color@^3.1.2:
color-convert "^1.9.1"
color-string "^1.5.2"
+color@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e"
+ integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==
+ dependencies:
+ color-convert "^1.9.1"
+ color-string "^1.5.4"
+
colorette@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
+colorette@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
+ integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
+
colors@^1.1.2, colors@^1.2.1:
version "1.4.0"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
@@ -4918,6 +5112,11 @@ commander@^5.1.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+commander@^6.0.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
+ integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
+
common-path-prefix@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-2.0.0.tgz#25b0265f318bf093a6ec630813aac97b29dea230"
@@ -5494,6 +5693,11 @@ css-tree@1.0.0-alpha.39:
mdn-data "2.0.6"
source-map "^0.6.1"
+css-unit-converter@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21"
+ integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==
+
css-what@2.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
@@ -5847,6 +6051,11 @@ define-property@^2.0.2:
is-descriptor "^1.0.2"
isobject "^3.0.1"
+defined@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+ integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+
del@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
@@ -6040,6 +6249,15 @@ detective-typescript@^5.8.0:
node-source-walk "^4.2.0"
typescript "^3.8.3"
+detective@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b"
+ integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==
+ dependencies:
+ acorn-node "^1.6.1"
+ defined "^1.0.0"
+ minimist "^1.1.1"
+
devcert@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/devcert/-/devcert-1.1.3.tgz#ff8119efae52ebf2449531b7482ae0f7211542e9"
@@ -6068,6 +6286,11 @@ devcert@^1.1.3:
tmp "^0.0.33"
tslib "^1.10.0"
+didyoumean@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff"
+ integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=
+
diff-sequences@^25.2.6:
version "25.2.6"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
@@ -6296,6 +6519,11 @@ download@^7.1.0:
p-event "^2.1.0"
pify "^3.0.0"
+dset@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/dset/-/dset-2.1.0.tgz#cd1e99e55cf32366d8f144f906c42f7fb3bf431e"
+ integrity sha512-hlQYwNEdW7Qf8zxysy+yN1E8C/SxRst3Z9n+IvXOR35D9bPVwNHhnL8ZBeoZjvinuGrlvGg6pAMDwhmjqFDgjA==
+
duplexer3@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
@@ -7647,6 +7875,16 @@ fs-extra@^9.0.1:
jsonfile "^6.0.1"
universalify "^1.0.0"
+fs-extra@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
fs-minipass@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
@@ -7861,13 +8099,13 @@ gatsby-plugin-catch-links@^2.3.3:
"@babel/runtime" "^7.11.2"
escape-string-regexp "^1.0.5"
-gatsby-plugin-emotion@^4.3.2:
- version "4.3.12"
- resolved "https://registry.yarnpkg.com/gatsby-plugin-emotion/-/gatsby-plugin-emotion-4.3.12.tgz#c45f80785a04584991e57b3e4437e400f4949850"
- integrity sha512-fHrci44MgZjLqEUGySNHKmbgTPOfR+Ir6JDZoPem8YbQZz5des3OyoomSEc2b/ztW5F5xkB792o+aFarahyz/Q==
+gatsby-plugin-emotion@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/gatsby-plugin-emotion/-/gatsby-plugin-emotion-6.1.0.tgz#dbf0bf3ee6a57a65bb5e563b63a36189cc98ac8c"
+ integrity sha512-olgoeJuZJro55+kvz8WRtaBRCLMzdN0TJdY5ByJdd9s49Y+ZN8FyxWuwlWzrbcOTyd8YzoNc2Kkylsw+1+W+2w==
dependencies:
"@babel/runtime" "^7.11.2"
- "@emotion/babel-preset-css-prop" "^10.0.27"
+ "@emotion/babel-preset-css-prop" "^11.2.0"
gatsby-plugin-exclude@^1.0.2:
version "1.0.2"
@@ -8595,7 +8833,7 @@ glob-to-regexp@^0.3.0:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
-glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@@ -9260,7 +9498,7 @@ hmac-drbg@^1.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
-hoist-non-react-statics@^3.3.0:
+hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1:
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@@ -9326,6 +9564,11 @@ html-tag-names@^1.1.5:
resolved "https://registry.yarnpkg.com/html-tag-names/-/html-tag-names-1.1.5.tgz#f537420c16769511283f8ae1681785fbc89ee0a9"
integrity sha512-aI5tKwNTBzOZApHIynaAwecLBv8TlZTEy/P4Sj2SzzAhBrGuI8yGZ0UIXVPQzOHGS+to2mjb04iy6VWt/8+d8A==
+html-tags@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140"
+ integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==
+
html-void-elements@^1.0.0, html-void-elements@^1.0.1:
version "1.0.5"
resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483"
@@ -9966,6 +10209,13 @@ is-color-stop@^1.0.0:
rgb-regex "^1.0.1"
rgba-regex "^1.0.0"
+is-core-module@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
+ integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
+ dependencies:
+ has "^1.0.3"
+
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@@ -10936,6 +11186,11 @@ lodash.every@^4.6.0:
resolved "https://registry.yarnpkg.com/lodash.every/-/lodash.every-4.6.0.tgz#eb89984bebc4364279bb3aefbbd1ca19bfa6c6a7"
integrity sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc=
+lodash.flatmap@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz#ef8cbf408f6e48268663345305c6acc0b778702e"
+ integrity sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=
+
lodash.flatten@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
@@ -11694,7 +11949,7 @@ minimist@^0.2.0:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455"
integrity sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg==
-minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5:
+minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
@@ -11781,6 +12036,11 @@ mkdirp@^1.0.3, mkdirp@^1.0.4:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+modern-normalize@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/modern-normalize/-/modern-normalize-1.0.0.tgz#539d84a1e141338b01b346f3e27396d0ed17601e"
+ integrity sha512-1lM+BMLGuDfsdwf3rsgBSrxJwAZHFIrQ8YR61xIqdHo0uNKI9M52wNpHSrliZATJp51On6JD0AfRxd4YGSU0lw==
+
module-definition@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-3.3.0.tgz#aae06d68c99c5f93841e59b8a4469b974956d4d4"
@@ -11901,6 +12161,11 @@ nan@^2.12.1:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
+nanoid@^3.1.20:
+ version "3.1.22"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844"
+ integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==
+
nanomatch@^1.2.9:
version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@@ -12145,7 +12410,7 @@ node-addon-api@^3.0.0:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.2.tgz#04bc7b83fd845ba785bb6eae25bc857e1ef75681"
integrity sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg==
-node-emoji@^1.10.0:
+node-emoji@^1.10.0, node-emoji@^1.8.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da"
integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==
@@ -12395,6 +12660,11 @@ object-hash@^1.1.4:
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==
+object-hash@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09"
+ integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==
+
object-inspect@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
@@ -13377,6 +13647,24 @@ postcss-flexbugs-fixes@^4.2.1:
dependencies:
postcss "^7.0.26"
+postcss-functions@^3:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e"
+ integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=
+ dependencies:
+ glob "^7.1.2"
+ object-assign "^4.1.1"
+ postcss "^6.0.9"
+ postcss-value-parser "^3.3.0"
+
+postcss-js@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-3.0.3.tgz#2f0bd370a2e8599d45439f6970403b5873abda33"
+ integrity sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==
+ dependencies:
+ camelcase-css "^2.0.1"
+ postcss "^8.1.6"
+
postcss-load-config@^2.0.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a"
@@ -13488,6 +13776,13 @@ postcss-modules-values@^1.3.0:
icss-replace-symbols "^1.1.0"
postcss "^6.0.1"
+postcss-nested@^5.0.1:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.5.tgz#f0a107d33a9fab11d7637205f5321e27223e3603"
+ integrity sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==
+ dependencies:
+ postcss-selector-parser "^6.0.4"
+
postcss-normalize-charset@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
@@ -13607,7 +13902,7 @@ postcss-selector-parser@^3.0.0:
indexes-of "^1.0.1"
uniq "^1.0.1"
-postcss-selector-parser@^6.0.2:
+postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
version "6.0.4"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3"
integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==
@@ -13655,7 +13950,7 @@ postcss-values-parser@^1.5.0:
indexes-of "^1.0.1"
uniq "^1.0.1"
-postcss@^6.0.1, postcss@^6.0.23:
+postcss@^6.0.1, postcss@^6.0.23, postcss@^6.0.9:
version "6.0.23"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
@@ -13673,6 +13968,15 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27
source-map "^0.6.1"
supports-color "^6.1.0"
+postcss@^8.1.6, postcss@^8.1.8, postcss@^8.2.1:
+ version "8.2.8"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece"
+ integrity sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw==
+ dependencies:
+ colorette "^1.2.2"
+ nanoid "^3.1.20"
+ source-map "^0.6.1"
+
potrace@^2.1.8:
version "2.1.8"
resolved "https://registry.yarnpkg.com/potrace/-/potrace-2.1.8.tgz#50f6fba92e1e39ddef6f979b0a0f841809e0acf2"
@@ -13778,6 +14082,11 @@ pretty-format@^25.5.0:
ansi-styles "^4.0.0"
react-is "^16.12.0"
+pretty-hrtime@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
+ integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=
+
pretty-ms@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-5.1.0.tgz#b906bdd1ec9e9799995c372e2b1c34f073f95384"
@@ -13986,6 +14295,16 @@ pupa@^2.0.1:
dependencies:
escape-goat "^2.0.0"
+purgecss@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-3.1.3.tgz#26987ec09d12eeadc318e22f6e5a9eb0be094f41"
+ integrity sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ==
+ dependencies:
+ commander "^6.0.0"
+ glob "^7.0.0"
+ postcss "^8.2.1"
+ postcss-selector-parser "^6.0.2"
+
q@^1.1.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@@ -14476,6 +14795,14 @@ redeyed@~2.1.0:
dependencies:
esprima "~4.0.0"
+reduce-css-calc@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03"
+ integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==
+ dependencies:
+ css-unit-converter "^1.1.1"
+ postcss-value-parser "^3.3.0"
+
redux-thunk@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
@@ -14901,6 +15228,14 @@ resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3
dependencies:
path-parse "^1.0.6"
+resolve@^1.19.0:
+ version "1.20.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
+ integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
+ dependencies:
+ is-core-module "^2.2.0"
+ path-parse "^1.0.6"
+
resolve@^2.0.0-next.1:
version "2.0.0-next.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.1.tgz#4d96ccb89bf82d54ab037241ae053db4e92bb5f1"
@@ -15972,6 +16307,11 @@ string-similarity@^1.2.2:
lodash.map "^4.6.0"
lodash.maxby "^4.6.0"
+string-similarity@^4.0.3:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b"
+ integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==
+
string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@@ -16221,6 +16561,11 @@ stylehacks@^4.0.0:
postcss "^7.0.0"
postcss-selector-parser "^3.0.0"
+stylis@^4.0.3:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.7.tgz#412a90c28079417f3d27c028035095e4232d2904"
+ integrity sha512-OFFeUXFgwnGOKvEXaSv0D0KQ5ADP0n6g3SVONx6I/85JzNZ3u50FRwB3lVIk1QO2HNdI75tbVzc4Z66Gdp9voA==
+
subscriptions-transport-ws@^0.9.16:
version "0.9.18"
resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz#bcf02320c911fbadb054f7f928e51c6041a37b97"
@@ -16333,6 +16678,32 @@ table@^5.2.3:
slice-ansi "^2.1.0"
string-width "^3.0.0"
+tailwindcss@^2.0.1, tailwindcss@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-2.0.3.tgz#f8d07797d1f89dc4b171673c26237b58783c2c86"
+ integrity sha512-s8NEqdLBiVbbdL0a5XwTb8jKmIonOuI4RMENEcKLR61jw6SdKvBss7NWZzwCaD+ZIjlgmesv8tmrjXEp7C0eAQ==
+ dependencies:
+ "@fullhuman/postcss-purgecss" "^3.1.3"
+ bytes "^3.0.0"
+ chalk "^4.1.0"
+ color "^3.1.3"
+ detective "^5.2.0"
+ didyoumean "^1.2.1"
+ fs-extra "^9.1.0"
+ html-tags "^3.1.0"
+ lodash "^4.17.20"
+ modern-normalize "^1.0.0"
+ node-emoji "^1.8.1"
+ object-hash "^2.1.1"
+ postcss-functions "^3"
+ postcss-js "^3.0.3"
+ postcss-nested "^5.0.1"
+ postcss-selector-parser "^6.0.4"
+ postcss-value-parser "^4.1.0"
+ pretty-hrtime "^1.0.3"
+ reduce-css-calc "^2.1.8"
+ resolve "^1.19.0"
+
tapable@^1.0.0, tapable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
@@ -16867,6 +17238,25 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+twin.macro@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/twin.macro/-/twin.macro-2.3.0.tgz#0ce26e8dfb14e44ef6b75ccea2ddcd67a82bbabe"
+ integrity sha512-uC35EK6JCeRPZ8NA6ElY/v0oj6kcwRciP1pGV/3or9kO4MOe/FQwLovE4MSTBI6HpPSJtbwjc11Z/4t+fAzsmg==
+ dependencies:
+ "@babel/parser" "^7.12.5"
+ babel-plugin-macros "^2.8.0"
+ chalk "^4.1.0"
+ clean-set "^1.1.1"
+ color "^3.1.3"
+ dset "^2.0.1"
+ lodash.flatmap "^4.5.0"
+ lodash.get "^4.4.2"
+ lodash.merge "^4.6.2"
+ postcss "^8.1.8"
+ string-similarity "^4.0.3"
+ tailwindcss "^2.0.1"
+ timsort "^0.3.0"
+
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
@@ -17260,6 +17650,11 @@ universalify@^1.0.0:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
+universalify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
unixify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090"
@@ -18052,7 +18447,7 @@ xstate@^4.11.0, xstate@^4.13.0, xstate@^4.9.1:
resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.13.0.tgz#0be22ceb8bae2bc6a025fab330fe44204d76771c"
integrity sha512-UnUJJzP2KTPqnmxIoD/ymXtpy/hehZnUlO6EXqWC/72XkPb15p9Oz/X4WhS3QE+by7NP+6b5bCi/GTGFzm5D+A==
-xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1:
+xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
From b30d7c06344243d20db62977d20da2147c9f1258 Mon Sep 17 00:00:00 2001
From: Nisar Hassan Naqvi
Date: Thu, 18 Mar 2021 13:13:11 +0000
Subject: [PATCH 3/4] clean up.
---
src/components/ActionCard.tsx | 54 --
src/components/AnnouncementBanner.tsx | 178 -----
src/components/Arrow.tsx | 45 --
src/components/BackToTopButton.tsx | 52 --
src/components/Banner.tsx | 105 ---
src/components/Bg.tsx | 30 -
src/components/Circle.tsx | 9 -
src/components/DropDown.tsx | 214 ------
src/components/ExternalLink.tsx | 42 --
src/components/FeatureCard.tsx | 338 ---------
src/components/FeatureCards.tsx | 32 -
src/components/FeatureItem.tsx | 70 --
src/components/FeaturesSection.tsx | 40 -
src/components/Footer.tsx | 226 ------
src/components/ImageProvider.tsx | 96 ---
src/components/InfoCard.tsx | 90 ---
src/components/Link.tsx | 25 -
src/components/Linkset.tsx | 71 --
src/components/MinimalFooter.tsx | 45 --
src/components/MoreInfo.tsx | 118 ---
src/components/Nav.tsx | 340 ---------
src/components/NewsletterForm.tsx | 53 --
src/components/Offers.tsx | 71 --
src/components/OnBoarding.tsx | 21 -
src/components/PopOver.tsx | 117 ---
src/components/PricingBox.tsx | 362 ---------
src/components/PricingTable.tsx | 183 -----
src/components/Quote.tsx | 85 ---
src/components/SubmissionSucess.tsx | 48 --
src/components/TextBox.tsx | 53 --
src/components/TextCard.tsx | 89 ---
src/components/TextCards.tsx | 37 -
src/components/TrustedBy.tsx | 128 ----
src/components/blog/MorePosts.tsx | 30 -
src/components/blog/PostBanner.tsx | 121 ---
src/components/blog/PostPreview.tsx | 133 ----
src/components/blog/Posts.tsx | 11 -
src/components/blog/SharePost.tsx | 74 --
src/components/careers/ExpandableJob.tsx | 217 ------
src/components/docs/DocSearch.tsx | 35 -
src/components/docs/DocSideBar.tsx | 77 --
src/components/docs/DocTopicChooser.tsx | 52 --
src/components/docs/EditInGitpod.tsx | 63 --
src/components/docs/NavigationArrows.tsx | 37 -
src/components/docs/ReachOut.tsx | 80 --
src/components/extension-uninstall/Form.tsx | 142 ----
.../extension-uninstall/Message.tsx | 38 -
src/components/features/FeatureBox.tsx | 93 ---
.../features/FullAutomationButtons.tsx | 24 -
.../features/FullAutomationGraphics.tsx | 33 -
src/components/features/Intro.tsx | 103 ---
src/components/features/StarFortFree.tsx | 40 -
.../gitpod-vs-codespaces/Difference.tsx | 88 ---
.../gitpod-vs-codespaces/PowerComparison.tsx | 150 ----
.../gitpod-vs-codespaces/SpeedComparison.tsx | 168 -----
src/components/index/AvatarProvider.tsx | 36 -
src/components/index/Banner.tsx | 122 ---
src/components/index/GetStarted.tsx | 73 --
src/components/index/Project.tsx | 62 --
src/components/index/SaveHours.tsx | 94 ---
src/components/index/SecurityAndOSS.tsx | 72 --
src/components/index/StartWorkspace.tsx | 113 ---
src/components/index/Testimonial.tsx | 100 ---
src/components/index/Testimonials.tsx | 145 ----
src/components/index/TextFeature.tsx | 65 --
src/components/pricing/Plans.tsx | 116 ---
src/components/pricing/PricingBoxes.tsx | 297 --------
src/components/pricing/PricingFAQs.tsx | 201 -----
src/components/pricing/Tabs.tsx | 68 --
src/components/screencasts/Hero.tsx | 25 -
src/components/screencasts/NextUp.tsx | 27 -
src/components/screencasts/RelatedDocs.tsx | 31 -
src/components/screencasts/Screencast.tsx | 76 --
src/components/screencasts/Screencasts.tsx | 35 -
src/components/screencasts/YouTubeEmbed.tsx | 47 --
src/components/self-hosted/Install.tsx | 135 ----
src/pages/404.tsx | 43 --
src/pages/about.tsx | 301 --------
src/pages/blog.tsx | 134 ----
src/pages/careers.tsx | 609 ---------------
src/pages/contact.tsx | 277 -------
src/pages/education.tsx | 186 -----
src/pages/enterprise-license.tsx | 449 -----------
src/pages/enterprise.tsx | 174 -----
src/pages/extension-activation.tsx | 208 ------
src/pages/extension-uninstall.tsx | 57 --
src/pages/features.tsx | 28 -
src/pages/github-student-developer-pack.tsx | 101 ---
src/pages/github-teacher-toolbox.tsx | 109 ---
src/pages/gitpod-vs-github-codespaces.tsx | 390 ----------
src/pages/imprint.tsx | 61 --
src/pages/media-kit.tsx | 149 ----
src/pages/pricing.tsx | 50 --
src/pages/privacy.tsx | 706 ------------------
src/pages/recruiting.tsx | 187 -----
src/pages/screencasts.tsx | 17 -
src/pages/self-hosted-terms.tsx | 100 ---
src/pages/self-hosted.tsx | 103 ---
src/pages/terms.tsx | 583 ---------------
src/pages/vendor.tsx | 181 -----
src/styles/base.ts | 540 --------------
101 files changed, 12959 deletions(-)
delete mode 100644 src/components/ActionCard.tsx
delete mode 100644 src/components/AnnouncementBanner.tsx
delete mode 100644 src/components/Arrow.tsx
delete mode 100644 src/components/BackToTopButton.tsx
delete mode 100644 src/components/Banner.tsx
delete mode 100644 src/components/Bg.tsx
delete mode 100644 src/components/Circle.tsx
delete mode 100644 src/components/DropDown.tsx
delete mode 100644 src/components/ExternalLink.tsx
delete mode 100644 src/components/FeatureCard.tsx
delete mode 100644 src/components/FeatureCards.tsx
delete mode 100644 src/components/FeatureItem.tsx
delete mode 100644 src/components/FeaturesSection.tsx
delete mode 100644 src/components/Footer.tsx
delete mode 100644 src/components/ImageProvider.tsx
delete mode 100644 src/components/InfoCard.tsx
delete mode 100644 src/components/Link.tsx
delete mode 100644 src/components/Linkset.tsx
delete mode 100644 src/components/MinimalFooter.tsx
delete mode 100644 src/components/MoreInfo.tsx
delete mode 100644 src/components/Nav.tsx
delete mode 100644 src/components/NewsletterForm.tsx
delete mode 100644 src/components/Offers.tsx
delete mode 100644 src/components/OnBoarding.tsx
delete mode 100644 src/components/PopOver.tsx
delete mode 100644 src/components/PricingBox.tsx
delete mode 100644 src/components/PricingTable.tsx
delete mode 100644 src/components/Quote.tsx
delete mode 100644 src/components/SubmissionSucess.tsx
delete mode 100644 src/components/TextBox.tsx
delete mode 100644 src/components/TextCard.tsx
delete mode 100644 src/components/TextCards.tsx
delete mode 100644 src/components/TrustedBy.tsx
delete mode 100644 src/components/blog/MorePosts.tsx
delete mode 100644 src/components/blog/PostBanner.tsx
delete mode 100644 src/components/blog/PostPreview.tsx
delete mode 100644 src/components/blog/Posts.tsx
delete mode 100644 src/components/blog/SharePost.tsx
delete mode 100644 src/components/careers/ExpandableJob.tsx
delete mode 100644 src/components/docs/DocSearch.tsx
delete mode 100644 src/components/docs/DocSideBar.tsx
delete mode 100644 src/components/docs/DocTopicChooser.tsx
delete mode 100644 src/components/docs/EditInGitpod.tsx
delete mode 100644 src/components/docs/NavigationArrows.tsx
delete mode 100644 src/components/docs/ReachOut.tsx
delete mode 100644 src/components/extension-uninstall/Form.tsx
delete mode 100644 src/components/extension-uninstall/Message.tsx
delete mode 100644 src/components/features/FeatureBox.tsx
delete mode 100644 src/components/features/FullAutomationButtons.tsx
delete mode 100644 src/components/features/FullAutomationGraphics.tsx
delete mode 100644 src/components/features/Intro.tsx
delete mode 100644 src/components/features/StarFortFree.tsx
delete mode 100644 src/components/gitpod-vs-codespaces/Difference.tsx
delete mode 100644 src/components/gitpod-vs-codespaces/PowerComparison.tsx
delete mode 100644 src/components/gitpod-vs-codespaces/SpeedComparison.tsx
delete mode 100644 src/components/index/AvatarProvider.tsx
delete mode 100644 src/components/index/Banner.tsx
delete mode 100644 src/components/index/GetStarted.tsx
delete mode 100644 src/components/index/Project.tsx
delete mode 100644 src/components/index/SaveHours.tsx
delete mode 100644 src/components/index/SecurityAndOSS.tsx
delete mode 100644 src/components/index/StartWorkspace.tsx
delete mode 100644 src/components/index/Testimonial.tsx
delete mode 100644 src/components/index/Testimonials.tsx
delete mode 100644 src/components/index/TextFeature.tsx
delete mode 100644 src/components/pricing/Plans.tsx
delete mode 100644 src/components/pricing/PricingBoxes.tsx
delete mode 100644 src/components/pricing/PricingFAQs.tsx
delete mode 100644 src/components/pricing/Tabs.tsx
delete mode 100644 src/components/screencasts/Hero.tsx
delete mode 100644 src/components/screencasts/NextUp.tsx
delete mode 100644 src/components/screencasts/RelatedDocs.tsx
delete mode 100644 src/components/screencasts/Screencast.tsx
delete mode 100644 src/components/screencasts/Screencasts.tsx
delete mode 100644 src/components/screencasts/YouTubeEmbed.tsx
delete mode 100644 src/components/self-hosted/Install.tsx
delete mode 100644 src/pages/404.tsx
delete mode 100644 src/pages/about.tsx
delete mode 100644 src/pages/blog.tsx
delete mode 100644 src/pages/careers.tsx
delete mode 100644 src/pages/contact.tsx
delete mode 100644 src/pages/education.tsx
delete mode 100644 src/pages/enterprise-license.tsx
delete mode 100644 src/pages/enterprise.tsx
delete mode 100644 src/pages/extension-activation.tsx
delete mode 100644 src/pages/extension-uninstall.tsx
delete mode 100644 src/pages/features.tsx
delete mode 100644 src/pages/github-student-developer-pack.tsx
delete mode 100644 src/pages/github-teacher-toolbox.tsx
delete mode 100644 src/pages/gitpod-vs-github-codespaces.tsx
delete mode 100644 src/pages/imprint.tsx
delete mode 100644 src/pages/media-kit.tsx
delete mode 100644 src/pages/pricing.tsx
delete mode 100644 src/pages/privacy.tsx
delete mode 100644 src/pages/recruiting.tsx
delete mode 100644 src/pages/screencasts.tsx
delete mode 100644 src/pages/self-hosted-terms.tsx
delete mode 100644 src/pages/self-hosted.tsx
delete mode 100644 src/pages/terms.tsx
delete mode 100644 src/pages/vendor.tsx
delete mode 100644 src/styles/base.ts
diff --git a/src/components/ActionCard.tsx b/src/components/ActionCard.tsx
deleted file mode 100644
index 24ec37c8c..000000000
--- a/src/components/ActionCard.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors, borders } from '../styles/variables'
-import link from './Link'
-
-const StyledActionCard = styled.section`
- display: block;
- max-width: 60rem;
- margin: 8rem auto;
- padding: 5rem 3rem;
- text-align: center;
- background: ${colors.offWhite};
- border: ${borders.light2};
- border-radius: 3px;
-
- h2 {
- font-size: 2.8rem;
- }
-
- p {
- margin: -3rem 0 4rem;
- }
-
- .btn-wrapper {
- justify-content: center;
- }
-`
-
-interface Anchor {
- text: string
- href: string
- subject?: string
-}
-
-interface ActionCardProps {
- title: string
- text: string | JSX.Element
- anchors: Anchor[]
-}
-
-
-const ActionCard: React.SFC = ({ title, text, anchors }) => (
-
- {title}
- {typeof text === 'string' ? {text}
: text}
-
- {link(anchors[0].href, anchors[0].text, anchors[0].subject)}
- {anchors[1] ? link(anchors[1].href, anchors[1].text, anchors[1].subject) : null}
-
-
-)
-
-export default ActionCard
diff --git a/src/components/AnnouncementBanner.tsx b/src/components/AnnouncementBanner.tsx
deleted file mode 100644
index 58dd71964..000000000
--- a/src/components/AnnouncementBanner.tsx
+++ /dev/null
@@ -1,178 +0,0 @@
-import React, { useRef, useEffect } from 'react'
-import styled from '@emotion/styled'
-import { Link } from 'gatsby'
-import { colors, borders } from '../styles/variables'
-import { jobs } from '../pages/careers'
-
-const AnnoucementBannerWrapper = styled.div`
- position: relative;
- background: ${colors.grey};
- transition: all 0.3s;
-
- button {
- position: absolute;
- top: 50%;
- transform: translateY(-50%);
- right: 2rem;
- border: none;
- border-radius: 50%;
-
- @media(max-width: 505px) {
- display: none;
- }
- }
-
- .cross {
- display: block;
- height: 1.5rem;
- width: 1.5rem;
- fill: ${colors.white}
- }
-`
-
-const StyledAnnouncementBanner = styled(Link)`
- color: ${colors.white};
- font-weight: 400;
- border-bottom: ${borders.light};
-
- &:hover,
- &:focus {
- color: ${colors.white};
- }
-
- @media (max-width: 600px) {
- font-size: 85%;
- }
-
- .text {
- padding: 1rem 0;
- font-weight: 600;
- text-align: center;
- font-size: 90%;
-
- @media(max-width: 320px) {
- padding: .8rem;
- }
- }
-
- @media(max-width: 505px) {
- .help {
- display: none;
- }
-
- .openings {
- margin-left: .3rem;
- }
- }
-
- @media(min-width: 506px) {
- .openings {
- display: inline flex;
- align-items: center;
- background: ${colors.white};
- color: ${colors.grey};
- padding: .5rem 1.4rem;
- border-radius: 10rem;
- margin-left: 2rem;
- }
- }
-
- .arrow {
- margin-left: .8rem;
-
- @media(max-width: 505px) {
- height: .8rem;
- margin-left: .2rem;
- }
- }
-
- .arrow-path {
- stroke: #3D515E;
-
- @media(max-width: 505px) {
- stroke: #fff;
- }
- }
-`;
-
-function markWasDisplayed(): void {
- if (typeof localStorage !== 'undefined') {
- localStorage.setItem('wasDisplayed', 'true');
- }
-}
-
-function wasDisplayed(): boolean {
- if (typeof localStorage !== 'undefined') {
- // @ts-ignore
- return localStorage.getItem('wasDisplayed')
- }
- return false;
-}
-
-const AnnoucementBanner = () => {
- const bannerRef = useRef(null)
-
- const hideTheBanner = () => {
- if (null !== bannerRef.current) {
- bannerRef.current.style.transform = 'translateY(-100%)'
- bannerRef.current.style.marginTop = `-${bannerRef.current.offsetHeight}px`
- }
-
- // @ts-ignore
- markWasDisplayed(true);
-
- setTimeout(() => {
- if (null !== bannerRef.current) {
- bannerRef.current.style.display = 'none'
- }
- }, 300)
- }
-
- useEffect(() => {
- const wasAlreadyDisplayed = wasDisplayed();
- if (wasAlreadyDisplayed) {
- if (null !== bannerRef.current) {
- bannerRef.current.style.display = 'none';
- }
- }
- })
-
- return (
-
-
-
-
-
Wanna help make Gitpod better? Join our team!
-
- {jobs.length}
- Openings
-
-
-
-
-
-
-
- {
- hideTheBanner()
- }}
- >
-
-
-
-
-
- )
-}
-
-export default AnnoucementBanner
diff --git a/src/components/Arrow.tsx b/src/components/Arrow.tsx
deleted file mode 100644
index d159c5494..000000000
--- a/src/components/Arrow.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import React, { CSSProperties } from 'react'
-
-import styled from '@emotion/styled'
-import { Global, css } from '@emotion/core'
-import { colors } from '../styles/variables'
-
-const StyledArrow = styled.svg`
- display: inline-block;
- fill: ${colors.offWhite1};
- transition: all .2s;
- height: 4.5rem;
-`
-
-interface ArrrowProps {
- styles?: CSSProperties
-}
-
-const Arrow = ({ styles }: ArrrowProps) => (
-
-
-
-
-)
-
-export default Arrow
diff --git a/src/components/BackToTopButton.tsx b/src/components/BackToTopButton.tsx
deleted file mode 100644
index 424ff822a..000000000
--- a/src/components/BackToTopButton.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { shadows, colors } from '../styles/variables'
-import Arrow from './Arrow'
-
-const StyledScrollToTopButton = styled.a`
- position: fixed;
- right: 4%;
- bottom: 2rem;
- display: flex;
- justify-content: center;
- align-items: center;
- box-shadow: ${shadows.light1};
- border-radius: 50%;
- z-index: 100;
- transition: transform .3s, opacity .2s, background-color .2s ease-in-out;
- background: ${colors.white};
-`
-
-
-class ScrollToTopButton extends React.Component {
-
- state = {
- shouldBeRendered: false
- }
-
- componentDidMount() {
- window.addEventListener('scroll', () => {
- if ( window.scrollY > 800) {
- this.setState({shouldBeRendered: true})
- }
- else {
- this.setState({shouldBeRendered: false})
- }
- })
- }
-
- render() {
- return (
-
-
-
- )
- }
-}
-
-export default ScrollToTopButton
diff --git a/src/components/Banner.tsx b/src/components/Banner.tsx
deleted file mode 100644
index 14c05acb2..000000000
--- a/src/components/Banner.tsx
+++ /dev/null
@@ -1,105 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import link from './Link'
-
-const StyledBanner = styled.header`
- /* ------------------------------------------- */
- /* ----- Banner ----- */
- /* ------------------------------------------- */
-
- display: flex;
- justify-content: space-between;
- align-items: stretch;
- padding: 14rem 0 10rem;
-
- @media (max-width: 960px) {
- flex-direction: column-reverse;
- padding: 5rem 0;
- }
-
- @media (max-width: 960px) {
- flex-direction: column-reverse;
- padding: 1rem 0 5rem;
- }
-
- @media (max-width: 640px) {
- text-align: center;
- }
-
- .banner__text {
- flex: 0 0 55%;
- }
-
- .para {
- margin-top: 3rem;
-
- @media (min-width: 961px) {
- max-width: 50rem;
- }
- }
-
- .btn {
- margin: 5rem 2rem 2rem 0;
-
- @media (max-width: 960px) {
- margin-top: 3rem;
- }
- }
-
- p + .btn {
- margin-top: 3rem;
- }
-
-
- .img-container {
- display: block;
- flex: 0 0 30%;
-
- @media (min-width: 961px) {
- margin-left: 3rem;
- }
-
- @media (max-width: 960px) {
- height: 20rem;
- width: 100%;
- height: 100%;
- max-width: 30rem;
- margin: 5rem 0;
- }
-
- @media (max-width: 500px) {
- max-width: 22rem;
- }
- }
-`
-
-interface BannerProps {
- subtitle: string
- title: JSX.Element
- paragraph?: string | JSX.Element
- linkPath: string
- linkText: string
- img: JSX.Element
-}
-
-const Banner: React.SFC = ({ subtitle, title, paragraph, linkPath, linkText, img, children }) => (
-
-
-
-
- {paragraph ?
{paragraph}
: null}
- {link(linkPath, linkText, '', true, false)}
- {children}
-
-
- {img}
-
-
-
-)
-
-export default Banner
diff --git a/src/components/Bg.tsx b/src/components/Bg.tsx
deleted file mode 100644
index 5ddc9995f..000000000
--- a/src/components/Bg.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { sizes } from '../styles/variables'
-
-const StyledBg = styled.img`
- display: block;
- width: 100%;
- max-height: 40rem;
- max-width: 100rem;
- margin: 7rem auto;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- margin: 6rem auto;
- }
-`
-
-interface BgProps {
- url: any
- alt: string
-}
-
-const Bg = ({url, alt}: BgProps) => (
-
-
-
-)
-
-
-export default Bg
diff --git a/src/components/Circle.tsx b/src/components/Circle.tsx
deleted file mode 100644
index ae645c1df..000000000
--- a/src/components/Circle.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import React from 'react'
-
-const Circle: React.SFC<{}> = () => (
-
-
-
-)
-
-export default Circle
diff --git a/src/components/DropDown.tsx b/src/components/DropDown.tsx
deleted file mode 100644
index f87810473..000000000
--- a/src/components/DropDown.tsx
+++ /dev/null
@@ -1,214 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import ArrowDown from '../resources/arrow-down.svg'
-import { colors, shadows, sizes } from '../styles/variables'
-import { Link } from 'gatsby'
-import ExternalLink from '../components/ExternalLink'
-
-const StyledDropDown = styled.div`
- z-index: 900;
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- position: relative;
- }
-
- button {
- cursor: pointer;
- display: flex;
- align-items: center;
- border: none;
- max-width: 20rem;
-
- &:hover,
- &:focus {
- color: ${colors.lightBlue};
-
- &::before {
- right: 0;
- border-color: ${colors.lightBlue};
- }
- }
- }
-
- .arrow {
- height: .8rem;
- margin-left: 1rem;
- @media(max-width: ${sizes.breakpoints.lg}) {
- height: 1rem;
- }
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- display: none;
- }
- }
-
- ul {
- display: flex;
- flex-direction: column;
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- position: absolute;
- top: 2.5rem;
- left: 7%;
- width: 120%;
- left: 50%;
- transform: translateX(-50%);
- min-width: 14rem;
- padding: .5rem 0 1rem;
- background: ${colors.offWhite};
- box-shadow: ${shadows.light};
-
- &::before {
- position: absolute;
- top: 0;
- content: "";
- display: block;
- height: 130%;
- width: 100%;
- margin-top: -3rem;
- }
- }
- }
-
- li {
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- margin: 1rem 0 0;
- padding: 0 1.5rem;
- font-size: 90%;
- width: 100%;
- border-bottom: none;
- }
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- &:not(:last-child) {
- margin-top: 1rem;
- }
- }
- }
-
- .shown {
- opacity: 1;
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- background: ${colors.white};
- transform: scale(1) translate(-50%, 0);
- }
- }
-
- .hidden {
- opacity: 0;
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- display: none;
- }
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- transform: scale(0) translate(-50%, -20rem);
- }
- }
-`
-
-interface Anchor {
- text: string
- to: string
- target?: boolean
-}
-
-interface DropDownProps {
- title: string
- links: Anchor[]
-}
-
-class DropDown extends React.Component {
-
- state = {
- isRendered: false
- }
-
- handleClick = () => {
- this.setState({isRendered: !this.state.isRendered})
- }
-
- handleMouseEnter = () => {
- this.setState({isRendered: true})
- }
-
- handleMouseLeave = () => {
- this.setState({isRendered: false})
- }
-
- render () {
- const { title, links } = this.props
- const { isRendered } = this.state
-
- return (
-
-
- {title}
-
-
-
-
- {
- links.map(({text, to, target}, i) =>
- target ?
- (
-
-
-
- )
- :
- (
-
- {
- i == links.length - 1 ?
-
- {text}
-
- :
-
- {text}
-
- }
-
- )
- )
- }
-
-
-
- )
- }
-}
-
-export default DropDown
diff --git a/src/components/ExternalLink.tsx b/src/components/ExternalLink.tsx
deleted file mode 100644
index 7334c3658..000000000
--- a/src/components/ExternalLink.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors, sizes } from '../styles/variables'
-
-const StyledExternalLink = styled.a`
- .external {
- height: 1.5rem;
- transform: translate(.6rem, .3rem);
- transition: all .2s;
- opacity: 0;
- fill: ${colors.text};
-
- @media(max-width: ${sizes.breakpoints.md}) {
- opacity: 1;
- }
- }
-
- &:hover,
- &:active {
- .external {
- opacity: 1;
- fill: ${colors.link};
- }
- }
-`
-
-interface ExternalLinkProps {
- text: string
- href: string
- tabIndex?: number
- className?: string,
- onBlur?: any
-}
-
-const ExternalLink: React.SFC = ({href, text, tabIndex, className, onBlur}) => (
-
- {text}
-
-)
-
-export default ExternalLink
diff --git a/src/components/FeatureCard.tsx b/src/components/FeatureCard.tsx
deleted file mode 100644
index 9e5a5d84a..000000000
--- a/src/components/FeatureCard.tsx
+++ /dev/null
@@ -1,338 +0,0 @@
-import React, { useState } from 'react'
-
-import styled from '@emotion/styled'
-import { sizes } from '../styles/variables'
-import Pattern from '../resources/pattern-2.jpg'
-import IconTick from '../resources/icon-tick-2.svg'
-
-const Styled = styled.div<{
- direction?: string
- flexDirectionColumnForImgContainer?: boolean
- opposite?: boolean
- hasFigFootnote?: boolean
-}>`
- display: flex;
- justify-content: space-between;
- position: relative;
-
- &:not(:last-child) {
- margin-bottom: 18rem;
-
- @media (max-width: 500px) {
- margin-bottom: 10rem;
- }
- }
-
- @media (max-width: ${sizes.breakpoints.sm}) {
- text-align: center;
- }
-
- [id] {
- position: absolute;
- top: -25vh;
- }
-
- @media (max-width: 1140px) {
- flex-direction: column;
- max-width: 740px;
- }
-
- h2 + p {
- margin: 0;
- }
-
- &:nth-of-type(2n) {
- @media (min-width: 1141px) {
- flex-direction: ${({ opposite }) => (opposite ? 'reverse' : 'row-reverse')};
- }
-
- @media (min-width: 1141px) {
- .why-gitpod__img-container {
- padding-left: 8rem;
- &::before {
- left: 0;
- }
-
- &:hover::before {
- transform: translateX(-5rem);
- }
- }
- }
- }
-
- &:nth-of-type(2n + 1) {
- @media (min-width: 1141px) {
- flex-direction: ${({ opposite }) => (opposite ? 'row-reverse' : 'reverse')};
- }
- }
-
- .text {
- display: flex;
- flex-direction: column;
- justify-content: center;
- min-width: 28rem;
-
- @media (min-width: 1141px) {
- flex: 0 0 38%;
- }
-
- @media (max-width: 1150px) {
- padding: 0 4rem;
- }
-
- @media (max-width: ${sizes.breakpoints.md}) {
- padding: 0 1rem;
- }
-
- @media (max-width: ${sizes.breakpoints.sm}) {
- padding: 0 1rem;
- }
- }
-
- img {
- width: 100%;
- max-height: 440px;
-
- @media (max-width: 1140px) {
- max-height: 400px;
- }
-
- @media (max-width: 500px) {
- max-height: 300px;
- }
- }
-
- .img-container {
- display: flex;
- flex-direction: ${({ flexDirectionColumnForImgContainer }) => (flexDirectionColumnForImgContainer ? 'column' : '')};
- justify-content: center;
- align-items: ${({ flexDirectionColumnForImgContainer }) => (flexDirectionColumnForImgContainer ? '' : 'center')};
- width: 100%;
- position: relative;
-
- &::before {
- content: '';
- position: absolute;
- display: block;
- height: 100%;
- width: 100%;
- background: url(${Pattern});
- background-size: cover;
- background-repeat: repeat;
- z-index: -1;
- opacity: 0.1;
- border-radius: 3px;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- width: calc(30vh + 100%);
- transform: translateX(-20vw);
- }
- }
-
- @media (min-width: 1141px) {
- padding-right: ${({ direction }) => (direction === 'right' ? '8rem' : '')};
- padding-left: ${({ direction }) => (!(direction === 'right') ? '8rem' : '')};
- min-height: 520px;
- max-height: 500px;
- flex: 0 0 52%;
-
- &::before {
- left: ${({ direction }) => (direction === 'right' ? '' : 0)};
- right: ${({ direction }) => (!(direction === 'right') ? '' : 0)};
- width: 60vw;
- }
- }
-
- @media (max-width: 1140px) {
- min-height: 240px;
- padding: 5rem;
- margin-bottom: ${({ hasFigFootnote }) => (hasFigFootnote ? '7rem' : '2.5rem')};
-
- &::before {
- left: 0;
- right: 0;
- }
- }
-
- @media(max-width: 800px) {
- margin-bottom: ${({ hasFigFootnote }) => (hasFigFootnote ? '10rem' : '2.5rem')};
- }
-
- @media (max-width: 560px) {
- padding: 3rem;
- }
-
- @media (max-width: 450px) {
- padding: 2rem;
- }
- }
-
- @keyframes slideInLeft {
- 100% {
- transform: translateX(5rem);
- }
- }
-
- @keyframes slideInRight {
- 100% {
- transform: translateX(-5rem);
- }
- }
-
- .in-view::before {
- @media (min-width: 1141px) {
- animation: ${({ direction }) => (direction === 'right' ? 'slideInLeft' : 'slideInRight')} 0.6s cubic-bezier(0.16, 1, 0.3, 1) 1 normal
- forwards;
- }
- }
-
- .buttons {
- margin-top: 4rem;
-
- @media (max-width: 600px) {
- margin-top: 1.5rem;
- }
- }
-
- ul {
- margin-top: 5rem;
- font-size: 1.9rem;
-
- @media (max-width: 500px) {
- font-size: 1.6rem;
- }
-
- @media (max-width: 320px) {
- font-size: 1.5rem;
- }
-
- @media (max-width: 290px) {
- font-size: 1.4rem;
- }
- }
-
- li {
- display: flex;
- align-items: center;
- &::before {
- content: url(${IconTick});
- transform: scale(0.9);
- display: block;
- margin: 0 2rem 0 1rem;
- left: -0.5rem;
-
- @media (max-width: 500px) {
- margin: 0 1rem 0 0;
- }
- }
- }
-
- p + .text-list {
- margin-top: 2rem;
- }
-
- .text-list {
- margin-top: 0;
- font-size: inherit;
-
- @media (max-width: ${sizes.breakpoints.sm}) {
- text-align: left;
- }
-
- li + li {
- margin-top: 2rem;
- }
- }
-
- .footnote {
- position: absolute;
- margin-top: 4rem;
- bottom: -5.5rem;
-
- @media (max-width: 454px) {
- bottom: -5rem;
- }
-
- @media(max-width: 420px) {
- bottom: -6.5rem;
- }
- }
-
- img {
- border-radius: 3px;
- }
-`
-
-export interface FeatureCardProps {
- src?: string
- alt?: string
- Graphic?: any
- title: string | JSX.Element
- text?: string | JSX.Element
- direction?: string
- id?: string
- featuresList?: string[]
- Buttons?: any
- icon?: string | JSX.Element
- iconTitle?: string | JSX.Element
- opposite?: boolean
- Figure?: () => JSX.Element
- figFootnote?: string | JSX.Element
- footnote?: string | JSX.Element
- gatsbyImage?: JSX.Element
-}
-
-const FeatureCard = ({
- src,
- alt,
- Graphic,
- title,
- text,
- direction,
- id,
- featuresList,
- Buttons,
- Figure,
- opposite,
- figFootnote,
- footnote,
- gatsbyImage
-}: FeatureCardProps) => {
- const [renderedGraphic, setRenderedGraphic] = useState('')
- const hasFigFootnote = typeof figFootnote == 'string' || typeof figFootnote == 'object'
- return (
-
-
- {Graphic ?
![]()
: null}
- {src ?
: null}
- {
- gatsbyImage ? gatsbyImage : null
- }
- {featuresList && featuresList.length ? (
-
- {featuresList.map((feat, i) => (
- {feat}
- ))}
-
- ) : null}
- {Figure ?
: null}
- {figFootnote ?
{figFootnote}
: null}
-
-
-
{title}
- {text ? text : null}
- {Buttons ?
: null}
- {footnote ?
{footnote}
: null}
-
- {id &&
}
-
- )
-}
-
-export default FeatureCard
diff --git a/src/components/FeatureCards.tsx b/src/components/FeatureCards.tsx
deleted file mode 100644
index d1508deb4..000000000
--- a/src/components/FeatureCards.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { FeatureCardProps } from './FeatureCard'
-import FeatureCard from './FeatureCard'
-
-const Styled = styled.section`
- display: flex;
- flex-direction: column;
- padding-bottom: 5rem;
- position: relative;
-`
-
-const FeatureCards = ({ features, opposite }: { features: FeatureCardProps[]; opposite?: boolean }) => {
- return (
-
-
- {features.map((feature: FeatureCardProps, i) => {
- let direction
- if (opposite) {
- direction = !(i % 2 == 0) ? 'right' : ''
- } else {
- direction = i % 2 == 0 ? 'right' : ''
- }
- return
- })}
-
-
- )
-}
-
-export default FeatureCards
diff --git a/src/components/FeatureItem.tsx b/src/components/FeatureItem.tsx
deleted file mode 100644
index b01407a5c..000000000
--- a/src/components/FeatureItem.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { borders, sizes } from '../styles/variables'
-
-const StyledFeatureItem = styled.div`
- display: flex;
- align-items: center;
- flex: 0 0 45%;
- max-width: 60rem;
- margin: 0 auto;
- margin-bottom: 5rem;
- margin-top: 5rem;
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- flex-direction: column;
- text-align: center;
- }
-
- div {
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- border-left: ${borders.bold};
- margin-left: 3rem;
- padding-left: 3rem;
- }
- }
-
- .h3 {
- & + p {
- margin: 0;
- }
- }
-
- p {
- max-width: 320px;
- }
-
- img {
- max-width: 10rem;
- max-height: 12rem;
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- flex: 0 0 15%;
- }
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- height: 10rem;
- margin-bottom: 4rem;
- }
- }
-`
-
-export interface FeatureItemProps {
- title: string
- text: string
- img: string
- alt?: string
-}
-
-const FeatureItem = ({ title, text, img, alt }: FeatureItemProps) => (
-
-
-
-
-)
-
-export default FeatureItem
diff --git a/src/components/FeaturesSection.tsx b/src/components/FeaturesSection.tsx
deleted file mode 100644
index c49a91890..000000000
--- a/src/components/FeaturesSection.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import FeatureItem, { FeatureItemProps } from './FeatureItem'
-import { sizes } from '../styles/variables'
-
-const StyledFeatures = styled.div`
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- margin-top: -5rem;
- }
-
- @media(max-width: 900px) {
- flex-direction: column;
-
- & > div {
- max-width: 400px;
- }
- }
-`
-
-const FeaturesSection = ({ features }: { features: FeatureItemProps[] }) => (
-
-
- {
- features.map(
- (feature: FeatureItemProps, i) =>
- )
- }
-
-
-)
-
-export default FeaturesSection
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
deleted file mode 100644
index 5646a16c5..000000000
--- a/src/components/Footer.tsx
+++ /dev/null
@@ -1,226 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors } from '../styles/variables'
-import { Link } from 'gatsby'
-import ExternalLink from './ExternalLink'
-
-const StyledFooter = styled.footer`
- background: ${colors.offWhite};
- padding: 7rem 0 4rem;
- font-size: 1.4rem;
-
- .links {
- display: flex;
- justify-content: space-between;
- flex-wrap: wrap;
- max-width: 1000px;
- margin: 0 auto;
-
- @media(min-width: 651px) {
- ul {
- width: 12.4rem;
- }
- }
-
- @media(max-width: 650px) {
- justify-content: space-between;
-
- ul {
- padding-bottom: 4rem;
- border-bottom: 1px solid #ddd;
- width: 48%;
- text-align: center;
-
- &:not(:last-child) {
- margin-bottom: 5rem;
- }
-
- &:last-child {
- transform: translateX(50%);
-
- img {
- transform: translateX(1rem);
- }
- }
- }
- }
- }
-
- li {
-
- &:not(:last-child) {
- margin-bottom: 1.6rem;
- }
-
- &:first-of-type {
- font-size: 1.7rem;
- font-weight: 600;
- }
-
- }
-
- a {
- color: ${colors.text};
- font-weight: 400;
- transition: all .2s;
-
- &:hover,
- &:focus {
- color: ${colors.link};
-
- svg {
- fill: ${colors.text};
- }
-
- .mail {
- stroke: ${colors.text};
- }
- }
-
- }
-
- svg {
- fill: #b5b5b5;
- height: 2.9rem;
- transition: all .2s;
- }
-
- .contact {
- li:not(:first-child) {
- display: inline-block;
- margin-left: 2rem;
- transform: translateX(-2rem);
-
- @media(max-width: 650px) {
- transform: translateX(-1rem);
- }
- }
- }
-
- .info {
- text-align: center;
- margin: 5rem 0 0;
-
- p {
- margin-bottom: 2rem;
- }
- }
-
-`
-
-const Footer: React.SFC<{}> = () => (
-
-
-
-
- Gitpod
- Features
- Pricing
- Blog
- Self-Hosted
- Gitpod vs GitHub Codespaces
- Log In
-
-
- Solutions
- Education
- Recruiting
- Vendor
-
-
- Developer
- Getting started
- Screencasts
- Documentation
-
-
-
-
-
-
-
-
- Company
- About
-
- Careers
-
- Media Kit
-
-
-
-
-
Copyright © Gitpod
-
Imprint | Terms of Service | Privacy Policy
-
-
-
-)
-
-export default Footer
diff --git a/src/components/ImageProvider.tsx b/src/components/ImageProvider.tsx
deleted file mode 100644
index 781590f0b..000000000
--- a/src/components/ImageProvider.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import React, { CSSProperties } from 'react'
-import { graphql, useStaticQuery } from 'gatsby'
-import Img from 'gatsby-image'
-
-import styled from '@emotion/styled'
-
-const StyledImageProvider = styled.div`
- height: 100%;
- width: 100%;
-`
-
-interface ImageProviderProps {
- fileName?: string
- alt: string
- wrapperStyles?: CSSProperties
- imageStyles?: CSSProperties
- isNotRelativeToGatsbyImgWrapper?: boolean
- IsAPricingBoxIcon?: boolean
- isBlurred?: boolean
- fluidData?: any
- providerStyles?: CSSProperties
- className?: string
- placeholderStyles?: CSSProperties
-}
-
-const ImageProvider = ({
- fileName,
- alt,
- wrapperStyles,
- imageStyles,
- isNotRelativeToGatsbyImgWrapper,
- IsAPricingBoxIcon,
- isBlurred,
- fluidData,
- providerStyles,
- className,
- placeholderStyles
-}: ImageProviderProps) => {
- const { allImageSharp } = useStaticQuery(graphql`
- query {
- allImageSharp {
- nodes {
- fluid(traceSVG: { color: "#0b2144" }) {
- originalName
- tracedSVG
- src
- }
- blurredFluid: fluid {
- originalName
- ...GatsbyImageSharpFluid
- }
- }
- }
- }
- `)
-
- let resultingFluid
-
- if(!fluidData) {
- const found = allImageSharp.nodes.find((n: any) => {
- return n.fluid.originalName === fileName
- })
-
- resultingFluid = isBlurred ? found.blurredFluid : found.fluid
- }
-
- const imageStylesIfIsNotRelativeToGatsbyImgWrapper = {
- top: '50%',
- transform: 'translateY(-50%) scale(.93)',
- };
-
- let position;
-
- if (isNotRelativeToGatsbyImgWrapper) {
- position = 'none'
- } else if (IsAPricingBoxIcon) {
- position = 'static'
- } else {
- position = 'relative'
- }
-
- return (
-
-
-
- )
-}
-
-export default ImageProvider;
diff --git a/src/components/InfoCard.tsx b/src/components/InfoCard.tsx
deleted file mode 100644
index 3bb945ce4..000000000
--- a/src/components/InfoCard.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-import React from 'react'
-
-import Twitter from '../resources/twitter.svg'
-import Mail from '../resources/mail.svg'
-import Discourse from '../resources/discourse.svg'
-import { Link } from 'gatsby'
-import styled from '@emotion/styled'
-import { sizes } from '../styles/variables'
-
-const StyledInfoCard = styled.section`
- /* --------------------------------------- */
- /* ----- Info ----- */
- /* --------------------------------------- */
-
- section {
- padding-top: 0;
- }
-
- .h3 + p {
- margin: 0;
- }
-
- .info {
- @media(min-width: 831px) {
- flex: 0 0 44%;
-
- &:last-of-type {
- margin-left: auto;
- }
- }
-
- @media(max-width: 830px) {
- &:not(:last-of-type) {
- margin-bottom: 5rem;
- }
- }
-
- &-container {
- display: flex;
-
- @media(max-width: 830px) {
- flex-direction: column;
- }
- }
-
- p:last-of-type {
- margin-bottom: 2rem;
- }
-
- a {
- &:not(:last-of-type) {
- margin-right: 2rem;
- }
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- &:not(:last-child) {
- margin-bottom: 8rem;
- }
- }
- }
-`
-
-const InfoCard: React.SFC<{}> = () => (
-
-
-
-
Getting Started with Gitpod
-
You can simply start coding in Gitpod by prefixing any GitHub URL with gitpod.io/#
-
For a more detailed description of Gitpod and its IDE, Theia, please have a look at our documentation.
-
Gitpod Docs
-
-
-
Do You Need Help?
-
If you have any question, issue or feedback, please get in touch. We love to hear your feedback and help you out.
-
-
-
-
-
-
-
-
-
-
-
-
-)
-
-export default InfoCard
diff --git a/src/components/Link.tsx b/src/components/Link.tsx
deleted file mode 100644
index 7743b0bbb..000000000
--- a/src/components/Link.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Link } from 'gatsby'
-
-const link = (href: string, text: string, subject = '', primary: boolean = false, normal: boolean = true) => {
- if (href.indexOf('://') !== -1) {
- return (
- {text}
-
- )
- } else {
- return (
-
- {text}
-
- )
- }
-}
-
-export default link
diff --git a/src/components/Linkset.tsx b/src/components/Linkset.tsx
deleted file mode 100644
index 66f735701..000000000
--- a/src/components/Linkset.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors } from '../styles/variables'
-import { Link } from 'gatsby'
-
-const StyledLinkSet = styled.div`
-
- &:not(:last-child) {
- margin-bottom: 2rem;
- }
-
- a {
- display: inline-block;
- font-size: 1.5rem;
- border-left: solid 1px transparent;
- color: ${colors.text};
- font-weight: 400;
-
- &:hover {
- color: ${colors.lightBlue};
- }
-
- &.active {
- color: ${colors.lightBlue};
- border-left: solid 1px ${colors.lightBlue};
- }
-
- &.caption {
- margin-bottom: .4rem;
- font-weight: 400;
- font-size: 1.7rem;
- padding-left: 1.0rem;
- }
-
- &:not(.caption) {
- padding-left: 1.8rem;
- }
-
- }
-`
-
-interface LinkSetProps {
- caption: string
- path: string
-}
-
-class Linkset extends React.Component {
-
- render() {
-
- const { caption, path, children } = this.props
-
- return (
-
-
-
- {caption}
-
-
- {children}
-
- )
- }
-}
-
-export default Linkset
diff --git a/src/components/MinimalFooter.tsx b/src/components/MinimalFooter.tsx
deleted file mode 100644
index 282d2b69c..000000000
--- a/src/components/MinimalFooter.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { Link } from 'gatsby'
-import { colors } from '../styles/variables'
-
-const StyledMinimalFooter = styled.footer`
- padding: 5rem 0 6rem;
- text-align: center;
- color: ${colors.lightGrey};
- background: ${colors.offWhite};
-
- p {
- margin-bottom: 2rem;
- }
-
- a,
- .link {
- color: inherit;
- font-weight: 400;
- }
-
- .link {
- padding: 0 1rem;
-
- &:not(:last-child) {
- border-right: 1px solid;
- }
- }
-`
-
-const MinimalFooter = () => (
-
-
-
Copyright © Gitpod
-
- Imprint
- Terms of Service
- Privacy Policy
-
-
-
-)
-
-export default MinimalFooter
diff --git a/src/components/MoreInfo.tsx b/src/components/MoreInfo.tsx
deleted file mode 100644
index 5eb50037b..000000000
--- a/src/components/MoreInfo.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { borders, sizes } from '../styles/variables'
-import { Link } from 'gatsby'
-import MapGrey from '../resources/map-grey.svg'
-
-const StyledMoreInfo = styled.div<{negativeSpaceTop?: string}>`
- @media(min-width: calc(${sizes.breakpoints.md} + 1px)) {
- margin-top: ${({negativeSpaceTop}) => negativeSpaceTop };
- }
-`
-
-const StyledPricingLinks = styled.section`
- max-width: 850px;
- display: flex;
- align-items: center;
- margin: 0 auto;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- padding-bottom: 8rem;
- }
-
- @media (max-width: 720px) {
- flex-direction: column;
- text-align: center;
- max-width: 550px;
-
- .btn-wrapper {
- justify-content: center;
- }
- }
-
- img {
- flex: 1;
- height: 12rem;
-
- @media (max-width: 720px) {
- max-width: 10rem;
- margin-bottom: 2rem;
- }
- }
-
- div {
- flex: 0 0 75%;
- padding-left: 4rem;
- border-left: ${borders.bold};
-
- @media (max-width: 720px) {
- border-left: none;
- padding-left: 0;
- }
- }
-
- h2 {
- margin-bottom: 5rem;
- }
-
- h3 {
- font-size: 110%;
- margin-bottom: 0.5rem;
- }
-`
-
-export interface PricingLinksProps {
- img?: JSX.Element
- title?: JSX.Element
- text?: JSX.Element
- links?: JSX.Element
- backgroundShouldBeWhite?: boolean
- negativeSpaceTop?: string
-}
-
-const PricingLinks = ({ img, title, text, links, backgroundShouldBeWhite, negativeSpaceTop }: PricingLinksProps) => {
- let Img = img
- let Title = title
- let Text = text
- let Links = links
- if (!(img && title && text && links)) {
- Img =
- Title = (
- <>
- Explore Gitpod
- >
- )
- Text = <>Learn about collaboration, workspace sharing, reproducible snapshots, supported language features, and much more.>
- Links = (
- <>
-
- See Features
-
-
- See Blog
-
- >
- )
- }
- return (
-
-
-
- {Img}
-
-
{Title}
-
{Text}
-
{Links}
-
-
-
-
- )
-}
-
-export default PricingLinks
diff --git a/src/components/Nav.tsx b/src/components/Nav.tsx
deleted file mode 100644
index d35628a1b..000000000
--- a/src/components/Nav.tsx
+++ /dev/null
@@ -1,340 +0,0 @@
-import React, { useState, useEffect } from 'react'
-
-import styled from '@emotion/styled'
-import { Link } from 'gatsby'
-import GitpodLogoDark from '../resources/gitpod-logo-dark.svg'
-import { colors, sizes, borders } from '../styles/variables'
-import { Global, css } from '@emotion/core'
-import { getBrowser } from '../utils/helpers'
-import { getBrowserString } from './gitpod-vs-codespaces/Difference'
-
-const StyledNav = styled.nav`
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 4rem 0;
- position: relative;
-
- @media(max-width: 900px) {
- font-size: 110%;
- display: block;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- font-size: 100%;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- font-size: 95%;
- display: block;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- padding: 1rem;
- }
-
- img {
- height: 4.2rem;
- transform: scale(.97);
- }
-
- .nav__items {
- display: flex;
- align-items: center;
-
- @media(max-width: 900px) {
- flex-direction: column;
- width: 100%;
- padding-top: 8rem;
- min-height: 95vh;
- align-items: center;
- z-index: 1;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- min-height: 97vh;
- }
- }
-
- @media(max-width: 900px) {
- .navIsRendered {
- display: flex;
- }
-
- .navIsNotRendered {
- display: none;
- }
- }
-
- .nav__item {
- cursor: pointer;
-
- @media(min-width: 901px) {
- &:not(:last-child) {
- margin-right: 4rem;
- }
- }
-
- @media(max-width: 900px) {
- width: 100%;
- padding: 2rem 0;
-
- &:not(:last-child) {
- border-bottom: ${borders.light1};
- }
- }
-
- &:last-child {
- margin-left: -1rem;
- }
- }
-
- .btns {
- display: flex;
- align-items: center;
-
- @media(min-width: 901px) {
- display: none;
- }
-
- a {
- margin-right: 1rem;
- transform: translateY(-1px);
-
- @media(min-width: calc(${sizes.breakpoints.md} + 1px)) {
- margin-right: 2rem;
- }
- }
- }
-
- .nav__burger-container {
- display: flex;
- justify-content: space-between;
- }
-
- .nav__btn {
- position: relative;
- cursor: pointer;
- border: none;
- z-index: 10000;
- width: 4rem;
- height: 4rem;
- transition: all .2s;
-
- &:hover {
- svg {
- stroke: ${colors.lightBlue};
- fill: ${colors.lightBlue};
- }
- }
-
- svg {
- position: absolute;
- top: 0;
- right: 0;
- width: 100%;
- height: 100%;
- transition: all .3s cubic-bezier(.25,.75,.5,1.25);
- fill: ${colors.text};
- stroke: ${colors.text};
-
- hamburger {
-
- @media(max-width: ${sizes.breakpoints.md}) {
- transform: scale(.7);
- }
-
- @media(min-width: calc(${sizes.breakpoints.md} + 1px)) {
- transform: scale(.8);
- }
- }
-
- multiply {
- transform: scale(.7);
-
- @media(max-width: ${sizes.breakpoints.md}) {
- transform: scale(.65);
- }
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- transform: scale(.7);
- }
- }
-
- @media(min-width: 901px) {
- display: none;
- }
-
- &:hover,
- &:focus {
- transform: scale(1.05);
- }
- }
-
-
- @media(max-width: 900px) {
- .shown {
- opacity: 1;
- transform: scale(1) translateX(0);
- max-width: ${sizes.grid.maxWidth};
- }
-
- .hiden {
- opacity: .8;
- transform: scale(1.1) translateX(-100vw);
- }
-
- .container {
- max-width: ${sizes.grid.maxWidth};
- width: 100%;
- margin: 0 auto;
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- padding: 0 1rem;
- }
- }
-
- .is-shown {
- opacity: 1;
-
- &--multiply {
- transform: rotate(-90deg);
- }
- }
-
- .is-hidden {
- opacity: 0;
- }
- }
-`
-
-const Nav = ({ isAFlowPage, showReInstallExtensionButton }: { isAFlowPage?: boolean; showReInstallExtensionButton?: boolean }) => {
- const [isNavRendered, setIsNavRendered] = useState(false)
- const [browser, setBrowser] = useState()
-
- const unLock = () => {
- if (window.innerWidth >= 900) {
- setIsNavRendered(false)
- }
- }
-
- useEffect(() => {
- window.addEventListener('resize', unLock)
- let usersBrowser = getBrowser(window.navigator.userAgent)
- setBrowser(getBrowserString(usersBrowser))
-
- return () => {
- window.removeEventListener('resize', unLock)
- }
- })
-
- const toggleNavigation = () => {
- setIsNavRendered(!isNavRendered)
- }
-
- return (
-
-
-
-
-
-
- {
- !isAFlowPage ?
-
Log In
-
-
-
- close menu icon
-
-
-
- hamburger menu icon
-
-
-
-
-
: null
- }
- {
- showReInstallExtensionButton ?
- Reinstall Extension
- : null
- }
-
-
-
- {
- !isAFlowPage ? (
-
-
-
- Features
-
-
-
-
- Screencasts
-
-
-
-
- Docs
-
-
-
-
- Blog
-
-
-
-
- Pricing
-
-
-
-
- Log In
-
-
-
- ) : null
- }
-
-
-
-
- )
-}
-
-export default Nav
diff --git a/src/components/NewsletterForm.tsx b/src/components/NewsletterForm.tsx
deleted file mode 100644
index 296753959..000000000
--- a/src/components/NewsletterForm.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { sizes, borders } from '../styles/variables'
-
-const StyledNewsletterForm = styled.section`
- /* ------------------------------------------- */
- /* ----- Section Newsletter ----- */
- /* ------------------------------------------- */
-
- .newsletter {
- padding: 12rem 0;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- padding: 8rem 0;
- }
-
- &__input {
- margin: 0 1.5rem 3rem 0;
- padding: 1.2rem 2.5rem;
- border: ${borders.light1};
- border-radius: 100px;
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- width: 100%;
- }
- }
-
- &__text {
- margin: -3rem 0 3rem;
- }
- }
-`
-
-const NewsletterForm: React.SFC<{}> = () => (
-
-
- Never Miss a Blog Post
- Sign up for the newsletter and stay informs about the latest news from Gitpod and its community.
-
-
-
-)
-
-export default NewsletterForm
diff --git a/src/components/Offers.tsx b/src/components/Offers.tsx
deleted file mode 100644
index de75a5d36..000000000
--- a/src/components/Offers.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import React from 'react'
-
-import PricingBox, { PricingBoxProps } from '../components/PricingBox'
-import styled from '@emotion/styled'
-import { sizes } from '../styles/variables'
-
-const StyledOffers = styled.section`
- /* --------------------------------------- */
- /* ----- Offers ----- */
- /* --------------------------------------- */
-
- .offers {
- display: flex;
- justify-content: center;
- margin-top: 15rem;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- flex-direction: column;
- align-items: center;
- }
- }
-
- .btn-container {
- margin: 5rem 0;
- text-align: center;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- h2 {
- margin-bottom: 5rem;
- }
-
- br {
- display: none;
- }
- }
-
-`
-
-interface OffersProps {
- title: string
- offers: PricingBoxProps[],
- para: JSX.Element
-}
-
-
-const Offers: React.SFC = ({ offers, title, para }) => (
-
-
-
-
{title}
- { para }
-
-
- {
- offers.map(
- (offer, i) => (
-
- )
- )
- }
-
-
-
-)
-
-
-export default Offers
diff --git a/src/components/OnBoarding.tsx b/src/components/OnBoarding.tsx
deleted file mode 100644
index be58168e1..000000000
--- a/src/components/OnBoarding.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { sizes } from '../styles/variables'
-
-const StyledOnBoarding = styled.section`
- text-align: center;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- padding: 7rem 0;
- }
-`
-
-const OnBoarding: React.SFC<{link: string}> = ({ link }) => (
-
- Would You Like to Have an Onboarding Session?
- Schedule a Call
-
-)
-
-export default OnBoarding
diff --git a/src/components/PopOver.tsx b/src/components/PopOver.tsx
deleted file mode 100644
index ddbad3b23..000000000
--- a/src/components/PopOver.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors, sizes } from '../styles/variables'
-
-const StyledDescripion = styled.span`
- position: relative;
-
- button {
- position: relative;
- display: inline-block;
- height: 1.4rem;
- width: 1.4rem;
- font-weight: 600;
- font-size: 1rem;
- border: none;
- color: ${colors.white};
- background: ${colors.offWhite1};
- border-radius: 50%;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- transform: scale(1.3);
- margin-left: 1rem;
- }
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- transform: translateX(1rem);
- }
-
- &::after {
- content: "";
- position: absolute;
- top: 0;
- left: -25%;
- display: block;
- height: 3.5rem;
- width: 3.5rem;
- }
- }
-
- .description__text {
- padding: .5rem .5rem .5rem 1.5rem;
- font-size: 1.2rem;
- font-weight: 400;
- color: ${colors.textDark};
- background: ${colors.offWhite2};
- z-index: 1000;
- border-radius: 3px;
-
- @media(max-width: 1080px) {
- position: absolute;
- right: -5rem;
- top: 2.4rem;
- min-width: 18rem;
- z-index: 9999999999;
- }
-
- @media(min-width: 1081px) {
- position: absolute;
- top: 0;
- left: 3rem;
- min-width: 19rem;
- }
- }
-
- .bottom {
- font-weight: 400;
- right: -10rem;
- top: 2.4rem;
- min-width: 18rem;
- z-index: 9999999999;
- transform: translateX(-16.5rem);
-
- @media(max-width: 1081px) {
- transform: translateX(-7.5rem);
- }
- }
-`
-
-class Description extends React.Component<{ description: string | JSX.Element; textPosition?: string }, {}> {
- state = {
- isRendered: false
- }
-
- handleClick = () => {
- this.setState({ isRendered: !this.state.isRendered })
- }
-
- handleMouseEnter = () => {
- this.setState({ isRendered: true })
- }
-
- handleMouseLeave = () => {
- this.setState({ isRendered: false })
- }
-
- render() {
- const { isRendered } = this.state
- const { description } = this.props
- const positionBottom = this.props.textPosition === 'bottom'
-
- return (
-
- ?
- {isRendered ? {description}
: null}
-
- )
- }
-}
-
-export default Description
diff --git a/src/components/PricingBox.tsx b/src/components/PricingBox.tsx
deleted file mode 100644
index a45553daa..000000000
--- a/src/components/PricingBox.tsx
+++ /dev/null
@@ -1,362 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors, sizes } from '../styles/variables'
-import IconTick from '../resources/icon-tick.svg'
-
-interface StyledPricingBoxProps {
- transform?: string
- background?: boolean
- hideButton?: boolean
- banner?: string
- bannerColor?: string
- btnBackground?: boolean
- isTitleOutside?: boolean
-}
-
-const StyledPricingBox = styled.div`
- position: relative;
- margin: 2rem 1rem;
- padding: 3rem 2.8rem;
- font-size: 95%;
- min-height: ${({ isTitleOutside }) => (isTitleOutside ? '42rem' : '51rem')};
- min-width: 20rem;
- max-width: 26rem;
- width: 25%;
- text-align: center;
- color: ${({ background }) => (background ? colors.white : null)};
- background: ${({ background }) => (background ? 'url("https://www.gitpod.io/galaxy.jpg")' : colors.white)};
- background-size: ${({ background }) => (background ? 'cover' : null)};
- background-position: ${({ background }) => (background ? 'left' : null)};
- border: 1px solid ${colors.offWhite2};
- background-color: ${colors.offWhite};
- border-radius: 3px;
- margin-top: ${({ isTitleOutside }) => (isTitleOutside ? '6rem' : '2rem')};
- z-index: ${({ isTitleOutside }) => (isTitleOutside ? '1000' : 'none')};;
-
- @media(min-width: calc(${sizes.breakpoints.md} + 1px)) {
- z-index: ${({ transform }) => (transform ? '1' : null)};
- }
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- transform: ${({ transform }) => (transform ? transform : null)};
- }
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- min-height: 50rem;
- padding: 3rem 2rem;
- margin-bottom: 5rem;
- min-height: ${({ isTitleOutside }) => (isTitleOutside ? '41rem' : '51rem')};
- }
-
- @media(max-width: 1096px) {
- min-width: 25rem;
- }
-
- @media(max-width: 860px) {
- margin-top: ${({ banner }) => (banner ? '4rem' : '')};
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- min-height: ${({ isTitleOutside }) => (isTitleOutside ? '40rem' : '49rem')};
- min-width: 30rem;
- padding: 2rem 3rem;
- }
-
- @media(max-width: 650px) {
- display: flex;
- flex-direction: column;
- align-items: center;
- min-height: 0;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- min-width: 25rem;
- min-height: auto;
- }
-
- @media(max-width: 320px) {
- min-width: 25rem;
- }
-
- > *:not(h4) {
- color: inherit;
- }
-
- .h4 {
- font-size: 1.8rem;
- margin-bottom: 0;
- color: ${colors.textDark};
- margin: ${({ isTitleOutside }) => (isTitleOutside ? '-7rem 0 6rem' : '')}
- }
-
- img, object, .g-image {
- display: inline-block;
- margin: 3rem 0 1rem;
- height: 8rem;
- width: 8rem;
-
- display: ${({ isTitleOutside }) => (isTitleOutside ? 'none' : '')};
-
- @media(max-width: ${sizes.breakpoints.md}) {
- margin: 1.5rem 0 1rem;
- }
- }
-
- .g-image {
- position: relative;
- width: 7rem;
- height: 7rem;
- margin: 0 0 5rem;
- }
-
- .price {
- font-size: 2.1rem;
- font-weight: 600;
-
- span {
- font-size: 80%;
- font-weight: 400;
- }
- }
-
- .duration {
- font-size: 1.3rem;
- font-weight: 600;
- margin: .8rem 0 1.5rem;
- }
-
- .feature {
- margin-top: 8rem;
- }
-
- ul {
- display: inline-block;
- }
-
- li {
- position: relative;
- display: block;
- font-size: 1.5rem;
- text-align: left;
- font-size: 85%;
- padding-left: 1rem;
-
- &::before {
- content: url(${IconTick});
- position: absolute;
- left: -.5rem;
- }
-
- &:not(:last-child) {
- margin-bottom: .7rem;
- }
- }
-
- .info {
- font-size: 95%;
- border-top: 1px solid #ddd;
- padding-top: 1rem;
- }
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- .span {
- display: flex;
- justify-content: space-between;
- }
- }
-
- .links-container {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- align-items: center;
- z-index: 9;
-
- @media(min-width: calc(${sizes.breakpoints.sm} + 1px)) {
- position: absolute;
- left: 50%;
- width: 100%;
- bottom: 1rem;
- transform: translateX(-50%);
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- margin: 3rem 0 1rem;
- }
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- bottom: ${({ transform }) => (transform ? '2rem' : '1.5rem')};
- }
-
- @media(max-width: 650px) {
- position: static;
- transform: none;
- margin-top: 5rem;
- }
- }
-
- .text {
- width: 100%;
- opacity: .7;
- font-size: 90%;
-
- @media(min-width: calc(${sizes.breakpoints.sm} + 1px)) {
- padding: 0 1.5rem;
- }
- }
-
- .is-hidden {
- display: ${({ hideButton }) => (hideButton ? 'none' : '')};
- }
-
- .banner {
- position: absolute;
- left: 0;
- bottom: 100%;
- width: 100%;
- background: ${colors.offWhite2};
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-
- p {
- width: 20ch;
- margin: 0 auto;
- padding: .8rem 0;
- color: ${({ bannerColor }) => (bannerColor ? bannerColor : '')};
- font-size: 90%;
- font-weight: 600;
- }
- }
-
- .blue-on-hover {
- color: ${colors.text};
- border: 2px solid #fff;
-
- &:hover {
- color: ${colors.white};
- border: 2px solid ${colors.lightBlue};
- }
- }
-
- .btn {
- background: ${({ btnBackground }) => (btnBackground ? colors.link : '')};
- color: ${({ btnBackground }) => (btnBackground ? colors.white : '')};
- border-color: ${({ btnBackground }) => (btnBackground ? colors.link : '')};
-
- &:hover {
- background: ${({ btnBackground }) => (btnBackground ? colors.lightBlue : '')};
- border-color: ${({ btnBackground }) => (btnBackground ? colors.lightBlue : '')};
- }
- }
-
- .sub-action {
- font-size: 90%;
- margin-top: .5rem;
- padding-bottom: 0;
- }
-
- .spacer {
- height: 2.5rem;
- }
-`
-
-export interface PricingBoxProps {
- title: string
- img?: HTMLImageElement
- gatsbyImage?: JSX.Element
- price?: string | JSX.Element
- duration?: string
- feature?: string | JSX.Element
- features?: (string | JSX.Element)[]
- transform?: string
- background?: boolean
- btnText?: string
- btnBackground?: boolean
- link?: string
- hideButton?: true
- btn?: JSX.Element
- text?: string
- banner?: string
- bannerColor?: string
- subAction?: JSX.Element
- isTitleOutside?: boolean
- info?: string
- areFeaturesBold?: boolean
- boldFeaturesCount?: number
- perUserMonth?: boolean
- headingLevel?: 'h2' | 'h3'
-}
-
-const PricingBox: React.SFC = ({
- title,
- img,
- price,
- duration,
- feature,
- features,
- btnText,
- btnBackground,
- transform,
- background,
- link,
- hideButton,
- btn,
- text,
- banner,
- bannerColor,
- subAction,
- isTitleOutside,
- info,
- areFeaturesBold,
- boldFeaturesCount = 0,
- perUserMonth,
- headingLevel,
- gatsbyImage
-}) => (
-
- {
- headingLevel === 'h3' ? {title} : headingLevel === 'h2' ? {title} : {title}
- }
- {img ? img : null}
- {gatsbyImage ? {gatsbyImage}
: null}
- {price ? {price}
: null}
- { perUserMonth ? per user/month
: null }
- {duration ? {duration}
: null}
- {feature ? {feature}
: null}
- {features && features.length ? (
-
- {features.map((f, i) => (
-
- {f}
-
- ))}
-
- ) : null}
- {info ? {info}
: null}
-
- {banner ? (
-
- ) : null}
-
-)
-
-export default PricingBox
diff --git a/src/components/PricingTable.tsx b/src/components/PricingTable.tsx
deleted file mode 100644
index db982683b..000000000
--- a/src/components/PricingTable.tsx
+++ /dev/null
@@ -1,183 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors, sizes } from '../styles/variables'
-
-const StyledPricingTable = styled.section<{ enableScrollat1080?: boolean, disableMarginBottom?: boolean }>`
- padding-bottom: 0;
- margin-bottom: ${({disableMarginBottom}) => disableMarginBottom ? 0 : '5rem'};
-
- .table-container {
- @media (max-width: 1180px) {
- overflow-x: ${({ enableScrollat1080: containerMaxWidthLarge }) => (containerMaxWidthLarge ? 'scroll' : '')};
- }
- }
-
- .comparison {
- h2 {
- font-size: 3rem;
- margin-bottom: -2.5rem;
- font-weight: 600;
- }
-
- td,
- th {
- border: none;
- }
-
- .header {
- th {
- background: ${colors.offWhite};
- }
- }
-
- th {
- background: none;
- }
-
- .th {
- &__title {
- min-width: 26rem;
-
- @media (max-width: 1160px) {
- min-width: 21rem;
- }
-
- @media (max-width: 450px) {
- min-width: 18rem;
- }
- }
- }
-
- tr {
- background: ${colors.offWhite};
-
- th {
- background: ${colors.white};
- font-weight: 600;
- }
- }
- }
-
- th {
- span {
- display: block;
- }
-
- img {
- height: 2.2rem;
- width: 3rem;
- transform: translateY(5px);
- margin-right: 2rem;
-
- @media (max-width: 1160px) {
- margin-right: 0.5rem;
- }
-
- @media (max-width: ${sizes.breakpoints.md}) {
- height: 1.7rem;
- transform: translateY(3px);
- margin-right: 0.5rem;
- }
-
- @media (max-width: ${sizes.breakpoints.md}) {
- height: 1.5rem;
- }
- }
- }
-
- .header {
- th {
- text-align: center;
- font-weight: 600;
- font-size: 2rem;
- padding: 3rem;
- width: 25%;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- padding: 2rem;
- }
-
- @media (max-width: ${sizes.breakpoints.md}) {
- padding: 1.5rem;
- }
-
- span {
- font-size: 1.6rem;
- font-weight: 400;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- font-size: 1.4rem;
- }
-
- @media (max-width: ${sizes.breakpoints.md}) {
- font-size: 1.2rem;
- }
-
- span {
- display: inline;
- color: ${colors.link};
- font-weight: 600;
- }
- }
- }
- }
-
- .buttons {
- th,
- td {
- background: none;
- border: none;
- }
-
- .btn {
- margin-top: 2rem;
- }
- }
-
- .description {
- display: inline-block;
- transform: translateY(-0.1rem);
-
- &__text {
- position: absolute;
- top: 0;
- left: 3rem;
- width: 25rem;
- min-width: 15rem;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- width: 18rem;
- }
- }
- }
-
- .disclaimer {
- padding: 3rem 0;
- background: ${colors.white};
- }
-`
-
-interface PricingTableProps {
- title: string | JSX.Element
- paragraph?: JSX.Element | string
- id?: string
- rows?: number
- styles?: React.CSSProperties
- containerMaxWidthLarge?: boolean
- disableMarginBottom?: boolean
-}
-
-const PricingTable: React.SFC = ({ title, paragraph, children, id, rows, styles, containerMaxWidthLarge, disableMarginBottom }) => (
-
-
- {title}
- {paragraph}
-
-
-
-)
-
-export default PricingTable
diff --git a/src/components/Quote.tsx b/src/components/Quote.tsx
deleted file mode 100644
index 495dfde50..000000000
--- a/src/components/Quote.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import QuoteIcon from '../resources/quote.svg'
-import { colors, sizes } from '../styles/variables'
-
-const StyledQuote = styled.section`
- padding: 12rem 0;
- margin: 0 auto;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- padding: 8rem 0;
- }
-
- .h4 {
- position: relative;
- display: flex;
- justify-content: center;
- align-items: center;
- text-align: center;
- color: ${colors.text};
- font-size: 2.5rem;
- font-weight: 400;
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- font-size: 2.3rem;
- }
-
- span {
- max-width: 80rem;
-
- @media(max-width: 560px) {
- padding: 0 1rem;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- width: 100%;
- }
- }
-
- object {
- height: 7rem;
-
- &:first-of-type {
- transform: rotate(-180deg);
- margin-right: 3rem;
- }
-
- &:last-of-type {
- margin-left: 3rem;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- height: 5rem;
- margin: 0 2rem;
- }
-
- @media(max-width: 580px) {
- display: none;
- }
- }
-
- i {
- @media(min-width: 581px) {
- display: none;
- }
- }
- }
-`
-
-interface QuoteProps {
- title: string | JSX.Element
-}
-
-const Quote: React.SFC = ({title}) => (
-
-
-
- “ {title}”
-
-
-
-)
-
-export default Quote
diff --git a/src/components/SubmissionSucess.tsx b/src/components/SubmissionSucess.tsx
deleted file mode 100644
index 7e6e145fe..000000000
--- a/src/components/SubmissionSucess.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import React from 'react'
-import tick from '../resources/tick.svg'
-import styled from '@emotion/styled'
-import { sizes } from '../styles/variables'
-
-const Styled = styled.div`
- min-height: 80vh;
- display: flex;
- justify-content: center;
- align-items: center;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- flex-direction: column;
- text-align: center;
- min-height: 70vh;
- }
-
- h1 {
- line-height: 1.8;
- }
-
- span {
- font-weight: 600;
- }
-
- img {
- display: inline-block;
- height: 15rem;
- margin-right: 3rem;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- margin-right: 0;
- margin-bottom: 3rem;
- }
- }
-`
-
-const SubmissionSucess = () => (
-
-
-
- Thanks!
- We'll get back to you soon.
-
-
-)
-
-export default SubmissionSucess
diff --git a/src/components/TextBox.tsx b/src/components/TextBox.tsx
deleted file mode 100644
index e06eaed72..000000000
--- a/src/components/TextBox.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors, borders } from '../styles/variables'
-
-const StyledTextBox = styled.div`
- font-size: 90%;
-
- .box {
- max-width: 75rem;
- margin: 10rem auto;
- padding: 8rem 5rem;
- background: ${colors.white};
- border-radius: 3px;
- border: ${borders.light2};
- }
-
- h1 {
- margin-bottom: 6rem;
- }
-
- h2 {
- margin: 6rem 0 5rem;
- }
-
- h3 {
- margin-top: 4rem;
- }
-
- h4 {
- margin: 3rem 0 1rem;
- }
-
- li + li {
- margin-top: 2rem;
- }
-
- .model {
- padding: 2rem 3rem;
- border: ${borders.light};
- font-size: 95%;
- }
-`
-
-const TextBox: React.SFC<{}> = ({ children }) => (
-
-
- { children }
-
-
-)
-
-export default TextBox
diff --git a/src/components/TextCard.tsx b/src/components/TextCard.tsx
deleted file mode 100644
index 94635a6f5..000000000
--- a/src/components/TextCard.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors, shadows, sizes } from '../styles/variables'
-
-import Bitbucket from '../resources/bitbucket.svg'
-import Github from '../resources/octicons-mark-github.svg'
-import Gitlab from '../resources/gitlab.svg'
-import Git from '../resources/git.png'
-import VSC from '../resources/vsc.svg'
-import Theia from '../resources/theia-ide.svg'
-import Docker from '../resources/docker.svg'
-
-const Logos: any = {
- Bitbucket: Bitbucket,
- Github: Github,
- Gitlab: Gitlab,
- Git: Git,
- VSC: VSC,
- Theia: Theia,
- Docker: Docker
-}
-
-const StyledTextCard = styled.div`
- width: 24%;
- padding: 3rem;
- margin-bottom: 3rem;
- background: ${colors.white};
- box-shadow: ${shadows.light};
- border-radius: 3px;
-
- @media(min-width: calc(${sizes.breakpoints.md} + 1px)) {
- width: 24%;
- }
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- width: 49%;
- max-width: 44rem;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- min-width: 32rem;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- min-width: 28rem;
- }
-
- .title {
- text-align: center;
- min-height: 5rem;
- }
-
- .read-more {
- margin-top: 6rem;
- }
-
- .brands {
- margin-top: 3rem;
- }
-
- img {
- height: 3rem;
-
- &:not(:last-child) {
- margin-right: 2rem;
- }
- }
-`
-
-interface TextCardProps {
- title: string
- paragraphs: (string | JSX.Element)[]
- more?: JSX.Element
- logos?: string[]
-}
-
-const TextCard: React.SFC = ({title, paragraphs, more, logos}) => (
-
- {title}
- { paragraphs.map((p, i) => {p}
) }
- { more ? more : null }
- {logos && logos.length ?
- {logos.map((logo, i) =>
)}
-
: null}
-
-)
-
-export default TextCard
diff --git a/src/components/TextCards.tsx b/src/components/TextCards.tsx
deleted file mode 100644
index 434aabcb9..000000000
--- a/src/components/TextCards.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { sizes } from '../styles/variables'
-
-const StyledTextCards = styled.section`
- .text-cards {
- display: flex;
- flex-wrap: wrap;
-
- @media(min-width: calc(${sizes.breakpoints.md} + 1px)) {
- justify-content: space-between;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- flex-direction: column;
- align-items: center;
- }
- }
-`
-
-interface TextCardsProps {
- title?: string
-}
-
-const TextCards: React.SFC = ({ title, children }) => (
-
-
- { title ? {title} : null }
-
- {children}
-
-
-
-)
-
-export default TextCards
diff --git a/src/components/TrustedBy.tsx b/src/components/TrustedBy.tsx
deleted file mode 100644
index a1f8ad753..000000000
--- a/src/components/TrustedBy.tsx
+++ /dev/null
@@ -1,128 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { sizes } from '../styles/variables'
-
-const StyledTrustedBy = styled.section`
- padding: 3rem 0;
-
- h3 {
- text-align: center;
- font-weight: 400;
- }
-
- h2 {
- text-align: center;
- }
-
- .logos {
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
-
- @media (max-width: 540px) {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
- }
-
- a {
- flex-basis: calc(14% - 2.2rem);
- display: flex;
- border: 2px solid transparent;
- justify-content: center;
- margin: 1.2rem;
-
- img {
- height: 100%;
- }
- }
- }
-
- .grey-logo {
- filter: grayscale(100%) contrast(0%) brightness(116%);
- -webkit-filter: grayscale(100%) contrast(0%) brightness(116%);
- }
-
- .fcc {
- filter: grayscale(100%) contrast(0%);
- -webkit-filter: grayscale(100%) contrast(0%);
- width: 13rem;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- width: 12rem;
- }
-
- @media (max-width: ${sizes.breakpoints.md}) {
- width: 11rem;
- }
- }
-
- .dwave-logo {
- transform: scale(1.2);
- filter: grayscale(100%) contrast(0%) brightness(112%);
- -webkit-filter: grayscale(100%) contrast(0%) brightness(112%);
- }
-
- .four-geeks {
- transform: scale(0.9);
- }
-
- .gatsby-logo {
- filter: grayscale(100%) opacity(47%);
- -webkit-filter: grayscale(100%) opacity(47%);
- }
-
- .vue-logo {
- filter: grayscale(100%) opacity(62%);
- -webkit-filter: grayscale(100%) opacity(62%);
- }
-`
-
-const StyledBrandImage = styled.img<{ transform?: string }>`
- width: 9.5rem;
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- width: 9rem;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- width: 7rem;
- }
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- transform: ${({ transform }) => (transform ? transform : 'none')};
- }
-`
-
-interface Brand {
- alt: string
- url: string
- svg: string
- transform?: string
- className?: string
-}
-
-interface TrustedByProps {
- brands: Brand[]
- title: string | JSX.Element
- styles?: React.CSSProperties
-}
-
-const TrustedBy = ({ brands, title, styles }: TrustedByProps) => (
-
-
-
- {title}
-
-
- {brands.map((b: Brand) => (
-
-
-
- ))}
-
-
-
-)
-
-export default TrustedBy
diff --git a/src/components/blog/MorePosts.tsx b/src/components/blog/MorePosts.tsx
deleted file mode 100644
index deb7b1a92..000000000
--- a/src/components/blog/MorePosts.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import PostPreview from './PostPreview'
-import { Posts } from './Posts'
-
-const StyledMorePosts = styled.section`
- h2 {
- text-align: center;
- }
-`
-
-const MorePosts = ({ posts }: { posts: any[] }) => (
-
-
-
-
- Discover More About Gitpod
-
-
- {posts.map((p: any) => (
-
- ))}
-
-
-
-
-)
-
-export default MorePosts
diff --git a/src/components/blog/PostBanner.tsx b/src/components/blog/PostBanner.tsx
deleted file mode 100644
index 6e2c5adb6..000000000
--- a/src/components/blog/PostBanner.tsx
+++ /dev/null
@@ -1,121 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors } from '../../styles/variables'
-import { useStaticQuery, graphql } from 'gatsby'
-import BackgroundImage from 'gatsby-background-image'
-
-const StyledPostBanner = styled.header`
- position: relative;
- overflow-x: hidden;
- border-top-left-radius: 2px;
- border-top-right-radius: 2px;
-
- .bg {
- display: block;
- background-size: cover;
- background-position: center;
- height: 40rem;
- border-top-left-radius: 2px;
- border-top-right-radius: 2px;
- }
-
- .contents {
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- }
-
- h1 {
- margin-top: 2rem;
- }
-
- .h3 {
- margin: 0;
- color: ${colors.text};
- font-weight: 200;
- }
-
- .info {
- display: flex;
- width: 100%;
- justify-content: space-between;
- }
-
- .author {
- display: flex;
- flex-direction: column;
- }
-
- .share {
- display: flex;
- }
-
- span + span {
- margin-top: 1rem;
- }
-
- span:last-of-type {
- &::after {
- content: '';
- display: block;
- margin-top: 2rem;
- height: 5px;
- width: 12rem;
- background: ${colors.offWhite4};
- border-radius: 5px;
- }
- }
-`
-
-interface PostBannerProps {
- teaserImage: string
- title: string
- subtitle: string
- date: JSX.Element
- author: JSX.Element
- shareButtons: JSX.Element
-}
-
-const PostBanner: React.SFC = ({ title, subtitle, teaserImage, date, author, shareButtons }) => {
- const { allImageSharp } = useStaticQuery(graphql`
- query {
- allImageSharp {
- nodes {
- fluid {
- originalName
- ...GatsbyImageSharpFluid
- }
- }
- }
- }
- `)
-
- const image = teaserImage !== null && (teaserImage.substring(0,1) === '/' && !teaserImage.includes(".gif")) ? teaserImage.split('/')[1] : 'placeholder.jpg'
-
- const fluid = allImageSharp.nodes.find((n: any) => {
- return n.fluid.originalName === image
- }).fluid
-
- return (
-
-
-
-
-
-
- {subtitle ? {subtitle}
: null }
- {title}
-
-
-
{author} {date}
-
{shareButtons}
-
-
-
-)
-}
-
-export default PostBanner
diff --git a/src/components/blog/PostPreview.tsx b/src/components/blog/PostPreview.tsx
deleted file mode 100644
index 78cf28821..000000000
--- a/src/components/blog/PostPreview.tsx
+++ /dev/null
@@ -1,133 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { Link, useStaticQuery, graphql } from 'gatsby'
-import { colors, borders } from '../../styles/variables'
-import { parseAuthors } from '../../contents/authors'
-import BackgroundImage from 'gatsby-background-image'
-
-const StyledPostPreview = styled.div`
- background: ${colors.white};
- border: ${borders.light2};
- border-radius: 3px;
- max-width: 35rem;
- min-height: 60rem;
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
-
- .background {
- height: 26rem;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- }
-
- .h3 + p {
- margin: 0;
- }
-
- p {
- color: ${colors.text};
- font-weight: 400;
- }
-
- .content {
- padding: 2rem;
- flex-grow: 2;
- }
-
- .info {
- display: flex;
- justify-content: space-between;
- padding: 2rem;
- color: ${colors.text};
- font-weight: 400;
- flex-wrap: wrap;
- }
-`
-
-interface BlogData {
- node: {
- fields: {
- slug: string
- },
- timeToRead: string,
- fileAbsolutePath: string,
- excerpt: string,
- headings: {
- value: string
- },
- frontmatter: {
- title: string
- image: string
- date: string
- author: string
- }
- }
-}
-
-interface PostPreviewProps {
- post: BlogData
- headingType?: 'h2' | 'h3'
-}
-
-const PostPreview: React.SFC = (props) => {
- const { allImageSharp } = useStaticQuery(graphql`
- query {
- allImageSharp {
- nodes {
- fluid {
- originalName
- ...GatsbyImageSharpFluid
- }
- }
- }
- }
- `)
-
- const b = props.post.node;
- const date = new Date(Date.parse(b.frontmatter.date));
- const authors = parseAuthors(props.post.node.frontmatter.author);
-
- const image = b.frontmatter.image !== null && (b.frontmatter.image.substring(0,1) === '/' && !b.frontmatter.image.includes(".gif")) ? b.frontmatter.image.split('/')[1] : 'placeholder.jpg'
-
- const fluid = allImageSharp.nodes.find((n: any) => {
- return n.fluid.originalName === image
- }).fluid
-
- return (
-
-
-
-
-
-
- {
- props.headingType === 'h3' ?
{b.frontmatter.title} :
{b.frontmatter.title}
- }
-
{b.excerpt}
-
-
-
- {date.toLocaleDateString('en-GB', { year: 'numeric', month: 'short', day: 'numeric' })}
-
-
- by {
- authors.map((author, idx) =>
- {author.name} {idx < authors.length - 1 ? ', ' : ''}
- )
- }
-
-
-
-
- )
-}
-
-export default PostPreview
diff --git a/src/components/blog/Posts.tsx b/src/components/blog/Posts.tsx
deleted file mode 100644
index 7c5787a9e..000000000
--- a/src/components/blog/Posts.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import styled from '@emotion/styled'
-
-export const Posts = styled.div`
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
-
- @media (max-width: 1140px) {
- justify-content: space-around;
- }
-`
diff --git a/src/components/blog/SharePost.tsx b/src/components/blog/SharePost.tsx
deleted file mode 100644
index 1113dfc61..000000000
--- a/src/components/blog/SharePost.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-import React from 'react'
-import styled from '@emotion/styled'
-
-import { Author } from '../../contents/authors'
-import { colors } from '../../styles/variables'
-
-const StyledSharePost = styled.div`
- text-align: center;
-
- div {
- display: flex;
- justify-content: center;
- margin-bottom: 2rem;
- }
-
- svg {
- height: 3rem;
- fill: #b5b5b5;
- transition: all .2s;
- }
-
- a {
- &:not(:last-child) {
- margin-right: 2rem;
- }
-
- &:hover svg {
- fill: ${colors.text};
- }
- }
-`
-
-interface SharePostProps {
- title: string
- authors: Author[]
- url: string
- dontRenderHeading?: boolean
-}
-
-const SharePost = ({ title, authors, url, dontRenderHeading }: SharePostProps) => (
-
- {dontRenderHeading ? null : Share Blog Post }
-
-
-)
-
-export default SharePost
diff --git a/src/components/careers/ExpandableJob.tsx b/src/components/careers/ExpandableJob.tsx
deleted file mode 100644
index c75807dc5..000000000
--- a/src/components/careers/ExpandableJob.tsx
+++ /dev/null
@@ -1,217 +0,0 @@
-import React, { useState, useEffect } from 'react'
-
-import styled from '@emotion/styled'
-import { colors, borders } from '../../styles/variables'
-import Arrow from '../Arrow'
-import GitpodLogo from '../../resources/gitpod-logo-dark.svg'
-// @ts-ignore
-import hyphenate from '../../utils/hyphenate'
-
-const StyledExpandableJob = styled.div`
- position: relative;
- padding: 4rem 4rem 4rem 10rem;
- background: ${colors.offWhite};
- border: ${borders.light2};
- border-radius: 3px;
-
- @media (max-width: 600px) {
- padding: 4rem 2rem 2rem 8rem;
- }
-
- .arrow-btn {
- position: absolute;
- top: 4rem;
- left: 4rem;
- border: none;
- transform: translateY(-0.6rem);
-
- @media (max-width: 600px) {
- left: 2rem;
- }
-
- &:hover {
- svg {
- fill: ${colors.text};
- }
- }
- }
-
- h3:hover {
- .permalink {
- visibility: visible;
- }
- }
-
- .permalink {
- display: inline-block;
- height: 3rem;
- transform: translateY(28%);
- margin-left: 1rem;
- visibility: hidden;
-
- &:focus {
- visibility: visible;
- }
- }
-
- .permalink-icon {
- height: 3rem;
- }
-
- p + p {
- margin-top: 2rem;
- }
-
- .after {
- margin: 5rem 0;
- }
-
- .btn {
- margin-bottom: 5rem;
- }
-
- h4 {
- margin: 5rem 0 2rem;
- }
-
- ul {
- list-style: initial;
- list-style-position: inside;
- }
-
- ul li{
- list-style: none;
- margin-left: 20px;
- text-indent: -20px;
- margin-bottom: 10px;
- }
-
- ul li:before {
- content: "▫️ ";
- }
-`
-
-interface Listing {
- title: string
- items: string[]
-}
-
-export interface ExpandableJobProps {
- title: string
- intro: string
- paragraphs: string
- lists: Listing[]
- textAfterTheLists: string
- rendered?: boolean
- date?: string
-}
-
-const ExpandableJob = ({ title, intro, paragraphs, lists, textAfterTheLists, rendered, date }: ExpandableJobProps) => {
- const [isRendered, setIsRendered] = useState(rendered || false)
- const hash = `${hyphenate(title)}`
-
- useEffect(() => {
- if (window.location.hash === `#${hash}`) {
- setIsRendered(true)
- }
- }, [])
-
- const toggleIsRendered = () => {
- setIsRendered(!isRendered)
- }
-
- const applicationEmail = `mailto:contact@typefox.io?subject=Application as ${title}`
-
- const structuredData = {
- '@context': 'https://schema.org/',
- '@type': 'JobPosting',
- title: title,
- description: (`
-
-
${intro}
- ${paragraphs.split('\n').map((p) => `
${p}
`).join(' ')}
-
- ${lists.map(({ title, items }: Listing) => `
-
${title}
-
- ${items.map(item => `${item} `).join(' ')}
-
- ` ).join(' ')}
-
${textAfterTheLists}
-
-
- `),
- datePosted: date,
- hiringOrganization: {
- '@type': 'Organization',
- name: 'Gitpod, Inc.',
- sameAs: 'https://www.gitpod.io/',
- logo: GitpodLogo,
- contactPoint: {
- '@type': 'ContactPoint',
- url: 'https://www.gitpod.io/contact/'
- }
- },
- // Location: Remote, anywhere on Earth.
- // Ref: https://developers.google.com/search/docs/data-types/job-posting#remote-jobs
- jobLocationType: 'TELECOMMUTE',
- employmentType: 'FULL_TIME',
- applicationContact: {
- '@type': 'ContactPoint',
- email: applicationEmail
- }
- }
-
- return (
-
-
-
-
-
- {title}
-
-
-
-
- {intro}
- {
- isRendered ? (<>
- {paragraphs.split('\n').map((p, i) => {p}
)}
- {lists.map((item, i) =>
)}
- {textAfterTheLists}
-
- Apply Now
-
- >) : null
- }
-
-
- )
-}
-
-const List = ({ title, items }: Listing) => (
-
-
{title}
-
- {items.map((item, i) => {
- const sentences = item.split('. ')
- let firstSentence: any = sentences[0]
- firstSentence = sentences.length !== 1 ? {firstSentence}. : firstSentence
- return (
-
- { firstSentence }
- { sentences.slice(1, sentences.length).join('. ') }
-
- )
- })}
-
-
-)
-
-export default ExpandableJob
diff --git a/src/components/docs/DocSearch.tsx b/src/components/docs/DocSearch.tsx
deleted file mode 100644
index 66fd017b5..000000000
--- a/src/components/docs/DocSearch.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import React, { useEffect } from 'react';
-import styled from '@emotion/styled';
-import { colors } from '../../styles/variables';
-import MagGlass from '../../resources/mag-glass.svg';
-
-const StyledInput = styled.input`
- padding: 7px 18px 7px 38px;
- margin: 10px 10px 30px 10px;
- border-radius: 100px;
- border: solid 1px ${colors.white};
- box-shadow: 1px 3px 8px ${colors.offWhite2};
-
- background: url(${MagGlass}) no-repeat 10px ${colors.white};
- background-size: 20px 20px;
- &:focus {
- border: solid 1px ${colors.link};
- outline: none;
- }
-`;
-
-export const Docsearch = (props: {name: string}) => {
- useEffect(() => {
- (window as any).docsearch({
- apiKey: "1a880f3060e9ff81ff84087fc90878fc",
- indexName: "gitpod",
- inputSelector: `#${props.name}`
- });
- }, []);
-
- return ;
-}
diff --git a/src/components/docs/DocSideBar.tsx b/src/components/docs/DocSideBar.tsx
deleted file mode 100644
index 2502d965a..000000000
--- a/src/components/docs/DocSideBar.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-import React from 'react'
-
-import { Link } from 'gatsby'
-import Linkset from '../Linkset'
-import { MENU } from '../../docs/menu'
-import { Docsearch } from './DocSearch'
-import styled from '@emotion/styled'
-import { sizes } from '../../styles/variables'
-import SideBarBg from '../../resources/sidebar-bg.jpg'
-
-
-const StyledSideBar = styled.div`
- position: relative;
- display: flex;
- flex-direction: column;
- padding: 3rem 0 10rem;
-
- &::before {
- position: absolute;
- content: "";
- display: block;
- min-height: 800px;
- min-width: 500px;
- height: calc(100vh + 100%);
- width: calc(100% + 10vw);
- transform: translateX(-13.5vw) translateY(-100vh);
- background: url(${SideBarBg});
- background-size: cover;
- background-position: center;
- z-index: -1;
- opacity: .1;
-
- @media(min-width: 1540px) {
- width: calc(30vw + 100%);
- transform: translateX(-32vw) translateY(-100vh);
- }
-
- @media(min-width: 3010px) {
- width: calc(55vw + 100%);
- transform: translateX(-57vw) translateY(-100vh);
- }
-
- @media(min-width: 4900px) {
- transform: translateX(-56vw) translateY(-100vh);
- }
-
- @media(min-width: 7000px) {
- width: calc(55vw + 100%);
- transform: translateX(-55.5vw) translateY(-100vh);
- height: calc(138vh + 100%);
- }
- }
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- flex: 0 0 33%;
- }
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- display: none;
- }
-`
-
-const DocSideBar: React.SFC<{}> = () => (
-
-
-
- {MENU.map((m, i) =>
-
- {m.subMenu && m.subMenu.map((sub, i) =>
- {sub.title}
- )}
- )}
-
-
-)
-
-export default DocSideBar
diff --git a/src/components/docs/DocTopicChooser.tsx b/src/components/docs/DocTopicChooser.tsx
deleted file mode 100644
index b14224756..000000000
--- a/src/components/docs/DocTopicChooser.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import React from 'react'
-
-import { navigate } from 'gatsby'
-import { MENU } from '../../docs/menu'
-import styled from '@emotion/styled'
-import { sizes } from '../../styles/variables'
-
-const StyledTopicChooser = styled.div`
- margin-bottom: 3rem;
-
- .topic-chooser {
- margin: 0 auto;
- padding: 1rem 2.5rem;
- background-position: right 1.7em top 50%, 0 0;
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- display: none;
- }
-
- @media(max-width: 320px) {
- padding: 1rem 1.5rem;
- width: 100%;
- }
- }
-`
-
-function onSelectTopic(event: React.FormEvent) {
- navigate(event.currentTarget.value)
-}
-
-const DocTopicChooser: React.SFC<{}> = () => {
- return (
-
-
- Select A Topic
- {MENU.map(m => {
- return <>
- {m.title}
- {
- (m.subMenu || []).map(m =>
- {m.title}
- )
- }
- >
- })}
-
-
- )
-}
-
-
-export default DocTopicChooser
diff --git a/src/components/docs/EditInGitpod.tsx b/src/components/docs/EditInGitpod.tsx
deleted file mode 100644
index 199bf6b06..000000000
--- a/src/components/docs/EditInGitpod.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-
-const StyledEditInGitpod = styled.div`
- svg {
- height: 3.5rem;
- }
-
- a {
- &:hover {
- rect {
- transition: all .2s;
- fill: #287EF7;
- }
- }
- }
-`
-
-const EditInGitpod = ({ editUrl }: { editUrl: string }) => (
-
-
-
-
-
-
-
- in Gitpod
-
-
-
-
- Edit
-
-
-
-
-
-
-
-
-
-
-
-)
-
-export default EditInGitpod
diff --git a/src/components/docs/NavigationArrows.tsx b/src/components/docs/NavigationArrows.tsx
deleted file mode 100644
index 49380d163..000000000
--- a/src/components/docs/NavigationArrows.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import React from 'react'
-
-import { Link } from 'gatsby'
-import { MenuContext } from '../../docs/menu'
-import styled from '@emotion/styled'
-import Arrow from '../Arrow'
-
-const StyledNavigationArrows = styled.div`
- width: 100%;
- text-align: center;
- padding: 10rem 0;
-`
-
-const NavigationArrows = ({ menuCtx }: { menuCtx: MenuContext }) => (
-
- {menuCtx.prev ?
-
-
- :
}
- {menuCtx.next ?
-
-
- :
}
-
-)
-
-export default NavigationArrows
diff --git a/src/components/docs/ReachOut.tsx b/src/components/docs/ReachOut.tsx
deleted file mode 100644
index 35be80b96..000000000
--- a/src/components/docs/ReachOut.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-import React from 'react'
-
-import { Link } from 'gatsby'
-import styled from '@emotion/styled'
-import { colors, borders } from '../../styles/variables'
-
-const StyledReachOut = styled.section`
- border: ${borders.light2};
- padding: 0 2rem 5rem;
- max-width: 450px;
- margin: 0 auto 10rem;
- text-align: center;
- border-radius: 3px;
-
- h2 + p {
- margin: 0;
- }
-
- svg {
- fill: #b5b5b5;
- height: 2.9rem;
- transition: all .2s;
- }
-
- div {
- margin-top: 2rem;
- }
-
- a {
- &:not(:last-of-type) {
- margin-right: 2rem;
- }
-
- &:hover,
- &:focus {
- color: ${colors.link};
-
- svg {
- fill: ${colors.text};
- }
-
- .mail {
- stroke: ${colors.text};
- }
- }
- }
-`
-
-const ReachOut = () => (
-
- Still Have Questions?
- Please reach out. We’re happy to answer them.
-
-
-)
-
-export default ReachOut
diff --git a/src/components/extension-uninstall/Form.tsx b/src/components/extension-uninstall/Form.tsx
deleted file mode 100644
index 9d18ca833..000000000
--- a/src/components/extension-uninstall/Form.tsx
+++ /dev/null
@@ -1,142 +0,0 @@
-import React, { useState, useEffect } from 'react'
-import styled from '@emotion/styled'
-import { borders } from '../../styles/variables'
-import { Email } from '../../functions/submit-form'
-import tick from '../../resources/tick.svg'
-
-const StyledForm = styled.form`
- p {
- margin-bottom: 1.2rem;
- }
-
- label, textarea {
- display: flex;
- align-items: center;
- }
-
- label {
- &:not(:last-of-type) {
- margin-bottom: .7rem;
- }
- }
-
- textarea {
- width: 100%;
- min-height: 100px;
- margin: 1.5rem 0;
- padding: 1rem;
- border: ${borders.light2};
- border-radius: 3px;
- }
-
- input {
- margin-right: 1rem;
- }
-
- .sucess {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- height: 100%;
- }
-
- .tick {
- margin-bottom: 3rem;
- }
-`
-
-const Form = () => {
- const [state, setState] = useState<{
- feedback: string
- otherFeedback?: string
- messageSent?: boolean
- }>({
- feedback: ''
- })
-
- useEffect(() => {
- console.log(state)
- }, [state])
-
- const handleChange = (e: React.ChangeEvent) => {
- const text = e.target.getAttribute('data-text')
- setState({
- ...state,
- feedback: e.target.checked ? state.feedback + `\n${text}` : state.feedback.replace(`\n${text}`, '')
- })
- }
-
- const handleTextAreaChange = (e: React.ChangeEvent) => {
- setState({
- ...state,
- [e.target.name]: e.target.value
- })
- }
-
- const handleSubmit = (e: React.FormEvent) => {
- e.preventDefault()
-
- const email: Email = {
- subject: 'Why did I uninstall the browser extension?',
- feedback: state.feedback,
- otherFeedback: state.otherFeedback
- }
-
- fetch('/.netlify/functions/submit-form', {
- method: 'POST',
- body: JSON.stringify(email)
- })
- .then(() =>
- setState({
- ...state,
- messageSent: true
- })
- )
- .catch((error) => alert(error))
- }
-
- return (
-
- {
- !state.messageSent ? (
- <>
-
- Why did you uninstall the browser extension?
- Check all that apply:
-
-
-
- I never used it
-
-
-
- I have problems configuring my projects
-
-
-
- I prefer my local development
-
-
-
- Gitpod isn’t what I expected
-
-
- Send
-
- >) : (
-
-
-
Thanks for your Feedback
-
- )
- }
-
- )
-}
-
-export default Form
diff --git a/src/components/extension-uninstall/Message.tsx b/src/components/extension-uninstall/Message.tsx
deleted file mode 100644
index e2b85529e..000000000
--- a/src/components/extension-uninstall/Message.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import React from 'react'
-import styled from '@emotion/styled'
-import { colors } from '../../styles/variables'
-
-const StyledMessage = styled.blockquote`
- padding: 4rem 5rem;
- background: ${colors.offWhite};
-
- @media(min-width: 1001px) {
- min-width: 400px;
- }
-
- .sig {
- display: block;
- margin-top: 1.5rem;
- }
-
- .ceo {
- display: flex;
- align-items: center;
- margin-top: 5rem;
-
- img {
- height: 6rem;
- margin-right: 1rem;
- }
- }
-`
-
-const Message = () => (
-
- Hi there,
- Sad to see you leave 😕 To improve and make sure that other developers are happier with Gitpod, we’d love to get your opinion on why you decided to uninstall your browser extension.
- We will work hard to build a product that (hopefully) convinces you to use Gitpod again at a later point ✌️
-
-)
-
-export default Message
diff --git a/src/components/features/FeatureBox.tsx b/src/components/features/FeatureBox.tsx
deleted file mode 100644
index d3b05195e..000000000
--- a/src/components/features/FeatureBox.tsx
+++ /dev/null
@@ -1,93 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors, sizes, borders } from '../../styles/variables'
-
-const StyledFeatureBox = styled.div`
- position: relative;
- text-align: center;
- background: ${colors.white};
- border-radius: 1rem;
- border: ${borders.light2};
- transition: all 0.2s;
-
- a {
- display: block;
- padding: 1rem 0.6rem;
-
- @media (max-width: 1000px) {
- padding: 0.5rem 2rem;
- }
- }
-
- .text {
- font-weight: 400;
- font-size: 1.7rem;
- transition: all 0.2s;
-
- @media (max-width: 1000px) {
- font-size: 1.3rem;
- }
- }
-
- img,
- svg {
- height: 3.3rem;
- display: block;
- margin: 2rem auto;
- transition: all 0.3s;
-
- @media (max-width: ${sizes.breakpoints.sm}) {
- height: 3rem;
- }
-
- @media (max-width: 1000px) {
- height: 2.4rem;
- }
- }
-
- .white {
- stroke: ${colors.white};
- }
-
- svg {
- fill: ${colors.offWhite1};
- stroke: ${colors.offWhite1};
- }
-
- &:hover {
- color: ${colors.white};
- background: ${colors.text};
-
- svg {
- fill: ${colors.white};
- stroke: ${colors.white};
- }
-
- .text {
- color: ${colors.white};
- }
-
- .white {
- stroke: ${colors.textLight};
- }
- }
-`
-
-interface FeatureBoxProps {
- alt?: string
- img?: string | JSX.Element
- text?: string | JSX.Element
- path?: string
-}
-
-const FeatureBox: React.SFC = ({ img, text, path, alt }) => (
-
-
- {typeof img === 'string' ?
: img}
- {text}
-
-
-)
-
-export default FeatureBox
diff --git a/src/components/features/FullAutomationButtons.tsx b/src/components/features/FullAutomationButtons.tsx
deleted file mode 100644
index d155daaca..000000000
--- a/src/components/features/FullAutomationButtons.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react'
-
-const FullAutomationButtons = ({ setRenderedGraphic }: {setRenderedGraphic: (value: string) => void}) => (
-
- setRenderedGraphic('gitpod')}
- onMouseEnter={() => setRenderedGraphic('gitpod')}
- onMouseLeave={() => setRenderedGraphic('')}
- >
- With Gitpod
-
- setRenderedGraphic('usual')}
- onMouseEnter={() => setRenderedGraphic('usual')}
- onMouseLeave={() => setRenderedGraphic('')}
- className="btn"
- >
- Usual Way
-
-
-)
-
-export default FullAutomationButtons
diff --git a/src/components/features/FullAutomationGraphics.tsx b/src/components/features/FullAutomationGraphics.tsx
deleted file mode 100644
index 84cac3e64..000000000
--- a/src/components/features/FullAutomationGraphics.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import React from 'react'
-
-import ImageProvider from '../ImageProvider'
-
-const FullAutomationGraphics = ({ renderedGraphic }: { renderedGraphic: string }
-) => {
- const graphics = [
- {
- src: 'automated-setup-default.png',
- alt: 'Gitpod Ready to Code',
- name: ''
- },
- {
- src: 'automated-setup-gitpod.png',
- alt: 'Setup Automated with Gitpod',
- name: 'gitpod'
- },
- {
- src: 'automated-setup-ordinary.png',
- alt: 'Setup Ordinary without Gitpod',
- name: 'usual'
- }
- ]
-
- return (
- graphics.map((g, i) => (
-
- ))
- )
-}
-
-
-export default FullAutomationGraphics
diff --git a/src/components/features/Intro.tsx b/src/components/features/Intro.tsx
deleted file mode 100644
index 3704feebd..000000000
--- a/src/components/features/Intro.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import FeatureBox from './FeatureBox'
-import { features } from '../../contents/features'
-import { sizes } from '../../styles/variables'
-import { StaticQuery, graphql } from 'gatsby'
-import Img from 'gatsby-image'
-
-const Styled = styled.div`
- .intro {
- padding: 8rem 0 12rem;
-
- .ice-stick {
- display: block;
- width: 10rem;
- margin: 0 auto;
- }
-
- .gatsby-image-wrapper {
- height: 20rem;
- }
-
- h1 {
- text-align: center;
- }
-
- .features {
- display: grid;
- grid-gap: 2rem;
- grid-template-columns: repeat(5, 1fr);
- justify-items: center;
- align-items: center;
- margin-top: 4rem;
- position: relative;
- max-width: 900px;
- margin: 6rem auto 0;
-
- @media (max-width: ${sizes.breakpoints.lg}) {
- grid-template-columns: repeat(5, 1fr);
- }
-
- @media (max-width: 1000px) {
- grid-template-columns: repeat(4, 1fr);
- }
-
- @media (max-width: 620px) {
- grid-template-columns: repeat(3, 1fr);
- }
-
- @media (max-width: 500px) {
- display: none;
- }
-
- & > div {
- min-width: 14rem;
- min-height: 16rem;
-
- @media (min-width: 1001px) {
- min-width: 17rem;
- }
- }
- }
- }
-`
-
-const Intro = () => (
- (
-
-
-
-
- Features
-
- {features.map((f, i) => (
-
- ))}
-
-
-
-
- )}
- />
-)
-
-export default Intro
diff --git a/src/components/features/StarFortFree.tsx b/src/components/features/StarFortFree.tsx
deleted file mode 100644
index 04fe895aa..000000000
--- a/src/components/features/StarFortFree.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from 'react'
-
-import { Link } from 'gatsby'
-import styled from '@emotion/styled'
-import { colors } from '../../styles/variables'
-
-const Styled = styled.section`
- padding-bottom: 0;
-
- .start {
- text-align: center;
-
- .h3 {
- font-weight: 400;
- margin: 3rem 0;
-
- span {
- font-weight: 600;
- color: ${colors.link};
- }
- }
- }
-`
-
-const StartForFree = () => (
-
-
-
-
- Start for Free
-
-
- Prefix any GitLab, GitHub or Bitbucket URL with gitpod.io/#
-
-
-
-
-)
-
-export default StartForFree
diff --git a/src/components/gitpod-vs-codespaces/Difference.tsx b/src/components/gitpod-vs-codespaces/Difference.tsx
deleted file mode 100644
index aa536f113..000000000
--- a/src/components/gitpod-vs-codespaces/Difference.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import React, { useEffect, useState } from 'react'
-import styled from '@emotion/styled'
-import Chrome from '../../resources/chrome-logo.svg'
-import Firefox from '../../resources/firefox-logo.svg'
-import { getBrowser } from '../../utils/helpers'
-
-const StyledDifference = styled.section<{spacing?: 'small'}>`
- padding: ${({spacing}) => spacing === 'small' ? '6rem 0' : ''};
- text-align: center;
-
- p {
- font-size: 110%;
- }
-
- h2 + p {
- max-width: 700px;
- margin: 3rem auto 2rem;
- }
-
- .btn {
- margin: 2.5rem 0 5rem;
- padding-left: 1.5rem;
-
- span {
- display: flex;
- align-items: center;
- }
-
- img {
- width: 4rem;
- margin-right: 2.5rem;
- }
- }
-`
-
-interface DifferenceProps {
- title?: string
- spacing?: 'small'
-}
-
-export const getBrowserString = (browser: any) => {
- if ( browser === 'Firefox') {
- return 'Firefox'
- }
- return 'Chrome'
- }
-
-const Difference = ({title, spacing}: DifferenceProps) => {
- const [browser, setBrowser] = useState()
-
- useEffect(() => {
- let usersBrowser = getBrowser(window.navigator.userAgent)
- setBrowser(getBrowserString(usersBrowser))
- })
-
- return (
-
-
-
- {title ? title : 'Want to See the Difference for Yourself?'}
-
-
Install the browser extension which adds a Gitpod button to your GitLab, GitHub and Bitbucket projects to easily spin up a dev environment with a single click.
-
-
-
- Add to {browser}
-
-
-
- Or prefix any GitLab, GitHub or Bitbucket URL with gitpod.io/#
-
-
-
- )
-}
-
-export default Difference
diff --git a/src/components/gitpod-vs-codespaces/PowerComparison.tsx b/src/components/gitpod-vs-codespaces/PowerComparison.tsx
deleted file mode 100644
index d50f46140..000000000
--- a/src/components/gitpod-vs-codespaces/PowerComparison.tsx
+++ /dev/null
@@ -1,150 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors } from '../../styles/variables'
-
-const StyledPowerComparison = styled.div`
- h3 {
- text-align: center;
- margin-bottom: 4rem;
-
- @media (max-width: 470px) {
- margin-bottom: 3rem;
- }
-
- @media (max-width: 360px) {
- margin-bottom: 2rem;
- }
- }
-
- .items {
- display: flex;
- justify-content: space-between;
- text-align: center;
- }
-
- .item {
- display: flex;
- flex-direction: column;
- justify-content: flex-end;
- font-size: 110%;
- color: ${colors.textDark};
-
- @media (max-width: 470px) {
- font-size: 95%;
- }
-
- @media (max-width: 360px) {
- font-size: 90%;
- }
-
- &:not(:last-child) {
- margin-right: 7rem;
-
- @media (max-width: 470px) {
- margin-right: 3.5rem;
- }
-
- @media (max-width: 360px) {
- margin-right: 2.5rem;
- }
- }
-
- &__title {
- font-weight: 600;
- margin-top: 2.5rem;
- }
- }
-
- .bars {
- display: flex;
- align-items: flex-end;
- color: ${colors.white};
- }
-
- .bar {
- display: flex;
- justify-content: center;
- align-items: flex-end;
- width: 9.4rem;
- padding-bottom: 1.5rem;
- border-radius: 3px;
- font-size: 90%;
-
- @media (max-width: 470px) {
- width: 8rem;
- padding-bottom: 1rem;
- }
-
- @media (max-width: 360px) {
- width: 6.6rem;
- }
-
- &:not(:last-child) {
- margin-right: 1rem;
-
- @media (max-width: 320px) {
- margin-right: 0.5rem;
- }
- }
-
- &--1 {
- height: 5rem;
- background: ${colors.orange};
-
- @media (max-width: 470px) {
- height: 4rem;
- }
- }
-
- &--2 {
- height: 10rem;
- background: ${colors.orangeLight};
-
- @media (max-width: 470px) {
- height: 8rem;
- }
- }
-
- &--3 {
- height: 16rem;
- background: ${colors.link};
-
- @media (max-width: 470px) {
- height: 12rem;
- }
- }
-
- &--4 {
- height: 30rem;
- background: ${colors.lightBlue};
-
- @media (max-width: 470px) {
- height: 24rem;
- }
- }
- }
-`
-
-const PowerComparison = () => (
-
-
-
-)
-
-export default PowerComparison
diff --git a/src/components/gitpod-vs-codespaces/SpeedComparison.tsx b/src/components/gitpod-vs-codespaces/SpeedComparison.tsx
deleted file mode 100644
index 892c7bcff..000000000
--- a/src/components/gitpod-vs-codespaces/SpeedComparison.tsx
+++ /dev/null
@@ -1,168 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors, sizes } from '../../styles/variables'
-
-const StyledSpeedComparison = styled.div`
- display: flex;
- justify-content: flex-start;
- width: 100%;
- margin: 5rem 0 7rem;
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- margin: 0rem 0 3rem;
- }
-
- @media (max-width: 560px) {
- margin-bottom: 5rem;
- }
-
- .mark {
- position: relative;
- display: flex;
- flex-direction: column;
- border-left: 3px solid ${colors.offWhite5};
-
- &__title {
- position: absolute;
- bottom: -5rem;
- transform: translateX(-50%);
- }
-
- &--2 {
- flex-direction: column-reverse;
- flex: 1;
- }
-
- .footnote {
- bottom: -3rem;
- }
- }
-
- p {
- color: ${colors.textLight};
- }
-
- .bar {
- position: relative;
- display: flex;
-
- &__title {
- margin-bottom: 1rem;
- margin-left: 1.5rem;
- font-weight: 600;
- color: ${colors.textDark};
-
- @media (max-width: ${sizes.breakpoints.sm}) {
- text-align: left;
- }
- }
-
- @media (max-width: 605px) {
- flex-wrap: wrap;
- }
-
- @media (max-width: 490px) {
- flex-wrap: initial;
- }
-
- & > * {
- display: flex;
- justify-content: center;
- align-items: center;
- border-radius: 3px;
- height: 11rem;
-
- @media (max-width: 490px) {
- height: 8rem;
- }
- }
-
- &-container {
- margin-bottom: 5rem;
- }
-
- &--gitpod {
- &-1 {
- background: ${colors.link};
- flex: 0 0 4%;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
-
- &-2 {
- flex: 0 0 15%;
- min-width: 8rem;
- }
- }
-
- &--codespaces {
- color: ${colors.white};
-
- & > * {
- position: relative;
- }
-
- &-1 {
- flex: 0 0 25%;
- min-width: 10rem;
- background: ${colors.orange};
- border-radius: 0;
-
- @media (max-width: 360px) {
- min-width: 7rem;
- }
- }
-
- &-2 {
- flex: 0 0 50%;
- min-width: 12rem;
- background: ${colors.orangeLight};
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
-
- &-3 {
- color: ${colors.textDark};
- min-width: 8rem;
-
- height: initial;
- }
- }
-
- &--time {
- font-weight: 600;
- }
- }
-`
-
-const SpeedComparison = () => (
-
-
-
- Click
-
-
-
-
GitHub Codespaces
-
-
-
Load
-
Build Project
-
> 15 min
-
-
-
-
-
-)
-
-export default SpeedComparison
diff --git a/src/components/index/AvatarProvider.tsx b/src/components/index/AvatarProvider.tsx
deleted file mode 100644
index 6b7a21131..000000000
--- a/src/components/index/AvatarProvider.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import React, { CSSProperties } from 'react'
-import { graphql, useStaticQuery } from 'gatsby'
-import Img from 'gatsby-image'
-
-interface AvatarProviderProps {
- fileName: string
- alt: string
-}
-
-const AvatarProvider = ({ fileName, alt }: AvatarProviderProps) => {
- const { allImageSharp } = useStaticQuery(graphql`
- query {
- allImageSharp {
- nodes {
- fixed(width: 50, height: 50, quality: 100) {
- originalName
- base64
- aspectRatio
- width
- height
- src
- srcSet
- }
- }
- }
- }
- `)
-
- const fixed = allImageSharp.nodes.find((n: any) => n.fixed.originalName === fileName).fixed
-
- return (
-
- )
-}
-
-export default AvatarProvider;
diff --git a/src/components/index/Banner.tsx b/src/components/index/Banner.tsx
deleted file mode 100644
index ce39f06fc..000000000
--- a/src/components/index/Banner.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import GitLab from '../../resources/gitlab.svg'
-import GitHub from '../../resources/octicons-mark-github.svg'
-import Bitbucket from '../../resources/bitbucket.svg'
-import { sizes, colors } from '../../styles/variables'
-import GitHubButton from 'react-github-btn'
-import { StaticQuery, graphql } from 'gatsby'
-import Img from 'gatsby-image'
-
-const Styled = styled.div`
- .pattern {
- &::after {
- height: 75%;
-
- @media (max-width: 800px) {
- height: 90%;
- }
- }
- }
-
- .banner {
- display: flex;
- flex-direction: column;
- align-items: center;
- text-align: center;
- padding: 10rem 0 10rem;
-
- &__screenshot {
- &-container {
- position: relative;
- display: block;
- margin-top: 3rem;
- width: 100%;
- max-width: 1000px;
- box-shadow: 0 2rem 6rem rgba(0, 0, 0, 0.2);
- }
- }
-
- h1 {
- font-size: 4.5rem;
- font-weight: 400;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- font-size: 3.8rem;
- }
-
- span {
- display: block;
- font-weight: 400;
- }
- }
-
- p {
- max-width: 450px;
- margin: 2.5rem auto;
-
- img {
- height: 2rem;
- margin-left: 1.5rem;
- }
- }
- }
-
- .works-with {
- color: ${colors.textLight};
- }
-`
-
-const Banner = () => (
- (
-
-
-
- )}
- />
-)
-
-export default Banner
diff --git a/src/components/index/GetStarted.tsx b/src/components/index/GetStarted.tsx
deleted file mode 100644
index a1b74d364..000000000
--- a/src/components/index/GetStarted.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { sizes } from '../../styles/variables'
-import { projects } from '../../contents/projects'
-import Project from './Project'
-import Difference from '../gitpod-vs-codespaces/Difference'
-
-const StyledGetStarted = styled.div`
- /* ------------------------------------------- */
- /* ----- Section Get Started ----- */
- /* ------------------------------------------- */
-
- .get-started {
- &__projects {
- display: flex;
- justify-content: center;
- flex-wrap: wrap;
-
- @media (max-width: ${sizes.breakpoints.lg}) {
- overflow-x: scroll;
- justify-content: space-between;
- flex-wrap: nowrap;
- }
-
- & > .project {
- margin-bottom: 5rem;
- margin-right: 5rem;
-
- @media (min-width: ${sizes.breakpoints.md}) {
- width: 19rem;
- }
- }
- }
- }
-
- h3 {
- text-align: center;
- font-weight: 400;
- }
-`
-
-const GetStarted = () => (
-
-
-
-
- Or Try an Example Project
-
- {projects.map((project, i) => (
-
- ))}
-
-
-
-
-)
-
-export default GetStarted
diff --git a/src/components/index/Project.tsx b/src/components/index/Project.tsx
deleted file mode 100644
index 5872f2eca..000000000
--- a/src/components/index/Project.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import React, { useState } from 'react'
-
-import styled from '@emotion/styled'
-import { colors, sizes, borders } from '../../styles/variables'
-import StartWorkspace from './StartWorkspace'
-
-const StyledProject = styled.div`
- padding: 2rem 0rem;
- text-align: center;
- font-weight: 600;
- border: ${borders.light2};
- background: ${colors.offWhite};
- border-radius: 3px;
- min-width: 22rem;
-
- @media (max-width: ${sizes.breakpoints.lg}) {
- max-width: 24rem;
- min-width: 20rem;
- }
-
- @media (max-width: ${sizes.breakpoints.sm}) {
- &:not(:last-child) {
- margin-bottom: 3rem;
- }
- }
-
- .img-container {
- display: inline-block;
- height: 8rem;
- width: 8rem;
- width: 14rem;
- }
-
- & > * {
- &:not(:last-child) {
- margin-bottom: 2rem;
- }
- }
-`
-
-interface ProjectProps {
- image: JSX.Element
- title: string | JSX.Element
- githubUrl?: string
- gitlabUrl?: string
- bitbucketUrl?: string
- git?: string
-}
-
-const Project: React.SFC = ({ image, title, githubUrl, gitlabUrl, bitbucketUrl }) => {
- const [shown, setIsShown] = useState(false)
-
- return (
-
- {image}
- {!shown ? title : 'Choose your platform'}
-
-
- )
-}
-
-export default Project
diff --git a/src/components/index/SaveHours.tsx b/src/components/index/SaveHours.tsx
deleted file mode 100644
index 7fe2afe50..000000000
--- a/src/components/index/SaveHours.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { sizes } from '../../styles/variables'
-import { StaticQuery, graphql } from 'gatsby'
-import Img from 'gatsby-image'
-
-const StyledSaveHours = styled.section`
- max-width: 750px;
- margin: 0 auto;
- text-align: center;
-
- @media (min-width: calc(${sizes.breakpoints.md} + 1px)) {
- padding-bottom: 2rem;
- }
-
- @media (max-width: ${sizes.breakpoints.md}) {
- max-width: 600px;
- }
-
- @media (max-width: 640px) {
- max-width: 400px;
- }
-
- h2 {
- margin-bottom: 5rem;
- }
-
- .img-container {
- display: inline-block;
- width: 18rem;
- margin-bottom: 5rem;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- margin-bottom: 3rem;
- }
-
- @media (max-width: 640px) {
- width: 16rem;
- margin-bottom: 4rem;
- }
- }
-
- .gatsby-image-wrapper {
- width: 100%;
- height: 25rem;
-
- @media(max-width: 400px) {
- height: 22rem;
- }
- }
-
- p {
- max-width: 450px;
- margin-left: auto;
- margin-right: auto;
- }
-`
-
-const SaveHours = () => (
- (
-
-
-
-
-
-
-
- Fast & Powerful. Streamline Your Development Workflow.
-
-
- Get fresh, task-based dev environments for any issue, branch and merge/pull request. Enter true GitOps and experience a new
- level of productivity.
-
-
-
-
- )}
-/>)
-
-export default SaveHours
diff --git a/src/components/index/SecurityAndOSS.tsx b/src/components/index/SecurityAndOSS.tsx
deleted file mode 100644
index d1ca46286..000000000
--- a/src/components/index/SecurityAndOSS.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-import React from 'react'
-import styled from '@emotion/styled'
-import TextFeature from './TextFeature'
-import ImageProvider from '../ImageProvider'
-
-const Styled = styled.section`
- .pattern {
- padding-bottom: 12rem;
- margin-top: 12rem;
- }
-
- .text-container {
- display: flex;
- justify-content: center;
-
- @media (max-width: 1040px) {
- flex-direction: column;
- align-items: center;
- }
-
- & > * {
- &:not(:last-of-type) {
- @media (max-width: 1040px) {
- margin-bottom: 5rem;
- }
-
- @media (min-width: 1041px) {
- margin-right: 5rem;
- }
- }
- }
- }
-`
-
-const SecurityAndOSS = () => (
-
-
-
-
}
- title="Secure and Flight-Proven"
- text={
- <>
-
- Built with modern security principles and strong encryption, Gitpod keeps your code and your data safe no matter what
- happens.
-
-
Hardened by professional pentesting and thousands of developer hours every single day.
- >
- }
- />
-
}
- title="Free For Open-Source!"
- text={
- <>
-
- Gitpod is built on open-source and wouldn’t exist without it. We’re happy to give something back by being completely{' '}
- free for open source.
-
-
Do you want to contribute to a new project? Here is a list of all prebuilt open-source projects.
- >
- }
- btnText="Find Your Next Project"
- href="https://contribute.dev/"
- />
-
-
-
-)
-
-export default SecurityAndOSS
diff --git a/src/components/index/StartWorkspace.tsx b/src/components/index/StartWorkspace.tsx
deleted file mode 100644
index d1a566289..000000000
--- a/src/components/index/StartWorkspace.tsx
+++ /dev/null
@@ -1,113 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import GitHub from '../../resources/octicons-mark-github.svg'
-import GitLab from '../../resources/gitlab.svg'
-import Bitbucket from '../../resources/bitbucket.svg'
-import { colors, sizes } from '../../styles/variables'
-
-const StyledStartWorkspace = styled.div`
- ul {
- display: flex;
- justify-content: center;
- }
-
- li {
- &:not(:last-child) {
- margin-right: 1rem;
- }
- }
-
- .platform {
- display: flex;
- justify-content: center;
- align-items: center;
- font-weight: 400;
- color: ${colors.text};
- background: ${colors.offWhite2};
- height: 5rem;
- width: 5rem;
- border: 2px solid transparent;
- border-radius: 50%;
- transition: all .2s;
-
- @media(min-width: calc(${sizes.breakpoints.lg} + 1px)) {
- transform: scale(.9);
- }
-
- &:hover,
- &:focus {
- border: 2px solid ${colors.lightBlue};
- }
- }
-
- img {
- display: block;
- width: 3rem;
- }
-`
-
-interface StartWorkspaceProps {
- githubUrl?: string
- gitlabUrl?: string
- bitbucketUrl?: string
- shown: boolean
- setIsShown: (val: boolean) => void
-}
-
-function prefix(url: string) {
- return 'https://gitpod.io/#' + url;
-}
-
-const StartWorkspace = ({ shown, setIsShown, githubUrl, gitlabUrl, bitbucketUrl }: StartWorkspaceProps) => (
-
- {
- !gitlabUrl && !bitbucketUrl ?
-
- Start Workspace
-
- :
- <> setIsShown(true)}
- title="Choose your Platform"
- >
- Start Workspace
-
-
- {
- githubUrl ?
-
-
-
- : null
- }
- {
- gitlabUrl ?
-
-
-
- : null
- }
- {
- bitbucketUrl ?
-
-
-
- : null
- }
- >
- }
-
-
-)
-
-
-export default StartWorkspace
diff --git a/src/components/index/Testimonial.tsx b/src/components/index/Testimonial.tsx
deleted file mode 100644
index a50adcbdd..000000000
--- a/src/components/index/Testimonial.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { borders, colors } from '../../styles/variables'
-
-const StyledTestimonial = styled.blockquote`
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- padding: 2.5rem;
- max-width: 375px;
- min-width: 360px;
- border: ${borders.normal};
- border-radius: 16px;
- text-align: left;
-
- @media(max-width: 700px) {
- min-width: 340px;
- }
-
- @media(max-width: 500px) {
- min-width: 320px;
- padding: 1.8rem;
- }
-
- @media(max-width: 340px) {
- min-width: 280px;
- }
-
- .text-container {
- display: flex;
- font-size: 95%;
- }
-
- footer {
- display: flex;
- align-items: center;
- margin-top: 2.5rem;
- font-size: 1.5rem;
- }
-
- .twitter-icon {
- fill: #b5b5b5;
- height: 2rem;
- margin-left: .4rem;
- transition: all .5s;
-
- @media(max-width: 640px) {
- height: 1.8rem;
- margin-left: .3rem;
- }
- }
-
- a {
- &:hover,
- &:focus {
- .twitter-icon {
- fill: ${colors.textDark};
- }
- }
- }
-`
-
-export interface TestimonialProps {
- name: string
- avatar: JSX.Element
- org: string | JSX.Element
- role: string | JSX.Element
- text: string | JSX.Element
- tweetId: string
- twitterHandle: string
-}
-
-const Testimonial = ({ name, avatar, role, org, text, tweetId, twitterHandle }: TestimonialProps) => (
-
-
-
- {avatar}
-
-
{name}
-
{role} {org}
-
-
-
-)
-
-export default Testimonial
diff --git a/src/components/index/Testimonials.tsx b/src/components/index/Testimonials.tsx
deleted file mode 100644
index fc40ba36e..000000000
--- a/src/components/index/Testimonials.tsx
+++ /dev/null
@@ -1,145 +0,0 @@
-// @ts-nocheck
-import React, { useRef, useState, useEffect } from 'react'
-
-import styled from '@emotion/styled'
-import { sizes, colors } from '../../styles/variables'
-import Testimonial, { TestimonialProps } from './Testimonial'
-import { testimonials } from '../../contents'
-
-const StyledTestimonials = styled.div`
- min-height: 60rem;
- margin: 8rem 0 10rem;
-
- @media (max-width: ${sizes.breakpoints.sm}) {
- text-align: center;
- }
-
- /* ------------------------------------------- */
- /* ----- Section Testimonials ----- */
- /* ------------------------------------------- */
-
- h3 {
- margin-bottom: 3rem;
- text-align: center;
- }
-
- .tweets {
- display: flex;
- transition: all 0.3s;
-
- &-container {
- padding-bottom: 4rem;
- overflow-x: scroll;
- }
-
- & > * {
- flex: 0 0 32%;
-
- &:not(:last-child) {
- margin-right: 1.333%;
- }
- }
- }
-
- .dots {
- display: flex;
- justify-content: center;
- padding: 4rem 0 5rem;
-
- @media(max-width: 740px) {
- padding-top: 3rem;
- }
-
- @media(max-width: 440px) {
- padding-top: 2.5rem;
- }
- }
-
- .dot {
- height: 1.5rem;
- width: 1.5rem;
- background: ${colors.offWhite4};
- border: none;
- border-radius: 50%;
- transition: all .2s;
-
- &:hover,
- &:focus {
- background: ${colors.lightGrey};
- }
-
- &:not(:last-child) {
- margin-right: 1.5rem;
- }
- }
-`
-
-const Testimonials: React.SFC<{}> = () => {
- const [currentCycle, setCurrentCycle] = useState(0)
- const tweetsRef = useRef(null)
- const tweetsContainerRef = useRef(null)
- const cycles = Math.ceil(testimonials.length / 3)
-
- useEffect(() => {
- const tweetsContainer = tweetsContainerRef.current
- const dots = document.querySelectorAll('.dot')
- const cycleWidth = tweetsContainer?.scrollWidth / cycles
-
- tweetsContainer.addEventListener('scroll', (e) => {
- const currentScrollPosition = tweetsContainer?.scrollLeft
- setCurrentCycle(cycles - Math.floor((tweetsContainer?.scrollWidth - currentScrollPosition) / cycleWidth))
- })
- })
-
- const switchTweets = (to: number) => {
- const tweetsContainer = tweetsContainerRef.current
- const cycleWidth = tweetsContainer?.scrollWidth / cycles
- tweetsContainer.scroll({ left: parseFloat(cycleWidth * to), behavior: 'smooth' })
-
- // Older method which regards the actuals tweets and the space between them and not the width of .tweets
-
- // const tweets = tweetsRef.current
- // const firstTweet = tweets?.firstChild
- // const spacing = getComputedStyle(firstTweet)['margin-right']
- // const transform = firstTweet.offsetWidth * 3 + parseFloat(spacing.substring(0, spacing.length - 2)) * 2.8
- }
-
- return (
-
-
-
-
- Used by 300,000+ Developers & Businesses
-
-
-
- {testimonials.map((t) => (
-
- ))}
-
-
-
- {[...Array(cycles).keys()].map((d) => {
- return (
- {
- setCurrentCycle(d)
- switchTweets(d)
- }}
- style={currentCycle === d ? { background: colors.lightGrey } : {}}
- title={`Switch to ${d + 1}th set of tweets.`}
- >
-
-
- )
- })}
-
-
-
-
- )
-}
-
-export default Testimonials
diff --git a/src/components/index/TextFeature.tsx b/src/components/index/TextFeature.tsx
deleted file mode 100644
index 074f2a680..000000000
--- a/src/components/index/TextFeature.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors, borders } from '../../styles/variables'
-
-const StyledTextFeature = styled.div`
- max-width: 600px;
- padding: 4rem 6rem;
- background: ${colors.white};
- border: ${borders.light};
- border-radius: 3px;
- max-width: 450px;
-
- @media (max-width: 500px) {
- padding: 5rem 2rem;
-
- .h3 {
- text-align: center;
- }
- }
-
- .h3 + p {
- margin: 0;
- }
-
- .img-container {
- display: block;
- height: 8rem;
- margin-bottom: 4rem;
- margin: 0 auto 4rem;
- }
-
- .btn {
- display: block;
- max-width: 240px;
- margin: 4rem auto 0;
- }
-`
-
-interface TextFeatureProps {
- img: JSX.Element
- title: string
- text: string | JSX.Element
- btnText?: string
- href?: string
-}
-
-const TextFeature = ({ img, title, text, btnText, href }: TextFeatureProps) => (
-
-
- {img}
-
-
- {title}
-
- {text}
- {btnText ? (
-
- {btnText}
-
- ) : null}
-
-)
-
-export default TextFeature
diff --git a/src/components/pricing/Plans.tsx b/src/components/pricing/Plans.tsx
deleted file mode 100644
index 779fc264b..000000000
--- a/src/components/pricing/Plans.tsx
+++ /dev/null
@@ -1,116 +0,0 @@
-import React from 'react'
-
-import { isEurope } from '../../utils/helpers'
-import { Link } from 'gatsby'
-import styled from '@emotion/styled'
-import { sizes, colors, borders } from '../../styles/variables'
-import BagGrey from '../../resources/bag-grey.svg'
-import ProfessionalBadge from '../../resources/open-source-badge-grey.svg'
-
-const Styled = styled.div`
- padding: 5rem 0;
-
- h2 {
- text-align: center;
- }
-
- .links {
- display: flex;
- justify-content: space-around;
- max-width: 900px;
- margin: 0 auto;
- padding: 2rem 0 5rem;
-
- @media (max-width: ${sizes.breakpoints.md}) {
- flex-direction: column;
-
- & > div:first-of-type {
- margin-bottom: 3rem;
- }
- }
-
- & > div {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- flex: 0 0 45%;
- padding: 4rem 4rem 2rem;
- background: ${colors.white};
- border: ${borders.light};
- border-radius: 3px;
- }
-
- img {
- display: block;
- height: 7.5rem;
- margin-bottom: 3rem;
- }
-
- p:last-of-type {
- margin-bottom: 3rem;
- }
-
- .btn {
- margin-bottom: 2rem;
- margin-right: 2rem;
- }
- }
-`
-
-const Plans = () => (
-
-
-
- Special Use Cases
-
-
-
-
-
-
Professional Open Source
-
Gitpod is free for up to 50 hours/month on any public repository.
-
- If you're a professional open-source developer and need more hours, you can apply to our free{' '}
-
- Professional Open Source
- {' '}
- plan.
-
-
-
-
- Apply Now
-
-
-
-
-
-
-
For Students
-
- Get the{' '}
-
-
- Student Unlimited
- {' '}
- plan for {isEurope() ? '€8' : '$9'}
- {' '}
- per month.
-
-
- Make sure your student email is set as your primary email on GitHub/GitLab. Please let us know if your educational institution
- is not correctly recognized.
-
-
-
-
- Get Verified as Student
-
-
-
-
-
-
-)
-
-export default Plans
diff --git a/src/components/pricing/PricingBoxes.tsx b/src/components/pricing/PricingBoxes.tsx
deleted file mode 100644
index 96797533b..000000000
--- a/src/components/pricing/PricingBoxes.tsx
+++ /dev/null
@@ -1,297 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { sizes, colors } from '../../styles/variables'
-import { PricingBoxProps } from '../PricingBox'
-import PopOver from '../PopOver'
-import PricingBox from '../PricingBox'
-import { isEurope } from '../../utils/helpers'
-import Cloud from '../../resources/self-hosted-cloud.png'
-import Tabs from './Tabs'
-import { Link } from 'gatsby'
-import ImageProvider from '../ImageProvider'
-
-const Styled = styled.div`
- h1 {
- margin-bottom: 6rem;
- text-align: center;
- }
-
- .pricing {
- padding: 0;
-
- &__boxes {
- display: flex;
- justify-content: center;
-
- @media (max-width: ${sizes.breakpoints.lg}) {
- flex-wrap: wrap;
- }
-
- @media (max-width: 1096px) {
- flex-wrap: wrap;
- justify-content: center;
- }
-
- @media (max-width: 650px) {
- flex-direction: column;
- align-items: center;
- }
- }
- }
-
- .container--1 {
- padding: 5rem 0 0;
- }
-`
-
-const selfHostedPlans: PricingBoxProps[] = [
- {
- title: 'Free',
- duration: 'Unlimited users',
- features: ['Unlimited Use', 'Private & Public Repos'],
- price: (
- <>
- {isEurope() ? '€0' : '$0'}
- >
- ),
- btnText: 'Install Now',
- btnBackground: true,
- link: '/self-hosted/#install',
- info: 'Limited Prebuilt Times'
- },
- {
- title: 'Professional',
- features: ['Unlimited Prebuilds', 'Shared Workspaces', 'Snapshots', 'Admin Dashboard', 'Unlimited Use', 'Private & Public Repos'],
- price: (
- <>
- {isEurope() ? '€18' : '$20'}
- >
- ),
- duration: 'Per user/month',
- btnText: 'Request license',
- link: '/enterprise-license/',
- areFeaturesBold: true,
- boldFeaturesCount: 4
- }
-]
-
-const plans: PricingBoxProps[] = [
- {
- title: 'Free',
- gatsbyImage: ,
- price: (
- <>
- {isEurope() ? '€0' : '$0'}
- >
- ),
- perUserMonth: true,
- features: [50 hours/month , 'Public Repos', 'Private Repos (30-Day Trial)']
- },
- {
- title: 'Personal',
- gatsbyImage: ,
- price: (
- <>
- {isEurope() ? '€8' : '$9'}
- >
- ),
- perUserMonth: true,
- features: [
- 100 hours/month ,
- 'Private & Public Repos',
-
- 4 Parallel Workspaces
- ,
-
- 30min Timeout
-
- ],
- btnText: 'Buy Now',
- link: 'https://gitpod.io/subscription/'
- },
- {
- title: 'Professional',
- gatsbyImage: ,
- price: (
- <>
- {isEurope() ? '€23' : '$25'}
- >
- ),
- perUserMonth: true,
- features: [
- Unlimited hours ,
- 'Private & Public Repos',
-
- 8 Parallel Workspaces
- ,
-
- 30min Timeout
-
- ],
- btnText: 'Buy Now',
- btnBackground: true,
- link: 'https://gitpod.io/subscription/',
- subAction: (
-
- Create Team
-
- )
- },
- {
- title: 'Unlimited',
- gatsbyImage: ,
- price: (
- <>
- {isEurope() ? '€35' : '$39'}
- >
- ),
- perUserMonth: true,
- features: [
- Unlimited hours ,
- 'Private & Public Repos',
-
- 16 Parallel Workspaces
- ,
-
- 1h Timeout
- ,
-
- 3h Timeout Boost
-
- ],
- btnText: 'Buy Now',
- link: 'https://gitpod.io/subscription/',
- subAction: (
-
- Create Team
-
- )
- }
-]
-
-const PricingContainer = styled.div`
- background-color: ${colors.white};
- border-top: 1px solid ${colors.offWhite2};
- padding: 3rem 0 6rem;
- min-height: 660px;
-
- .cards {
- position: relative;
- padding: 0rem 0 3rem;
-
- .hide {
- display: none;
- }
-
- .show {
- display: flex;
- flex-wrap: wrap;
- }
- }
-
- p {
- margin-top: 2rem;
- text-align: center;
- font-size: 120%;
- }
-
- .cloud-img {
- position: absolute;
- height: 20rem;
-
- @media (max-width: 840px) {
- display: none;
- }
-
- &--1 {
- top: 31px;
- left: 21%;
-
- @media (max-width: 1100px) {
- left: 19.5%;
- }
-
- @media (max-width: 960px) {
- left: 16%;
- }
-
- @media (max-width: 900px) {
- left: 14%;
- }
- }
-
- &--2 {
- bottom: -30px;
- right: 14.5%;
-
- @media (max-width: ${sizes.breakpoints.lg}) {
- bottom: -1px;
- }
-
- @media (max-width: 1100px) {
- right: 11.5%;
- }
-
- @media (max-width: 960px) {
- right: 8.5%;
- }
-
- @media (max-width: 960px) {
- right: 5%;
- }
- }
- }
-`
-
-export interface PricingBoxesProps {
- isRendered: boolean
- changeIsRendered: (bool: boolean) => void
-}
-
-const PricingBoxes = ({ isRendered, changeIsRendered }: PricingBoxesProps) => {
- return (
-
-
-
-
-
- Plans & Pricing
-
-
-
-
-
-
-
- {plans.map((plan, i) => (
-
- ))}
-
-
-
- {selfHostedPlans.map((plan, i) => (
-
- ))}
-
-
-
-
- Do you have any questions? Please, Get in Touch.
-
-
-
-
- )
-}
-
-export default PricingBoxes
diff --git a/src/components/pricing/PricingFAQs.tsx b/src/components/pricing/PricingFAQs.tsx
deleted file mode 100644
index 26d0356c4..000000000
--- a/src/components/pricing/PricingFAQs.tsx
+++ /dev/null
@@ -1,201 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { Link } from 'gatsby'
-import { isEurope } from '../../utils/helpers'
-import MasterCard from '../../resources/mastercard.svg'
-import Visa from '../../resources/visa.svg'
-
-const StyledSelfHostedFAQs = styled.section`
- h2 {
- text-align: center;
- }
-
- .faqs {
- display: flex;
- justify-content: space-between;
- max-width: 900px;
- margin: 0 auto;
- padding: 5rem 0;
-
- @media (max-width: 1040px) {
- flex-direction: column;
- }
-
- &__container {
- flex: 0 0 45%;
-
- @media (max-width: 1040px) {
- max-width: 600px;
- margin: 0 auto;
-
- &:not(:last-child) {
- margin-bottom: 10rem;
- }
- }
-
- & > div {
- @media(max-width: 400px) {
- padding: 0 2rem;
- }
-
- &:not(:last-child) {
- margin-bottom: 8rem;
- }
- }
- }
-
- img {
- height: 3.5rem;
- max-width: 8rem;
- &:not(:last-child) {
- margin-right: 2rem;
- }
- }
- }
-`
-
-const SelfHostedFAQs = ({ title }: { title: string }) => (
-
-
- {title} FAQ
-
-
- {title === 'Self-Hosted' ? (
- <>
-
-
-
Can I try Gitpod for free?
-
Of course! You can use Gitpod Self-Hosted on your own infrastructure for free for unlimited users.
-
- If you'd like to access additional features like unlimited prebuilds, shared workspaces, snapshots and an admin dashboard,
- you can upgrade to the Professional Plan at any time. Simply update your existing instance with a purchased license key.
- Self-hosted Gitpod licenses can currently only be purchased by request. Please request a license key{' '}
- here or Contact sales if you have any questions.
-
-
-
-
Do you offer discounts for educational institutions?
-
- Yes, qualified educational institutions may receive a special discount. Please visit{' '}
- Gitpod Education for more information or Contact Sales.
-
-
-
-
What is the difference between SaaS and Self-Hosted?
-
- If you choose Gitpod SaaS , we will manage and host Gitpod in the cloud for you. This means minimal setup
- efforts for you and secure data storage in the cloud. Gitpod SaaS is be the best solution for teams who want to get started
- immediately and don’t want to spend time on setup and operations.
-
-
- If you choose Gitpod Self-Hosted , you will manage and host Gitpod on your own instances. This means all
- data remains your infrastructure, as Gitpod can run behind corporate firewalls and on air-gapped networks.{' '}
- Gitpod Self-Hosted is the best solution for teams who want to keep full data control or use Gitpod in
- private networks.
-
-
-
-
-
-
Can I add more users to my plan at any time?
-
Yes, you can add as many users as you like to your plan at any time.
-
-
-
How can I install Self-Hosted?
-
- You can either install Gitpod Self-Hosted on Google Cloud Platform , AWS ,
- or on Vanilla Kubernetes . Enhanced support for Azure and OpenShift is
- coming soon. See Self-Hosted Installation for more information.
-
-
-
-
How can I pay?
-
- Currently, Gitpod Self-Hosted can only be purchased on request. Please request a license key{' '}
- here and we'll reach out to you. If you have any questions, please{' '}
- Contact sales.
-
-
All our plans can be paid via invoice.
-
-
-
Still have more questions?
-
- We are happy to answer them, please Get in Touch.
-
-
-
- >
- ) : (
- <>
-
-
-
Can I always use Gitpod for free?
-
- Yes! Gitpod is always for free for public repositories for up to 50h per month. If you need more hours or would like to
- unlock more features, you can upgrade your subscription at any time. If you’re a professional open-source developer and need
- more hours, you can apply to our free Professional Open Source plan.
-
-
-
-
Do you offer discounts for students and educational institutions?
-
- Yes, qualified educational institutions may receive a special discount. Please visit{' '}
- Gitpod Education for more information or Contact Sales. If you are a
- student, you may use the Student Unlimited Plan for {isEurope() ? '€8' : '$9'} per month (usually{' '}
- {isEurope() ? '€35' : '$39'}). See Gitpod for Students for more information.
-
-
-
-
How can I pay?
-
All our plans can only be paid via credit card.
-
-
-
-
-
-
-
-
-
Can I create a team account?
-
- Sure, if you would like to mange subscriptions for a whole team on a single invoice, you can create a{' '}
- team subscription.
-
-
- In case you need more information on how to setup a team subscription, visit{' '}
- gitpod.io/docs/teams.
-
-
-
-
Can I change my subscription at any time?
-
- Yes, you can upgrade or downgrade whenever you want on gitpod.io/subscription .
- Your billing cycle starts with the creation date of your subscription. After 30 days it will automatically renew itself.
-
-
- If you choose to upgrade, the pricing difference will be added to your next month’s invoice. If you choose to downgrade,
- you’ll be credited on your next month’s invoice.
-
-
-
-
What if I decide to cancel?
-
- If you wish to stop using Gitpod, you may cancel your subscription at any time. Your cancellation will take into effect
- after that month’s billing cycle.
-
-
-
-
Still have more questions?
-
- We are happy to answer them, please Get in Touch.
-
-
-
- >
- )}
-
-
-)
-
-export default SelfHostedFAQs
diff --git a/src/components/pricing/Tabs.tsx b/src/components/pricing/Tabs.tsx
deleted file mode 100644
index 363712e0b..000000000
--- a/src/components/pricing/Tabs.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { colors } from '../../styles/variables'
-import { PricingBoxesProps } from './PricingBoxes'
-import { Link } from 'gatsby'
-
-const Tab = styled(Link)<{ isRendered: boolean }>`
- display: block;
- padding: 1.3rem 2rem;
- font-size: 18px;
- color: ${colors.textLight};
- min-width: 15rem;
- text-align: center;
- border: 1px solid ${colors.offWhite2};
- border-radius: 6px 6px 0 0;
- border-bottom-color: transparent;
- margin-bottom: -1px;
- cursor: pointer;
- transition: all .05s;
-
- &:first-of-type {
- background-color: ${({ isRendered }) => isRendered ? colors.offWhite2 : colors.white};
- font-weight: ${({ isRendered }) => isRendered ? '400' : '600'};
- border-right: none;
- color: ${({ isRendered }) => isRendered ? colors.textLight : colors.textDark};
- }
-
- &:last-of-type {
- background-color: ${({ isRendered }) => isRendered ? colors.white : colors.offWhite2};
- font-weight: ${({ isRendered }) => isRendered ? '600' : '400'};
- border-left: none;
- color: ${({ isRendered }) => isRendered ? colors.textDark : colors.textLight};
- }
-
- body.user-is-tabbing &:focus {
- outline: none;
- border: 1px solid #1AA6E4;;
- }
-
- &:hover {
- color: ${colors.link};
- }
-`
-
-const Tabs = ({ isRendered, changeIsRendered }: PricingBoxesProps) => (
-
- changeIsRendered(false)}
- to="/pricing/#"
- >
- SaaS
-
- changeIsRendered(true)}
- to="/pricing/#self-hosted"
- >
- Self-Hosted
-
-
-)
-
-export default Tabs
diff --git a/src/components/screencasts/Hero.tsx b/src/components/screencasts/Hero.tsx
deleted file mode 100644
index 49567ec62..000000000
--- a/src/components/screencasts/Hero.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-
-const StyledHero = styled.div`
- text-align: center;
- padding: 5rem;
-
- p {
- margin-top: 2rem;
- }
-`
-
-const Hero = () => (
-
-
-
- Screencasts
-
- Learn how to use Gitpod with this series of short videos.
-
-
-)
-
-export default Hero
diff --git a/src/components/screencasts/NextUp.tsx b/src/components/screencasts/NextUp.tsx
deleted file mode 100644
index 2b7550de4..000000000
--- a/src/components/screencasts/NextUp.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from 'react'
-import styled from '@emotion/styled'
-import Screencast, { ScreencastProps } from './Screencast'
-
-const StyledNextUp = styled.div`
- padding: 0 0 10rem;
- display: flex;
- flex-direction: column;
- align-items: center;
-`
-
-interface NextUpProps {
- nextScreencast: ScreencastProps | null
-}
-
-const NextUp = ({ nextScreencast }: NextUpProps) => (
- nextScreencast ? (
-
-
- Next up…
-
-
-
- ) : null
-)
-
-export default NextUp
diff --git a/src/components/screencasts/RelatedDocs.tsx b/src/components/screencasts/RelatedDocs.tsx
deleted file mode 100644
index 4ec9ef8c0..000000000
--- a/src/components/screencasts/RelatedDocs.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import { Link } from 'gatsby'
-
-export interface RelatedDoc {
- title: string;
- path: string;
-}
-
-const StyledRelatedDocs = styled.div`
- margin-bottom: 10rem;
-`
-
-const RelatedDocs = ({ relatedDocs }: {relatedDocs: RelatedDoc[]}) => (
-
- Related documentation:
- {
- relatedDocs.map(({path, title}: RelatedDoc, i) => (
- <>
- {title}
- {
- relatedDocs.length > 0 && relatedDocs[i + 1] && !relatedDocs[i + 2] ? ' and ' : relatedDocs.length > 0 && relatedDocs[i + 1] ? ', ' : null
- }
- >
- ))
- }
-
-)
-
-export default RelatedDocs
diff --git a/src/components/screencasts/Screencast.tsx b/src/components/screencasts/Screencast.tsx
deleted file mode 100644
index 8a73528ef..000000000
--- a/src/components/screencasts/Screencast.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import ImageProvider from '../ImageProvider'
-import { Link } from 'gatsby'
-// @ts-ignore
-import hyphenate from '../../utils/hyphenate'
-import { RelatedDoc } from './RelatedDocs'
-import { colors, borders } from '../../styles/variables'
-
-const StyledScreencast = styled(Link)`
- display: block;
- padding: 2rem;
- text-align: center;
- border-radius: 3px;
- max-width: 500px;
- min-width: 400px;
- border: 1px solid #eee;
- color: ${colors.text};
- transition: all .2s;
-
- &:hover {
- h3,
- .h3 {
- color: inherit;
- }
- }
-
- @media(max-width: 440px) {
- min-width: 330px;
- }
-
- @media(max-width: 350px) {
- min-width: 100%;
- }
-
- h3,
- .h3 {
- font-size: 1.9rem;
- margin: 2rem 0 .8rem;
- transition: all .2s;
- }
-
- .duration {
- font-size: 1.5rem;
- }
-`
-
-export interface ScreencastProps {
- title: string;
- description: string;
- youtubeId: string;
- duration: number;
- tile: string;
- relatedDocs: RelatedDoc[]
- headingType?: 'h3'
-}
-
-const Screencast = ({tile, title, duration, headingType}: ScreencastProps) => (
-
-
- { headingType === 'h3' ? {title} : {title} }
- Duration: {duration}s
-
-)
-
-export default Screencast
diff --git a/src/components/screencasts/Screencasts.tsx b/src/components/screencasts/Screencasts.tsx
deleted file mode 100644
index 2898a88d7..000000000
--- a/src/components/screencasts/Screencasts.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import Screencast, { ScreencastProps } from './Screencast'
-
-const StyledScreencasts = styled.div`
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- max-width: 1000px;
- margin: auto;
- padding: 5rem 0;
-
- & > * {
- flex: 0 0 48%;
- margin: 0 auto 5rem;
- }
-`
-
-const Screencasts = ({ screencasts }: { screencasts: ScreencastProps[] }) => (
-
-
- {
- screencasts.map(
- (screencast: ScreencastProps, i) =>
- )
- }
-
-
-)
-
-export default Screencasts
diff --git a/src/components/screencasts/YouTubeEmbed.tsx b/src/components/screencasts/YouTubeEmbed.tsx
deleted file mode 100644
index 6bfe2a370..000000000
--- a/src/components/screencasts/YouTubeEmbed.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-import React from 'react'
-import styled from '@emotion/styled'
-
-const StyledEmbed = styled.div`
- position: relative;
- padding-bottom: 62.5%;
- height: 0;
- margin: 4rem auto 6rem;
- max-width: 1040px;
- box-shadow: 0 2rem 4rem rgba(0,0,0, .3);
-
- @media(min-width: 1340px) {
- padding-bottom: 40.5%;
- }
-
- @media(min-width: 1940px) {
- padding-bottom: 30.5%;
- }
-
- @media(min-width: 3800px) {
- padding-bottom: 15%;
- }
-`
-
-interface YouTubeEmbedProps {
- embedId: string
-}
-
-const YouTubeEmbed = ({embedId}: YouTubeEmbedProps) => (
-
- VIDEO
-
-)
-
-export default YouTubeEmbed
diff --git a/src/components/self-hosted/Install.tsx b/src/components/self-hosted/Install.tsx
deleted file mode 100644
index f3ef850c8..000000000
--- a/src/components/self-hosted/Install.tsx
+++ /dev/null
@@ -1,135 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import Kubernetes from '../../resources/kubernetes.svg'
-import { colors, sizes, borders } from '../../styles/variables'
-import GoogleCloudLogo from '../../resources/google-cloud-logo.svg'
-import AWS from '../../resources/aws.svg'
-import { Link } from 'gatsby'
-
-interface InstallProps {
- title: string | JSX.Element
- img: string
- alt: string
- linkPath: string
- btnBackground?: boolean
-}
-
-const installs: InstallProps[] = [
- {
- title: 'Google Cloud Platform',
- img: GoogleCloudLogo,
- alt: 'Google Cloud logo',
- linkPath: 'install-on-gcp-script'
- },
- {
- title: 'Amazon Web Services',
- img: AWS,
- alt: 'AWS logo',
- linkPath: 'install-on-aws-script'
- },
- {
- title: 'Vanilla Kubernetes',
- img: Kubernetes,
- alt: 'Kubernetes logo',
- linkPath: 'install-on-kubernetes'
- }
-]
-
-const StyledSection = styled.section`
- text-align: center;
-
- /* ------------------------------------------- */
- /* ----- Section Install ----- */
- /* ------------------------------------------- */
-
- .install {
- display: flex;
- justify-content: space-between;
- max-width: 110rem;
- margin: 0 auto;
- padding: 4rem 0 5rem;
-
- @media (max-width: 900px) {
- flex-direction: column;
- align-items: center;
- padding: 2rem;
- }
-
- &__box {
- display: flex;
- flex-direction: column;
- flex: 0 0 30%;
- max-width: 32rem;
- padding: 3rem 1rem;
- background: ${colors.white};
- border: ${borders.light};
- border-radius: 3px;
-
- @media (max-width: ${sizes.breakpoints.lg}) {
- margin-bottom: 5rem;
- }
-
- @media (max-width: 900px) {
- min-width: 28rem;
- }
-
- @media (max-width: 320px) {
- min-width: 25rem;
- }
-
- .text {
- flex: 1;
- }
-
- .btn {
- align-self: center;
- }
-
- h3 {
- font-size: 1.9rem;
- }
-
- img {
- height: 10rem;
- width: 10rem;
- margin-bottom: 3rem;
- }
-
- .btn {
- margin-top: 2rem;
- }
- }
- }
-
- & + p {
- @media (max-width: ${sizes.breakpoints.lg}) {
- max-width: 70rem;
- margin: 0 auto;
- }
- }
- }
-`
-
-const Install = () => (
-
-
-
Install Gitpod Self-Hosted
-
- {installs.map(({ title, img, alt, linkPath, btnBackground }: InstallProps, i) => (
-
-
-
-
{title}
-
-
- Install Now
-
-
- ))}
-
-
-
-)
-
-export default Install
diff --git a/src/pages/404.tsx b/src/pages/404.tsx
deleted file mode 100644
index ff6237bdc..000000000
--- a/src/pages/404.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import IndexLayout from '../layouts'
-import NotFoundImage from '../resources/icon-404.png'
-import { sizes } from '../styles/variables'
-
-const StyledNotFoundPage = styled.div`
- height: 75vh;
- display: flex;
- align-items: center;
-
- h1 {
- text-align: center;
- margin: 0 auto;
- }
-
- img {
- height: 10rem;
- margin-right: 5rem;
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- display: block;
- margin: 0 auto 5rem;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- height: 7rem;
- }
- }
-`
-
-const NotFoundPage: React.SFC<{}> = () => (
-
-
-
- Sorry, this page couldn’t be found.
-
-
-
-)
-
-export default NotFoundPage
diff --git a/src/pages/about.tsx b/src/pages/about.tsx
deleted file mode 100644
index b3ddde3ab..000000000
--- a/src/pages/about.tsx
+++ /dev/null
@@ -1,301 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import IndexLayout from '../layouts'
-import { colors, sizes, shadows } from '../styles/variables'
-import ImageProvider from '../components/ImageProvider'
-// import gitpodWallpaper2 from '../resources/gitpod_wallpaper2.jpeg'
-import MoreInfo from '../components/MoreInfo'
-import { Link } from 'gatsby'
-
-const StyledAboutPage = styled.div`
- /* ------------------------------------------- */
- /* ----- Banner ----- */
- /* ------------------------------------------- */
-
- .banner {
- display: flex;
- padding: 16rem 0;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- flex-direction: column;
- align-items: center;
-
- & > div {
- width: 100%;
- }
- }
-
- .h3 {
- font-weight: 400;
- color: ${colors.textLight};
- }
-
- h1 {
- font-size: 5rem;
- margin: -2rem 0 2rem;
- letter-spacing: 2px;
- }
-
- .text {
- font-size: ${sizes.font.btnNormal};
- }
-
-
- &__img {
- &-container {
- display: flex;
- justify-content: flex-end;
- width: 40%;
- height: 23rem;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- height: 19rem;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- width: 100%;
- justify-content: center;
- }
- }
- }
-
- &__text-box {
- width: 60%;
- padding-left: 8rem;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- text-align: center;
- width: 100%;
- padding: 5rem 0;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- br {
- display: none;
- }
- }
- }
- }
-
- /* ------------------------------------------- */
- /* ----- Section By Developers ----- */
- /* ------------------------------------------- */
-
- .developers {
- display: flex;
- justify-content: space-between;
- align-items: center;
- max-width: 80rem;
- margin: 0 auto;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- flex-direction: column;
-
- & > div {
- &:not(:last-of-type) {
- margin-bottom: 5rem;
- }
- }
- }
-
- &__text-box {
- @media(min-width: calc(${sizes.breakpoints.md} + 1px)) {
- width: 60%;
- }
- }
-
- &__img {
- &-container {
- @media(min-width: 801px) {
- width: 30%;
- }
- }
- }
-
- p {
- font-size: ${sizes.font.btnNormal};
- }
-
- }
-
- /* ------------------------------------------- */
- /* ----- Section That's Us ----- */
- /* ------------------------------------------- */
-
- .about {
-
- h2 {
- @media(max-width: 910px) {
- text-align: center;
- }
- }
-
- &__container {
- display: flex;
-
- @media(max-width: 910px) {
- flex-direction: column;
- align-items: center;
- }
- }
-
- &__box {
- padding: 3rem 4rem 4rem;
- width: 50%;
- min-width: 40rem;
- box-shadow: ${shadows.light};
- border-radius: 3px;
-
- @media(max-width: 910px) {
- &:not(:last-child) {
- margin-bottom: 3rem;
- }
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- min-width: 30rem;
- }
-
- img {
- display: block;
- width: 100%;
- border-radius: 3px;
- }
-
- &:last-of-type {
- background: ${colors.white};
- }
- }
-
- }
-
- .statement {
- text-align: center;
- padding: 10rem 0;
- font-weight: 300;
-
- &__fox {
- height: 7rem;
- margin-left: 3rem;
- margin-bottom: -2rem;
- }
- &__logo {
- height: 1.5rem;
- margin-left: -4rem;
- margin-bottom: -2rem;
- }
- }
-`
-
-const AboutPage: React.SFC<{}> = ({data}) => (
-
-
- {/* ----- Banner ----- */}
-
-
-
- {/* ----- By Developers for Developers ----- */}
-
-
-
-
-
Democratizing Software Development
-
With Gitpod, we set out to streamline how software is written today. We make software development more accessible with instant, automated, and ready-to-code development environments.
-
-
-
-
-
-
-
-
-
- {/* ----- Section That's Us ----- */}
-
-
-
- That’s Us
-
-
-
-
⚓️ About Gitpod
-
We have built developer tools, created programming languages and successfully grew open source communities over the last 10 years. We are developers ourselves - with Gitpod we want to capitalize on our learnings and build a company that simplifies the lives of all developers. Experienced international investors support us on our journey. We are a fully distributed team with humans from all over the world 🇦🇺 🇧🇷 🇨🇦 🇫🇷 🇩🇪 🇬🇷 🇵🇰 🇷🇺 🇺🇸
-
-
-
-
✊ Values
-
Values are important to us. We are developer-led and aim for a frictionless experience when interacting with our product, our company and our brand: no hurdles, no BS, no unnecessary extra steps. We believe in the benefits of an open culture. We are open minded, inclusive, transparent and curious. We always remain students of the game, not masters of the game. We have opinions, but are not opinionated. We integrate, don't dictate. We are also not as diverse as we would like to be. Help us change that and join us!
-
-
-
-
-
- It's our mission to make developers' life easier!
-
-
-
-
-
-
-
-
-
-)
-
-export default AboutPage
-
-export const query = graphql`
- query {
- team: file(relativePath: { eq: "team_2020.jpg" }) {
- childImageSharp {
- fluid(quality: 100) {
- ...GatsbyImageSharpFluid
- }
- }
- }
- wallpaper: file(relativePath: { eq: "gitpod_wallpaper1.jpg" }) {
- childImageSharp {
- fluid(quality: 100) {
- ...GatsbyImageSharpFluid
- }
- }
- }
- doubleArrows: file(relativePath: { eq: "double-arrows.png" }) {
- childImageSharp {
- fluid(quality: 100) {
- ...GatsbyImageSharpFluid
- }
- }
- }
- }
-`
diff --git a/src/pages/blog.tsx b/src/pages/blog.tsx
deleted file mode 100644
index 5a3f040d9..000000000
--- a/src/pages/blog.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import styled from '@emotion/styled'
-import { sizes } from '../styles/variables'
-import { graphql } from 'gatsby'
-import PostPreview from '../components/blog/PostPreview'
-import BackToTopButton from '../components/BackToTopButton'
-import { Posts } from '../components/blog/Posts'
-// import NewsletterForm from '../components/NewsletterForm'
-
-const StyledBlogPage = styled.div`
- /* ------------------------------------------- */
- /* ----- Section Posts ----- */
- /* ------------------------------------------- */
-
- h1 {
- margin-bottom: 3rem;
- }
-
- .pattern {
- padding: 10rem 0 5rem;
- text-align: center;
- }
-
- .post {
- padding: 7rem 0;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- padding: 5rem 0;
- }
- }
-`
-
-export const query = graphql`
- query {
- allMarkdownRemark(filter: {
- fileAbsolutePath: {
- glob: "**/blog/*"
- }
- }) {
- edges {
- node {
- fields {
- slug
- }
- timeToRead
- fileAbsolutePath
- excerpt
- headings {
- value
- }
- frontmatter {
- title
- image
- date
- author
- }
- }
- }
- }
- }
-`
-
-interface BlogPageProps {
- data: {
- allMarkdownRemark: {
- edges: BlogData[];
- }
- }
-}
-
-
-interface BlogData {
- node: {
- fields: {
- slug: string
- },
- timeToRead: string,
- fileAbsolutePath: string,
- excerpt: string,
- headings: {
- value: string
- },
- frontmatter: {
- title: string
- image: string
- date: string
- author: string
- }
- }
-}
-
-const BlogPage: React.SFC = (props) => {
-
- const posts = props.data.allMarkdownRemark.edges.sort((a, b) =>
- Date.parse(b.node.frontmatter.date) - Date.parse(a.node.frontmatter.date));
-
- return (
-
-
-
- {/* ----- Section Posts ----- */}
-
-
-
-
Discover Articles and Tutorials about Gitpod
-
-
-
-
-
-
Discover Articles and Tutorials about Gitpod
-
- {posts.map(
- post =>
- )}
-
-
-
-
- {/* ----- Section Newsletter ----- */}
- {/* */}
-
-
-
-
- )
-}
-
-export default BlogPage
diff --git a/src/pages/careers.tsx b/src/pages/careers.tsx
deleted file mode 100644
index 83a4f7e77..000000000
--- a/src/pages/careers.tsx
+++ /dev/null
@@ -1,609 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import styled from '@emotion/styled'
-import FeaturesSection from '../components/FeaturesSection'
-import { FeatureItemProps } from '../components/FeatureItem'
-import Line from '../resources/line.svg'
-import People from '../resources/people.svg'
-import Remote from '../resources/remote.svg'
-import Mission from '../resources/mission.svg'
-import { sizes } from '../styles/variables'
-import ExpandableJob, { ExpandableJobProps } from '../components/careers/ExpandableJob'
-import ImageProvider from '../components/ImageProvider'
-
-const StyledCareersPage = styled.div`
- /* --------------------------------------------- */
- /* ----- Intro ----- */
- /* --------------------------------------------- */
-
- .intro {
- text-align: center;
-
- p {
- margin: 2rem 0;
- }
- }
-
- /* --------------------------------------------- */
- /* ----- Team ----- */
- /* --------------------------------------------- */
-
- .team {
- display: flex;
- justify-content: space-between;
- align-items: center;
-
- @media(max-width: 1040px) {
- flex-direction: column;
- max-width: 700px;
- margin: 0 auto;
- text-align: center;
- }
-
- .img-container {
- flex: 0 0 50%;
- }
-
- img {
- max-width: 100%;
- border-radius: 3px;
-
- @media(max-width: 1040px) {
- margin-bottom: 4rem;
- }
- }
-
- .text {
- flex: 0 0 40%;
- font-size: ${sizes.font.h4};
- }
- }
-
- /* --------------------------------------------- */
- /* ----- Jobs ----- */
- /* --------------------------------------------- */
-
- .jobs {
- h2 {
- text-align: center;
- }
-
- .text {
- max-width: 720px;
- text-align: center;
- margin: auto;
- }
-
- .pattern-bg {
- margin-top: 12rem;
- }
- }
-
- .no-fit {
- padding: 10rem 0;
- max-width: 880px;
- margin: 0 auto;
- text-align: center;
- font-size: ${sizes.font.h4};
- }
-`
-
-const features: FeatureItemProps[] = [
- {
- title: "Open",
- text: "We are open minded, transparent and curious. We remain students of the game, not masters of the game.",
- img: Line,
- alt: 'Line'
- },
- {
- title: "Developer-first",
- text: "Developers architect our future. We are developers ourselves and built Gitpod to make lives of developers easier.",
- img: People,
- alt: 'People connected to each other'
- },
- {
- title: "Fully remote",
- text: "You can work from anywhere and schedule your working hours the way it fits best for you. We make sure you are all set and will treat you well.",
- img: Remote,
- alt: 'Wifi'
- },
- {
- title: "Frictionless",
- text: "Everybody should have a frictionless experience when interacting with our product, our company and our brand: no hurdles, no BS, no unnecessary extra steps.",
- img: Mission,
- alt: 'Two Mountains: One with a flag on it.'
- },
-]
-
-export const jobs: ExpandableJobProps[] = [
- {
- title: 'Software Engineer',
- intro: `You are just starting out as a software engineer, and are super motivated and curious. This might be for you.`,
- paragraphs: `We are a highly motivated, fully-remote team, organized in a flat hierarchy, and led by technical founders. We love open-source, have started and lead many popular open-source projects, and contribute to many others. In this fashion, we present at international conferences and collaborate openly around the globe.
- We celebrate diversity and strive for an equal, inclusive, empathetic and welcoming environment. Bringing diversity to the team is a big plus. If you are part of a marginalised community, and are not sure if you should apply, please get in touch.`,
- lists: [
- {
- title: 'As part of the team you will ...',
- items: [
- 'Directly impact users. Gitpod has little fat to trim and changes directly affect users. We always have our users in mind and focus on making Gitpod work for them, not some abstract potential future requirement.',
- 'Be a "jack of all trades, master of some". As a small team we favour generalists. You might work on React code, or dive into the backend. There is loads of room to find your passion and see everything that makes the platform tick.',
- 'Solve technical problems. Be it on the backend where we live right on the edge of what Kubernetes, containers and Linux can do; or on the frontend where we deeply care about performance and quality across browsers and platforms. Gitpod is not your typical Kubernetes web app and provides very unique problems you`d be unlikely to come across elsewhere.',
- 'Co-own the product and work self-directed. We work with a very flat hierarchy, organizing our tasks in iterations with a lot of freedom.',
- 'Work with the community and in the open. Our DNA is deeply rooted in open source and we are building Gitpod in public. We expect the same from you.']
- },
- {
- title: 'You will be a great fit if ...',
- items: [
- 'You share our values. We are developer-led and aim for a frictionless experience when interacting with our product, our company and our brand: no hurdles, no BS, no unnecessary extra steps. We are open minded, inclusive, transparent and curious. We always remain students of the game, not masters of the game. We have opinions, but are not opinionated. We integrate, don`t dictate.',
- 'You care for our mission. Developers architect our future. Gitpod democratises software development by making it more accessible to all developers. Ready-to-code, cloud-based development environments streamline how software is written today.',
- 'You enjoy working across the front- and backend. We hardly ever have a task that is clear cut along fontend/backend lines. If React is your thing, you should feel comfortable enough to have a look at the server. If Kubernetes is your thing, you should still feel comfortable enough to make that change on the dashboard. You do not think "not my department", but welcome the opportunity to venture out of your comfort zone.',
- 'You have experience shipping code in production. Your code is mostly ready for prime time, and you know how to test it. You understand the difference between "making something work" and "making something work reliably". You have read other people`s code, know how to make yourself at home and understand that code is read way more often than it`s written. You understand that every new dependency comes at a cost, as do lines of code.',
- 'You are product minded. You enjoy using what you`ve helped build, and still pay attention to things that feel off. You can empathize with other users and understand how they might see things differently, or that messaging that`s completely clear to you might be unintelligible to others. You are eager to understand why things are not working for others and quickly act when unexpected things happen.',
- 'You are a good communicator. We work remote, our users are remote too. You value writing and express yourself concisely. You may hold strong opinions, but you are not ideological. You communicate thoughtfully, always assume others speak in good faith, aim to understand opposing perspectives and compromise when needed.',
- ]
- },
- {
- title: 'Our stack:',
- items: [
- 'Gitpod is a distributed application running on Kubernetes. Services are written in Go and TypeScript (Node.JS), while all things frontend are React and TypeScript. We communicate using gRPC, RabbitMQ and JSON-RPC. We develop Gitpod in Gitpod, build using leeway and werft and automatically deploy preview environments for every branch.',
- 'Browser-based productivity tools for the rest. Gitpod for development, GitHub for issue tracking and as git hoster, Slack for comms, Figma for design, Notion as our virtual HQ, Pitch for slides, Loom for screencasts and a few others.'
- ]
- },
- {
- title: 'We care about you',
- items: [
- 'Work and life',
- '6 weeks paid time off',
- 'Fully-remote environment & flexible working hours',
- 'Competitive salary and equity package',
- 'Monthly physical health stipend for your local gym, home-gym equipment or Freeletics',
- 'Monthly mental health stipend to support your 🧘♀️',
- 'Blinkist, The Atlantic account and other educational budget',
- 'Premium work-from-home equipment (Macbook Pro, standing desk, monitor, webcam, mic)',
- ]
- },
- ],
- textAfterTheLists: '',
- rendered: false,
- date: '2021-01-26T14:00:00.000Z'
- },
- {
- title: 'Senior Software Engineer (Full-Stack)',
- intro: `We at Gitpod build tools that require a view across the stack.`,
- paragraphs: `We are a highly motivated, fully-remote team, organized in a flat hierarchy, and led by technical founders. We love open-source, have started and lead many popular open-source projects, and contribute to many others. In this fashion, we present at international conferences and collaborate openly around the globe.
- We celebrate diversity and strive for an equal, inclusive, empathetic and welcoming environment. Bringing diversity to the team is a big plus. If you are part of a marginalised community, and are not sure if you should apply, please get in touch.`,
- lists: [
- {
- title: 'As part of the team you will ...',
- items: [
- 'Directly impact users. Gitpod has little fat to trim and changes directly affect users. We always have our users in mind and focus on making Gitpod work for them, not some abstract potential future requirement.',
- 'Be a "jack of all trades, master of some". As a small team we favour generalists. You might work on React code, dive deeply into Kubernetes or read the Linux sources. There is loads of room to find your passion and see everything that makes the platform tick.',
- 'Solve hard technical problems. Be it on the backend where we live right on the edge of what Kubernetes, containers and Linux can do; or on the frontend where we deeply care about performance and quality across browsers and platforms. Gitpod is not your typical Kubernetes web app and provides very unique problems you`d be unlikely to come across elsewhere.',
- 'Co-own the product and work self-directed. We work with a very flat hierarchy, organizing our tasks in iterations with a lot of freedom.',
- 'Work with the community and in the open. Our DNA is deeply rooted in open source and we are building Gitpod in public. We expect the same from you.']
- },
- {
- title: 'You will be a great fit if ...',
- items: [
- 'You share our values. We are developer-led and aim for a frictionless experience when interacting with our product, our company and our brand: no hurdles, no BS, no unnecessary extra steps. We are open minded, inclusive, transparent and curious. We always remain students of the game, not masters of the game. We have opinions, but are not opinionated. We integrate, don`t dictate.',
- 'You care for our mission. Developers architect our future. Gitpod democratises software development by making it more accessible to all developers. Ready-to-code, cloud-based development environments streamline how software is written today.',
- 'You enjoy working across the front- and backend. We hardly ever have a task that is clear cut along fontend/backend lines. If React is your thing, you should feel comfortable enough to have a look at the server. If Kubernetes is your thing, you should still feel comfortable enough to make that change on the dashboard. You do not think "not my department", but welcome the opportunity to venture out of your comfort zone.',
- 'You enjoy building distributed systems. That means understanding their idiosyncrasies, and wallowing in the fact that anyone elses computer can break yours. You don`t blindly follow trends, but have a keen eye for stable and pragmatic solutions. You have developed and interacted with distributed systems in the real world, have seen them fail and fixed them.',
- 'You have experience shipping code in production. Your code is ready for prime time, and you don`t expect others to test it thoroughly for you. You understand the difference between "making something work" and "making something work reliably". You have read other people`s code, know how to make yourself at home and understand that code is read way more often than it`s written. You understand that every new dependency comes at a cost, as do lines of code.',
- 'You are product minded. You enjoy using what you`ve helped build, and still pay attention to things that feel off. You can empathize with other users and understand how they might see things differently, or that messaging that`s completely clear to you might be unintelligible to others. You are eager to understand why things are not working for others and quickly act when unexpected things happen.',
- 'You are a good communicator. We work remote, our users are remote too. You value writing and express yourself concisely. You may hold strong opinions, but you are not ideological. You communicate thoughtfully, always assume others speak in good faith, aim to understand opposing perspectives and compromise when needed.',
- ]
- },
- {
- title: 'Our stack:',
- items: [
- 'Gitpod is a distributed application running on Kubernetes. Services are written in Go and TypeScript (Node.JS), while all things frontend are React and TypeScript. We communicate using gRPC, RabbitMQ and JSON-RPC. We develop Gitpod in Gitpod, build using leeway and werft and automatically deploy preview environments for every branch.',
- 'Browser-based productivity tools for the rest. Gitpod for development, GitHub for issue tracking and as git hoster, Slack for comms, Figma for design, Notion as our virtual HQ, Pitch for slides, Loom for screencasts and a few others.'
- ]
- },
- {
- title: 'We care about you',
- items: [
- 'Work and life',
- '6 weeks paid time off',
- 'Fully-remote environment & flexible working hours',
- 'Competitive salary and equity package',
- 'Monthly physical health stipend for your local gym, home-gym equipment or Freeletics',
- 'Monthly mental health stipend to support your 🧘♀️',
- 'Blinkist, The Atlantic account and other educational budget',
- 'Premium work-from-home equipment (Macbook Pro, standing desk, monitor, webcam, mic)',
- ]
- },
- ],
- textAfterTheLists: '',
- rendered: false,
- date: '2021-01-26T14:00:00.000Z'
- },
- {
- title: 'Senior Software Engineer (Workspace Runtime)',
- intro: `Workspaces are at the very heart of Gitpod. We want to provide best-in-class functionality by integrating deeply with cloud-native container tech. If that sounds like your cup of tea, have a look.`,
- paragraphs: `We are a highly motivated, fully-remote team, organized in a flat hierarchy, and led by technical founders. We love open-source, have started and lead many popular open-source projects, and contribute to many others. In this fashion, we present at international conferences and collaborate openly around the globe.
- We celebrate diversity and strive for an equal, inclusive, empathetic and welcoming environment. Bringing diversity to the team is a big plus. If you are part of a marginalised community, and are not sure if you should apply, please get in touch.`,
- lists: [
- {
- title: 'As part of the team you will ...',
- items: [
- 'Directly impact users. Gitpod has little fat to trim and changes directly affect users. We always have our users in mind and focus on making Gitpod work for them, not some abstract potential future requirement.',
- 'Be a "jack of all trades, master of some". As a small team we favour generalists. You might work on React code, dive deeply into Kubernetes or read the Linux sources. There is loads of room to find your passion and see everything that makes the platform tick.',
- 'Solve hard technical problems. Be it on the backend where we live right on the edge of what Kubernetes, containers and Linux can do; or on the frontend where we deeply care about performance and quality across browsers and platforms. Gitpod is not your typical Kubernetes web app and provides very unique problems you`d be unlikely to come across elsewhere.',
- 'Co-own the product and work self-directed. We work with a very flat hierarchy, organizing our tasks in iterations with a lot of freedom.',
- 'Work with the community and in the open. Our DNA is deeply rooted in open source and we are building Gitpod in public. We expect the same from you.']
- },
- {
- title: 'You will be a great fit if ...',
- items: [
- 'You share our values. We are developer-led and aim for a frictionless experience when interacting with our product, our company and our brand: no hurdles, no BS, no unnecessary extra steps. We are open minded, inclusive, transparent and curious. We always remain students of the game, not masters of the game. We have opinions, but are not opinionated. We integrate, don`t dictate.',
- 'You care for our mission. Developers architect our future. Gitpod democratises software development by making it more accessible to all developers. Ready-to-code, cloud-based development environments streamline how software is written today.',
- 'You work on the intersection between Kubernetes and Linux. You understand deeply how containers are built, and how the OCI/CNCF landscape works. You have seen the nitty gritty of Kubernetes, interacted with it\'s API (e.g. written a controller), and are aware of some of its idiosyncrasies. You have some understanding of the Kubernetes integrations, e.g. CRI, CSI or CNI. You don\'t mind reading into the Linux, Kubernetes or runc source code and may have done that in the past.',
- 'You enjoy building distributed systems. That means understanding their idiosyncrasies, and wallowing in the fact that anyone elses computer can break yours. You don`t blindly follow trends, but have a keen eye for stable and pragmatic solutions. You have developed and interacted with distributed systems in the real world, have seen them fail and fixed them.',
- 'You have experience shipping code in production. Your code is ready for prime time, and you don`t expect others to test it thoroughly for you. You understand the difference between "making something work" and "making something work reliably". You have read other people`s code, know how to make yourself at home and understand that code is read way more often than it`s written. You understand that every new dependency comes at a cost, as do lines of code.',
- 'You are product minded. You enjoy using what you`ve helped build, and still pay attention to things that feel off. You can empathize with other users and understand how they might see things differently, or that messaging that`s completely clear to you might be unintelligible to others. You are eager to understand why things are not working for others and quickly act when unexpected things happen.',
- 'You are a good communicator. We work remote, our users are remote too. You value writing and express yourself concisely. You may hold strong opinions, but you are not ideological. You communicate thoughtfully, always assume others speak in good faith, aim to understand opposing perspectives and compromise when needed.',
- ]
- },
- {
- title: 'Our stack:',
- items: [
- 'Gitpod is a distributed application running on Kubernetes. Services are written in Go and TypeScript (Node.JS), while all things frontend are React and TypeScript. We communicate using gRPC, RabbitMQ and JSON-RPC. We develop Gitpod in Gitpod, build using leeway and werft and automatically deploy preview environments for every branch.',
- 'Browser-based productivity tools for the rest. Gitpod for development, GitHub for issue tracking and as git hoster, Slack for comms, Figma for design, Notion as our virtual HQ, Pitch for slides, Loom for screencasts and a few others.'
- ]
- },
- {
- title: 'We care about you',
- items: [
- 'Work and life',
- '6 weeks paid time off',
- 'Fully-remote environment & flexible working hours',
- 'Competitive salary and equity package',
- 'Monthly physical health stipend for your local gym, home-gym equipment or Freeletics',
- 'Monthly mental health stipend to support your 🧘♀️',
- 'Blinkist, The Atlantic account and other educational budget',
- 'Premium work-from-home equipment (Macbook Pro, standing desk, monitor, webcam, mic)',
- ]
- },
- ],
- textAfterTheLists: '',
- rendered: false,
- date: '2021-01-26T14:00:00.000Z'
- },
- {
- title: 'Senior Software Engineer (Infrastructure)',
- intro:`The infrastructure behind Gitpod runs services and workspaces on a global scale and self-managed by customers. We want your help to improve and automate this infrastructure with us.`,
- paragraphs:`We are a highly-motivated, fully-remote team, organized in a flat hierarchy, and led by technical founders. We love open-source, have started and lead many popular open-source projects, and contribute to many others.
- We celebrate diversity and strive for an equal, inclusive, empathetic and welcoming environment. Bringing diversity to the team is a big plus. If you are part of a marginalised community, and are not sure if you should apply, please get in touch.`,
- lists: [
- {
- title: 'As part of the team you will ...',
- items: [
- 'Build global cloud-native infrastructure. We run dev environments (Kubernetes Pods) in clusters around the globe. You will help expand this infrastructure on GCP and other cloud providers to maximise resilience and global coverage. Describing the infrastructure-as-code helps us to keep it reproducible.',
- 'Make Gitpod easier to install on more platforms. We want our users to be able to easily self-host Gitpod on almost any Kubernetes. You will help to improve and expand the infrastructure-as-code that can be used to install Gitpod. This reaches from improving the Helm chart and Terraform scripts that we have today to introducing new ways of installing Gitpod.',
- 'Co-own the product and work self-directed. We work with a very flat hierarchy, organizing our tasks in iterations with a lot of freedom.',
- 'Work with the community and in the open. Our DNA is deeply rooted in open source and we are building Gitpod in public. We expect the same from you.']
- },
- {
- title: 'You will be a great fit if ...',
- items: [
- 'You share our values. We are developer-led and aim for a frictionless experience when interacting with our product, our company and our brand: no hurdles, no BS, no unnecessary extra steps. We are open minded, inclusive, transparent and curious. We always remain students of the game, not masters of the game. We have opinions, but are not opinionated. We integrate, don\'t dictate.',
- 'You care for our mission. Developers architect our future. Gitpod democratises software development by making it more accessible to all developers. Ready-to-code, cloud-based development environments streamline how software is written today.',
- 'You embrace Open Source. You follow relevant open-source projects, maybe you contributed, maybe you know the maintainers. Gitpod itself is open-source and built on open-source projects, such as Kubernetes, Helm, Terraform, Grafana, Prometheus and many more. Knowledge about such projects will help you work on Gitpod and knowledge about Open Source will help you make Gitpod a better Open Source project.',
- 'You are pragmatic. You understand that doing the right thing gives you momentum while doing a thing perfectly can cost a lot of time.',
- 'You are a curious deep diver. You know that humans and documentation often do not have an answer. That is when you dive. You read code, issues, explore metrics, traces, logs or conduct experiments. When you surface, you know the answer and the team will love you.',
- 'You are a good communicator. We work remote, our users are remote too. You value writing and express yourself concisely. You may hold strong opinions, but you are not ideological. You communicate thoughtfully, always assume others speak in good faith, aim to understand opposing perspectives and compromise when needed.'
- ]
- },
- {
- title: 'Our stack:',
- items: [
- 'Gitpod is an open source Kubernetes application. Services are written in Go and TypeScript (Node.JS), while all things frontend are React and TypeScript. We communicate using gRPC, RabbitMQ and JSON-RPC. We develop Gitpod in Gitpod, build using leeway and werft and automatically deploy preview environments for every branch.',
- 'Browser-based productivity tools for the rest. Gitpod for development, GitHub for issue tracking and as git hoster, Slack for comms, Figma for design, Notion as our virtual HQ, Pitch for slides, Loom for screencasts and a few others.',
- 'We run gitpod.io on Google Cloud Platform. There we use GKE, Buckets, BigQuery and more. We may expand to other cloud providers. We make Gitpod self-hosted available for vanilla Kubernetes, AWS, and more platforms in the future.',
- 'We describe infrastructure using Helm and Terraform. We maintain a single helm chart to install Gitpod on Kubernetes. To create the cluster and other infrastructure around it, we use Terraform scripts.'
- ]
- },
- {
- title: 'We care about you',
- items: [
- 'Work and life',
- '6 weeks paid time off',
- 'Fully-remote environment & flexible working hours',
- 'Competitive salary and equity package',
- 'Monthly physical health stipend for your local gym, home-gym equipment or Freeletics',
- 'Monthly mental health stipend to support your 🧘♀️',
- 'Blinkist, The Atlantic account and other educational budget',
- 'Premium work-from-home equipment (Macbook Pro, standing desk, monitor, webcam, mic)',
- ]
- },
- ],
- textAfterTheLists: '',
- rendered: false,
- date: '2021-01-26T14:00:00.000Z'
- },
- {
- title: 'Senior Software Engineer (Observability)',
- intro:`The infrastructure behind gitpod.io runs services and workspaces on a global scale. Want your help to get the best insights via metrics, traces, logs, and more.`,
- paragraphs:`We are a highly-motivated, fully-remote team, organized in a flat hierarchy, and led by technical founders. We love open-source, have started and lead many popular open-source projects, and contribute to many others. We celebrate diversity and strive for an equal, inclusive, empathetic and welcoming environment. Bringing diversity to the team is a big plus. If you are part of a marginalised community, and are not sure if you should apply, please get in touch.`,
- lists: [
- {
- title: 'As part of the team you will ...',
- items: [
- 'Create observability for our global infrastructure. We run dev environments (Kubernetes Pods) in Kubernetes clusters around the globe. You will improve and enhance our systems for collecting, storing and visualizing observability data, such as logs, metrics, alerts, traces and profiling data. We heavily build on pre-existing solutions, such as Grafana, Prometheus, and the cloud platforms native solutions.',
- 'Make Gitpod more observable. You will identify the best metrics endpoints Gitpod should expose and implement them or help colleagues to implement them. Same goes for proper tracing and logging. ',
- 'Co-own the product and work self-directed. We work with a very flat hierarchy, organizing our tasks in iterations with a lot of freedom.',
- 'Work with the community and in the open. Our DNA is deeply rooted in open source and we are building Gitpod in public. We expect the same from you.']
- },
- {
- title: 'You will be a great fit if ...',
- items: [
- 'You share our values. We are developer-led and aim for a frictionless experience when interacting with our product, our company and our brand: no hurdles, no BS, no unnecessary extra steps. We are open minded, inclusive, transparent and curious. We always remain students of the game, not masters of the game. We have opinions, but are not opinionated. We integrate, don\'t dictate.',
- 'You care for our mission. Developers architect our future. Gitpod democratises software development by making it more accessible to all developers. Ready-to-code, cloud-based development environments streamline how software is written today.',
- 'You embrace Open Source. You follow relevant open-source projects, maybe you contributed, maybe you know the maintainers. Gitpod itself is open-source and built on open-source projects, such as Kubernetes, Helm, Terraform, Grafana, Prometheus and many more. Knowledge about such projects will help you work on Gitpod and knowledge about Open Source will help you make Gitpod a better Open Source project.',
- 'You are pragmatic. You understand that doing the right thing gives you momentum while doing a thing perfectly can cost a lot of time.',
- 'You are a curious deep diver. You know that humans and documentation often do not have an answer. That is when you dive. You read code, issues, explore metrics, traces, logs or conduct experiments. When you surface, you know the answer and the team will love you.',
- 'You are a good communicator. We work remote, our users are remote too. You value writing and express yourself concisely. You may hold strong opinions, but you are not ideological. You communicate thoughtfully, always assume others speak in good faith, aim to understand opposing perspectives and compromise when needed.'
- ]
- },
- {
- title: 'Our stack:',
- items: [
- 'Gitpod is an open source Kubernetes application. Services are written in Go and TypeScript (Node.JS), while all things frontend are React and TypeScript. We communicate using gRPC, RabbitMQ and JSON-RPC. We develop Gitpod in Gitpod, build using leeway and werft and automatically deploy preview environments for every branch.',
- 'Browser-based productivity tools for the rest. Gitpod for development, GitHub for issue tracking and as git hoster, Slack for comms, Figma for design, Notion as our virtual HQ, Pitch for slides, Loom for screencasts and a few others.',
- 'We run gitpod.io on Google Cloud Platform. There we use GKE, Buckets, BigQuery and more. We may expand to other cloud providers. We make Gitpod self-hosted available for vanilla Kubernetes, AWS, and more platforms in the future.',
- 'We describe infrastructure using Helm and Terraform. We maintain a single helm chart to install Gitpod on Kubernetes. To create the cluster and other infrastructure around it, we use Terraform scripts.'
- ]
- },
- {
- title: 'We care about you',
- items: [
- 'Work and life',
- '6 weeks paid time off',
- 'Fully-remote environment & flexible working hours',
- 'Competitive salary and equity package',
- 'Monthly physical health stipend for your local gym, home-gym equipment or Freeletics',
- 'Monthly mental health stipend to support your 🧘♀️',
- 'Blinkist, The Atlantic account and other educational budget',
- 'Premium work-from-home equipment (Macbook Pro, standing desk, monitor, webcam, mic)',
- ]
- },
- ],
- textAfterTheLists: '',
- rendered: false,
- date: '2021-01-26T14:00:00.000Z'
- },
- {
- title: 'Senior Kubernetes Engineer',
- intro:`We want to run Gitpod workspaces in self-managed Kubernetes clusters to benefit from the latest and greatest advancements from the open source community. We want your help to create, automate and operate such clusters.`,
- paragraphs:`We are a highly-motivated, fully-remote team, organized in a flat hierarchy, and led by technical founders. We love open-source, have started and lead many popular open-source projects, and contribute to many others.
- We celebrate diversity and strive for an equal, inclusive, empathetic and welcoming environment. Bringing diversity to the team is a big plus. If you are part of a marginalised community, and are not sure if you should apply, please get in touch.`,
- lists: [
- {
- title: 'As part of the team you will ...',
- items: [
- 'Create Kubernetes Clusters. You will use the latest and greatest Linux kernels, containerd and K8s versions. You will automate the process of creating the cluster and ensure that it is perfectly suited to run Gitpod`s dev environments. The clusters will run on a public cloud.',
- 'Help Gitpod being a good K8s app. You know the best practices for running an app in Kubernetes and you will help to implement these best practices in Gitpod or help the team to follow the best practices. Resilience during incidents and deployment as well as security are of particular interest.',
- 'Co-own the product and work self-directed. We work with a very flat hierarchy, organizing our tasks in iterations with a lot of freedom.',
- 'Work with the community and in the open. Our DNA is deeply rooted in open source and we are building Gitpod in public. We expect the same from you.']
- },
- {
- title: 'You will be a great fit if ...',
- items: [
- 'You share our values. We are developer-led and aim for a frictionless experience when interacting with our product, our company and our brand: no hurdles, no BS, no unnecessary extra steps. We are open minded, inclusive, transparent and curious. We always remain students of the game, not masters of the game. We have opinions, but are not opinionated. We integrate, don\'t dictate.',
- 'You care for our mission. Developers architect our future. Gitpod democratises software development by making it more accessible to all developers. Ready-to-code, cloud-based development environments streamline how software is written today.',
- 'You embrace Open Source. You follow relevant open-source projects, maybe you contributed, maybe you know the maintainers. Gitpod itself is open-source and built on open-source projects, such as Kubernetes, Helm, Terraform, Grafana, Prometheus and many more. Knowledge about such projects will help you work on Gitpod and knowledge about Open Source will help you make Gitpod a better Open Source project.',
- 'You are pragmatic. You understand that doing the right thing gives you momentum while doing a thing perfectly can cost a lot of time.',
- 'You are a curious deep diver. You know that humans and documentation often do not have an answer. That is when you dive. You read code, issues, explore metrics, traces, logs or conduct experiments. When you surface, you know the answer and the team will love you.',
- 'You are a good communicator. We work remote, our users are remote too. You value writing and express yourself concisely. You may hold strong opinions, but you are not ideological. You communicate thoughtfully, always assume others speak in good faith, aim to understand opposing perspectives and compromise when needed.'
- ]
- },
- {
- title: 'Our stack:',
- items: [
- 'Gitpod is an open source Kubernetes application. Services are written in Go and TypeScript (Node.JS), while all things frontend are React and TypeScript. We communicate using gRPC, RabbitMQ and JSON-RPC. We develop Gitpod in Gitpod, build using leeway and werft and automatically deploy preview environments for every branch.',
- 'Browser-based productivity tools for the rest. Gitpod for development, GitHub for issue tracking and as git hoster, Slack for comms, Figma for design, Notion as our virtual HQ, Pitch for slides, Loom for screencasts and a few others.',
- 'We run gitpod.io on Google Cloud Platform. There we use GKE, Buckets, BigQuery and more. We may expand to other cloud providers. We make Gitpod self-hosted available for vanilla Kubernetes, AWS, and more platforms in the future.',
- 'We describe infrastructure using Helm and Terraform. We maintain a single helm chart to install Gitpod on Kubernetes. To create the cluster and other infrastructure around it, we use Terraform scripts.'
- ]
- },
- {
- title: 'We care about you',
- items: [
- 'Work and life',
- '6 weeks paid time off',
- 'Fully-remote environment & flexible working hours',
- 'Competitive salary and equity package',
- 'Monthly physical health stipend for your local gym, home-gym equipment or Freeletics',
- 'Monthly mental health stipend to support your 🧘♀️',
- 'Blinkist, The Atlantic account and other educational budget',
- 'Premium work-from-home equipment (Macbook Pro, standing desk, monitor, webcam, mic)',
- ]
- },
- ],
- textAfterTheLists: '',
- rendered: false,
- date: '2021-01-26T14:00:00.000Z'
- },
- {
- title: 'Senior Site Reliability Engineer (SRE)',
- intro:`The infrastructure behind gitpod.io runs services and workspaces on a global scale and many professionals depend on it. We want your help to achieve the required reliability.`,
- paragraphs:`We are a highly-motivated, fully-remote team, organized in a flat hierarchy, and led by technical founders. We love open-source, have started and lead many popular open-source projects, and contribute to many others. We celebrate diversity and strive for an equal, inclusive, empathetic and welcoming environment. Bringing diversity to the team is a big plus. If you are part of a marginalised community, and are not sure if you should apply, please get in touch.`,
- lists: [
- {
- title: 'As part of the team you will ...',
- items: [
- 'Make gitpod more reliable. You apply best practices and lessons-learned from incidents to prevent future incidents. you implement the changes or work with colleagues and other teams to get the needed changes implemented.',
- 'Conduct Root-Cause analysis of incidents. Post-Incident, you dive deep to understand what caused the incident and apply your knowledge to make gitpod.io more reliable.',
- 'Mitigate incidents. If there is an incident, you know which switches to flip to quickly re-establish reliable service of Gitpod. You participate in on-call rotation.',
- 'Drive application health. You help to establish SLIs and SLOs, so that we, as a company, can find a healthy balance between rolling out new features and fixing bugs.',
- 'Co-own the product and work self-directed. We work with a very flat hierarchy, organizing our tasks in iterations with a lot of freedom.',
- 'Work with the community and in the open. Our DNA is deeply rooted in open source and we are building Gitpod in public. We expect the same from you.']
- },
- {
- title: 'You will be a great fit if ...',
- items: [
- 'You share our values. We are developer-led and aim for a frictionless experience when interacting with our product, our company and our brand: no hurdles, no BS, no unnecessary extra steps. We are open minded, inclusive, transparent and curious. We always remain students of the game, not masters of the game. We have opinions, but are not opinionated. We integrate, don\'t dictate.',
- 'You care for our mission. Developers architect our future. Gitpod democratises software development by making it more accessible to all developers. Ready-to-code, cloud-based development environments streamline how software is written today.',
- 'You embrace Open Source. You follow relevant open-source projects, maybe you contributed, maybe you know the maintainers. Gitpod itself is open-source and built on open-source projects, such as Kubernetes, Helm, Terraform, Grafana, Prometheus and many more. Knowledge about such projects will help you work on Gitpod and knowledge about Open Source will help you make Gitpod a better Open Source project.',
- 'You are pragmatic. You understand that doing the right thing gives you momentum while doing a thing perfectly can cost a lot of time.',
- 'You are a curious deep diver. You know that humans and documentation often do not have an answer. That is when you dive. You read code, issues, explore metrics, traces, logs or conduct experiments. When you surface, you know the answer and the team will love you.',
- 'You are a good communicator. We work remote, our users are remote too. You value writing and express yourself concisely. You may hold strong opinions, but you are not ideological. You communicate thoughtfully, always assume others speak in good faith, aim to understand opposing perspectives and compromise when needed.'
- ]
- },
- {
- title: 'Our stack:',
- items: [
- 'Gitpod is an open source Kubernetes application. Services are written in Go and TypeScript (Node.JS), while all things frontend are React and TypeScript. We communicate using gRPC, RabbitMQ and JSON-RPC. We develop Gitpod in Gitpod, build using leeway and werft and automatically deploy preview environments for every branch.',
- 'Browser-based productivity tools for the rest. Gitpod for development, GitHub for issue tracking and as git hoster, Slack for comms, Figma for design, Notion as our virtual HQ, Pitch for slides, Loom for screencasts and a few others.',
- 'We run gitpod.io on Google Cloud Platform. There we use GKE, Buckets, BigQuery and more. We may expand to other cloud providers. We make Gitpod self-hosted available for vanilla Kubernetes, AWS, and more platforms in the future.',
- 'We describe infrastructure using Helm and Terraform. We maintain a single helm chart to install Gitpod on Kubernetes. To create the cluster and other infrastructure around it, we use Terraform scripts.'
- ]
- },
- {
- title: 'We care about you',
- items: [
- 'Work and life',
- '6 weeks paid time off',
- 'Fully-remote environment & flexible working hours',
- 'Competitive salary and equity package',
- 'Monthly physical health stipend for your local gym, home-gym equipment or Freeletics',
- 'Monthly mental health stipend to support your 🧘♀️',
- 'Blinkist, The Atlantic account and other educational budget',
- 'Premium work-from-home equipment (Macbook Pro, standing desk, monitor, webcam, mic)',
- ]
- },
- ],
- textAfterTheLists: '',
- rendered: false,
- date: '2021-01-26T14:00:00.000Z'
- },
- {
- title: 'Design Lead',
- intro:`Developer tools require a style and feel to win developers both from a functional and emotional angle. Help us institutionalise design as a key part of Gitpod.`,
- paragraphs:`We are a highly-motivated, fully-remote team, organized in a flat hierarchy, and led by technical founders. We love open-source, have started and lead many popular open-source projects, and contribute to many others.
- We celebrate diversity and strive for an equal, inclusive, empathetic and welcoming environment. Bringing diversity to the team is a big plus. If you are part of a marginalised community, and are not sure if you should apply, please get in touch.`,
- lists: [
- {
- title: 'As part of the team you will ...',
- items: [
- 'Build a brand around developer experience. Enhance our brand identity and establish a visual language to embody the tone of a product that delights developers.',
- 'Produce clear guidelines and art direction. Work on producing designs and commissioning illustrations that shape Gitpod`s identity both on the website and product.',
- 'Create and evolve our design system. Closely collaborating with @georgtsiolis you will implement and evolve our design system from scratch. Minimalistic and delightful components that give Gitpod a consistent look and feel.',
- 'Establish a design culture within Gitpod. Design is a key part of the company. You will work cross-functionally and shape the overall design direction of Gitpod. This also includes helping with hiring as the company grows.',
- 'Co-own the product and work self-directed. We`re still a small team of individual creators. Everybody has autonomy and responsibility. Create flows, prototypes, and high-fidelity visuals, where you think it makes sense.',
- 'Work with the community and in the open. Our DNA is deeply rooted in open source and we are building Gitpod in public. We expect the same from you.']
- },
- {
- title: 'You will be a great fit if ...',
- items: [
- 'You share our values. We are developer-led and aim for a frictionless experience when interacting with our product, our company and our brand: no hurdles, no BS, no unnecessary extra steps. We are open minded, inclusive, transparent and curious. We always remain students of the game, not masters of the game. We have opinions, but are not opinionated. We integrate, don`t dictate.',
- 'You love creating meaningful products. Developers architect our future. Gitpod democratises software development by making it more accessible to all developers. Ready-to-code, cloud-based development environments streamline how software is written today.',
- 'You have built design systems and designed interactive applications. We expect a broad set of design skills. As you will be in charge of setting the standard, we are looking for humans who have worked in cross-functional product teams and created interactive products and applications.',
- 'You`re highly productive while designing best-in class UI. You are entrepreneurial and break down big projects in small deliverables and move fast based on user feedback. You prefer simple solutions and know when to improve something.',
- 'You have empathy for developers. Gitpod is developed by developers for developers. Preferably, you designed developer tools before and feel familiar with their workflows.',
- 'You like to establish a brand and culture. Gitpod isn`t just some tool. We want to build a brand around developer experience and productivity that developers fall in love with. We are also human beings and want to create a long-lasting empathetic and diverse culture that stands for something good.',
- ]
- },
- {
- title: 'Our stack:',
- items: [
- 'Figma. You will built with Figma, using components and variants to keep all our design documents in sync and consistent. ',
- 'JS/TS for the web. We use Gatsby for our website and deploy it with Netlify.',
- 'Browser-based productivity tools for the rest. Gitpod for development, GitHub for issue tracking and as git hoster, Slack for comms, Notion as our virtual HQ, Pitch for slides, Loom for screencasts and a few others.'
- ]
- },
- {
- title: 'We care about you',
- items: [
- 'Work and life',
- '6 weeks paid time off',
- 'Fully-remote environment & flexible working hours',
- 'Competitive salary and equity package',
- 'Monthly physical health stipend for your local gym, home-gym equipment or Freeletics',
- 'Monthly mental health stipend to support your 🧘♀️',
- 'Blinkist, The Atlantic account and other educational budget',
- 'Premium work-from-home equipment (Macbook Pro, standing desk, monitor, webcam, mic)',
- ]
- },
- ],
- textAfterTheLists: '',
- rendered: false,
- date: '2021-01-26T14:00:00.000Z'
- },
-]
-
-const Careers = ({data}: any) => (
-
-
-
-
- Join the Team
- Gitpod is built on a culture of trust and empathy.
- See Job Openings
-
-
-
-
-
-
-
-
-
-
-
Come join a quickly growing venture-backed team and work together with incredible humans from 🇦🇺 🇧🇷 🇨🇦 🇫🇷 🇩🇪 🇬🇷 🇵🇰 🇷🇺 🇺🇸 - in an environment with strong values around openness, honesty, and diversity.
-
We are not as diverse as we would like to be.
-
Help us to change that and shape Gitpod’s future from anywhere in the world! 🌈 🌍
-
-
-
-
-
-
-
-
-
-
Current Job Openings
-
-
We aim to free developers from the friction of manual, stateful, local dev environments. We believe that in a few years working with ephemeral, automated dev environments is going to be as common as using version control or having CI/CD. Help us pioneering this! 👐
-
-
-
- {jobs.map((job, i) => )}
-
-
-
-
-
-
-
If no current Job offer fits your qualifications, but you're totally in love with Gitpod and want to help us improving it, please send your application at career@gitpod.io anyway.
-
We're curious to hear about you.
-
-
-
-
-
-
-)
-
-export default Careers
-
-export const query = graphql`
- query {
- file(relativePath: { eq: "team_2020.jpg" }) {
- childImageSharp {
- fluid(quality: 100) {
- ...GatsbyImageSharpFluid
- }
- }
- }
- }
-`
diff --git a/src/pages/contact.tsx b/src/pages/contact.tsx
deleted file mode 100644
index 35a6b9fdf..000000000
--- a/src/pages/contact.tsx
+++ /dev/null
@@ -1,277 +0,0 @@
-import React from 'react'
-import styled from '@emotion/styled'
-import IndexLayout from '../layouts'
-import { sizes, borders } from '../styles/variables'
-import SubmissionSucess from '../components/SubmissionSucess'
-import { Email } from '../functions/submit-form'
-
-const StyledContactPage = styled.div`
- /* --------------------------------------------- */
- /* ----- Form ----- */
- /* --------------------------------------------- */
-
- .form {
- padding: 10rem 0 8rem;
- margin: 0 auto;
- max-width: 650px;
-
- &__container {
- display: flex;
- flex-wrap: wrap;
- }
-
- &__input {
- display: block;
- width: 100%;
- padding: 1rem 2rem;
- border: ${borders.light1};
- border-radius: 3px;
-
-
- &:not(:last-child) {
- margin-bottom: 2rem;
- }
-
- &--half {
- @media(min-width: calc(${sizes.breakpoints.md} + 1px)) {
- width: 48%;
- &:first-of-type {
- margin-right: 4%;
- }
- }
- }
- }
-
- &__textarea {
- width: 100%;
- padding: 1rem 2rem;
- margin-bottom: 2rem;
- height: 22rem;
- border: ${borders.light1};
- border-radius: 3px;
-
- }
- }
-
- select {
- margin-bottom: 2rem;
- border-radius: 3px;
- border: ${borders.light1};
- color: inherit;
- background-size: 1.2em auto, 100%;
- }
-
- .subject {
- label {
- display: block;
- margin-bottom: 1rem;
- }
- }
-
- .error {
- color: red;
- margin: 0 0 2rem;
- width: 100%;
- }
-`
-
-const subjects: string[] = [
- 'Question about Gitpod Self-Hosted',
- 'Question about Gitpod\'s Paid Plans',
- 'Applying for Professional Open Source',
- 'Applying for the Custom IDE Beta',
- 'Student Unlimited: Get Verified as a Student',
- 'Other',
-]
-
-export default function ContactPage(props: any) {
- const [state, setState] = React.useState<{
- name?: string
- consent?: boolean
- email?: string
- subject?: string
- message?: string
- messageSent?: boolean
- errorMessage?: string
- }>({ subject: props && props.location && props.location.state && props.location.state.subject })
- if (typeof window !== 'undefined' && window.location.hash && state.message === undefined) {
- setState({
- ...state,
- message: decodeURIComponent(window.location.hash.substr(1))
- })
- }
-
- const handleChange = (e: React.ChangeEvent) => {
- setState({
- ...state,
- errorMessage: undefined,
- [e.target.name]: e.target.type === 'checkbox' ? e.target.checked : e.target.value
- })
- }
-
- const handleChangeTextArea = (e: React.ChangeEvent) => {
- setState({ ...state, [e.target.name]: e.target.value })
- }
-
- const handleChangeSelect = (e: React.ChangeEvent) => {
- setState({
- ...state,
- errorMessage: undefined,
- [e.target.name]: e.target.value
- })
- }
-
- const handleSubmit = (e: React.FormEvent) => {
- e.preventDefault()
- if (!state.email) {
- setState({
- ...state,
- errorMessage: 'Please provide a valid email address so that we can reply to you.'
- })
- return
- }
- if (!state.message) {
- setState({
- ...state,
- errorMessage: "Sorry! The message can't be empty, please type a message."
- })
- return
- }
- if (state.consent !== true) {
- setState({
- ...state,
- errorMessage: 'Please agree to us storing your provided information so that we can reply to you.'
- })
- return
- }
-
- const email: Email = {
- from: {
- email: state.email,
- name: state.name
- },
- subject: state.subject + ' (from ' + state.email + ')',
- message: state.message
- };
-
- fetch('/.netlify/functions/submit-form', {
- method: 'POST',
- body: JSON.stringify(email)
- })
- .then(() =>
- setState({
- ...state,
- messageSent: true
- })
- )
- .catch((error) => alert(error))
- }
- return (
-
-
-
- {state.messageSent ? (
-
- ) : (
-
- )}
-
-
-
- )
-}
diff --git a/src/pages/education.tsx b/src/pages/education.tsx
deleted file mode 100644
index ffb3f57b9..000000000
--- a/src/pages/education.tsx
+++ /dev/null
@@ -1,186 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import Banner from '../components/Banner'
-import TextCards from '../components/TextCards'
-import TextCard from '../components/TextCard'
-import { textCardsData } from '../contents/education'
-import Quote from '../components/Quote'
-import CollegeStudents from '../resources/college-students.png'
-import Bg from '../components/Bg'
-import ActionCard from '../components/ActionCard'
-import PricingTable from '../components/PricingTable'
-import Circle from '../components/Circle'
-import Bitbucket from '../resources/bitbucket.svg'
-import Github from '../resources/octicons-mark-github.svg'
-import Gitlab from '../resources/gitlab.svg'
-import { Link, graphql } from 'gatsby'
-import PopOver from '../components/PopOver'
-import { isEurope } from '../utils/helpers'
-import Img from 'gatsby-image'
-
-const EducationPage: React.SFC<{}> = ({data}: any) => (
-
- Let’s Focus on Teaching Code, not Tedious Setups!}
- paragraph="Gitpod simplifies the onboarding process, makes coding accessible from any device, and provides a productive learning environment."
- linkPath="/education/#education"
- linkText="Choose your Solution"
- img={ }
- />
-
-
-
- {
- textCardsData.map((f, i) => (
-
- ))
- }
-
-
-
-
-
-
-
-
-
-
-
- Gitpod.io
- FREE Trial
-
- Gitpod Managed
-
-
- Gitpod Self-Hosted
- FREE Trial
-
-
-
-
-
- Pricing
- {isEurope() ? '€8' : '$9'} per user per month
- Please enquire
- {isEurope() ? '€0.9' : '$1'} per user per month
-
-
- Domain
- gitpod.io
- Custom
- Custom
-
-
- Managed By
- Gitpod
- Gitpod
- You
-
-
- Infrastructure
- Globally distributed
- > 1 geographical regions
- On-prem or private cloud
-
-
- SLA
- Optional
- Optional
-
-
-
- Support
-
-
-
-
-
- github.com
-
-
-
-
-
- GitHub Enterprise
- Public only
-
-
-
-
- gitlab.com
-
-
-
-
-
- GitLab Self-Managed
- Public only
-
-
-
-
- Bitbucket
- Soon
- Soon
- Soon
-
-
- Custom Authentication
-
- OAuth2
- OAuth2
-
-
- Custom Branding
-
-
-
-
-
-
- Start for Free
- Contact Sales
- Host Yourself
-
-
-
-
-
-
-
-)
-
-export const query = graphql`
- query {
- file(relativePath: { eq: "education.png" }) {
- childImageSharp {
- fluid(traceSVG: { color: "#0b2144" }) {
- tracedSVG
- src
- }
- }
- }
- }
-`
-
-export default EducationPage
diff --git a/src/pages/enterprise-license.tsx b/src/pages/enterprise-license.tsx
deleted file mode 100644
index 21f0b1122..000000000
--- a/src/pages/enterprise-license.tsx
+++ /dev/null
@@ -1,449 +0,0 @@
-import React, { useState } from 'react'
-import IndexLayout from '../layouts'
-import styled from '@emotion/styled'
-import { borders, colors } from '../styles/variables'
-import { countryList } from '../contents/license-key'
-import { isEurope } from '../utils/helpers'
-import SubmissionSucess from '../components/SubmissionSucess'
-import { Link } from 'gatsby'
-import { Email } from '../functions/submit-form';
-
-const StyledEnterpriseLicensePage = styled.div`
- form {
- padding: 5rem 0;
-
- .btn {
- transform: scale(1.05);
-
- &-container {
- text-align: center;
- }
- }
- }
-
- .pattern {
- &::after {
- height: 63%;
- }
- }
-
- .banner {
- text-align: center;
- }
-
- h1 {
- margin-bottom: 2rem;
- }
-
- .entries {
- max-width: 780px;
- margin: 4rem auto;
- padding: 4rem;
- background: ${colors.white};
- border: ${borders.light};
- }
-
- .entry {
- margin-bottom: 5rem;
- }
-
- h3 {
- font-size: 2rem;
- }
-
- .label-container {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- align-items: center;
-
- & > * {
- flex: 0 0 42%;
- overflow: hidden;
- }
-
- @media (max-width: 720px) {
- flex-direction: column;
- align-items: flex-start;
- }
- }
-
- label {
- display: flex;
- flex-direction: column;
- margin-bottom: 2rem;
- }
-
- input,
- textarea,
- select {
- margin-top: 1rem;
- padding: 1rem;
- border: ${borders.normal};
- border-radius: 3px;
- }
-
- select {
- max-width: 100%;
-
- @media (max-width: 720px) {
- max-width: 28rem;
- }
- }
-
- textarea {
- height: 220px;
- }
-
- .seats {
- flex-direction: row;
- align-items: baseline;
-
- input {
- width: 30%;
- margin-right: 1.5rem;
- }
- }
-
- .order-total {
- display: flex;
- justify-content: flex-end;
-
- strong {
- margin-left: 1.5rem;
- }
- }
-
- .need-help {
- text-align: center;
- max-width: 500px;
- margin: 0 auto 10rem;
-
- h3 {
- font-weight: 400;
- }
-
- .btn-wrapper {
- display: flex;
- justify-content: center;
- }
- }
-
- .error {
- margin: 2rem 0;
- color: red;
- }
-`
-
-const EnterpriseLicensePage = () => {
- const yearlyPricesPerSeat = {
- eur: 216,
- usd: 240
- }
- const [state, setState] = useState<{
- firstName?: string
- lastName?: string
- email?: string
- seats?: string
- company?: string
- domain?: string
- address?: string
- postalCode?: string
- city?: string
- country?: string
- noOfEmployees?: string
- message?: string
- errorMessage?: string
- messageSent?: boolean
- }>({})
- const [total, setTotal] = useState(0)
-
- const handleChange = (e: any) => {
- setState({
- ...state,
- [e.target.name]: e.target.value,
- errorMessage: ''
- })
-
- if (e.target.name === 'seats') {
- setTotal(isEurope ? parseInt(e.target.value) * yearlyPricesPerSeat.eur || 0 : parseInt(e.target.value) * yearlyPricesPerSeat.usd || 0)
- }
- }
-
- const handleSubmit = (e: React.FormEvent) => {
- e.preventDefault()
-
- if (!state.firstName) {
- setState({
- ...state,
- errorMessage: 'Please Enter Your First Name.'
- })
- return
- }
-
- if (!state.lastName) {
- setState({
- ...state,
- errorMessage: 'Please Enter Your Last Name.'
- })
- return
- }
-
- if (!state.seats) {
- setState({
- ...state,
- errorMessage: 'Please Enter Number of Seats'
- })
- return
- }
-
- if (!state.domain) {
- setState({
- ...state,
- errorMessage: 'Please Enter the Installation Domain Name'
- })
- return
- }
-
- if (!state.email) {
- setState({
- ...state,
- errorMessage: 'Please Enter a Valid Email'
- })
- return
- }
-
- if (!state.company) {
- setState({
- ...state,
- errorMessage: 'Please Enter a Company'
- })
- return
- }
-
- if (!state.domain) {
- setState({
- ...state,
- errorMessage: 'Please Enter the Installation Domain Name'
- })
- return
- }
-
- if (!state.address) {
- setState({
- ...state,
- errorMessage: 'Please Enter a Street Adress'
- })
- return
- }
-
- if (!state.postalCode) {
- setState({
- ...state,
- errorMessage: 'Please Enter a Postal Code'
- })
- return
- }
-
- if (!state.city) {
- setState({
- ...state,
- errorMessage: 'Please Enter a City Name'
- })
- return
- }
-
- if (!state.country) {
- setState({
- ...state,
- errorMessage: 'Please Enter your Country Name'
- })
- return
- }
-
- const email: Email = {
- from: {
- email: state.email,
- name: state.firstName + ' ' + state.lastName
- },
- subject: 'Requesting a professional self-hosted license (from ' + state.email + ')',
- message: `
- ${state.company}
- ${state.firstName} ${state.lastName}
- ${state.address}
- ${state.postalCode} ${state.city}
- ${state.country}
-
- domain: ${state.domain}
- seats: ${state.seats}
- employees: ${state.noOfEmployees}
-
- Message:
- ${state.message}
-`
- };
- fetch('/.netlify/functions/submit-form', {
- method: 'POST',
- body: JSON.stringify(email)
- })
- .then(() =>
- setState({
- ...state,
- messageSent: true
- })
- )
- .catch((error) => alert(error))
- }
-
- return (
-
-
-
- {state.messageSent ? (
-
- ) : (
-
-
-
-
- Don’t fill this out if you're human:
-
-
-
-
- Request License Key
-
-
Please fill out your order to receive a license key for Gitpod Self-Hosted.
-
-
-
-
How many seats would you like to purchase?
-
-
-
- x {isEurope ? `${yearlyPricesPerSeat.eur}€` : `${yearlyPricesPerSeat.usd}`} per user yearly
-
-
- Order Total: {total}
-
-
-
-
-
What is the domain name of your Gitpod Self-Hosted installation?
-
-
-
-
-
-
The license key will be bound to this domain.
-
-
-
Customer Information
-
-
-
-
Other
-
-
- Add personal message (optional)
-
-
-
-
-
-
{state.errorMessage ?
{state.errorMessage}
: null}
-
-
-
- Request Now
-
-
-
-
- )}
-
-
Do you have any questions? We’re happy to help.
-
-
-
-
-
- )
-}
-
-export default EnterpriseLicensePage
diff --git a/src/pages/enterprise.tsx b/src/pages/enterprise.tsx
deleted file mode 100644
index 267d84a84..000000000
--- a/src/pages/enterprise.tsx
+++ /dev/null
@@ -1,174 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import Banner from '../components/Banner'
-import TextCards from '../components/TextCards'
-import TextCard from '../components/TextCard'
-import Quote from '../components/Quote'
-import Bg from '../components/Bg'
-import ActionCard from '../components/ActionCard'
-import EnterpriseBg from '../resources/enterprise-bg.png'
-import PricingTable from '../components/PricingTable'
-import Circle from '../components/Circle'
-import Bitbucket from '../resources/bitbucket.svg'
-import Github from '../resources/octicons-mark-github.svg'
-import Gitlab from '../resources/gitlab.svg'
-import { Link, graphql } from 'gatsby'
-import { textCardsData } from '../contents/enterprise'
-import Img from 'gatsby-image'
-
-const EnterprisePage: React.SFC<{}> = ({data}: any) => (
-
-
- Unleash Developer Productivity}
- paragraph="Adding Gitpod to your development tools means less waiting, faster onboarding, faster development cycles, higher code quality, and a smooth consistent workflow."
- linkPath="/enterprise/#enterprise"
- linkText="Choose your Solution"
- img={ }
- />
-
-
-
- {
- textCardsData.map((f, i) => (
-
- ))
- }
-
-
-
- {/* ----- Quote ----- */}
-
-
-
- {/* ----- BG ----- */}
-
-
-
-
-
-
-
- Gitpod Managed
-
-
- Gitpod Self-Hosted
- FREE Trial
-
-
-
-
-
- Pricing
- Starting at $3000 per month
- $20 per user per month
-
-
- Domain
- Custom
- Custom
-
-
- Managed By
- Gitpod
- You
-
-
- Infrastructure
- > 1 geographical regions
- On-prem or private cloud
-
-
- SLA
-
-
-
-
- Support
-
-
-
-
- github.com
-
-
-
-
- GitHub Enterprise
-
-
-
-
- gitlab.com
-
-
-
-
- GitLab Self-Managed
-
-
-
-
- Bitbucket
- Soon
- Soon
-
-
- Custom Authentication
- OAuth2
- OAuth2
-
-
- Custom Branding
-
-
-
-
-
- Contact Sales
- Host Yourself
-
-
-
-
-
-
-
-)
-
-export const query = graphql`
- query {
- file(relativePath: { eq: "enterprise.png" }) {
- childImageSharp {
- fluid(traceSVG: { color: "#0b2144" }) {
- tracedSVG
- src
- }
- }
- }
- }
-`
-
-export default EnterprisePage
diff --git a/src/pages/extension-activation.tsx b/src/pages/extension-activation.tsx
deleted file mode 100644
index 6fb5f1916..000000000
--- a/src/pages/extension-activation.tsx
+++ /dev/null
@@ -1,208 +0,0 @@
-import React from 'react'
-import IndexLayout from '../layouts'
-import styled from '@emotion/styled'
-import ExtensionScreenshot from '../resources/extension-screenshot.png'
-import { colors, borders } from '../styles/variables'
-import GitLab from '../resources/gitlab.svg'
-import GitHub from '../resources/octicons-mark-github.svg'
-import Bitbucket from '../resources/bitbucket.svg'
-import CodeTogether from '../resources/code-together.svg'
-import SkipTheWaiting from '../resources/control.svg'
-import Phone from '../resources/icon-phone.svg'
-import { Link } from 'gatsby'
-import { getBrowser } from '../utils/helpers'
-
-const StyledActivationPage = styled.div`
- .intro {
- text-align: center;
- padding: 5rem 0 24rem;
-
- &__title {
- max-width: 400px;
- margin: 0 auto 2rem;
- }
- }
-
- .screenshot {
- display: block;
- margin: -20rem auto 0;
- max-width: 1000px;
- width: 100%;
- }
-
- .get-started {
- text-align: center;
-
- &__steps {
- max-width: 410px;
- margin: 0 auto;
- font-size: 1.9rem;
- text-align: left;
- }
-
- &__step {
- display: flex;
- align-items: center;
-
- &:not(:last-child) {
- margin-bottom: 5rem;
- }
- }
-
- &__number {
- display: flex;
- flex-shrink: 0;
- justify-content: center;
- align-items: center;
- height: 5rem;
- width: 5rem;
- color: ${colors.white};
- font-size: 2.5rem;
- font-weight: 600;
- border-radius: 50%;
- background: ${colors.lightGrey};
- margin-right: 2rem;
- }
-
- .btn-wrapper {
- margin-top: 10rem;
- justify-content: center;
- }
-
- .btn--big {
- display: inline-flex;
- align-items: center;
- padding-left: 1.5rem;
-
- img {
- width: 4rem;
- margin-right: 2.5rem;
- }
- }
- }
-
- .feature {
- min-width: 320px;
- margin: 4rem 2rem;
-
- &-container {
- display: flex;
- justify-content: space-around;
- flex-wrap: wrap;
- text-align: center;
-
- & > * {
- flex: 0 0 26%;
- }
- }
-
- &__img {
- height: 7.5rem;
- width: 7.5rem;
- }
-
- &__title {
- margin: 2rem 0;
- }
- }
-
- .more {
- text-align: center;
-
- &__box {
- max-width: 500px;
- margin: 0 auto;
- padding: 5rem 0;
- border: ${borders.light3};
- }
- }
-`
-
-const ActivationPage = () => (
-
-
-
-
-
Gitpod for {typeof window !== 'undefined' ? getBrowser(window.navigator.userAgent) : null} is Now Active
-
Now you can easily spin up dev environments with a single click.
-
-
-
-
-
-
-
-
-
-
Get started
-
-
- 1.
- Go to one of your projects at GitLab, GitHub or Bitbucket.
-
- 2.
- Click on the Gitpod button and start a dev environment for your project.
-
-
-
-
-
-
-
-
-
-
-
Skip the Waiting
-
Gitpod continuously builds your git branches like a CI server. This means no more waiting for dependencies to be downloaded and builds to finish.
-
-
-
-
Code Together
-
Do code reviews within Gitpod, work together in one workspace in real-time and share reproducible workspaces with your team.
-
-
-
-
Work Remotely
-
You no longer need an over-powered laptop, Gitpod works just as smoothly on a Chromebook or iPad. All you need is a browser.
-
-
-
-
-
-
-
-
-
Learn More About Gitpod
- See Docs
-
-
-
-
-
-)
-
-export default ActivationPage
diff --git a/src/pages/extension-uninstall.tsx b/src/pages/extension-uninstall.tsx
deleted file mode 100644
index cf5562a80..000000000
--- a/src/pages/extension-uninstall.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import React from 'react'
-import IndexLayout from '../layouts'
-
-
-import styled from '@emotion/styled'
-import Form from '../components/extension-uninstall/Form'
-import Message from '../components/extension-uninstall/Message'
-
-const StyledDeletionPage = styled.div`
- .intro {
- text-align: center;
- padding: 5rem 0;
- }
-
- .content {
- display: flex;
- justify-content: space-around;
- padding: 6rem 0;
-
- & > * {
- flex: 0 0 40%;
-
- @media(max-width: 1000px) {
- max-width: 400px;
-
- &:first-child {
- margin-bottom: 5rem;
- }
- }
- }
-
- @media(max-width: 1000px) {
- flex-direction: column;
- align-items: center;
- }
- }
-`
-
-const DeletionPage = () => (
-
-
-
-
-
How Can We Improve?
-
-
-
-
-
-)
-
-export default DeletionPage
diff --git a/src/pages/features.tsx b/src/pages/features.tsx
deleted file mode 100644
index 49739d1a9..000000000
--- a/src/pages/features.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import BackToTopButton from '../components/BackToTopButton'
-import Intro from '../components/features/Intro'
-import FeatureCards from '../components/FeatureCards'
-import StartForFree from '../components/features/StarFortFree'
-import { features } from '../contents/features'
-
-const FeaturesPage: React.SFC<{}> = () => (
-
-
-
-
-
-
-
-
-
-)
-
-export default FeaturesPage
diff --git a/src/pages/github-student-developer-pack.tsx b/src/pages/github-student-developer-pack.tsx
deleted file mode 100644
index b4490bd25..000000000
--- a/src/pages/github-student-developer-pack.tsx
+++ /dev/null
@@ -1,101 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import Banner from '../components/Banner'
-import { PricingBoxProps } from '../components/PricingBox'
-import { isEurope } from '../utils/helpers'
-import Quote from '../components/Quote'
-import PopOver from '../components/PopOver'
-import { colors } from '../styles/variables'
-import InfoCard from '../components/InfoCard'
-import Offers from '../components/Offers'
-import Img from 'gatsby-image'
-import ImageProvider from '../components/ImageProvider'
-import { graphql } from 'gatsby'
-
-const offers: PricingBoxProps[] = [
- {
- title: 'Open-Source',
- gatsbyImage: ,
- price: 'Free',
- duration: '50 hours / month',
- hideButton: true,
- features: ['Public Repos'],
- text: 'Free for everyone'
- },
- {
- title: 'Student',
- gatsbyImage: ,
- price: <>{(isEurope() ? '€8' : '$9')} Free>,
- duration: '100 hours / month',
- hideButton: true,
- features: ['Private & Public Repos', 4 Parallel Workspaces , 30min Timeout , 'Limited to 6 months'],
- transform: 'scale(1.05)',
- btn:
- Claim Offer
- ,
- banner: 'Exclusive Offer for the GitHub Student Pack',
- bannerColor: '#EAA42F'
- },
- {
- title: 'Student Unlimited',
- gatsbyImage: ,
- price: <>{(isEurope() ? '€35' : '$39')} {(isEurope() ? '€8' : '$9')}>,
- duration: 'Unlimited hours / month',
- hideButton: true,
- features: ['Private & Public Repos', 16 Parallel Workspaces , Team Manageable , 1h Timeout ],
- }
-]
-
-const GithubStudentPackPage: React.SFC<{}> = ({data}: any) => (
-
-
- Make Your Life Easier with Gitpod}
- paragraph={With Gitpod you have no more tedious setups, you save hours of compiling code, and you can start coding from any device, immediately. }
- linkPath="https://gitpod.io/subscription/"
- linkText="Claim Offer"
- img={ }
- />
-
-
-
With the GitHub Student Developer Pack , you get the same features as with our usual plans but at a much better price.
-
- We’re happy to be able to empower student developers participating in it.}
- offers={offers}
- />
-
-
-
-
-
-
-
-
-
-)
-
-export default GithubStudentPackPage
-
-export const query = graphql`
- query {
- file(relativePath: { eq: "backpack.png" }) {
- childImageSharp {
- fluid(quality: 100, maxWidth: 1980, traceSVG: { color: "#0b2144" }) {
- tracedSVG
- src
- }
- }
- }
- }
-`
diff --git a/src/pages/github-teacher-toolbox.tsx b/src/pages/github-teacher-toolbox.tsx
deleted file mode 100644
index 17cb4a82c..000000000
--- a/src/pages/github-teacher-toolbox.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import Banner from '../components/Banner'
-import { isEurope } from '../utils/helpers'
-import Quote from '../components/Quote'
-import { PricingBoxProps } from '../components/PricingBox'
-import { Link } from 'gatsby'
-import PopOver from '../components/PopOver'
-import { colors } from '../styles/variables'
-import OnBoarding from '../components/OnBoarding'
-import InfoCard from '../components/InfoCard'
-import Offers from '../components/Offers'
-import Img from 'gatsby-image'
-import { graphql } from 'gatsby'
-import ImageProvider from '../components/ImageProvider'
-
-const offers: PricingBoxProps[] = [
- {
- title: 'Open-Source',
- gatsbyImage: ,
- price: 'Free',
- duration: '50 hours / month',
- hideButton: true,
- features: ['Public Repos'],
- text: 'Free for everyone'
- },
- {
- title: 'Teacher',
- gatsbyImage: ,
- price: <>{(isEurope() ? '€8' : '$9')} Free>,
- duration: '100 hours / month',
- hideButton: true,
- features: ['Private & Public Repos', 4 Parallel Workspaces , 30min Timeout , 'Limited to 6 months'],
- transform: 'scale(1.05)',
- btn:
- Claim Offer
- ,
- banner: 'Exclusive Offer for the GitHub Teacher Toolbox',
- bannerColor: '#EAA42F'
- },
- {
- title: 'Gitpod Education',
- gatsbyImage: ,
- price: <>From {(isEurope() ? '€0.8' : '$0.9')}>,
- duration: 'Per user/month',
- feature: Learn More,
- hideButton: true,
- text: 'Only available for educational institutions'
- }
-]
-
-const GithubTeacherToolBoxPage: React.SFC<{}> = ({data}: any) => (
-
-
- Let’s Focus on Teaching Code, not Tedious Setups!}
- paragraph={With Gitpod you can create coding exams and exercises easily, help out your students via live tutoring, and benefit from a simple onboarding with any device. Learn more }
- linkPath="https://gitpod.io/subscription/"
- linkText="Claim Offer"
- img={ }
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-)
-
-export const query = graphql`
- query {
- file(relativePath: { eq: "teacher-box.png" }) {
- childImageSharp {
- fluid(quality: 100, maxWidth: 1980, traceSVG: { color: "#0b2144" }) {
- tracedSVG
- src
- }
- }
- }
- }
-`
-
-export default GithubTeacherToolBoxPage
diff --git a/src/pages/gitpod-vs-github-codespaces.tsx b/src/pages/gitpod-vs-github-codespaces.tsx
deleted file mode 100644
index 4db452763..000000000
--- a/src/pages/gitpod-vs-github-codespaces.tsx
+++ /dev/null
@@ -1,390 +0,0 @@
-import React from 'react'
-import IndexLayout from '../layouts'
-import styled from '@emotion/styled'
-import FeatureCards from '../components/FeatureCards'
-import { features } from '../contents/gitpod-vs-codespaces'
-import GitLab from '../resources/gitlab-logo.svg'
-import FreeCodeCamp from '../resources/freecodecamp.svg'
-import DWaveLogo from '../resources/dwave.svg'
-import GoogleLogo from '../resources/google.svg'
-import OpenAILogo from '../resources/openai.svg'
-import SauceLabsLogo from '../resources/sauce-labs.svg'
-import FacebookLogo from '../resources/facebook.svg'
-import CodeInstituteLogo from '../resources/code.svg'
-import FourGeeksAcademyLogo from '../resources/4-geeks-academy.png'
-import TheiaIDELogo from '../resources/theia-grey.svg'
-import UberLogo from '../resources/uber.svg'
-import AmazonLogo from '../resources/amazon.svg'
-import IntelLogo from '../resources/intel.svg'
-import TrustedBy from '../components/TrustedBy'
-import { Link } from 'gatsby'
-import PricingTable from '../components/PricingTable'
-import Bitbucket from '../resources/bitbucket.svg'
-import Github from '../resources/octicons-mark-github.svg'
-import Gitlab from '../resources/gitlab.svg'
-import Kubernetes from '../resources/kubernetes.svg'
-import GoogleCloudLogo from '../resources/google-cloud-logo.svg'
-import AWS from '../resources/aws.svg'
-import PopOver from '../components/PopOver'
-import { colors } from '../styles/variables'
-import tickImg from '../resources/icon-tick-blue.svg'
-import questionMarkImg from '../resources/question-mark.svg'
-import crossImg from '../resources/cross.svg'
-import Difference from '../components/gitpod-vs-codespaces/Difference'
-import Octocat from '../resources/octocat.svg'
-
-const Tick = () =>
-
-const QuestionMark = () =>
-
-const Cross = () =>
-
-const StyledGitpodVsGitHubCodespacesPage = styled.div`
- .main {
- padding: 0;
- }
-
- .pattern {
- &::after {
- top: -25rem;
- height: calc(100% + 25rem);
- }
- }
-
- .intro {
- padding: 4rem 0 6rem;
- text-align: center;
-
- &__title {
- margin: 2rem 0 2rem;
- }
- }
-
- .octocat {
- height: 14rem;
- }
-
- .glance {
- text-align: center;
- }
-`
-
-const GitpodVsGitHubCodespacesPage = () => (
-
-
-
-
-
-
-
- Gitpod vs GitHub Codespaces
-
-
- Gitpod is the faster , more powerful {' '}
- open-source platform that integrates with your individual stack.
-
-
-
-
-
-
-
-
-
-
Gitpod vs GitHub Codespaces at a Glance}
- styles={{ minWidth: '800px', borderCollapse: 'separate', borderSpacing: '2rem 0', margin: '0 auto', tableLayout: 'fixed' }}
- containerMaxWidthLarge={true}
- disableMarginBottom={true}
- >
-
-
-
-
-
-
- Gitpod
-
-
- GitHub Codespaces
-
-
-
-
-
- Pricing (Hosted)
- Free for Open-Source
-
-
-
-
-
- License
- Open Source
- Proprietary
-
-
-
-
- GitHub Integration
-
-
-
-
-
-
-
-
-
-
-
- GitLab Integration
-
-
-
-
-
-
-
-
-
-
-
- Bitbucket Integration
-
-
-
-
-
-
-
-
-
-
-
- Self-Host on GCP
-
-
-
-
-
-
-
-
-
-
-
- Self-Host on AWS
-
-
-
-
-
-
-
-
-
-
-
- Self-Host on Kubernetes
-
-
-
-
-
-
-
-
-
-
- Prebuilds{' '}
-
- Accelerate your workspaces by continuously prebuilding your projects, branches, and Pull Requests ahead-of-time.{' '}
-
- Learn More.
-
- >
- }
- />
-
-
-
-
-
-
-
-
-
-
- Snapshots{' '}
-
- Capture your current workspace state and share a reproducible snapshot as a link.{' '}
-
- Learn More.
-
- >
- }
- />
-
-
-
-
-
-
-
-
-
- VS Code Extensions
-
-
-
-
-
-
-
-
- iPad Support
-
-
-
-
-
-
-
-
- Virtual Desktop (VNC)
-
-
-
-
-
-
-
-
- Multi-IDE Support
-
-
-
-
-
-
-
-
-
-
- Disclaimer: All information, prices, and data were last verified on Sept. 25, 2020. To report any incorrect or outdated
- information, please{' '}
-
- contact us.
-
-
-
-
-
-
-
-
-
-
- Used by 300,000+ Developers & Businesses}
- styles={{ margin: '10rem 0' }}
- brands={[
- {
- alt: 'GitLab',
- url: 'https://about.gitlab.com/',
- svg: GitLab,
- className: 'grey-logo'
- },
- {
- alt: 'freeCodeCamp',
- url: 'https://www.freecodecamp.org/',
- svg: FreeCodeCamp,
- className: 'fcc'
- },
- {
- alt: 'D-Wave',
- url: 'https://www.dwavesys.com/',
- svg: DWaveLogo,
- transform: 'scale(1.3)',
- className: 'dwave-logo'
- },
- {
- alt: 'Google',
- url: 'https://about.google/',
- svg: GoogleLogo,
- transform: 'scale(0.9)',
- className: 'grey-logo'
- },
- {
- alt: 'Amazon',
- url: 'https://www.aboutamazon.com',
- svg: AmazonLogo,
- transform: 'scale(0.9) translateY(5px)',
- className: 'grey-logo'
- },
- {
- alt: 'Facebook',
- url: 'https://about.fb.com/',
- svg: FacebookLogo,
- className: 'grey-logo'
- },
- {
- alt: 'Uber',
- url: 'https://www.uber.com',
- svg: UberLogo,
- className: 'grey-logo'
- },
- {
- alt: 'OpenAI',
- url: 'https://openai.com/',
- svg: OpenAILogo,
- transform: 'scale(1.1)',
- className: 'grey-logo'
- },
- {
- alt: 'Sauce Labs',
- url: 'https://saucelabs.com/',
- svg: SauceLabsLogo,
- className: 'grey-logo'
- },
- {
- alt: 'Intel',
- url: 'https://www.intel.com',
- svg: IntelLogo,
- transform: 'scale(0.8)',
- className: 'grey-logo'
- },
- {
- alt: 'Eclipse Theia',
- url: 'https://theia-ide.org',
- svg: TheiaIDELogo,
- transform: 'scale(1.1)',
- className: 'grey-logo'
- },
- {
- alt: 'Code Institute',
- url: 'https://codeinstitute.net/',
- svg: CodeInstituteLogo,
- className: 'grey-logo'
- },
- {
- alt: '4Geeks Academy',
- url: 'https://www.4geeksacademy.co/',
- svg: FourGeeksAcademyLogo,
- className: 'four-geeks grey-logo'
- }
- ]}
- />
-
-
-)
-
-export default GitpodVsGitHubCodespacesPage
diff --git a/src/pages/imprint.tsx b/src/pages/imprint.tsx
deleted file mode 100644
index ff25f1ed3..000000000
--- a/src/pages/imprint.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import TextBox from '../components/TextBox'
-
-const ImprintPage: React.SFC<{}> = () => (
-
-
- Imprint
- Gitpod GmbH
- Managing Directors: Sven Efftinge, Moritz Eysholdt, Dr. Jan Köhnlein
- Am Germaniahafen 1
- 24143 Kiel
- Germany
-
- HRB 22228, Amtsgericht Kiel
- VAT-ID :
- DE335127327
-
- Email: contact@gitpod.io
-
- Responsible for all content according to
- § 55 Rundfunkstaatsvertrag (RSTV) :
-
- Sven Efftinge, Hofteichstr.7, 24113 Kiel
- Disclaimer
- Liability for content
-
- As a service provider we are responsible according to § 7 paragraph 1 of TMG for own contents on these pages under the
- general laws. According to § § 8 to 10 TMG we are not obliged as a service provider to monitor transmitted or stored
- foreign information or to investigate circumstances that indicate illegal activity. Obligations to remove or block the
- use of information under the general laws remain unaffected. However, a relevant liability is only possible from the
- date of knowledge of a specific infringement. Upon notification of such violations, we will remove the content immediately.
-
- Liability for links
-
- Our site contains links to external websites over which we have no control. Therefore we can not accept any responsibility
- for their content. The respective provider or operator of the pages is always responsible for the contents of any Linked
- Site. The linked sites were checked at the time of linking for possible violations of law. Illegal contents were at the
- time of linking. A permanent control of the linked pages is unreasonable without concrete evidence of a violation. Upon
- notification of violations, we will remove such links immediately.
-
- Copyright
-
- The contents and works on these pages created by the site operator are subject to German copyright law. Duplication, processing,
- distribution and any kind of exploitation outside the limits of copyright require the written consent of its respective
- author or creator. Downloads and copies of these pages are only permitted for private, non-commercial use. As far as
- the content is not created by the website operator, the copyrights of third parties. Especially content of third parties
- will be marked as such. If you still get aware of copyright infringement, we ask for a hint. Upon notification of violations,
- we will remove such content immediately.
-
- Settlements of Disputes
-
- The European Commission provides a platform for an online settlement of disputes which can be accessed under https://ec.europa.eu/consumers/odr/ . Gitpod is neither obliged to take part in alternative dispute resolutions before a consumer
- dispute settlement commission or will do so voluntarily.
-
-
-
-)
-
-export default ImprintPage
diff --git a/src/pages/media-kit.tsx b/src/pages/media-kit.tsx
deleted file mode 100644
index d04f1aee6..000000000
--- a/src/pages/media-kit.tsx
+++ /dev/null
@@ -1,149 +0,0 @@
-import React from 'react'
-
-import styled from '@emotion/styled'
-import IndexLayout from '../layouts'
-import GitpodLogoDark from '../resources/gitpod-logo-dark.svg'
-import GitpodLogoWhiteFont from '../resources/gitpod-logo-white-font.svg'
-import GitpodLogoWhite from '../resources/gitpod-logo-white.svg'
-import GitpodCube from '../resources/gitpod-cube.svg'
-import { colors, sizes, borders } from '../styles/variables'
-
-const StyledMediaKitPage = styled.div`
-
- h1 {
- margin-bottom: 2rem;
- font-weight: 600;
- }
-
- .pattern {
- text-align: center;
- padding: 14rem 0 4rem;
- }
-
- .resource {
- flex-basis: 23%;
- min-width: 26rem;
- max-width: 30rem;
- margin-bottom: 3rem;
- border: ${borders.light2};
- border-radius: 3px;
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- min-width: 24rem;
- }
-
- &s {
- display: flex;
- justify-content: space-between;
- flex-wrap: wrap;
- padding: 6rem 0 12rem;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- flex-direction: column;
- align-items: center;
- }
- }
-
- &__img {
- height: 5.5rem;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-
- &-container {
- display: flex;
- justify-content: center;
- padding: 5rem 0;
- }
- }
-
- &__text {
- display: flex;
- justify-content: space-between;
- padding: 3rem 1.5rem;
- background: ${colors.white};
- border-top: ${borders.light2};
- }
- }
-
- svg {
- transition: all .2s;
- }
-
- a:hover {
- svg {
- stroke: ${colors.link};
- }
- }
-`
-
-const resources: {
- img: JSX.Element
- text: string
- path: string
- dark?: boolean
-}[] = [
- {
- img: ,
- text: 'Logo - black',
- path: GitpodLogoDark
- },
- {
- img: ,
- text: 'Logo - white',
- path: GitpodLogoWhiteFont,
- dark: true
- },
- {
- img: ,
- text: 'Logo - one color white',
- path: GitpodLogoWhite,
- dark: true
- },
- {
- img: ,
- text: 'Icon',
- path: GitpodCube
- }
- ]
-
-const MediaKitPage: React.SFC<{}> = () => (
-
-
-
-
-
Media Kit
-
We put together some logos for you in case you’d like to link back to us.
-
-
-
-
- {
- resources.map((r, i) => (
-
- ))
- }
-
-
-
-
-)
-
-export default MediaKitPage
diff --git a/src/pages/pricing.tsx b/src/pages/pricing.tsx
deleted file mode 100644
index 28890d072..000000000
--- a/src/pages/pricing.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import React, { useState } from 'react'
-
-import IndexLayout from '../layouts'
-import PricingBoxes from '../components/pricing/PricingBoxes'
-import Plans from '../components/pricing/Plans'
-import PricingFAQs from '../components/pricing/PricingFAQs'
-import MoreInfo from '../components/MoreInfo'
-import { MoreInfoContents } from '../contents/moreInfoContents'
-
-function isSelfHostedRendered() {
- return typeof window !== `undefined` && window.location.hash === '#self-hosted'
-}
-
-const PricingPage = () => {
- const [isRendered, setIsRendered] = useState(isSelfHostedRendered())
-
- const changeIsRendered = (bool: boolean) => {
- setIsRendered(bool)
- }
-
- const contents = isRendered ? MoreInfoContents : {}
-
- return (
-
-
-
- {!isRendered ? (
-
- ) : null}
-
-
-
-
-
- )
-}
-
-export default PricingPage
diff --git a/src/pages/privacy.tsx b/src/pages/privacy.tsx
deleted file mode 100644
index d43eb756c..000000000
--- a/src/pages/privacy.tsx
+++ /dev/null
@@ -1,706 +0,0 @@
-import React from 'react'
-import IndexLayout from '../layouts'
-import TextBox from '../components/TextBox'
-
-const PrivacyPage: React.SFC<{}> = () => (
-
-
- Privacy Policy
-
-
- Below we provide you with an overview of what data we collect for what purpose and how we ensure the protection of
- the data in short and in a more detailed form .
-
-
-
- The controller is Gitpod GmbH, Am Germaniahafen 1, 24143 Kiel/Germany, registered with the commercial register of
- the local court (Amtsgericht) Kiel under HRB 22228, represented by the managing directors Sven Efftinge, Moritz Eysholdt,
- Dr. Jan Köhnlein ("we/us/our" or "Gitpod" ). We offer services to our users and
- visitors (the "User/you/your" ) on our website https://gitpod.io
- ("Website" ) as well as related services including the use of our service according to our terms of service
- (jointly the "Service" ).
-
-
- For any questions about data protection you may contact us via data@gitpod.io .
-
-
- In Short
-
-
-
- Controller
-
-
- Gitpod GmbH Am Germaniahafen 1, 24143 Kiel/Germany registered with the commercial register of the local
- court (Amtsgericht) Kiel under HRB 22228 represented by the managing directors Sven Efftinge, Moritz
- Eysholdt, Dr. Jan Köhnlein Email: contact@gitpod.io
-
- We have appointed a data protection officer who may be contacted via data@gitpod.io .
- This privacy policy also contains further data controllers.
-
-
-
- Purpose and Legal Basis of Processing Data; Provision and Recipients of Data
-
- Your data will be used for the following purposes:
-
- to provide the functioning Website,
- to implement this privacy policy and carrying out the contractual relationship and our Service,
- to analyze your use of our Service and improve our Service with our legitimate interests of marketing and fraud
- prevention,
- to provide and analyze our pages on Social Media,
- to act according to our legal obligations, or
- as otherwise explained in this privacy policy or by any communication by us.
-
- Furthermore, your data will be processed by us with your explicit consent.
- Applicable legal provisions are in particular those of the regulation (EU) 2016/679 of the European Parliament and
- Council of 27 April 2016, repealing the directive 95/46/EC, on the protection of individuals with regard to the processing
- of personal data, on the free movement of such data ("General Data Protection Regulation", GDPR) as well as in the
- Federal Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz,
- TMG)
- .
- We as well as our external service partners receive your data for processing those for the purpose of providing
- our Service. You provide data if this is necessary for the aforementioned purposes. In the event you refrain from
- providing such data you may face legal disadvantages, for example, limited or no possibility of using our Service.
-
-
-
- Transfer of Data outside of the EU
-
-
- In course of data processing by us data may be transferred to third countries, i.e. countries outside the EU. This may happen
- via implementation of third party providers such as cloud services and external service partners which process data
- on our behalf.
-
-
-
-
- Your Rights
-
-
- You have the right to withdraw your consent relating to the use of data any time with effect for the future when such data
- processing is based in your consent.
- You are entitled to access the data stored by us and are also entitled to amend or rectify your data if such data are
- incorrect.
- You have the right to object to the processing of your personal data, for example if your personal data are processed
- for direct marketing purposes.
- You are entitled to request the erasure of your data.
- You are entitled to receive information about the stored data (in a structured, current and machine-readable format)
- at any time and to request the correction or deletion of the data in case of incorrect data storage.
- You have also the right to lodge a complaint with a supervisory authority at your choice. An overview of the European
- National Data Protection Authorities may be found here: http://ec.europa.eu/newsroom/article29/item-detail.cfm?item_id=612080
-
-
-
-
- Period for Storing Data; Deletion
-
-
- The data are deleted if such data are no longer necessary for the purpose of processing.
-
-
-
-
- Data Security
-
-
- We have implemented measures to ensure data and IT security. The Website is operated through a safe SSL-connection. If an
- SSL-connection is activated third parties are prevented from reading any data that are transferred by you to us.
-
-
-
-
-
- More Detailed Information
-
-
-
-
- I. What are Personal Data?
-
- Personal data are any information relating to an identified or identifiable natural person. Personal data includes e.g. name,
- email address or telephone number. Personal data also includes information about hobbies, memberships or websites viewed.
- We will only collect, use and/or pass on personal data if this is permitted by law or if the User consents to the data
- processing.
-
-
- II. How are my Data processed when visiting the Website and contacting us?
-
-
- Visiting the Website
-
-
- If you browse our Website the provider of the website collects and stores information automatically in so-called "server-log-files"
- that your browser transfers to us. These are:
-
- type/version of the browser, system software used, referrer URL, hostname of the device, time of the server request, IP-address
- or other unique device identifier.
-
-
-
-
- If you are using a mobile device the following data may also be processed additionally through the Website:
-
- country code, language, hostname of the device, name and version of the operational system.
-
-
-
-
- We use these data only for statistical analysis for the purpose of operation, security and optimization of our Website. This
- data processing is based on Art. 6 (1) c. for providing a secure and stable Website and Service. The data processing
- may also be based on Art. 6 (1) f. GDPR or TMG and we wish to achieve the legitimate interests of stabilizing and improving
- our Website, quality insurance and fraud prevention.
-
-
- Contacting us
-
- When contacting us via email, the User’s details are stored for the purpose of processing the enquiry and, if applicable,
- follow-up questions based on your consent based on the legal basis of Art. 6 (1) a. GDPR or fulfilling your request based
- on Art. 6 (1) b. GDPR.
-
-
- Emails and Newsletters
-
- With the newsletter we inform the user about the Website, our Service and us.
-
-
-
- When registering for the newsletter via the Website, you have to provide an email address. This email address will be transmitted
- to and stored by us (or a provider as specified below). After registration, you will receive an email to confirm the
- registration ("double opt-in"). Via clicking the registration link you have given your consent to the processing of your
- personal data for receiving our newsletter and analyzing such newsletters according to Art. 6 (1) a. GDPR and we may
- process such data accordingly. In case of registration for the newsletter we (or our provider as specified below) also
- store the IP address, the device name, the mail provider as well as the user's first and last name and the date of registration.
-
-
-
- We may also send you newsletters referring to similar services and products if you have an existing contractual relationship
- with us and you did not object receiving such emails. The legal basis for such processing of data for sending and analyzing
- such newsletters is your consent (Art. 6 (1) a. GDPR) or an existing contractual relationship (Art. 6 (1) b. GDPR).
-
-
-
-
- Use of Mailchimp:
-
- The mail provider "Mailchimp" by Rocket Science Group LLC, 675 Ponce De Leon Ave NE, Suite 5000, Atlanta,
- GA 30308, USA receives and processes on our behalf the data necessary for the emails and newsletters, in particular email
- address, IP address, device name. These data are processed on servers in the USA. Mailchimp is certified according to
- "privacy shield". The "privacy shield" is an agreement between the European Union (EU) and the USA to ensure compliance
- with European data protection standards in the USA. Mailchimp is a service with which the dispatch of newsletters can
- be organized and analyzed. With the help of Mailchimp we can analyze our newsletter campaigns. When you open an e-mail
- sent with Mailchimp, a file contained in the e-mail (so-called web beacon) connects to the Mailchimp servers in the USA.
- This allows you to determine whether a newsletter message has been opened and which links have been clicked on. In addition,
- technical information is recorded (e.g. time of registration, IP address, browser type and operating system). This information
- cannot be assigned to the respective newsletter recipient. They are used exclusively for statistical analysis of newsletter
- campaigns. The results of these analyses can be used to better adapt future newsletters to the interests of the recipients.
- Details on Mailchimp and its privacy policy can be found here: https://mailchimp.com/legal/privacy/
-
-
-
- The data are stored for the purpose of newsletter subscription will be stored by us until you unsubscribe from the newsletter
- and will be deleted from our servers as well as from the servers of Mailchimp after you unsubscribe from the newsletter.
- Data stored by us for other purposes (e.g. email address for the use of our Service) remain unaffected.
-
-
-
- You can withdraw your consent or object to the processing of data (email address) and their respective use for
- sending the newsletter and analyzing your data at any time. This can be done free of charge (except for the
- transmission costs) and via a link in the newsletter itself or notification to us or, if applicable, to Mailchimp.
-
-
-
- III. What Third Party Services, Cookies, Analytics and Social Plugins does the Website use?
-
-
- Cookies
-
- In order to offer you a convenient online service featuring numerous functions, our Website uses text files ("Cookies" )
- containing information to identify returning visitors for the time of their visit to our Website. Cookies are usually
- saved on your device and do not cause any harm. Cookies facilitate the transfer of specific content, such as entering
- data, which has already been supplied, and help us identify popular sections of our Website.
-
-
-
- The processing of data when using Cookies is based on our legitimate interests of a statistical analysis of the User relationship
- for marketing and quality assurance purposes according to Art. 6 (1) f. GDPR or TMG.
-
-
-
- OPT-OUT: You can deactivate the use of Cookies in the settings of your browser at any time. To find
- out how to change the settings, please consult the help function of your browser. Users may also manage a lot of online
- Cookies by different businesses on the US-website http://www.aboutads.info/choices/ or the EU-website http://www.youronlinechoices.com/uk/your-ad-choices/.
- However, we want to point out that without Cookies the use and comfort of use of our services may be restricted.
-
-
- Google Analytics
-
- We use Google Analytics a web analytics tool offered by Google (inter alia Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Ireland
- and Google LLC, Mountain View, CA, USA ("Google" ).
- This analysis service uses so-called "cookies". For analysis, text files will be stored on your device. The information
- stored in the corresponding files about the use of this website are generally transmitted and stored in Google server
- in the USA. As the IP anonymization is active on this Website, your IP address will be shortened by Google within the
- member states of the European Union (EU). This information will be used to evaluate your use of the services offered
- here and enable the operator of this website to analyze your website activity and provide other services associated with
- the website service. The IP address transmitted from your browser, as part of Google Analytics will not be merged with
- other data from Google.
-
-
-
- When the IP address is processed this is based on our legitimate interests of a statistical analysis of the relationship
- for marketing and quality assurance purposes according to Art. 6 (1) f. GDPR or TMG.
-
-
-
- Adjusting the settings of your browser can prevent the use of cookies. In this case, it may be possible that the functions
- of the service offered here cannot be used in its entirety. Furthermore, it is possible to prevent the acquisition and
- processing of data generated by the "cookies" in relation to the use of this website, by downloading and installing the
- browser plugin available at the following link: http://tools.google.com/dlpage/gaoptout?hl=de
-
-
-
- We point out that an automated decision making or profiling can take place when integrating
- Google or an existing Google account.
-
- For Users who have their usual residence in the European Economic Area or Switzerland,
- Google Ireland Limited is the data controller for your data, unless otherwise stated in the
- privacy notices of a particular service. Google Ireland Limited is therefore the company
- affiliated with Google which is responsible for processing your data and complying with
- applicable data protection laws.
-
- You can also find more information in Google's privacy policy https://policies.google.com/privacy .
-
-
- Google Fonts
-
- Our Website uses the "Google Fonts" service of Google (inter alia Google Ireland Limited,
- Gordon House, Barrow Street, Dublin 4, Ireland and Google LLC, Mountain View, CA, USA to integrate and display
- text on the website. For this purpose Google may process your data (including the IP address) on servers in the USA.
-
-
-
- When the IP address is processed this is based on our legitimate interests of technical functionality of the Website based
- on Art. 6 (1) f. GDPR or TMG.
-
-
- For Users who have their usual residence in the European Economic Area or Switzerland,
- Google Ireland Limited is the data controller for your data, unless otherwise stated in the
- privacy notices of a particular service. Google Ireland Limited is therefore the company
- affiliated with Google which is responsible for processing your data and complying with
- applicable data protection laws.
-
-
- You can also find more information in Google's privacy policy: https://policies.google.com/privacy
-
-
- Mailchimp
-
- We use the services by Mailchimp for sending newsletters and emails. For details on Mailchimp please refer to the
- respective section above .
-
-
- Youtube
-
- We use the YouTube.com platform to [post our own videos and] make them publicly
- available. YouTube is operated by Google (inter alia Youtube LLC, USA and Google Ireland
- Limited, Gordon House, Barrow Street, Dublin 4, Ireland).
-
-
-
- Some of our Website contain links to the YouTube platform. In general, we are not
- responsible for the content of websites to which links are provided. In the event that you click
- a link on YouTube, we would like to point out that YouTube stores the data of its users (e.g. personal information, IP address) in accordance with its own privacy guidelines and uses
- them for business purposes.
-
-
- On our Website we also integrate videos stored on YouTube directly. In this integration,
- content from the YouTube website is displayed in sub-areas of a browser window. However,
- YouTube videos are only accessed by clicking on them separately. This technique is also
- called ‘framing’. If you click on a (sub-)page of our Website where YouTube videos are
- included, a connection is established to the YouTube servers and the content is displayed on
- the Website by notifying your browser.
-
-
- YouTube content is only integrated in the ‘extended data protection mode’. YouTube
- provides this by itself, thereby ensuring that YouTube does not initially store any cookies on
- your device. However, when you access the relevant pages, the IP address and the other data
- are processed by Youtube. However, this information cannot be assigned to you unless you
- log in your YouTube or another Google service (e.g. Gmail) account or are permanently
- registered before accessing the site.
-
-
- As soon as you click on an integrated video, YouTube only stores cookies on your device that
- do not contain any personally identifiable data, unless you are currently logged in to a Google
- service. These cookies can be prevented by appropriate browser settings and extensions (see
- above [add link to opt-out in the “Cookies” section above].
-
-
- For Users who have their usual residence in the European Economic Area or Switzerland,
- Google Ireland Limited is the data controller for your data, unless otherwise stated in the
- privacy notices of a particular service. Google Ireland Limited is therefore the company
- affiliated with Google which is responsible for processing your data and complying with
- applicable data protection laws.
-
-
- Further information about data processing and privacy practices of YouTube and Google can
- be found at www.google.de/intl/de/policies/privacy/ and
- https://support.google.com/youtube/answer/171780?hl=e
-
-
-
- IV. How are my Data processed when using the Gitpod Service (with User Account)?
-
-
- Registration and Access to Existing Account
-
- In order to fully use our full online Service, you will need to register. You may only register if you have an existing user
- account at the third party services set forth on the Website, for example the service offered on the website https://github.com
- operated by GitHub Inc., 88 Colin P Kelly Jr St, San Francisco, CA 94107, USA, ("Existing Account" ).
-
-
-
- When you sign up for using the Gitpod Service via your Existing Account, data at such Existing Account with be accessible
- by us with your explicit consent only. Such data include:
- user profile data (name, username and email address), list of repositories you have access to.
-
-
-
- You can manage these data at any time via using your Existing Account linked to the Gitpod Service.
-
-
-
- The data entered or transferred via the Existing Account as part of the registration process and any further data entered,
- will only be used via the Website and with our support to the extent that this processing is necessary for the fulfillment
- of a contract with us or for the implementation of pre-contractual measures, i.e. use of the Gitpod Service, as well
- as for the execution and processing of inquiries by you.
-
-
-
- The processing of data when using our Service is generally based on your explicit consent when signing up (based on Art.
- 6 (1) a. GDPR) as well as the legal basis of Art. 6 (1) b. GDPR or TMG, i.e. the data will be processed, when this is
- necessary for the fulfillment of the contract between you and us or for executing any measures that take place on your
- request prior to the contract.
-
-
-
- Use of the Gitpod Service
-
-
- For the further use of the Gitpod Service on the Website you submit more data depending on the way of use of our services
- according to our terms of service .
-
-
-
- We use the information and data collected in the Service, including your personal data, in order to fulfill our contractual
- obligations for you/our customers based on the legal basis of Art. 6 (1) b. GDPR or TMG and as further set forth in this
- privacy policy or our terms of service . This also includes sending
- you emails and notifications necessary for the Service.
-
-
-
- In the event we process personal data controlled by the customer as data processor we will offer and enter into a respective
- separate data processing agreement with such customer whereas such data processing agreement may be requested via email
- to
- data@gitpod.io .
-
-
-
- We do not store or receive any kind of payment or credit card data but use external payment providers as set forth on the
- Website.
-
-
-
- We may also analyze your personal data when using the Gitpod Service for the purpose of improving our Service. We may also store your data to assure fair use of our Service.
- The legal basis for analyzing and storing such data is Art. 6 (1) f. GDPR with our legitimate interest of marketing, quality assurance and fraud prevention.
-
-
- We also process your data if this is necessary to comply with our legal obligations (legal
- basis: Art. 6 (1) c. GDPR), for example legal retention periods.
-
-
- For the abovementioned purposes your data may also be shared with our shareholders or affiliated companies.
-
-
- Integration of Third Party Services
-
-
- When using the Gitpod Service your data may also be processed by third party providers as set forth in this privacy policy,
- for example FreshChat . For details please refer to III. above
- as well as VI. and VII. below.
-
-
-
- When using our paid Service your data will be processed by external payment providers.
- Currently we use the payment services by Stripe (for EU/EEA: Stripe Payments Europe, Ltd.,
- 1 Grand Canal Street Lower, Grand Canal Dock, Dublin, Irland; more information:
- https://stripe.com/de/privacy ; contact: https://stripe.com/contact) and Chargebee (by
- Chargebee Inc. 340 S Lemon Avenue, 1537 Walnut, CA 91789, USA; more information:
- https://www.chargebee.com/privacy/ ). When using such services your data may be processed
- outside the EU. The US companies of Stripe and Chargebee are each certified according to
- ‘Privacy Shield’ to comply with data protection standards applicable in the EU (for more
- information please refer to: https://www.privacyshield.gov/ ).
-
- Our service may also include links to pages on Twitter, Medium, Spectrum Chat/Github). For
- details please refer to V. below [add link to V.].
-
V. How are Data processed when visiting our Social Media pages?
-
- We operate pages on
-
-
- Twitter (twitter.com or applications) by Twitter Inc., 1355 Market Street, Suite 900,
- San Francisco, CA 94103, USA, please also refer to: https://twitter.com/de/privacy /
-https://twitter.com/personalization;
- Medium (medium.com or applications) by A Medium Corporation, 799 Market Street,
- 5th Floor, San Francisco, CA 94103, USA, please also refer to:
- https://medium.com/policy/medium-privacy-policy-f03bf92035c /
-https://medium.com/me/settings / https://medium.com/me/following/suggestions
- Spectrum Chat (spectrum.chat or applications) by GitHub Inc., 88 Colin P Kelly Jr St,
- San Francisco, CA 94107, USA, please also refer to:
-https://spectrum.chat/privacy.html
-
-
- When you visit our Social Media pages, data is processed both by us and by the responsible
- social media provider.
-
- The respective provider of Social Media assumes the data protection obligations towards you
- as the user, such as information on data processing, and is the contact person for your rights.
- This results from the fact that such provider has direct access to the relevant information on
- the Social Media page and the processing of your data. However, you are also welcome to
- contact us if this should become necessary and we will then forward the request to the
- respective provider if necessary.
-
- When using the Social Media providers set forth above data may also be processed outside
- the EU. The US companies of Github and Twitter are certified in accordance with the EU-US
- Privacy Shield agreement, which guarantees compliance with data protection regulations in
- the EU. For more information please refer to their respective privacy policies or
- https://www.privacyshield.gov . By using Medium Services, you authorize Medium to
- transfer, store, and use your information in the United States and any other country where
- Medium operates. Where your data is disclosed to Medium’s processors, it is subject by
- contract to at least the same level of data protection as that set forth under
- https://medium.com/policy/medium-privacy-policy-f03bf92035c9.
-
- With our Social Media pages, we can communicate with you and provide you with interesting
- information. We may receive further data from you through your comments, shared images,
- messages and reactions, which are then processed to answer or communicate with you. If you
- use Social Media on several end devices, a cross-device analysis of the data can take place.
- Furthermore, the providers of the Social Media pages may also use cookies and tracking
- technologies to analyze and improve their services.
-
- Data processing takes place with your consent or for the purpose of answering your enquiry
- (Art. 6 (1) a, b GDPR) or on the basis of legitimate interests in improving the services,
- advertising and marketing activities and presentation to the outside world (Art. 6 (1) f GDPR).
-
- As Twitter user, you can at any time influence how your user behavior is recorded when you
- visit Twitter pages. To do this, you can manage the settings for advertising preferences in
- your Twitter account or under https://twitter.com/personalization or
- https://twitter.com/de/privacy#overlay-chapter2.10.1 or without an account under
- https://pscp.tv/account/settings. Twitter also provides opportunities to contact or exercise
- rights at https://help.twitter.com/forms/privacy.
-
- As Medium user, you can at any time influence how your user behavior is recorded when you
- visit Medium pages. To do this, you can manage the settings for advertising preferences in
- your Medium account or under https://medium.com/me/settings or
- https://medium.com/me/following/suggestions. Medium also provides opportunities to contact
- or exercise rights in their privacy policy under https://medium.com/policy/medium-privacy-
- policy-f03bf92035c9.
-
- As a user of Spectrum Chat / Github you can find more information on how to influence the
- processing of your data in their privacy policy https://spectrum.chat/privacy.html or contact
- them via help@spectrum.chat.
-
-
- VI. Are my Data transferred to Third Parties? Does Profiling or automated decision making take place?
-
-
-
-
- Transfer of Data to Third Parties
-
-
- We will transfer your personal data to a third party only (i) within the scope of legal provisions,
- i.e. if we are obliged to transfer the data due to a government or court order, or, (ii) if applicable,
- legal provisions authorize the transfer, e.g. if the transfer is required to pursue our legitimate
- interests or to fulfil a contract, for example in case of mergers and acquisitions, (iii) or if you
- give your explicit consent.
-
-
-
- For more information please refer to this privacy policy or contact us via data@gitpod.io .
-
-
-
- Automated Decision Making including Profiling
-
-
- In general we do not process any personal data via automated decision making including profiling via the Website or Service.
- However, such profiling or automated decision making may happen by third party providers through the Website or Service.
- We will inform you about such fact if possible.
-
-
-
- Profiling means any automated processing of personal data consisting in the use of such personal data to evaluate certain
- personal aspects relating to a natural person, in particular to analyse or predict aspects relating to the performance
- of work, economic situation, health, personal preferences, interests, reliability, behaviour, location or relocation
- of that natural person. Examples of such profiling include the analysis of data (e.g. based on statistical methods) with
- the aim of displaying personalized advertising to the user or giving shopping tips. The data subject shall not be subject
- to a decision based exclusively on automated processing, including profiling, which has legal effect against him or significantly
- affects him or her in a similar manner.
-
-
-
-
- VII. Are my Data transferred outside the EU?
-
-
- When visiting the Website and using our Service data may be transferred to countries outside the EU whereas the services
- by Google/Youtube , Mailchimp , GitHub , Chargebee and , Stripe are affected.
-
-
-
- When using our Service your data may also be processed by our cloud service provider (namely: Google Cloud) on servers outside
- the EU.
-
-
-
- The US companies providing the services of Google, Mailchimp, GitHub, Stripe and Chargebee are each certified under EU-US-Privacy-Shield
- and comply with data protection standards applicable in the EU. For more information on EU-US-Privacy-Shield and details
- about the certificates please refer to: https://www.privacyshield.gov
-
-
- Your data may also be processed outside the EU when visiting our Social Media pages. For
-further information please refer to section V. .
-
-
-
- VIII. Your Rights
-
-
- As a data subject you have the right:
-
-
- to withdraw your consent to us at any time. As a result, we are no longer allowed to continue the processing of data based
- on this consent in the future;
-
-
- to object to the processing of your personal data, if your personal data are processed on the basis of legitimate interests
- pursuant to Art. 6 (1) f. GDPR insofar as there are reasons for this arising from your particular situation;
-
-
- to obtain from us access to your personal data;
-
-
- to obtain from us without undue delay the rectification of inaccurate personal data concerning you;
-
-
- to obtain the erasure of your personal data stored with us, unless the processing is necessary to exercise the right to free
- expression of opinion and information, to fulfill a legal obligation, for reasons of public interest or to assert, exercise
- or defend legal claims;
-
-
- to demand the restriction of the processing of your personal data, if the accuracy of the data is disputed by you, the processing
- is unlawful, but you refuse its deletion and we no longer need the data, but you need it to assert, exercise or defend
- legal claims or you have filed an objection against the processing; and
-
-
- to receive your personal data, which you have provided to us, in a structured, current and machine-readable format or to
- request the transmission to another controller.
-
-
-
-
- If you wish to make use of your rights mentioned above please send an email to data@gitpod.io .
-
-
-
- If you obtain access to your personal data you may, in particular, request access to the following information: the purposes
- of the processing, the categories of personal data concerned, the recipients or categories of recipients to whom the
- personal data have been or will be disclosed. We also will, if possible, give information about the envisaged period
- of time for which the personal data will be stored, the existence of the right to request from the controller rectification
- or erasure of personal data or restriction of processing of personal data concerning the data subject or to object to
- such processing, the right to lodge a complaint with a supervisory authority and where the personal data are not collected
- from the data subject, any available information as to their source and the existence of automated decision-making, including
- profiling and meaningful information about this event.
-
-
-
- You have the right to lodge a complaint vis-à-vis a supervisory authority of your choice.
- For example for Berlin/Germany: https://www.datenschutz-berlin.de/kontakt.html. An overview of the European National Data
- Protection Authorities may be found here: http://ec.europa.eu/newsroom/article29/item-detail.cfm?item_id=612080
-
-
-
-
- IX. Duration of Storing your Data; Data Security; Access and Changes to this Privacy Policy; Contact Details
-
-
-
- Duration of Storing your Data
-
-
- As a rule, we only store your personal data for as long as it is necessary for the execution of the contract or the respective
- purpose and limit the storage period to an absolutely necessary minimum. Your IP-address and server-log-files (as set
- forth above) are stored for seven (7) days for security and technical reasons.
-
-
-
- In the case of long-term contractual relationships, such as the use of our Service, these storage periods may vary, but are
- generally limited to the duration of the contractual relationship or, with regard to the inventory data, to the maximum
- legal retention periods, e.g. in accordance with the German Commercial Code (Handelsgesetzbuch, HGB) and
- the Tax Code (Abgabenordnung, AO) .
-
-
-
- Criteria for the storage period include whether the data are still up-to-date, whether the contractual relationship with
- us still exists, whether an inquiry has already been processed, whether a process has been completed or not, and whether
- legal retention periods for the personal data concerned are relevant or not.
-
-
-
- Data Security
-
-
- We have installed technical and organizational measures in order to safeguard our Website and/or Service against loss, destruction,
- access, changes or the distribution of your data by unauthorized persons.
-
-
-
- The Website and Service is operated through a safe SSL-connection. If an SSL-connection is activated third parties are prevented
- from reading any data that are transferred by you to us.
-
-
-
- Access and Changes to this Privacy Policy
-
-
- This privacy policy is accessible via our Website under https://gitpod.io/privacy/
- and may be downloaded and printed anytime.
-
-
-
- We reserve the right to change the regulations of this privacy policy at any time, taking into account currently applicable
- data protection provisions. In case of any changes, you will be notified.
-
-
-
- Contact Details
-
-
- For any inquiries and additional questions about processing personal data please contact data@gitpod.io .
- Further details may be found here: https://gitpod.io/imprint/
-
-
-
-)
-
-export default PrivacyPage
diff --git a/src/pages/recruiting.tsx b/src/pages/recruiting.tsx
deleted file mode 100644
index 9a532bd07..000000000
--- a/src/pages/recruiting.tsx
+++ /dev/null
@@ -1,187 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import Banner from '../components/Banner'
-import Recruiting from '../resources/recruiting-icon.svg'
-import TextCards from '../components/TextCards'
-import TextCard from '../components/TextCard'
-import { textCardsData } from '../contents/recruiting'
-import Quote from '../components/Quote'
-import RecruitingBG from '../resources/recruiting-bg.png'
-import Bg from '../components/Bg'
-import ActionCard from '../components/ActionCard'
-import PricingTable from '../components/PricingTable'
-import PopOver from '../components/PopOver'
-import Circle from '../components/Circle'
-import Bitbucket from '../resources/bitbucket.svg'
-import Github from '../resources/octicons-mark-github.svg'
-import Gitlab from '../resources/gitlab.svg'
-import { Link, graphql } from 'gatsby'
-import Img from 'gatsby-image'
-
-const RecrutingPage: React.SFC<{}> = ({data}: any) => (
-
-
- Make Sure You’re Discovering Your Best Applicants }
- linkPath="/recruiting/#recruiting"
- linkText="Choose your Solution"
- img={ }
- />
-
-
-
- {
- textCardsData.map((f, i) => (
-
- ))
- }
-
-
-
-
-
-
-
-
-
-
-
- Gitpod.io
- FREE Trial
-
- Gitpod Managed
-
-
- Gitpod Self-Hosted
- FREE Trial
-
-
-
-
-
- Pricing
- Please enquire
- Please enquire
- Please enquire
-
-
- Domain
- gitpod.io
- Custom
- Custom
-
-
- Managed By
- Gitpod
- Gitpod
- You
-
-
- Infrastructure
- Globally distributed
- > 1 geographical regions
- On-prem or private cloud
-
-
- SLA
- Optional
- Optional
-
-
-
- Support
-
-
-
-
-
- Analytics
-
-
-
-
-
- github.com
-
-
-
-
-
- GitHub Enterprise
- Public only
-
-
-
-
- gitlab.com
-
-
-
-
-
- Gitlab Self-Managed
- Public only
-
-
-
-
- Bitbucket
- Soon
- Soon
- Soon
-
-
- Custom Authentication
-
- OAuth2
- OAuth2
-
-
- Custom Branding
-
-
-
-
-
-
- Start for Free
- Contact Sales
- Host Yourself
-
-
-
-
-
-
-
-)
-
-export const query = graphql`
- query {
- file(relativePath: { eq: "recruiting.png" }) {
- childImageSharp {
- fluid(quality: 100, maxWidth: 1980) {
- ...GatsbyImageSharpFluid
- }
- }
- }
- }
-`
-
-export default RecrutingPage
diff --git a/src/pages/screencasts.tsx b/src/pages/screencasts.tsx
deleted file mode 100644
index ed782ec30..000000000
--- a/src/pages/screencasts.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react'
-import IndexLayout from '../layouts'
-import Hero from '../components/screencasts/Hero'
-import Screencasts from '../components/screencasts/Screencasts'
-// @ts-ignore
-import screencastsData from '../contents/screencasts.json'
-
-const ScreencastsPage = () => (
-
-
-
-
-)
-
-export default ScreencastsPage
diff --git a/src/pages/self-hosted-terms.tsx b/src/pages/self-hosted-terms.tsx
deleted file mode 100644
index 94a32260d..000000000
--- a/src/pages/self-hosted-terms.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import TextBox from '../components/TextBox'
-
-const SelfHostedTermsPage: React.SFC<{}> = () => (
-
-
- Gitpod Self-Hosted Free License Terms and Gitpod Enterprise Source Code License
- 1 Preamble
- 1.1 These Software Licensing Terms (“Terms”) provide the terms and conditions
- that govern usage of the Software Gitpod Self-Hosted Free Edition in source and
- binary form (“Software”). The Software is provided by Gitpod GmbH, Am
- Germaniahafen 1, 24143 Kiel (“Gitpod”). By downloading or using to the
- Software, you agree to be bound by the following Terms.
- 2 Scope of Terms
- 2.1 These Terms apply to the usage of the Software, which is designed to be used
- for business purposes.
- 2.2 These Terms apply to the binary code and to the source code of the Software,
- unless the header of a source file explicitly refers to a different license.
- 2.3 These Terms apply unless you have a separate agreement with Gitpod in
- written form that explicitly supersedes these Terms.
- 3 License Fees
- 3.1 The use of the Software as described in Sec. 2 is free of charge. It is
- however limited to the features that are accessible without a license key and
- may only take place in accordance with these Terms.
- 3.2 In case you want to use additional features or distribute the Software or
- modifications to it without the restrictions of these Terms, please reach out
- for a license key, which is subject to different legal and commercial terms.
- 4 Granting of Rights
- 4.1 Permission is hereby granted to obtain a copy of the Software and their
- accompanying documentation to use, reproduce and execute the Software for
- internal purposes in accordance with these Terms and to distribute the
- unmodified software without charging a fee for it.
- 4.2 Subject to the conditions of these Terms, you may modify the Software,
- including patching it. You agree that Gitpod retains all right, title and
- interest in and to all such modifications and patches (“Modifications”). You may
- only use, reproduce and execute the Modifications for internal purposes in
- accordance with these Terms. You may not distribute Modifications to any third
- party. Nonetheless, you may make such modifications publicly available as fork
- of the repository which hosts the original version of the Software, however only
- under these Terms and only, if accompanied by the complete machine-readable
- source code of the Modifications and of the Software.
- 4.3 The copyright notices in the Software and this entire statement, including
- the above license grant and these Terms must be included in all copies of the
- Software (in whole or in part). Copyright notices, serial numbers and other
- features aimed at product identification or control may not be removed, altered,
- suppressed or otherwise bypassed under any circumstances. For the avoidance of
- doubt, the software may neither in source nor in binary form be modified in
- order to enable or activate any features of the software that would otherwise
- require a valid license key.
- 4.4 Any other usage of the Software, in particular modifying, combining it with
- other software and providing it to third parties on a commercial basis, is
- prohibited. This includes any sale, lease, indirect use of the Software to the
- benefit of third parties and its provision as a commercial service, or offering
- it as a part of a commercial service or platform.
- 4.5 The Software remains the exclusive intellectual property of Gitpod at all
- times. Mandatory rights resulting from applicable copyright law (e.g. related to
- decompilation) remain unaffected.
- 4.6 Gitpod provides the source code of the Software on a voluntary basis and is
- not obligated to do so. Furthermore, Gitpod is not obligated to provide any
- updates or upgrades it may develop.
- 4.7 Please consider purchasing a license key (see above Sec. 3) for further
- usage rights and additional features.
- 5 Telemetry
- 5.1 Gitpod intends to collect certain statistical data on the use of the
- Software on an anonymized basis in the future with a future version of the
- Software. The data will only be used to improve the Software and the data will
- not be sold to third parties. Gitpod will inform about this with the future
- release.
- 6 Warranty and Liability
- 6.1 THE SOFTWARE IS PROVIDED FREE OF CHARGE ON AN “AS IS” BASIS, WITHOUT
- WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
- NON-INFRINGEMENT.
- 6.2 IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE
- BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR
- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF
- OR OTHER DEALINGS IN THE SOFTWARE.
- 6.3 THIS LIMITATION OF LIABILITY DOES NOT EXCLUDE MANDATORY LEGAL GROUNDS FOR
- LIABILITY SUCH AS LIABILITY FOR PERSONAL INJURY, GROSS NEGLIGENCE, WILLFUL
- INTENT OR LAWS ON PRODUCT LIABILITY.
- 7 Third-party Components
- 7.1 The Software contains third-party components including open source software
- (“Third-Party Components“). Parts of such Third-Party Components are subject to
- deviating license terms (“Third-Party License Terms“). A list of such
- Third-Party Components and its respective Third-Party License Terms are
- available via the files License.third-party.npm.txt and
- License.third-party.go.txt. No stipulation in these Terms is intended to impose
- further restrictions on your use of such Third-Party Components licensed under
- Third-Party License Terms.
- 7.2 Gitpod reserves the right to introduce deviating or additional Third-Party
- License Terms in the course of modifications of the Software and in case of
- updates for the Software to the extent necessary due to additional Third-Party
- Components or due to changed Third-Party License Terms.
-
-
-)
-
-export default SelfHostedTermsPage
diff --git a/src/pages/self-hosted.tsx b/src/pages/self-hosted.tsx
deleted file mode 100644
index 32f6840e6..000000000
--- a/src/pages/self-hosted.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import MoreInfo from '../components/MoreInfo'
-import Banner from '../components/Banner'
-import ActionCard from '../components/ActionCard'
-import { FeatureItemProps } from '../components/FeatureItem'
-import FeaturesSection from '../components/FeaturesSection'
-import Control from '../resources/control.svg'
-import Support from '../resources/support.svg'
-import GithubGitlab from '../resources/github-gitlab.svg'
-import Adminstration from '../resources/administration.svg'
-import Install from '../components/self-hosted/Install'
-import { MoreInfoContents } from '../contents/moreInfoContents'
-import { graphql } from 'gatsby'
-import Img from 'gatsby-image'
-
-const features: FeatureItemProps[] = [
- {
- title: 'Full Data Control',
- text: 'All data remains on your infrastructure, as Gitpod can run behind corporate firewalls and on air-gapped networks.',
- img: Control
- },
- {
- title: 'GitLab & GitHub Integration',
- text:
- 'Integrates seamlessly with your Git hosting solution like GitHub Enterprise, GitLab Community Edition, or Enterprise Edition. Bitbucket support is coming soon.',
- img: GithubGitlab
- },
- {
- title: 'Professional Support',
- text: 'Schedule a call with our engineers whenever you need help.',
- img: Support
- },
- {
- title: 'Easy Administration',
- text:
- 'No need for complicated user management. Simply use OAuth from your Git hosting and enjoy simplicity while retaining full control.',
- img: Adminstration
- }
-]
-
-const SelfHostedPage: React.SFC<{}> = ({ data }: any) => {
- return (
-
- <>
- {/* ----- Banner ----- */}
-
- Self-Host Gitpod on Your Own Infrastructure.
-
- }
- linkPath="/self-hosted/#install"
- linkText="Install Now"
- paragraph="Free for unlimited Users."
- img={ }
- />
-
- {/* ----- Section Features ----- */}
-
-
-
- {/* ----- Section Install ----- */}
-
-
-
- {/* ----- Section Customizations ----- */}
-
-
-
- Please reach out. We’re happy to help get
- your team the perfect Gitpod setup.
-
-
- }
- anchors={[{ href: 'https://community.gitpod.io/', text: 'Community Support' }]}
- />
-
-
- >
-
- )
-}
-
-export const query = graphql`
- query {
- file(relativePath: { eq: "self-hosted-cloud.png" }) {
- childImageSharp {
- fluid(traceSVG: { color: "#0b2144" }) {
- tracedSVG
- src
- }
- }
- }
- }
-`
-
-export default SelfHostedPage
diff --git a/src/pages/terms.tsx b/src/pages/terms.tsx
deleted file mode 100644
index 1ee14beb5..000000000
--- a/src/pages/terms.tsx
+++ /dev/null
@@ -1,583 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import TextBox from '../components/TextBox'
-
-const TermsPage: React.SFC<{}> = () => (
-
-
-
- Gitpod Terms of Service
-
-
-
- The provider of the internet services and other products supplied or provided available at gitpod.io (the "Website"
- and together with the internet services and other products, the "Service" ) is Gitpod GmbH, Am Germaniahafen
- 1, 24143 Kiel, Germany, registered at the commercial registry of the district court of Kiel under HRB 22228, represented
- by the managing directors Sven Efftinge, Moritz Eysholdt, Dr. Jan Köhnlein ("Gitpod" or "we/our" ).
-
-
- The use of the scope of Services provided by us and used by our registered customers in form of individuals and businesses
- (each a "Customer" or "you/your" ) is determined by the following general terms
- of service ("Terms of Service" or "Agreement" ).
-
-
- These Terms of Service shall apply to all Customers including consumers according to Section 13 of the German Civil Code
- (BGB) and entrepreneurs according to Section 14 of the German Civil Code (BGB). A consumer is a natural person who places
- the order for a purpose which cannot be attributed to their commercial or self-employed professional activity (each a
- "Consumer" ). An Entrepreneur is a natural or legal person or a partnership with legal capacity who,
- when concluding a legal transaction, acts in the exercise of his commercial or self-employed professional activity (each
- an "Entrepreneur" ).
-
-
- Any provisions, which are contrary to these Terms of Service, are not part of the contract, unless we explicitly and in writing
- agree that these provisions shall be valid.
-
-
-
- A. Creating an Account and Conclusion of the Agreement
-
-
- It is a prerequisite to use the Service of Gitpod having an existing account of Customer at https://github.com operated by
- GitHub Inc., 88 Colin P Kelly Jr St, San Francisco, CA 94107, USA or any other third party service as set forth on the
- Website ("Existing Account" ).
-
-
- You offer to conclude this Agreement when you (i) accept these Terms of Service by checking the box at the Website, (ii)
- provide the data, which is managed in accordance with our privacy policy ,
- required for opening a Gitpod account in our Existing Account page as described throughout this Agreement; and (iii)
- declare your intention to create, and create, an account by clicking on the respective button in the Existing Account
- page. By clicking on the button "Create my free account" the Customer submits an offer on the conclusion
- of the contract about the usage of the Service and agrees to the Agreement and the privacy policy of Gitpod which are
- valid at the time of registration.
-
-
- Notwithstanding anything in the contrary in this Agreement, upon your offer to enter into this Agreement, we may, at our
- discretion, decide to accept or reject such offer. Unless an explicit declaration of the acceptance is given, our acceptance
- can be deemed given when Gitpod grants the Service offered under this Agreement.
-
-
- There is no legal entitlement for using the services provided by Gitpod. Gitpod has the right to stop or deny any registration
- without giving any reasons.
-
-
- By the time of sign-up the Customer must be at least 18 years old and fully contractually capable. In case of doubt Gitpod
- is entitled to ask the individual Customer to submit a documentary evidence of age or contractual capability.
-
-
- In order to access or amend the data relating to the Gitpod account the Customer shall access or amend such data within the
- Existing Account.
-
-
- During our Services, you remain in control of your Existing Account. Cancelation or termination of our Services has no effect
- on your Existing Account.
-
-
- After successful registration the Customer shall be able to log in for using our Service. A login is only possible via the
- access data assigned to the Customer by Gitpod (user name and password).
-
-
-
- B. Support and Consulting
-
-
- Usually Gitpod does not offer any integration, support and consulting services as part of the Service. Within its sole discretion
- Gitpod may offer support via email or in-Service communications as set forth in detail on the Website.
-
-
- The Customer’s rights in case of defects of the Service remain unaffected.
-
-
-
- C. Rights of Use and Licenses; Open Source
-
-
- We retain ownership of all intellectual property rights of any kind related to the Website and Service unless explicitly
- granted to you pursuant to this Agreement.
-
-
- Upon successful registration for the Service and payment of Fees (as applicable) Gitpod hereby grants to Customer the worldwide,
- non-exclusive, non-sublicensable, non-transferable right to use the Service for the term and subject to the provisions
- of this Agreement. Customer accepts such grant of rights.
-
-
- The Customer is aware that the Service contains open source components and such components are governed by the respective
- open source licenses.
-
-
-
- D. Fees and Payment
-
-
- Depending on the time of using the Service and subscription plan available on the Website chosen by Customer Gitpod demands
- from the Customer a fee for using its Service based on "Gitpod-Hours (GPh)" which is our internal
- unit to express amounts, credits and debits of Service use (the "Fee" ). The description, options and
- total amount of such Fee shall be based on the current list shown on the Website or as provided to Customer in text form.
-
-
- All prices for Customers that are Consumers (Section 13 BGB) do include the statutory VAT. All prices for Customers that
- are Entrepreneurs (Section 14 BGB) do not include statutory VAT and such Customer as Entrepreneur shall be solely responsible
- for any applicable taxes and related costs.
-
-
- The Customer shall pay the Fee by using the payment methods set forth on the Website without any extra charge if Customer
- is a consumer (Section 13 BGB). The currently valid prices are displayed before the respective purchase is finalized
- within the Service. No further costs or fees shall arise for the Customer as Consumer when making a payment.
-
-
-
- E. Availability
-
-
- Our Services are generally available on the Website. Exceptions are: Back-up processes, system maintenance, system or database
- repair work, unavailability of the third party service for the Existing Account. We try to keep these disruptions on
- a low level. Customers’ rights in case of defects remain unaffected.
-
-
-
- F. Liability
-
-
- We are liable without limitation for
-
-
-
- damages caused deliberately or due to gross negligence by Gitpod;
-
-
- damages arising out of death, injury to body or health;
-
-
- damages due to a neglect of duty by Gitpod concerning essential contractual rights and obligations, which are absolutely
- necessary for a proper execution of the contract, and which might endanger the fulfilment of the contractual purpose
- (material contractual obligations). In that case, however, liability shall be limited to typical and foreseeable damages;
-
-
- liability according to the Product Liability Act;
-
-
- liability in case of a guarantee (without hereby giving such guarantee).
-
-
-
- Any exemption from liability as well as limitations of liability of Gitpod shall also apply to the legal representatives
- and assistants of Gitpod.
-
-
- No further liability for Gitpod exists. In particular, Gitpod is not liable for a failure or delay in rendering Service to
- the extent caused by circumstances beyond its reasonable control.
-
-
- If Customer is an Entrepreneur the statutory provision shall apply and such Customer shall also be held responsible for all
- its legal representatives, assistants and any assigned users of the Service according to Section 278 BGB.
-
-
-
- G. Warranty for Material Defects and Guarantees
-
-
- We are liable for material defects according to the valid legal regulations if the Customer is a Consumer. The limitation
- period begins with access to the Service. In such case the statutory warranty rules apply without restriction.
-
-
- If the Customer is an Entrepreneur the following shall apply: The Customer shall check the contractual Service immediately
- upon receipt for obvious defects and inform us immediately if they are present, otherwise a warranty for these defects
- is excluded. The same applies if such a defect becomes apparent later. Section 377 of the German Commercial Code (HGB)
- applies as far as legally permissible. The period for warranty claims is restricted to 12 calendar months from the first
- appearance of the defect as far as permitted by law. The limitation period begins with access to the Service.
-
-
- We are not accountable for defects of Service or defects concerning the rights of Service in case the Service was supplied
- or provided without payment and the defects have not been left intentionally undisclosed.
-
-
- We do not offer any guarantees for our Service without an expressly given confirmation.
-
-
-
- H. Customer's General Obligations
-
-
-
- True Data and Fair use: You must fill in all required fields in the sign-up sheet truthfully and completely.
- You must respect and abide these Terms of Service, especially the obligations for Fair and Acceptable Use set forth
- in Section I. You are responsible for the content you create, post, upload or otherwise store, make available, or communicate
- in use of the Service.
-
-
- Password and Security: You shall chose a safe password (we recommend at least 8 signs, including a
- letter, cypher and special character) for your account and change such password on a regular basis. You shall only pass
- such password information to authorized persons.
-
-
- Defects and Bug reporting: You agree to support Gitpod in removing possible software defects by means
- such as bugs reporting or providing any information that can help us finding source of errors, if you have any available.
-
-
- Backups: We do a regular backup of your data in the Service due to our legal obligations. However,
- you shall conduct regular backups of your data integrated in the Service via copying of all your data outside of your
- Gitpod account. Upon termination of the Service, we will delete your data according to these Terms of Service and our
- privacy policy .
-
-
-
-
- I. Fair and Acceptable Use; Indemnification
-
-
- Gitpod Services are to be used for lawful software development, demoing, showcasing or debugging the resulting software and/or
- teaching software development. Your use of the Services must comply with general fair practices and you must, in particular,
- not nor allow others through your Gitpod account to:
-
-
-
-
- breach any applicable laws, not limited to a specific jurisdiction;
-
-
- post, host, upload, communicate or transmit content that is unlawful, sexually obscene, discriminatory, abusive, libelous,
- defamatory, fraudulent, harassing, threatening or infringes proprietary rights of any third party or us;
-
-
- distribute any malware or other deceitful or destructive content, including, but not limited to viruses, worms, Trojan horses,
- exploits, or corrupted files, distribution of unsolicited mass communications, advertising or solicitation;
-
-
- conduct illegal activities or their promotion;
-
-
- interfere or tamper with, violate, disable, impede or circumvent any part of the Service of GitPod and the equipment and
- services used by GitPod to provide them;
-
-
- attack or break into computer systems;
-
-
- abuse, scan other computer systems or networks, or place immoderate burden on any computing resources or systems;
-
-
- conduct or participate in any manner in peer-to-peer file sharing activity;
-
-
- engage in number crunching, data mining, cryptocurrency mining or similar schemes;
-
-
- make any use or failure thereof which could lead to, create, increase risk of, death, physical injury or health or environmental
- damage;
-
-
- any other activity which can reasonably be deemed an unfair use of the Services.
-
-
-
-
- Gitpod workspaces allow you to interact online with other people, computer networks and computer systems. You are solely
- responsible for this interaction and especially any problems, material or immaterial damage this interaction might cause.
- Third party claims addressed to us which result from your interactions online or violation to these Terms of
- Service shall be redirected to you and you shall hold us harmless and indemnify us for any damages, claims, liabilities
- and expenses, including attorneys’ fees that your interaction causes to others and us provided you are held responsible
- for such breach.
-
-
-
- J. Customer Data; Indemnification
-
-
- The Customer has the possibility within his account to upload content and code, including but not limited to programs, technical data, personal data ("Customer Data" ). The Customer is solely responsible for this Customer Data and undertakes not to upload or otherwise use any prohibited content within his customer profile in accordance with these
- Terms of Service. Insofar as the Customer leaves these Customer Data to Gitpod and its Service, Customer grants Gitpod
- all rights necessary for the execution of the contractual agreement with Gitpod. This includes, in particular, the right
- to make the corresponding data accessible on the Website displaying them in the Customer’s account. Gitpod hereby accepts
- this granting of rights.
-
-
- In the event that Customer Data is removed from an account or that an account is/was deleted by the Customer or by us for
- whatever reason, the rights to such Customer Data shall expire, except for legal retention periods and the Customer’s
- statutory rights for a backup of such Customer Data.
-
-
- Customer is solely responsible for such Customer Data, especially any copyrights, data protection requirements, problems,
- material or immaterial damage these Customer Data might cause. Third party claims addressed to us which result
- from violations due to these Customer Data and to these Terms of Service shall be redirected to you and you shall hold
- us harmless and indemnify us for any damages, claims, liabilities and expenses, including attorneys’ fees that your
- interaction causes to others and us provided you are held responsible for such breach.
-
-
-
- K. Blocking Rights
-
-
- In addition to our termination rights, we have the right to the following blocking measures:
-
-
-
- In case a Customer is in breach of Section I. or a reasonable suspicion thereon considering the reasonable interests of
- the Customer temporarily suspend providing the entire or any part of the Service to the Customer; and/or
-
-
- In case the Customer Data (i) violate applicable laws or are subject to illegal activities each to the knowledge of Gitpod,
- or (ii) harm or affect the provision of the Service, related services and networks or the security and integrity of
- related networks, we may without previous notification block from access and/or execution or delete software or other
- Customer Data.
-
-
-
- We will inform the Customer of such blocking measures set forth above without hesitation.
-
-
- We may also disclose your personal data vis-à-vis authorities as set forth in the privacy
- policy
- .
-
-
-
- L. Right of Withdrawal and Dispute Resolution
-
-
- The following provisions of this Section L. shall only apply to Consumers.
-
-
- Right of Withdrawal
-
-
- If you are a Consumer, you have the right of withdrawal in accordance with the statutory provisions. In all respects the
- regulations, which are given in detail in the following instruction on withdrawal, apply
- to the right of withdrawal.
-
-
-
-
- -- begin instruction on withdrawal --
-
-
- Right of Withdrawal
-
-
- You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire
- 14 days from the day of the conclusion of the contract. To exercise the right of withdrawal, you must inform us to:
-
-
- Gitpod GmbH represented by: Sven Efftinge, Moritz Eysholdt, Dr. Jan Köhnlein Am Germaniahafen 1 24143 Kiel/Germany Email: contact@gitpod.io
-
-
- of your decision to withdraw from this contract by an unequivocal statement (e.g. a letter sent by post, fax or e-mail).
- You may use the attached model withdrawal form , but it is not obligatory.
-
-
- To meet the withdrawal deadline, it is sufficient for you to send your communication concerning your exercise of the right
- of withdrawal before the withdrawal period has expired.
-
-
- Effects of Withdrawal
-
-
- If you withdraw from this contract, we shall reimburse to you all payments received from you, including the costs of delivery
- (with the exception of the supplementary costs resulting from your choice of a type of delivery other than the least
- expensive type of standard delivery offered by us), without undue delay and in any event not later than 14 days from
- the day on which we are informed about your decision to withdraw from this contract. We will carry out such reimbursement
- using the same means of payment as you used for the initial transaction, unless you have expressly agreed otherwise;
- in any event, you will not incur any fees as a result of such reimbursement.
-
-
- If you requested to begin the performance of services during the withdrawal period, you shall pay us an amount which is in
- proportion to what has been provided until you have communicated us your withdrawal from this contract, in comparison
- with the full coverage of the contract.
-
-
- Your right to withdraw from this Agreement expires prematurely if the Services were initiated by us to you only after you
- as Consumer have expressly agreed that we shall commence with the execution of the contract before expiry of the withdrawal
- period, and at the same time have confirmed your knowledge of the fact that you lose your right to withdraw from the
- contract with the beginning of the execution of the contract.
-
-
- -- end instruction on withdrawal --
-
-
-
-
- Alternative Settlements of Disputes
-
-
- The European Commission provides a platform for an online settlement of disputes which can be accessed under http://ec.europa.eu/consumers/odr/.
- Gitpod is neither obliged to take part in alternative dispute resolutions before a consumer dispute settlement commission
- or will do so voluntarily.
-
-
-
- M. Term and Termination
-
-
- This Agreement is effective as of your creation of the Gitpod account and remains effective until terminated. You as Customer
- or Gitpod may each terminate this Agreement without reason by giving a 15-day notice using the termination option in
- the Gitpod account or as for Gitpod via email to Customer.
-
-
- In addition, you as Customer or Gitpod can terminate this Agreement with immediate effect for good cause (wichtiger Grund).
- Good cause (wichtiger Grund) on part of Gitpod shall include, among others, when (i) you are in breach or
- your obligations under this Agreement; or (ii) fall behind in payment for more than six (6) weeks; or (iii) breach the
- terms of Fair and Acceptable Use in Section I; or (iv) a major change in cooperation between Gitpod and other companies
- that is central for Gitpod to supply its Service occur, including but not limited to the end or material change of the
- workings of a software or service, a cancellation of the co-operation, or materially changed pricing; or (v) a major
- change of resources availability that are central for Gitpod to supply its Service occur; or (vi) Gitpod Service is terminated
- due to reasons beyond Gitpod’s control or as a whole.
-
-
- Upon termination, regulations concerning Liability (Section F.), Warranty of Material Defects and Guarantee (Section G.),
- Term (Section M.), Confidentiality (Section O.) and Miscellaneous (Section Q.) shall survive.
-
-
-
- N. Privacy and Data
-
-
- We will process your data according to the German and European data protection laws. For details please refer to our privacy policy
- .
-
-
-
- O. Confidentiality
-
-
- Both Customer and Gitpod agree not to, and shall ensure that their employees, agents and advisors do not, disclose to third
- parties, nor use for any purpose other than as contemplated in these Terms of Service and additional agreements, any
- confidential or proprietary information arising or disclosed pursuant to the agreement (including but not limited to
- the Terms of Service, the parties' trade secrets and information not generally known to the public such as business plans,
- strategies, practices, products, personnel and finances), except: (i) with the prior written permission of the party
- to whom such information belongs; (ii) where the information is already known to, or obtained by independent means, or
- independently developed without reference to the other party’s confidential information, by the recipient; (iii) is already
- in the public domain through no fault of the recipient; (iv) the recipient receives from a third person free to make
- such disclosure without breach of any legal obligation; or (v) the disclosure by both parties to an affiliated company
- (in the meaning of sections 15 et seqq AktG) of either party. This Section O. shall survive the termination of this Agreement
- for three (3) years after such termination. Notwithstanding the foregoing, a recipient may disclose confidential information
- of the other party if required to do so by law, court order or request by any government or regulatory authority. In
- any of those events, the recipient will in advance and promptly inform the other party about the requirement or respectively
- the request for disclosure.
-
-
-
- P. Terms of Service Changes
-
-
- We may change these Terms of Service as well as related documentation at any time at our sole discretion. We will inform
- you at least in text form that the Terms of Service as well as related documentation have been modified and give information
- when such changes become effective. The respective change will take effect when you do not object the new terms and conditions
- within four (4) weeks after sending the email. In case you object to the modification within the four-week period, we
- shall be entitled to cancel the contract with immediate effect, without you having any claims against us. If the contractual
- relationship after the effective objection by you continues, the previous terms and conditions shall remain in force.
-
-
-
- Q. Miscellaneous
-
-
- You are not allowed to assign, transfer or delegate these Terms of Service to any person or entity at any time given, except
- for certain rights as explicitly set forth in these Terms of Service.
-
-
- This Agreement is governed by the laws of the Federal Republic of Germany, to the exclusion of the Convention of the United
- Nations on Contracts for the International Sale of Goods. Any statutory provisions on the limitation of the choice of
- law as well as the applicability of mandatory laws especially by the state, in which the Customer who is a Consumer has
- his usual place of residence, shall not be deemed affected. Provided the Customer is a merchant, a legal entity under
- public law or a special fund under public law and to the extent permitted by and compatible with the law the exclusive
- jurisdiction and venue shall be the seat of Gitpod.
-
-
- These Terms of Service and the documents referred hereto jointly constitute the whole Agreement between the Gitpod and Customer
- and precede any other agreement, arrangement, proposal or communication. Gitpod does not waive any rights under this
- Agreement by not exercising or delaying to exercise these rights.
-
-
- In case individual provisions in these terms and conditions including this provision are or become invalid, or in case of
- gaps arising in these terms and conditions, the validity of all other provisions will not be deemed affected thereby.
- Instead of the ineffective provision or for replenishment of gaps an adequate provision will apply. If the Customer is
- a Consumer and in case this may constitute an unreasonable hardship for one of the contracting parties the contract shall
- become ineffective as a whole.
-
-
-
- Transfer of the Agreement to Another Party
-
-
- You agree that we may transfer this Agreement to:
-
-
-
- Gitpod, Inc. , a corporation incorporated and validly existing under the laws of the State of Delaware,
- United States, registered with the Division of Corporations of the State of Delaware under file number 3353320 and with
- business address at: 1390 Market Street, Suite 200, San Francisco. CA 94102, United States ("Gitpod, Inc. "); or
-
-
- another third-party designated in our discretion ("Third-Party ")
-
-
-
- by way of a transfer of contract with discharging effect (Vertragsübernahme mit schuldbefreiender Wirkung) with the effect that
- Gitpod, Inc. or the Third-Party becomes your new contractual partner in our stead and assumes all our rights and obligations under
- this Agreement.
-
-
- We will notify you of a contemplated transfer of this Agreement and provide you with the identity of your new contractual partner
- in text form with at least four three weeks' notice prior to the contemplated transfer of this Agreement becoming effective
- ("Transfer Notice ").
-
-
- In case of a contemplated transfer of this Agreement to a Third-Party you shall be entitled to terminate this Agreement without
- notice and without any additional cause being required. This termination right must be exercised within six weeks following receipt
- of the Transfer Notice and must be exercised in text form.
-
-
- The above termination right shall not exist in case of a transfer of this Agreement to Gitpod, Inc. Other rights you may have to
- terminate the Agreement with or without cause shall remain unaffected.
-
-
-
- Complete and return this form only if you wish to withdraw from the contract.
-
-
-
- -- begin model withdrawal form --
-
-
- To Gitpod GmbH represented by: Sven Efftinge, Moritz Eysholdt, Dr. Jan Köhnlein Am Germaniahafen 1 24143
- Kiel/Germany
- Phone: +49-431-99026870 Email: contact@gitpod.io
-
-
-
-
-
- I/We (*) hereby give notice that I/We (*) withdraw from my/our (*) for the provision of the following service (*),
-
-
- Ordered on (*)/received on (*),
-
-
- Name of consumer(s),
-
-
- Address of consumer(s),
-
-
- Signature of consumer(s) (only if this form is notified on paper),
-
-
- Date
-
-
- _______________
-
-
- (*) Delete where inapplicable.
-
-
- -- end model withdrawal form --
-
-
-
-
-)
-
-export default TermsPage
diff --git a/src/pages/vendor.tsx b/src/pages/vendor.tsx
deleted file mode 100644
index aab30c0e9..000000000
--- a/src/pages/vendor.tsx
+++ /dev/null
@@ -1,181 +0,0 @@
-import React from 'react'
-
-import IndexLayout from '../layouts'
-import Banner from '../components/Banner'
-import Vendor from '../resources/vendor.svg'
-import TextCards from '../components/TextCards'
-import TextCard from '../components/TextCard'
-import { textCardsData } from '../contents/vendor'
-import Quote from '../components/Quote'
-import VendorBG from '../resources/vendor-bg.png'
-import Bg from '../components/Bg'
-import ActionCard from '../components/ActionCard'
-import PricingTable from '../components/PricingTable'
-import PopOver from '../components/PopOver'
-import Circle from '../components/Circle'
-import Bitbucket from '../resources/bitbucket.svg'
-import Github from '../resources/octicons-mark-github.svg'
-import Gitlab from '../resources/gitlab.svg'
-import { Link } from 'gatsby'
-import Img from 'gatsby-image'
-
-const VendorPage: React.SFC<{}> = ({data}: any) => (
-
-
- Use Gitpod as a Showroom for Your Developer Products}
- linkPath="/vendor/#vendor"
- linkText="Choose your Solution"
- img={ }
- />
-
-
-
- {
- textCardsData.map((f, i) => (
-
- ))
- }
-
-
-
-
-
-
-
-
-
-
-
- Gitpod.io
- FREE Trial
-
- Gitpod Managed
-
-
- Gitpod Self-Hosted
- FREE Trial
-
-
-
-
-
- Pricing
- Please enquire
- Please enquire
- Please enquire
-
-
- Domain
- gitpod.io
- Custom
- Custom
-
-
- Managed By
- Gitpod
- Gitpod
- You
-
-
- Infrastructure
- Globally distributed
- > 1 geographical regions
- On-prem or private cloud
-
-
- SLA
- Optional
- Optional
-
-
-
- Support
-
-
-
-
-
- github.com
-
-
-
-
-
- GitHub Enterprise
- Public only
-
-
-
-
- gitlab.com
-
-
-
-
-
- GitLab Self-Managed
- Public only
-
-
-
-
- Bitbucket
- Soon
- Soon
- Soon
-
-
- Custom Authentication
-
- OAuth2
- OAuth2
-
-
- Custom Branding
-
-
-
-
-
-
- Start for Free
- Contact Sales
- Host Yourself
-
-
-
-
-
-
-
-)
-
-export const query = graphql`
- query {
- file(relativePath: { eq: "vendor.png" }) {
- childImageSharp {
- fluid(quality: 100, maxWidth: 1980) {
- ...GatsbyImageSharpFluid
- }
- }
- }
- }
-`
-
-export default VendorPage
diff --git a/src/styles/base.ts b/src/styles/base.ts
deleted file mode 100644
index 9246dc860..000000000
--- a/src/styles/base.ts
+++ /dev/null
@@ -1,540 +0,0 @@
-import { sizes, colors, borders } from './variables'
-import DownArrow from '../resources/arrow-down.svg'
-import Pattern from '../resources/pattern.png'
-
-export default `
- /* ------------------------------------------- */
- /* ----- Basic Setup ----- */
- /* ------------------------------------------- */
-
- *,
- *::before,
- *::after {
- margin: 0;
- padding: 0;
- box-sizing: inherit;
- }
-
- *::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */
- color: ${colors.textLight};
- opacity: 1; /* Firefox */
- }
-
- html {
- font-size: 59.5%; // 10 / 16 = 0.625 * 100 = 62.5 = 10px
-
- @media(max-width: ${sizes.breakpoints.md}) {
- font-size: 56.5%;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- font-size: 54.5%;
- }
- }
-
- body {
- font: 400 ${sizes.font.text}/1.6 'Montserrat', sans-serif;
- color: ${colors.text};
- background: ${colors.white};
- box-sizing: border-box;
- overflow-x: hidden;
- }
-
- section {
- padding: 12rem 0;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- padding: 5rem 0;
- }
- }
-
- /* ------------------------------------------- */
- /* ----- Reusable Classes ----- */
- /* ------------------------------------------- */
-
- .row {
- max-width: ${sizes.grid.maxWidth};
- width: 100%;
- margin: 0 auto;
-
- @media(max-width: ${sizes.breakpoints.lg}) {
- padding: 0 7rem;
- }
-
- @media(max-width: ${sizes.breakpoints.md}) {
- padding: 0 3rem;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- padding: 0 1rem;
- }
- }
-
- .grey-container {
- background: ${colors.offWhite};
- }
-
- .text-with-galaxy-bg {
- color: transparent;
- font-weight: 600;
- background: url('/galaxy.jpg');
- background-position: bottom;
- background-clip: text;
- -webkit-background-clip: text;
- }
-
- /* ------------------------------------------- */
- /* ----- Headings & Paragraphs----- */
- /* ------------------------------------------- */
-
- h1,
- .h1,
- h2,
- .h2,
- h3,
- .h3,
- h4,
- .h4 {
- font-family: 'Montserrat', sans-serif;
- line-height: 1.2;
- color: ${colors.textDark};
- }
-
- h1,
- .h1,
- h2,
- .h2 {
- font-weight: 400;
- line-height: 1.4;
- }
-
- h3,
- .h3,
- h4,
- .h4 {
- font-weight: 600;
- }
-
- h1,
- .h1 {
- font-size: ${sizes.font.h1};
-
- @media(max-width: ${sizes.breakpoints.md}) {
- font-size: 3.5rem;
- }
- }
-
- h2,
- .h2 {
- font-size: ${sizes.font.h2};
-
- @media(max-width: ${sizes.breakpoints.md}) {
- font-size: 3.2rem;
- margin-bottom: 3rem;
- }
- }
-
- h2 {
- margin-bottom: 4rem;
-
- & + p {
- margin: -3rem 0 5rem;
- }
- }
-
- h3,
- .h3 {
- font-size: ${sizes.font.h3};
- margin-bottom: 2.8rem;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- font-size: 2.3rem;
- margin-bottom: 2rem;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- font-size: 2rem;
- }
-
- &.sub {
- font-weight: 400;
- color: ${colors.textLight};
- margin-bottom: 1.5rem;
- }
- }
-
- .h4 {
- font-size: 1.6rem;
- }
-
- p + p {
- margin-top: 2rem;
- }
-
- /* ------------------------------------------- */
- /* ----- Links & Buttons ----- */
- /* ------------------------------------------- */
-
- button:focus,
- input:focus,
- select:focus,
- textarea:focus,
- a:focus {
- outline: 2px solid #9ED3FF;
- }
-
- body:not(.user-is-tabbing) button:focus,
- body:not(.user-is-tabbing) input:focus,
- body:not(.user-is-tabbing) select:focus,
- body:not(.user-is-tabbing) textarea:focus,
- body:not(.user-is-tabbing) a:focus {
- outline: none;
- }
-
- body.user-is-tabbing .trustedBy:focus {
- border: 2px solid #9ED3FF;
- outline: none;
- }
-
- button {
- font-family: inherit;
- outline: none;
- font-size: inherit;
- background: none;
- color: ${colors.text};
- }
-
- a {
- font-weight: 600;
- color: ${colors.link};
- text-decoration: none;
-
- &:hover {
- color: ${colors.lightBlue};
- }
- }
-
- button, a {
- cursor: pointer;
-
- &::-moz-focus-inner {
- border: 0;
- }
- }
-
- .btn {
- display: inline-block;
- min-width: 14.5rem;
- padding: .8rem 2.2rem;
- font-weight: 400;
- text-align: center;
- color: ${colors.textDark};
- background: ${colors.white};
- border: 2px solid ${colors.text};
- border-radius: 100px;
- transition: all .2s;
- white-space: nowrap;
-
- &:hover,
- &:focus {
- color: ${colors.white};
- background: ${colors.text};
- border: 2px solid ${colors.text};
- }
-
- &--big {
- padding: 1.5rem 4rem;
- font-size: ${sizes.font.h4};
- font-weight: 600;
- }
-
- &--small {
- padding: .5rem 2rem;
- font-size: 95%;
- min-width: auto;
- }
-
- &--cta {
- color: ${colors.white};
- background: ${colors.link};
- border-color: ${colors.link};
-
- &:hover {
- color: ${colors.white};
- background: ${colors.lightBlue};
- border: 2px solid ${colors.lightBlue};
- }
-
- &:focus {
- color: ${colors.white};
- }
- }
-
- &--grey {
- color: ${colors.white};
- background: ${colors.text};
-
- &:hover,
- &:focus {
- color: ${colors.text};
- background: ${colors.white};
- }
- }
-
- &-wrapper {
- --gap: 2rem;
-
- display: flex;
- flex-wrap: wrap;
- margin: calc(-1 * var(--gap)) 0 0 calc(-1 * var(--gap));
- width: calc(100% + var(--gap));
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- justify-content: center;
- }
-
- & > * {
- margin: var(--gap) 0 0 var(--gap);
- }
- }
-
- &--disabled,
- &:disabled {
- color: ${colors.white};
- background: ${colors.offWhite4};
- pointer-events: none;
- border-color: ${colors.offWhite4};
- }
- }
-
- .link {
- position: relative;
- color: ${colors.text};
- padding-bottom: .8rem;
- font-weight: 400;
-
- &::after {
- content: "";
- position: absolute;
- bottom: 0;
- left: 0;
- right: 100%;
- border-bottom: 2px solid ${colors.white};
- transition: all .4s cubic-bezier(0,.5,0, 1);
- }
-
- &:hover {
-
- svg {
- fill: ${colors.lightBlue};
- }
-
- &::after {
- right: 0;
- border-color: ${colors.lightBlue};
- }
- }
- }
-
- .active {
- color: ${colors.lightBlue};
-
- &::after {
- right: 0;
- border-color: ${colors.lightBlue};
- }
- }
-
- /* ------------------------------------------- */
- /* ----- Inputs ----- */
- /* ------------------------------------------- */
-
- input,
- select,
- textarea {
- font-family: inherit;
- font-size: inherit;
- }
-
- select {
- display: block;
- padding: 1rem 6rem 1rem 2rem;
- background: #fff;
- border: 1px solid #ddd;
- -moz-appearance: none;
- -webkit-appearance: none;
- appearance: none;
- background-image: url(${DownArrow}),
- linear-gradient(to bottom, #ffffff 0%,#e5e5e5 100%);
- background-repeat: no-repeat, repeat;
- background-position: right 1em top 50%, 0 0;
- background-size: 1.25em auto, 100%;
- }
-
- /* ------------------------------------------- */
- /* ----- Lists ----- */
- /* ------------------------------------------- */
-
- ul {
- list-style: none;
- }
-
- /* ------------------------------------------- */
- /* ----- Images ----- */
- /* ------------------------------------------- */
-
- img {
- object-fit: contain;
- }
-
- .gatsby-image-wrapper {
- width: 100%;
- height: 100%;
-
- img {
- object-fit: contain !important;
- }
- }
-
- /* ------------------------------------------- */
- /* ----- Tables ----- */
- /* ------------------------------------------- */
-
- .table-container {
- max-width: 100%;
- padding-bottom: 2rem;
-
- @media(max-width: 687px) {
- overflow-x: scroll;
- }
- }
-
- .rows-3 {
- overflow-x: initial;
-
- @media(max-width: 604px) {
- overflow-x: scroll;
- }
- }
-
- table {
- border: 1px solid ${borders.light};
- border-collapse: collapse;
- margin: 0 auto;
- font-size: 1.5rem;
- width: 100%;
- min-width: 60rem;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- font-size: 1.4rem;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- font-size: 1.2rem;
- }
- }
-
- td, th {
- border: ${borders.light};
- padding: 10px 20px;
-
- @media(max-width: ${sizes.breakpoints.md}) {
- padding: 5px 10px;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- padding: 3px 10px;
- }
- }
-
- th {
- background: ${colors.offWhite};
- font-weight: 400;
- text-align: left;
- }
-
- td {
- text-align: center;
- }
-
- /* ------------------------------------------- */
- /* ----- Others ----- */
- /* ------------------------------------------- */
-
- .consent {
- @media(max-width: ${sizes.breakpoints.md}) {
- font-size: 95% !important;
- }
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- font-size: 90% !important;
- }
-
- br {
- display: none;
-
- @media(max-width: ${sizes.breakpoints.sm}) {
- display: initial;
- }
-
- }
- }
-
- .footnote {
- font-size: 1.3rem;
- color: ${colors.textLight};
-
- @media (max-width: 800px) {
- font-size: 1.2rem;
- }
-
- a {
- font-weight: 400;
- }
- }
-
- /* --------------------------------------------- */
- /* ----- Utils ----- */
- /* --------------------------------------------- */
-
- .visually-hidden {
- position: absolute;
- left: -100000rem;
- top: auto;
- width: 1px;
- height: 1px;
- overflow: hidden;
- }
-
- .pattern-bg {
- background: url(${Pattern});
- background-position: center;
- background-size: cover;
- }
-
- .pattern {
- position: relative;
-
- &::after {
- content: "";
- position: absolute;
- display: block;
- bottom: 0;
- top: -15rem;
- right: 50%;
- width: 100vw;
- height: calc(100% + 15rem);
- z-index: -100;
- background: url(${Pattern});
- background-position: center;
- background-size: cover;
- transform: translateX(50%);
-
- &--full-vp-height {
- &::after {
- max-height: 100vh;
- }
- }
- }
-
-`
From 1a8e78dfa1adfc0a9370a23621d48e6862b72ac7 Mon Sep 17 00:00:00 2001
From: Nisar Hassan Naqvi
Date: Thu, 18 Mar 2021 13:44:02 +0000
Subject: [PATCH 4/4] basic setup.
---
gatsby-config.js | 2 +-
src/components/LayoutRoot.tsx | 5 +-
src/layouts/docs.tsx | 17 +--
src/layouts/index.tsx | 162 ++++++++-------------
src/pages/index.tsx | 24 +--
src/styles/base.tsx | 25 ++++
src/templates/blog.tsx | 54 -------
src/templates/doc.tsx | 6 -
src/templates/screencast.tsx | 9 +-
static/font.css | 30 ++++
static/fonts/ABCDiatype-Bold.woff | Bin 0 -> 85340 bytes
static/fonts/ABCDiatype-BoldItalic.woff | Bin 0 -> 87552 bytes
static/fonts/ABCDiatype-Regular.woff | Bin 0 -> 75508 bytes
static/fonts/ABCDiatype-RegularItalic.woff | Bin 0 -> 79812 bytes
14 files changed, 130 insertions(+), 204 deletions(-)
create mode 100644 src/styles/base.tsx
create mode 100644 static/font.css
create mode 100644 static/fonts/ABCDiatype-Bold.woff
create mode 100644 static/fonts/ABCDiatype-BoldItalic.woff
create mode 100644 static/fonts/ABCDiatype-Regular.woff
create mode 100644 static/fonts/ABCDiatype-RegularItalic.woff
diff --git a/gatsby-config.js b/gatsby-config.js
index dcc46bb1c..be84fe0b5 100644
--- a/gatsby-config.js
+++ b/gatsby-config.js
@@ -59,7 +59,7 @@ module.exports = {
}
},
'gatsby-remark-prismjs',
- 'gatsby-remark-gitpod',
+ // 'gatsby-remark-gitpod',
{
resolve: `gatsby-remark-autolink-headers`,
options: {
diff --git a/src/components/LayoutRoot.tsx b/src/components/LayoutRoot.tsx
index 50a751687..d809f17ca 100644
--- a/src/components/LayoutRoot.tsx
+++ b/src/components/LayoutRoot.tsx
@@ -1,7 +1,6 @@
import * as React from 'react'
-import { Global, css } from '@emotion/core'
import styled from '@emotion/styled'
-import base from '../styles/base'
+import { BaseStyles } from '../styles/base'
const StyledLayoutRoot = styled.div`
display: flex;
@@ -15,7 +14,7 @@ interface LayoutRootProps {
const LayoutRoot: React.SFC = ({ children, className }) => (
<>
- css(base)} />
+
{children}
>
)
diff --git a/src/layouts/docs.tsx b/src/layouts/docs.tsx
index d3999bde0..110969d2b 100644
--- a/src/layouts/docs.tsx
+++ b/src/layouts/docs.tsx
@@ -3,9 +3,6 @@ import React from 'react'
import IndexLayout from './index'
import styled from '@emotion/styled'
import { colors, sizes } from '../styles/variables'
-import DocSideBar from '../components/docs/DocSideBar'
-import DocTopicChooser from '../components/docs/DocTopicChooser'
-import BackToTopButton from '../components/BackToTopButton'
const StyledDocsLayout = styled.div`
.content {
@@ -134,18 +131,14 @@ interface DocsLayoutProps {
body: JSX.Element
}
-const DocsLayout: React.SFC = ({ canonical, title, body}) => (
+const DocsLayout: React.SFC = ({ canonical, title, body }) => (
-
-
-
-
- {body}
-
+
)
diff --git a/src/layouts/index.tsx b/src/layouts/index.tsx
index d06456e3b..424e47659 100644
--- a/src/layouts/index.tsx
+++ b/src/layouts/index.tsx
@@ -1,57 +1,52 @@
import * as React from 'react'
import { Helmet } from 'react-helmet'
-import { StaticQuery, graphql, Link } from 'gatsby'
-import CookieConsent from 'react-cookie-consent'
+import { StaticQuery, graphql } from 'gatsby'
-import { colors, borders } from '../styles/variables'
import GitpodIcon from '../resources/gitpod.svg'
import GitpodIcon196 from '../resources/gitpod-196x196.png'
import GitpodIconApple from '../resources/apple-touch-icon.png'
import LayoutRoot from '../components/LayoutRoot'
import LayoutMain from '../components/LayoutMain'
-import Nav from '../components/Nav'
-import Footer from '../components/Footer'
-import MinimalFooter from '../components/MinimalFooter'
-import AnnoucementBanner from '../components/AnnouncementBanner'
+
type StaticQueryProps = {
- site: {
- siteMetadata: {
- title: string
- description: string
- siteUrl: string
+ site: {
+ siteMetadata: {
+ title: string
+ description: string
+ siteUrl: string
+ }
}
- }
}
-class IndexLayout extends React.Component<{ title?: string; canonical?: string; description?: string, isAFlowPage?: boolean, showReInstallExtensionButton?: boolean, ogImage?:string}, {}> {
- handleFirstTab = (e: any) => {
- if (e.key === 'Tab') {
- // the "I am a keyboard user" key
- document.body.classList.add('user-is-tabbing')
- window.removeEventListener('keydown', this.handleFirstTab)
- window.addEventListener('mousedown', this.handleMouseDownOnce)
+class IndexLayout extends React.Component<{ title?: string; canonical?: string; description?: string, ogImage?: string }, {}> {
+ handleFirstTab = (e: any) => {
+ if (e.key === 'Tab') {
+ // the "I am a keyboard user" key
+ document.body.classList.add('user-is-tabbing')
+ window.removeEventListener('keydown', this.handleFirstTab)
+ window.addEventListener('mousedown', this.handleMouseDownOnce)
+ }
}
- }
- handleMouseDownOnce = () => {
- document.body.classList.remove('user-is-tabbing')
+ handleMouseDownOnce = () => {
+ document.body.classList.remove('user-is-tabbing')
- window.removeEventListener('mousedown', this.handleMouseDownOnce)
- window.addEventListener('keydown', this.handleFirstTab)
- }
+ window.removeEventListener('mousedown', this.handleMouseDownOnce)
+ window.addEventListener('keydown', this.handleFirstTab)
+ }
- componentDidMount() {
- window.addEventListener('keydown', this.handleFirstTab)
- }
+ componentDidMount() {
+ window.addEventListener('keydown', this.handleFirstTab)
+ }
- render() {
- const { title, canonical, description, ogImage, children } = this.props
+ render() {
+ const { title, canonical, description, ogImage, children } = this.props
- return (
-
(
-
-
-
- {(title && `${title} - Gitpod`) || data.site.siteMetadata.title}
-
-
- {canonical ? : null}
-
-
-
-
-
+ render={(data: StaticQueryProps) => (
+
+
+
+ {(title && `${title} - Gitpod`) || data.site.siteMetadata.title}
+
+
+ {canonical ? : null}
+
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
- This website uses cookies to
- enhance the user experience.
- Read our{' '}
-
- privacy policy
- {' '}
- for more info.
-
- {children}
-
- {
- !this.props.isAFlowPage ? :
- }
-
- )}
- />
- )
- }
+
+
+
+ {children}
+
+
+ )}
+ />
+ )
+ }
}
export default IndexLayout
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index 5e4df816e..551ccde5d 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -1,19 +1,5 @@
-import React from 'react';
-
-import tw from "twin.macro";
-
-const Button = tw.button`
- bg-blue-500
- hover:bg-blue-800
- text-white
- p-2
- rounded
-`
-
-const IndexPage = () => (
- <>
- A Nice Button
- >
-)
-
-export default IndexPage
+export default () => {
+ return
+
In the name of God.
+
+}
diff --git a/src/styles/base.tsx b/src/styles/base.tsx
new file mode 100644
index 000000000..096c98ce2
--- /dev/null
+++ b/src/styles/base.tsx
@@ -0,0 +1,25 @@
+import { Global, css } from '@emotion/core'
+
+export const BaseStyles = () => (
+
+)
diff --git a/src/templates/blog.tsx b/src/templates/blog.tsx
index 7ddbe53a1..14a0ce793 100644
--- a/src/templates/blog.tsx
+++ b/src/templates/blog.tsx
@@ -3,14 +3,10 @@ import styled from '@emotion/styled'
import { graphql } from 'gatsby'
import IndexLayout from '../layouts'
-import PostBanner from '../components/blog/PostBanner'
import { Helmet } from 'react-helmet'
import { parseAuthors } from '../contents/authors'
import { colors, shadows, sizes, borders } from '../styles/variables'
// import NewsletterForm from '../components/NewsletterForm'
-import BackToTopButton from '../components/BackToTopButton'
-import MorePosts from '../components/blog/MorePosts'
-import SharePost from '../components/blog/SharePost'
interface BlogTemplateProps {
data: {
@@ -205,65 +201,15 @@ const BlogTemplate: React.SFC = ({ data }) => {
-
- {new Date(Date.parse(data.markdownRemark.frontmatter.date)).toLocaleDateString('en-GB', {
- weekday: 'long',
- year: 'numeric',
- month: 'long',
- day: 'numeric'
- })}
-
- }
- author={
-
- By{' '}
- {authors.map((author, idx) => (
-
-
- {author.name}
-
- {idx < authors.length - 1 ? ', ' : ''}
-
- ))}
-
- }
- shareButtons={
-
- }
- />
-
-
-
-
-
{/* */}
-
)
}
diff --git a/src/templates/doc.tsx b/src/templates/doc.tsx
index 43a597950..8b079c2ab 100644
--- a/src/templates/doc.tsx
+++ b/src/templates/doc.tsx
@@ -4,9 +4,6 @@ import { graphql } from 'gatsby'
import { getMenuContext } from '../docs/menu'
import { colors } from '../styles/variables'
import DocsLayout from '../layouts/docs'
-import ReachOut from '../components/docs/ReachOut'
-import EditInGitpod from '../components/docs/EditInGitpod'
-import NavigationArrows from '../components/docs/NavigationArrows'
interface DocTemplateProps {
data: {
@@ -46,11 +43,8 @@ const DocTemplate: React.SFC = ({ data }) => {
}
>
diff --git a/src/templates/screencast.tsx b/src/templates/screencast.tsx
index 43595785d..42af44b30 100644
--- a/src/templates/screencast.tsx
+++ b/src/templates/screencast.tsx
@@ -1,10 +1,6 @@
import React from 'react'
import IndexLayout from '../layouts'
-import { ScreencastProps } from '../components/screencasts/Screencast'
import styled from '@emotion/styled'
-import YouTubeEmbed from '../components/screencasts/YouTubeEmbed'
-import RelatedDocs from '../components/screencasts/RelatedDocs'
-import NextUp from '../components/screencasts/NextUp'
const StyledScreencastTemplate = styled.div`
padding-top: 5rem;
@@ -31,7 +27,7 @@ const StyledScreencastTemplate = styled.div`
}
`
-const ScreencastTemplate = ({ pageContext }: { pageContext: { screencast: ScreencastProps, nextScreencast: ScreencastProps } }) => {
+const ScreencastTemplate = ({ pageContext }: { pageContext: { screencast: any, nextScreencast: any } }) => {
const { title, description, duration, youtubeId, relatedDocs } = pageContext.screencast
return (
@@ -44,10 +40,7 @@ const ScreencastTemplate = ({ pageContext }: { pageContext: { screencast: Screen
Duration: {duration}s
-
-
-
)
diff --git a/static/font.css b/static/font.css
new file mode 100644
index 000000000..c25e5794d
--- /dev/null
+++ b/static/font.css
@@ -0,0 +1,30 @@
+@font-face {
+ font-family: 'ABCDiatype';
+ font-style: normal;
+ font-weight: 400;
+ src: url('./fonts/ABCDiatype-Regular.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'ABCDiatype';
+ font-style: bold;
+ font-weight: 600;
+ src: url('./fonts/ABCDiatype-Bold.woff') format('woff');
+}
+
+/* @font-face {
+ font-family: 'ABCDiatype';
+ font-style: italic;
+ font-weight: 400;
+ src: url('./fonts/ABCDiatype-RegularItalic.woff') format('woff');
+}
+@font-face {
+ font-family: 'ABCDiatype';
+ font-style: italic;
+ font-weight: 600;
+ src: url('./fonts/ABCDiatype-BoldItalic.woff') format('woff');
+} */
+
+body {
+ color: red;
+}
diff --git a/static/fonts/ABCDiatype-Bold.woff b/static/fonts/ABCDiatype-Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..14b2455a2a880f8271c5609ed70586249c101e18
GIT binary patch
literal 85340
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