Skip to content
This repository was archived by the owner on Apr 19, 2021. It is now read-only.

Commit 1a6473f

Browse files
committed
[self-hosted] updates
1 parent 87018b8 commit 1a6473f

File tree

13 files changed

+126
-71
lines changed

13 files changed

+126
-71
lines changed

src/blog/visual-studio-online-vs-gitpod.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Gitpod, on the other hand, builds your branches similar to a CI build *before* y
3636

3737
# Self Hosting
3838

39-
Gitpod can be installed on any Kubernetes cluster and deeply integrates with your existing tool chain. Whether you use GitHub, GitLab or BitBucket a deep integration is possible, providing a frictionless dev experience. We also support custom OAuth and styling/re-branding so you could even use our technology in the context of your branded service or product.
39+
Gitpod can be installed on any Kubernetes cluster and deeply integrates with your existing tool chain. Whether you use GitHub, GitLab or Bitbucket a deep integration is possible, providing a frictionless dev experience. We also support custom OAuth and styling/re-branding so you could even use our technology in the context of your branded service or product.
4040

4141
On VSO there is something called ‘self-hosted’ but that doesn’t mean you can self host VSO itself. Instead, you can only point it to hardware running elsewhere and start dev environments there. You are still stuck in Microsoft / Azure land.
4242

src/components/Footer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ const Footer: React.SFC<{}> = () => (
9595
<li><Link to="/features/">Features</Link></li>
9696
<li><Link to="/pricing/">Pricing</Link></li>
9797
<li><Link to="/blog/">Blog</Link></li>
98-
<li><Link to="/enterprise/">Enterprise</Link></li>
98+
<li><Link to="/self-hosted/">Self-Hosted</Link></li>
9999
<li><a href="https://gitpod.io/login/" style={{color: colors.link, fontWeight: 600}}>Log In</a></li>
100100
</ul>
101101
<ul>

src/components/Nav.tsx

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -268,27 +268,8 @@ class Nav extends React.Component {
268268

269269
<ul className={`nav__items ${isNavRendered ? 'navIsRendered' : 'navIsNotRendered'}`} >
270270
<li className="nav__item"><Link activeClassName="active" to='/features/' className="link">Features</Link></li>
271+
<li className="nav__item"><Link activeClassName="active" to='/self-hosted/' className="link">Self-Hosted</Link></li>
271272
<li className="nav__item"><Link activeClassName="active" to='/pricing/' className="link">Pricing</Link></li>
272-
<li className="nav__item"><Link activeClassName="active" to='/enterprise/' className="link">Enterprise</Link></li>
273-
<li className="nav__item">
274-
<DropDown
275-
title="Solutions"
276-
links={[
277-
{
278-
text: 'Education',
279-
to: '/education/'
280-
},
281-
{
282-
text: 'Recruiting',
283-
to: '/recruiting/'
284-
},
285-
{
286-
text: 'Vendor',
287-
to: '/vendor/'
288-
}
289-
]}
290-
/>
291-
</li>
292273
<li className="nav__item">
293274
<DropDown
294275
title="Resources"

src/components/PricingBox.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ interface StyledPricingBoxProps {
1616

1717
const StyledPricingBox = styled.div<StyledPricingBoxProps>`
1818
position: relative;
19-
margin-bottom: 3rem;
19+
margin: 2rem 1rem;
2020
padding: 3rem 2.8rem;
2121
font-size: 95%;
2222
min-height: 48rem;
@@ -28,7 +28,7 @@ const StyledPricingBox = styled.div<StyledPricingBoxProps>`
2828
background: ${({ background }) => background ? 'url("https://www.gitpod.io/galaxy.jpg")' : colors.white};
2929
background-size: ${({ background }) => background ? 'cover' : null};
3030
background-position: ${({ background }) => background ? 'left' : null};
31-
box-shadow: ${shadows.light};
31+
border: 1px solid ${colors.offWhite2};
3232
background-color: ${({ backgroundColor }) => backgroundColor ? backgroundColor : null};
3333
3434
@media(min-width: ${sizes.breakpoints.md}) {

src/components/pricing/Business.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ const Styled = styled.div`
3535
const Business = () => (
3636
<Styled>
3737
<section className="business">
38-
<h2>Gitpod Enterprise</h2>
38+
<h2>Gitpod Self-Hosted</h2>
3939
<p>Unleash Developer Productivity. Use Gitpod as your dev environment and enjoy automated setups, better collaboration, higher code quality and a greater workflow.</p>
40-
<Link to="/enterprise/" className="btn">Enterprise Solutions</Link>
40+
<Link to="/self-hosted/" className="btn">Enterprise Solutions</Link>
4141
</section>
4242
</Styled>
4343
)

src/components/pricing/PricingBoxes.tsx

Lines changed: 98 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import React from 'react'
1+
import React, { useState } from 'react'
22

33
import styled from '@emotion/styled'
4-
import { sizes } from '../../styles/variables'
4+
import { sizes, colors } from '../../styles/variables'
55
import LightBulb from '../../resources/light-bulb.svg'
66
import Rocket from '../../resources/rocket.png'
77
import MagicCap from '../../resources/magic-cap.svg'
@@ -10,6 +10,7 @@ import { PricingBoxProps } from '../PricingBox'
1010
import PopOver from '../PopOver'
1111
import PricingBox from '../PricingBox'
1212
import { isEurope } from '../../utils/helpers'
13+
import Cloud from '../../resources/cloud.svg'
1314

1415
const Styled = styled.div`
1516
@@ -22,14 +23,15 @@ const Styled = styled.div`
2223
2324
&__boxes {
2425
display: flex;
25-
justify-content: space-between;
26+
justify-content: center;
2627
2728
@media(max-width: ${sizes.breakpoints.lg}) {
2829
flex-wrap: wrap;
2930
}
3031
3132
@media(max-width: 1096px) {
32-
justify-content: space-evenly;
33+
flex-wrap: wrap;
34+
justify-content: center;
3335
}
3436
3537
@media(max-width: 650px) {
@@ -41,9 +43,31 @@ const Styled = styled.div`
4143
}
4244
`
4345

46+
const selfHostedPlans: PricingBoxProps[] = [
47+
{
48+
title: 'Small Teams',
49+
duration: 'For up to 5 users',
50+
img: <object role="presentation" tabIndex={-1} data={Cloud} />,
51+
features: ['Unlimited Use', 'Private & Public Repos', 'Admin dashboard'],
52+
price: 'Free',
53+
btnText: 'Install Now',
54+
btnBackground: true,
55+
link: '/self-hosted/#install'
56+
},
57+
{
58+
title: 'Professional Teams',
59+
img: <img alt='Rocket' src={Rocket} />,
60+
features: ['Unlimited Use', 'Private & Public Repos', 'Admin dashboard', '30-day free trial'],
61+
price: '20$',
62+
duration: 'Per user & month',
63+
btnText: 'Contact Sales',
64+
link: '/contact/'
65+
}
66+
];
67+
4468
const plans: PricingBoxProps[] = [
4569
{
46-
title: 'Open-Source',
70+
title: 'Free',
4771
img: <object role="presentation" tabIndex={-1} data={IconOpenSource} />,
4872
price: 'Free',
4973
duration: '50 hours / month',
@@ -64,12 +88,10 @@ const plans: PricingBoxProps[] = [
6488
price: <>{isEurope() ? '€23' : '$25'}<span> / month</span></>,
6589
duration: 'Unlimited hours',
6690
features: ['Private & Public Repos', <span className="span">8 Parallel Workspaces <PopOver description="The number of workspaces running at the same time." /></span>, <span className="span">30min Timeout <PopOver description="Workspaces without user activity are stopped after 30 minutes." /></span>],
67-
transform: 'scale(1.05)',
68-
banner: 'Recommended',
6991
btnText: 'Buy Now',
7092
btnBackground: true,
7193
link: 'https://gitpod.io/subscription/',
72-
subAction: <a href="https://gitpod.io/teams/" target="_blank" className="sub-action">Charge your Company <PopOver textPosition="bottom" description="TDB" /></a>
94+
subAction: <a href="https://gitpod.io/teams/" target="_blank" className="sub-action">Create Team</a>
7395
},
7496
{
7597
title: 'Unlimited',
@@ -79,27 +101,82 @@ const plans: PricingBoxProps[] = [
79101
features: ['Private & Public Repos', <span className="span">16 Parallel Workspaces <PopOver description="The number of workspaces running at the same time." /></span>, <span className="span">1h Timeout <PopOver description="Workspaces without user activity are stopped after 1 hour." /></span>, <span className="span">3h Timeout Boost <PopOver description="You can manually boost the timeout to 3 hours within a running workspace." /></span>],
80102
btnText: 'Buy Now',
81103
link: 'https://gitpod.io/subscription/',
82-
subAction: <a href="https://gitpod.io/teams/" target="_blank" className="sub-action">Charge your Company <PopOver textPosition="bottom" description="TDB" /></a>
104+
subAction: <a href="https://gitpod.io/teams/" target="_blank" className="sub-action">Create Team</a>
83105
}
84106
]
85107

108+
const PricingContainer = styled.div`
109+
background-color: ${colors.white};
110+
padding: 3rem;
111+
margin: 0 -500px;
112+
justify-content: flex-start;
113+
border: 1px solid ${colors.offWhite2};
114+
`;
86115

116+
const Tab = styled.div`
117+
padding: 1rem 2rem;
118+
font-size: 18px;
119+
color: ${colors.textLight};
120+
min-width: 15rem;
121+
text-align: center;
122+
background-color: ${colors.white};
123+
border: 1px solid ${colors.offWhite2};
124+
border-bottom: none;
125+
margin-bottom: -1px;
126+
cursor: pointer;
127+
`;
87128

88-
const PricingBoxes = () => (
89-
<Styled>
129+
function isSelfHosted() {
130+
return typeof window !== `undefined` && window.location.hash === '#self-hosted';
131+
}
132+
133+
const PricingBoxes = () => {
134+
// Declare a new state variable, which we'll call "count"
135+
const [selfHosted, setSelfHosted] = useState(isSelfHosted());
136+
return <Styled>
90137
<section className="pricing">
91-
<h3 className="sub">Pricing</h3>
92-
<h1>Choose Your Plan</h1>
93-
<div className="pricing__boxes">
94-
{plans.map(
95-
(plan, i) => <PricingBox
138+
<h1 className="sub">Plans &amp; Pricing</h1>
139+
<div style={{
140+
display: 'flex',
141+
justifyContent: 'center'
142+
}}>
143+
<Tab style={{
144+
backgroundColor: selfHosted ? colors.offWhite2 : colors.white,
145+
borderRight: 'none'
146+
}}
147+
onClick={()=>setSelfHosted(false)}
148+
>Cloud</Tab>
149+
<Tab style={{
150+
backgroundColor: selfHosted ? colors.white : colors.offWhite2,
151+
borderLeft: 'none'
152+
}}
153+
onClick={()=> setSelfHosted(true)}
154+
>Self-Hosted</Tab>
155+
</div>
156+
<PricingContainer>
157+
<div className="pricing__boxes" style={{
158+
display: selfHosted ? 'none' : 'flex'
159+
}}>
160+
{plans.map(
161+
(plan, i) => <PricingBox
96162
key={i}
97163
{...plan}
98-
/>
99-
)}
100-
</div>
164+
/>
165+
)}
166+
</div>
167+
<div className="pricing__boxes" style={{
168+
display: selfHosted ? 'flex' : 'none'
169+
}}>
170+
{selfHostedPlans.map(
171+
(plan, i) => <PricingBox
172+
key={i}
173+
{...plan}
174+
/>
175+
)}
176+
</div>
177+
</PricingContainer>
101178
</section>
102-
</Styled>
103-
)
179+
</Styled>;
180+
}
104181

105182
export default PricingBoxes

src/components/self-hosted/Feature.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ const StyledFeature = styled.div`
99
flex: 0 0 45%;
1010
max-width: 60rem;
1111
margin: 0 auto;
12-
margin-bottom: 10rem;
12+
margin-bottom: 5rem;
13+
margin-top: 5rem;
1314
1415
@media(max-width: 520px) {
1516
flex-direction: column;

src/components/self-hosted/Install.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ interface InstallProps {
1515
}
1616

1717
const installs: InstallProps[] = [
18-
{
19-
title: "Vanilla Kubernetes",
20-
img: Kubernetes,
21-
alt: "Kubernetes",
22-
text: "All you need is a domain and a Kubernetes cluster.",
23-
linkPath: 'install-on-kubernetes'
24-
},
2518
{
2619
title: "Google Cloud Platform",
2720
img: GoogleCloudLogo,
2821
alt: "Google Cloud",
2922
text: " Install Gitpod optimised for Google Cloud Platform.",
3023
linkPath: 'install-on-gcp-script'
24+
},
25+
{
26+
title: "Vanilla Kubernetes",
27+
img: Kubernetes,
28+
alt: "Kubernetes",
29+
text: "All you need is a domain and a Kubernetes cluster.",
30+
linkPath: 'install-on-kubernetes'
3131
}
3232
]
3333

@@ -99,7 +99,7 @@ const Install = () => (
9999
))
100100
}
101101
</div>
102-
<p>Enhanced support for Amazon Elastic Kuberenetes Service(EKS), Azure Kubernetes Service(AKS), and Openshift is coming soon.</p>
102+
<p>Enhanced support for AWS, Azure, and Openshift is coming soon.</p>
103103
</div>
104104
</StyledSection>
105105
)

src/pages/contact.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,9 @@ function encode(data: { [k: string]: string | number | boolean | null | undefine
116116
}
117117

118118
const subjects: string[] = [
119-
"Student Unlimited: Get Verified as a Student",
119+
"I have a question regarding Gitpod Self-Hosted",
120120
"I have a question regarding Gitpod Education",
121-
"I have a question regarding Gitpod Enterprise",
122-
"I have a question regarding Self-Hosted Gitpod",
121+
"Student Unlimited: Get Verified as a Student",
123122
"Applying for Professional Open Source",
124123
"Other"
125124
]

src/pages/pricing.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import Details from '../components/Details'
88
import PricingBoxes from '../components/pricing/PricingBoxes'
99
import Plans from '../components/pricing/Plans'
1010
import Business from '../components/pricing/Business'
11-
import SelfHostedPlans from '../components/self-hosted/SelfHostedPlans'
1211

1312

1413
const PricingPage: React.SFC<{}> = () => (
@@ -21,8 +20,6 @@ const PricingPage: React.SFC<{}> = () => (
2120
<div className="row">
2221
<PricingBoxes />
2322
</div>
24-
25-
<SelfHostedPlans />
2623

2724
<div className="row">
2825
<Plans />

0 commit comments

Comments
 (0)