Skip to content

Commit 798706b

Browse files
committed
Update deets and add Elon quote
1 parent 39156c2 commit 798706b

File tree

8 files changed

+88
-24
lines changed

8 files changed

+88
-24
lines changed

src/components/landing/AboveFold.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959

6060
.AboveFold-subtitle {
6161
font-size: 1.3rem !important;
62-
margin: 25px 0 70px !important;
62+
margin: 20px 0 35px !important;
6363
color: var(--gray700) !important;
6464
font-weight: 300 !important;
6565
text-align: center;

src/components/landing/AboveFold.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import scrollIntoView from 'scroll-into-view-if-needed'
66

77
import './AboveFold.css'
88
import LogoName from './LogoName'
9+
import ElonLanding from './ElonLanding'
910

1011
const scrollTo = (selector) => () => {
1112
scrollIntoView(document.querySelector(selector), {
@@ -21,9 +22,10 @@ const AboveFold = () => (
2122
<div className="AboveFold-main-container">
2223
<LogoName />
2324
<div className="AboveFold-main">
25+
<ElonLanding />
2426
<div className="AboveFold-text">
25-
<Typography className="AboveFold-title" variant="display3">
26-
GraphQL is the <span className="-nowrap">new REST</span>
27+
<Typography className="AboveFold-title" variant="display1">
28+
GraphQL is <span className="-nowrap">pain-free</span> REST
2729
</Typography>
2830
<Typography className="AboveFold-subtitle" variant="body1">
2931
GraphQL is the best way to fetch data for your app, and The
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
.ElonLanding {
2+
display: flex;
3+
flex-direction: column;
4+
align-items: center;
5+
margin: 50px 0 80px;
6+
text-align: center;
7+
}
8+
9+
.ElonLanding-avatar {
10+
width: 200px;
11+
margin-top: 10px;
12+
}

src/components/landing/ElonLanding.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import React from 'react'
2+
import { Image } from 'cloudinary-react'
3+
import Typography from 'material-ui/Typography'
4+
5+
import './ElonLanding.css'
6+
7+
const ElonLanding = () => (
8+
<div className="ElonLanding">
9+
{/* <Typography className="ElonLanding-title" variant="display1">
10+
As recommended by Elon Musk!
11+
</Typography> */}
12+
13+
<Typography className="ElonLanding-quote" variant="display1">
14+
“The future is all… GraphQL.”
15+
</Typography>
16+
17+
<a
18+
href="https://twitter.com/boredelonmusk"
19+
target="_blank"
20+
rel="noopener noreferrer"
21+
>
22+
<Image
23+
className="ElonLanding-avatar"
24+
publicId="bored-elon-musk"
25+
fetchFormat="auto"
26+
quality="auto"
27+
/>
28+
</a>
29+
</div>
30+
)
31+
export default ElonLanding

src/components/landing/Package.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ const Package = ({
134134
<div className={classNames('Package-feature-list', { full })}>
135135
{pro ? 'Videos:' : 'More videos:'}
136136
</div>
137-
{videos.map((video) => (
138-
<div className="Package-extra-item" key={video}>
137+
{videos.map((video, i) => (
138+
<div className="Package-extra-item" key={i}>
139139
{video}
140140
</div>
141141
))}

src/components/landing/Pricing.js

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,15 @@ const Pricing = () => (
2828
</span>
2929
}
3030
extraChapters={[
31-
'Server-side rendering',
32-
'Offline data and mutations',
33-
'Serverless',
34-
'Stripe integration',
31+
'Server-Side Rendering',
32+
'Apollo Federation',
33+
'Server Analytics',
34+
]}
35+
videos={[
36+
'Introduction to the codebases',
37+
'Apollo Devtools',
38+
'Apollo Studio',
3539
]}
36-
videos={['Meet the authors', 'Introduction to the codebases']}
3740
/>
3841
<Package
3942
full
@@ -46,14 +49,31 @@ const Pricing = () => (
4649
</span>
4750
}
4851
extraChapters={[
49-
'Using the GitHub GraphQL API',
50-
'Schema stitching',
51-
'Rate limiting',
52-
'Caching with Redis',
52+
'Stripe and Service Integrations',
53+
'Preventing DoS Attacks',
5354
]}
5455
videos={[
5556
'Code run-throughs of Chapters 6–11',
56-
'Interview with TBD interesting person',
57+
<span>
58+
Interview with{' '}
59+
<a
60+
href="https://www.scotttolinski.com/"
61+
target="_blank"
62+
rel="noopener noreferrer"
63+
>
64+
Scott Tolinski
65+
</a>
66+
</span>,
67+
<span>
68+
Interview with{' '}
69+
<a
70+
href="https://www.swyx.io/"
71+
target="_blank"
72+
rel="noopener noreferrer"
73+
>
74+
Shawn “swyx” Wang
75+
</a>
76+
</span>,
5777
]}
5878
/>
5979
<Package training price="749" color="blue">
@@ -84,8 +104,7 @@ const Pricing = () => (
84104

85105
<div className="Pricing-notes" id="pricing-notes">
86106
<div className="Pricing-note">
87-
<sup>1</sup> Two years after v1.0 is released (all packages get free
88-
updates during the beta).
107+
<sup>1</sup> Two years after v1.0 is released (ETA March 2021).
89108
</div>
90109
<div className="Pricing-note">
91110
<sup>2</sup> Free updates for the lifetime of the book. We’ll keep it up

src/components/landing/Stats.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const Stats = () => (
1212
<div className="Stats-list">
1313
<div className="Stat">
1414
<FontAwesomeIcon icon={faFileAlt} />
15-
<h3 className="Stat-number -with-plus">500</h3>
15+
<h3 className="Stat-number -with-plus">550</h3>
1616
<div className="Stat-caption">Total pages</div>
1717
</div>
1818
<div className="Stat">
@@ -27,7 +27,7 @@ const Stats = () => (
2727
</div>
2828
<div className="Stat">
2929
<FontAwesomeIcon icon={faVideo} />
30-
<h3 className="Stat-number">9</h3>
30+
<h3 className="Stat-number">11</h3>
3131
<div className="Stat-caption">Videos</div>
3232
</div>
3333
</div>

src/components/landing/Topics.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ const topics = [
1818
icon: faChalkboardTeacher,
1919
title: 'Beginner introduction',
2020
text:
21-
'We start out in Chapter 1 by introducing the basics of GraphQL in contrast to REST. Then in Chapters 2–4 we go through the whole GraphQL specification from its basic building blocks. We also have an extensive Background chapter that covers everything from JSON to HTTP to server-side rendering.',
21+
'We start out in Chapter 1 by introducing the basics of GraphQL in contrast to REST. Then in Chapters 2–4 we go through the whole GraphQL specification from its basic building blocks. We also have an extensive Background chapter that covers everything from JSON to databases to server-side rendering.',
2222
},
2323
{
2424
icon: faGraduationCap,
2525
title: 'Advanced topics',
2626
text:
27-
'In the client chapters, we cover topics like infinite scrolling, local state, performance, and working offline. In our server chapter, we cover four different data sources, as well as how to create your own. We also cover security and various performance improvements.',
27+
'In the client chapters, we cover topics like infinite scrolling, local state, prefetching, and persisting. In our server chapter, we cover schema design, four different data sources (as well as how to create your own), security, performance, and more.',
2828
},
2929
{
3030
icon: faDesktop,
@@ -40,13 +40,13 @@ const topics = [
4040
icon: faReact,
4141
title: 'React',
4242
text:
43-
'React is becoming the lingua franca of modern web dev, so this is our longest client chapter. We go through everything in the React Apollo library, including the render prop API, the HOC API, managing local state, subscriptions, optimistic updates, error handling, pagination, persisting, SSR, and more.',
43+
'React is becoming the lingua franca of modern web dev, so this is our longest client chapter. We go through everything in the Apollo Client library, including hooks, managing local state, subscriptions, optimistic updates, error handling, pagination, batching, linting, testing, and more.',
4444
},
4545
{
4646
icon: faVuejs,
4747
title: 'Vue',
4848
text:
49-
'From getting set up to implementing infinite scroll, our Vue chapter teaches the Apollo Vue library. Add a provider to your root component, add a query when creating a component, and access the loading state and response data in the template. Or use the ApolloQuery component directly in your template.',
49+
'Our Vue chapter teaches Apollo Vue’s composition API. Provide an ApolloClient instance and query inside a component’s setup function to get refs with the data, loading status, and error status. Query with variables and options, send mutations, and watch subscription results.',
5050
},
5151
{
5252
icon: faAppStoreIos,
@@ -57,7 +57,7 @@ const topics = [
5757
icon: faAndroid,
5858
title: 'Android',
5959
text:
60-
'In addition to our React Native chapter, we also have a native Android chapter based on the Apollo-Android library. Get typed Java models generated from your queries and mutations, make your own custom scalars, save query responses in the cache, or get RxJava Observables.',
60+
'In addition to our React Native chapter, we also have a native Android chapter based on the Apollo Android library. Get typed Kotlin models generated from your queries and mutations, configure caching, and use coroutines, ViewModel, and Flow.',
6161
},
6262
]
6363

0 commit comments

Comments
 (0)