%keZb5hu9&w$4?oUr0kXE1moufyXyyuQn=6
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
MboFyt=akR{06}d?wEzGB
literal 0
HcmV?d00001
diff --git a/examples/cms-graphcms/public/favicon/browserconfig.xml b/examples/cms-graphcms/public/favicon/browserconfig.xml
new file mode 100644
index 0000000000000..9824d87b11517
--- /dev/null
+++ b/examples/cms-graphcms/public/favicon/browserconfig.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ #000000
+
+
+
diff --git a/examples/cms-graphcms/public/favicon/favicon-16x16.png b/examples/cms-graphcms/public/favicon/favicon-16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..29deaf6716e7744b24b8d2f94443b50d3acffe68
GIT binary patch
literal 595
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa
z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{Xiaj
ziKnkC`y&=<4t4b@G6n~MLO(oR978nD=T6+{bvQtxb^jfYOS`%RMA#j5UMSyS|6pbD
zi;d6k9bZ#^z+(Rks>-)2dl_&J^V`G?Q{pEo#nr8;@~
z`krL*_G;*v!^IjrakA;BEvmm}T6sI&)8w8wxgoVPV2$ltj)nWqZSPSP<9cp)#pk-y
z3!nU3->tb0Uyz+-@SssyAx-@8dugfqY?qVb-(9v$nAvu{N21_p{^`Vs3aO80xy!%&
z$oZzjQ>@>dc#PfLX7k6kor!0-63$vnKbR`q7inF2)PmzwPWtVW3*#8c~vxSdwa$T$Bo=7>o=IEp!b`
zbdAhI3@ogSErCeez{twLptqKz2}MJ0eoAIqC2kFW6gJoaHH24%M3e+2mMat#<)>xl
zq$-qD7Nja<7L+72FjUNW{E3I7Fib<^l>g~7o=<}qn3cKplDUPIg}o<>FbgZVG?*Mt
wVOHK8qHy}gl@mwK9FaM~e!9V9ftMb`D{;Y+Pfn&&fmSehy85}Sb4q9e02)x*r~m)}
literal 0
HcmV?d00001
diff --git a/examples/cms-graphcms/public/favicon/favicon-32x32.png b/examples/cms-graphcms/public/favicon/favicon-32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3b4277bf093d204f4088ba46590bc9e6f37bf67
GIT binary patch
literal 880
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50
z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJKpuOE
zr>`sfBNk~6b@eGS1_y!iqMj~}As)x)PCc6)94K(Key6_H)~zdg8;|I@2rLO(;bG?z
zv&88`{sbpi5kZkx_Z~U92;G^MrtDPSr1Z{Z$_>33u1k7BO}vhVOI&wNh%niD+%@X$
zZ@)Q_cPr<7PJ1`kQuttQpkKj6ndP1vjjEhOWtlh|D8oV>EHcW
z2`<~itr`hdERnPRyIxS?X6yERwEJ~uLB~SbPr1@5O?#Bx=6LEzEKE!9dp*_eMU(Ed
zOXYj7Gp6&Iy74^bx!uWbaa8i1;AYbmu2VWbzipE=f6`I4{V1>b0b5hc!z--i9*Rrf
zc~&FA*drwr$HMEyV|ezVK~u}Z``UW*K1{N?ewgD|Z@JAOtM4m~kM0y;b3Sd&eAu1q
z$c$$R0{c=ke$>x>Y&m@gTTSxW-@a09s_U6r8pQY`9`a?bI&&PJ`$1|x1z#mL#e9}@HJ8bK
zzir;N-}0T6{L6#yK6nF6GpZ%75hW>!C8<`)MX5lF!N|bSLf61V*T_7?z{1Md5{R@7
zjI0a{dTTkFP&DM`r(~v8;@0p-VS^n|LwHq4L`hI$xk5ovep+TuszOO+L8?M#K}j+L
zL&coOpLjS5!!$Hb`JX=H`80@uS(#fenOj&{*n6@Fv#^3ogUR6(X64Nx3a4*eIdSC7
j5t$?GryD#LcNSTKFL46_E}iL5mO)AEZS|
zhz??kp>#q_Pa+X9S9!)q#7v>f>h;_1zJ2P{J?EY~6zP?$I_K=Y*ZTkWKIiUX?Ol$O
z;bc0!dO3Q{aq`JLhPRsE;xZ>o<~Kd63*DEFk1M;XdugYEZ_Oa-Nh{-%0D^{MKAR3)TR78`8wfiHZP
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
literal 0
HcmV?d00001
diff --git a/examples/cms-graphcms/public/favicon/mstile-150x150.png b/examples/cms-graphcms/public/favicon/mstile-150x150.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2dfd904bf1be62be8351fcbc60a1028269923f0
GIT binary patch
literal 3567
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
AfdBvi
literal 0
HcmV?d00001
diff --git a/examples/cms-graphcms/public/favicon/safari-pinned-tab.svg b/examples/cms-graphcms/public/favicon/safari-pinned-tab.svg
new file mode 100644
index 0000000000000..72ab6e050cb11
--- /dev/null
+++ b/examples/cms-graphcms/public/favicon/safari-pinned-tab.svg
@@ -0,0 +1,33 @@
+
+
+
+
+Created by potrace 1.11, written by Peter Selinger 2001-2013
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/cms-graphcms/public/favicon/site.webmanifest b/examples/cms-graphcms/public/favicon/site.webmanifest
new file mode 100644
index 0000000000000..a672d9a233c59
--- /dev/null
+++ b/examples/cms-graphcms/public/favicon/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "Next.js",
+ "short_name": "Next.js",
+ "icons": [
+ {
+ "src": "/favicons/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/favicons/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#000000",
+ "background_color": "#000000",
+ "display": "standalone"
+}
diff --git a/examples/cms-graphcms/styles/index.css b/examples/cms-graphcms/styles/index.css
new file mode 100644
index 0000000000000..b63c4592cb2e1
--- /dev/null
+++ b/examples/cms-graphcms/styles/index.css
@@ -0,0 +1,5 @@
+/* purgecss start ignore */
+@tailwind base;
+@tailwind components;
+/* purgecss end ignore */
+@tailwind utilities;
diff --git a/examples/cms-graphcms/tailwind.config.js b/examples/cms-graphcms/tailwind.config.js
new file mode 100644
index 0000000000000..9f14db001dd58
--- /dev/null
+++ b/examples/cms-graphcms/tailwind.config.js
@@ -0,0 +1,32 @@
+module.exports = {
+ theme: {
+ extend: {
+ colors: {
+ 'accent-1': '#FAFAFA',
+ 'accent-2': '#EAEAEA',
+ 'accent-7': '#333',
+ success: '#0070f3',
+ cyan: '#79FFE1',
+ },
+ spacing: {
+ 28: '7rem',
+ },
+ letterSpacing: {
+ tighter: '-.04em',
+ },
+ lineHeight: {
+ tight: 1.2,
+ },
+ fontSize: {
+ '5xl': '2.5rem',
+ '6xl': '2.75rem',
+ '7xl': '4.5rem',
+ '8xl': '6.25rem',
+ },
+ boxShadow: {
+ small: '0 5px 10px rgba(0, 0, 0, 0.12)',
+ medium: '0 8px 30px rgba(0, 0, 0, 0.12)',
+ },
+ },
+ },
+}
From 9a22ce072b9b12c4497cf493c83093ab8083d6e9 Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 15:01:52 -0500
Subject: [PATCH 02/13] Updated readme and environment variables
---
examples/cms-graphcms/.env.example | 4 --
examples/cms-graphcms/.env.local.example | 4 ++
examples/cms-graphcms/README.md | 35 ++++++------
examples/cms-graphcms/lib/graphcms.js | 65 +++++++++++-----------
examples/cms-graphcms/pages/api/preview.js | 18 +++---
5 files changed, 61 insertions(+), 65 deletions(-)
delete mode 100644 examples/cms-graphcms/.env.example
create mode 100644 examples/cms-graphcms/.env.local.example
diff --git a/examples/cms-graphcms/.env.example b/examples/cms-graphcms/.env.example
deleted file mode 100644
index b020e7a7348e7..0000000000000
--- a/examples/cms-graphcms/.env.example
+++ /dev/null
@@ -1,4 +0,0 @@
-NEXT_EXAMPLE_CMS_GCMS_PREVIEW_SECRET=
-NEXT_EXAMPLE_CMS_GCMS_PROJECT_API=
-NEXT_EXAMPLE_CMS_GCMS_PROD_AUTH_TOKEN=
-NEXT_EXAMPLE_CMS_GCMS_DEV_AUTH_TOKEN=
diff --git a/examples/cms-graphcms/.env.local.example b/examples/cms-graphcms/.env.local.example
new file mode 100644
index 0000000000000..5e2c25a6305ee
--- /dev/null
+++ b/examples/cms-graphcms/.env.local.example
@@ -0,0 +1,4 @@
+GRAPHCMS_PROJECT_API=
+GRAPHCMS_PROD_AUTH_TOKEN=
+GRAPHCMS_DEV_AUTH_TOKEN=
+GRAPHCMS_PREVIEW_SECRET=
\ No newline at end of file
diff --git a/examples/cms-graphcms/README.md b/examples/cms-graphcms/README.md
index 60ad6e5f065e9..311e622ed36fc 100644
--- a/examples/cms-graphcms/README.md
+++ b/examples/cms-graphcms/README.md
@@ -43,33 +43,32 @@ First, [create an account in GraphCMS](https://app.graphcms.com).
### Step 2. Create a new GraphCMS project
-After creating an account, create a new project from the "Blog Starter template" - be sure to include the example content.
+After creating an account, create a new project from the **Blog Starter template** - be sure to include the example content.
### Step 3. Copy your environment variables
-Copy the `.env.example` file in this directory to `.env.local` (which will be ignored by Git):
+Copy the `.env.local.example` file in this directory to `.env.local` (which will be ignored by Git):
```bash
-cp .env.example .env.local
+cp .env.local.example .env.local
```
-Then set each variable in `.env.local`:
+Inside your project dashboard, navigate to **Settings > API Access page**.
-- `NEXT_EXAMPLE_CMS_GCMS_PREVIEW_SECRET` can be any random string (but avoid spaces), like `MY_SECRET` - this is used for [the Preview Mode](https://nextjs.org/docs/advanced-features/preview-mode).
-- `NEXT_EXAMPLE_CMS_GCMS_PROJECT_API`: Get the `Project API` endpoint value from the Settings > API Access page.
-- `NEXT_EXAMPLE_CMS_GCMS_PROD_AUTH_TOKEN`: Copy the API token from your project API Access Settings. This will only query content that is published.
-- `NEXT_EXAMPLE_CMS_GCMS_DEV_AUTH_TOKEN`: Copy the API token from your project API Access Settings. This will only query content that is in draft.
+Then set each variable in `.env.local`:
-You can find all of these tokens under Settings > API Access (lefthand menu, bottom group of icons.)
+- `GRAPHCMS_PROJECT_API`: Set it to the API endpoint under **Endpoints**, at the top of the page.
+- `GRAPHCMS_PROD_AUTH_TOKEN`: Copy the `NEXT_EXAMPLE_CMS_GCMS_PROD_AUTH_TOKEN` token under **Existing tokens**, at the bottom of the page. This will only query content that is published.
+- `GRAPHCMS_DEV_AUTH_TOKEN`: Copy the `NEXT_EXAMPLE_CMS_GCMS_DEV_AUTH_TOKEN` token under **Existing tokens**, at the bottom of the page. This will only query content that is in draft.
+- `GRAPHCMS_PREVIEW_SECRET` can be any random string (but avoid spaces), like `MY_SECRET` - this is used for [Preview Mode](https://nextjs.org/docs/advanced-features/preview-mode).
Your `.env.local` file should look like this:
```bash
-NEXT_EXAMPLE_CMS_GCMS_PREVIEW_SECRET=...
-NEXT_EXAMPLE_CMS_GCMS_PROJECT_API=...
-NEXT_EXAMPLE_CMS_GCMS_PROD_AUTH_TOKEN=...
-NEXT_EXAMPLE_CMS_GCMS_DEV_AUTH_TOKEN=...
-
+GRAPHCMS_PREVIEW_SECRET=...
+GRAPHCMS_PROJECT_API=...
+GRAPHCMS_PROD_AUTH_TOKEN=...
+GRAPHCMS_DEV_AUTH_TOKEN=...
```
### Step 4. Run Next.js in development mode
@@ -88,14 +87,14 @@ Your blog should be up and running on [http://localhost:3000](http://localhost:3
### Step 5. Try preview mode
-In GraphCMS, go to one of the posts you've created and:
+In GraphCMS, go to one of the posts in your project and:
- **Update the title**. For example, you can add `[Draft]` in front of the title.
- After you edit the document save the article as a draft, but **DO NOT** click **Publish**. By doing this, the post will be in the draft stage.
-Now, if you go to the post page on localhost, you won't see the updated title. However, if you use the **Preview Mode**, you'll be able to see the change ([Documentation](/docs/advanced-features/preview-mode.md)).
+Now, if you go to the post page on localhost, you won't see the updated title. However, if you use **Preview Mode**, you'll be able to see the change ([Documentation](/docs/advanced-features/preview-mode.md)).
-To view the preview, transform the url to the following format: `http://localhost:3000/api/preview?secret=[YOUR_SECRET_TOKEN]&slug=[SLUG_TO_PREVIEW]` where \[YOUR_SECRET_TOKEN]\ is the same secret you defined in the `.env` file and \[SLUG_TO_PREVIEW]\ is the slug of one of the posts you want to preview.
+To view the preview, transform the url to the following format: `http://localhost:3000/api/preview?secret=&slug=` where `` is the same secret you defined in the `.env.local` file and `` is the slug of one of the posts you want to preview.
You should now be able to see the updated title. To exit the preview mode, you can click on _"Click here to exit preview mode"_ at the top.
@@ -122,7 +121,7 @@ vercel secrets add my-secret "my value"
Run that command for each of the entries in our .env.local file. For example, adding the secret would look like
```bash
-vercel secrets add NEXT_EXAMPLE_CMS_GCMS_PREVIEW_SECRET "12345token"
+vercel secrets add GRAPHCMS_PREVIEW_SECRET "12345token"
```
Once all th secrets hav been added, you can re-run the vercel deploy with `vercel`.
diff --git a/examples/cms-graphcms/lib/graphcms.js b/examples/cms-graphcms/lib/graphcms.js
index 3ddedc6461e23..9cd19714466f4 100644
--- a/examples/cms-graphcms/lib/graphcms.js
+++ b/examples/cms-graphcms/lib/graphcms.js
@@ -1,30 +1,27 @@
async function fetchAPI(query, { variables, preview } = {}) {
- const res = await fetch(
- process.env.NEXT_EXAMPLE_CMS_GCMS_PROJECT_API,
- {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- Authorization: `Bearer ${
- preview
- ? process.env.NEXT_EXAMPLE_CMS_GCMS_DEV_AUTH_TOKEN
- : process.env.NEXT_EXAMPLE_CMS_GCMS_PROD_AUTH_TOKEN
- }`,
- },
- body: JSON.stringify({
- query,
- variables,
- }),
- }
- );
+ const res = await fetch(process.env.GRAPHCMS_PROJECT_API, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${
+ preview
+ ? process.env.GRAPHCMS_DEV_AUTH_TOKEN
+ : process.env.GRAPHCMS_PROD_AUTH_TOKEN
+ }`,
+ },
+ body: JSON.stringify({
+ query,
+ variables,
+ }),
+ })
- const json = await res.json();
+ const json = await res.json()
if (json.errors) {
- console.log(process.env.NEXT_EXAMPLE_CMS_GCMS_PROJECT_ID);
- console.error(json.errors);
- throw new Error("Failed to fetch API");
+ console.log(process.env.NEXT_EXAMPLE_CMS_GCMS_PROJECT_ID)
+ console.error(json.errors)
+ throw new Error('Failed to fetch API')
}
- return json.data;
+ return json.data
}
export async function getPreviewPostBySlug(slug) {
@@ -38,12 +35,12 @@ export async function getPreviewPostBySlug(slug) {
{
preview: true,
variables: {
- stage: "DRAFT",
+ stage: 'DRAFT',
slug,
},
}
- );
- return data?.post;
+ )
+ return data?.post
}
export async function getAllPostsWithSlug() {
@@ -53,8 +50,8 @@ export async function getAllPostsWithSlug() {
slug
}
}
- `);
- return data?.allPosts;
+ `)
+ return data?.allPosts
}
export async function getAllPostsForHome(preview) {
@@ -95,8 +92,8 @@ export async function getAllPostsForHome(preview) {
}
`,
{ preview }
- );
- return data?.posts;
+ )
+ return data?.posts
}
export async function getPostAndMorePosts(slug, preview) {
@@ -143,12 +140,12 @@ export async function getPostAndMorePosts(slug, preview) {
{
preview,
variables: {
- stage: preview ? "DRAFT" : "PUBLISHED",
+ stage: preview ? 'DRAFT' : 'PUBLISHED',
slug,
},
}
- );
- return data;
+ )
+ return data
}
-export default () => ({});
+export default () => ({})
diff --git a/examples/cms-graphcms/pages/api/preview.js b/examples/cms-graphcms/pages/api/preview.js
index 8e2d5dbc3fd87..a2fb1b5cf0868 100644
--- a/examples/cms-graphcms/pages/api/preview.js
+++ b/examples/cms-graphcms/pages/api/preview.js
@@ -1,28 +1,28 @@
-import { getPreviewPostBySlug } from "../../lib/graphcms";
+import { getPreviewPostBySlug } from '../../lib/graphcms'
export default async (req, res) => {
// Check the secret and next parameters
// This secret should only be known to this API route and the CMS
if (
- req.query.secret !== process.env.NEXT_EXAMPLE_CMS_GCMS_PREVIEW_SECRET ||
+ req.query.secret !== process.env.GRAPHCMS_PREVIEW_SECRET ||
!req.query.slug
) {
- return res.status(401).json({ message: "Invalid token" });
+ return res.status(401).json({ message: 'Invalid token' })
}
// Fetch the headless CMS to check if the provided `slug` exists
- const post = await getPreviewPostBySlug(req.query.slug);
+ const post = await getPreviewPostBySlug(req.query.slug)
// If the slug doesn't exist prevent preview mode from being enabled
if (!post) {
- return res.status(401).json({ message: "Invalid slug" });
+ return res.status(401).json({ message: 'Invalid slug' })
}
// Enable Preview Mode by setting the cookies
- res.setPreviewData({});
+ res.setPreviewData({})
// Redirect to the path from the fetched post
// We don't redirect to req.query.slug as that might lead to open redirect vulnerabilities
- res.writeHead(307, { Location: `/posts/${post.slug}` });
- res.end();
-};
+ res.writeHead(307, { Location: `/posts/${post.slug}` })
+ res.end()
+}
From 093ec08118ec790c83a9a749348e104e017b36b5 Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 15:37:45 -0500
Subject: [PATCH 03/13] Removed gitignore
---
examples/cms-graphcms/.gitignore | 32 --------------------------------
1 file changed, 32 deletions(-)
delete mode 100644 examples/cms-graphcms/.gitignore
diff --git a/examples/cms-graphcms/.gitignore b/examples/cms-graphcms/.gitignore
deleted file mode 100644
index b6022f53f8a33..0000000000000
--- a/examples/cms-graphcms/.gitignore
+++ /dev/null
@@ -1,32 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-
-# misc
-.DS_Store
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# local env files
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-.vercel
\ No newline at end of file
From aec3563e01570712bdb4d85f7d5055ba2b284605 Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 15:38:04 -0500
Subject: [PATCH 04/13] Updated tailwind config
---
examples/cms-graphcms/package.json | 6 ++---
examples/cms-graphcms/postcss.config.js | 29 +++++++++++-------------
examples/cms-graphcms/tailwind.config.js | 1 +
3 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/examples/cms-graphcms/package.json b/examples/cms-graphcms/package.json
index f7c57bf8e284c..445ad29018c56 100644
--- a/examples/cms-graphcms/package.json
+++ b/examples/cms-graphcms/package.json
@@ -9,13 +9,13 @@
"dependencies": {
"classnames": "2.2.6",
"date-fns": "2.10.0",
- "next": "^9.4.2",
+ "next": "latest",
"react": "^16.13.0",
"react-dom": "^16.13.0"
},
"devDependencies": {
- "@fullhuman/postcss-purgecss": "^2.1.0",
+ "postcss-flexbugs-fixes": "^4.2.1",
"postcss-preset-env": "^6.7.0",
- "tailwindcss": "^1.2.0"
+ "tailwindcss": "^1.4.6"
}
}
diff --git a/examples/cms-graphcms/postcss.config.js b/examples/cms-graphcms/postcss.config.js
index 23ffee56ffe55..6f2d25c4e3509 100644
--- a/examples/cms-graphcms/postcss.config.js
+++ b/examples/cms-graphcms/postcss.config.js
@@ -1,21 +1,18 @@
module.exports = {
plugins: [
'tailwindcss',
- ...(process.env.NODE_ENV === 'production'
- ? [
- [
- '@fullhuman/postcss-purgecss',
- {
- content: [
- './pages/**/*.{js,jsx,ts,tsx}',
- './components/**/*.{js,jsx,ts,tsx}',
- ],
- defaultExtractor: content =>
- content.match(/[\w-/:]+(?
Date: Sun, 14 Jun 2020 15:38:28 -0500
Subject: [PATCH 05/13] Some fixes in pages
---
examples/cms-graphcms/lib/graphcms.js | 15 +++---
examples/cms-graphcms/pages/index.js | 26 +++++-----
examples/cms-graphcms/pages/posts/[slug].js | 55 ++++++++++-----------
3 files changed, 47 insertions(+), 49 deletions(-)
diff --git a/examples/cms-graphcms/lib/graphcms.js b/examples/cms-graphcms/lib/graphcms.js
index 9cd19714466f4..d29300f7a242f 100644
--- a/examples/cms-graphcms/lib/graphcms.js
+++ b/examples/cms-graphcms/lib/graphcms.js
@@ -14,13 +14,14 @@ async function fetchAPI(query, { variables, preview } = {}) {
variables,
}),
})
-
const json = await res.json()
+
if (json.errors) {
console.log(process.env.NEXT_EXAMPLE_CMS_GCMS_PROJECT_ID)
console.error(json.errors)
throw new Error('Failed to fetch API')
}
+
return json.data
}
@@ -40,18 +41,18 @@ export async function getPreviewPostBySlug(slug) {
},
}
)
- return data?.post
+ return data.post
}
export async function getAllPostsWithSlug() {
- const data = fetchAPI(`
+ const data = await fetchAPI(`
{
posts {
slug
}
}
`)
- return data?.allPosts
+ return data.posts
}
export async function getAllPostsForHome(preview) {
@@ -89,11 +90,11 @@ export async function getAllPostsForHome(preview) {
}
}
}
-}
+ }
`,
{ preview }
)
- return data?.posts
+ return data.posts
}
export async function getPostAndMorePosts(slug, preview) {
@@ -147,5 +148,3 @@ export async function getPostAndMorePosts(slug, preview) {
)
return data
}
-
-export default () => ({})
diff --git a/examples/cms-graphcms/pages/index.js b/examples/cms-graphcms/pages/index.js
index ecda0123ba840..be1dce8bf80d4 100644
--- a/examples/cms-graphcms/pages/index.js
+++ b/examples/cms-graphcms/pages/index.js
@@ -1,15 +1,15 @@
-import Container from "../components/container";
-import MoreStories from "../components/more-stories";
-import HeroPost from "../components/hero-post";
-import Intro from "../components/intro";
-import Layout from "../components/layout";
-import { getAllPostsForHome } from "../lib/graphcms";
-import Head from "next/head";
-import { CMS_NAME } from "../lib/constants";
+import Container from '../components/container'
+import MoreStories from '../components/more-stories'
+import HeroPost from '../components/hero-post'
+import Intro from '../components/intro'
+import Layout from '../components/layout'
+import { getAllPostsForHome } from '../lib/graphcms'
+import Head from 'next/head'
+import { CMS_NAME } from '../lib/constants'
export default function Index({ posts, preview }) {
- const heroPost = posts[0];
- const morePosts = posts.slice(1);
+ const heroPost = posts[0]
+ const morePosts = posts.slice(1)
return (
<>
@@ -32,12 +32,12 @@ export default function Index({ posts, preview }) {
>
- );
+ )
}
export async function getStaticProps({ preview = false }) {
- const posts = await getAllPostsForHome(preview);
+ const posts = (await getAllPostsForHome(preview)) || []
return {
props: { posts, preview },
- };
+ }
}
diff --git a/examples/cms-graphcms/pages/posts/[slug].js b/examples/cms-graphcms/pages/posts/[slug].js
index bfb593e24e860..f19f07808f933 100644
--- a/examples/cms-graphcms/pages/posts/[slug].js
+++ b/examples/cms-graphcms/pages/posts/[slug].js
@@ -1,22 +1,24 @@
-import { useRouter } from "next/router";
-import ErrorPage from "next/error";
-import Container from "components/container";
-import PostBody from "components/post-body";
-import MoreStories from "components/more-stories";
-import Header from "components/header";
-import PostHeader from "components/post-header";
-import SectionSeparator from "components/section-separator";
-import Layout from "components/layout";
-import { getAllPostsWithSlug, getPostAndMorePosts } from "lib/graphcms";
-import PostTitle from "components/post-title";
-import Head from "next/head";
-import { CMS_NAME } from "lib/constants";
+import { useRouter } from 'next/router'
+import ErrorPage from 'next/error'
+import Container from 'components/container'
+import PostBody from 'components/post-body'
+import MoreStories from 'components/more-stories'
+import Header from 'components/header'
+import PostHeader from 'components/post-header'
+import SectionSeparator from 'components/section-separator'
+import Layout from 'components/layout'
+import { getAllPostsWithSlug, getPostAndMorePosts } from 'lib/graphcms'
+import PostTitle from 'components/post-title'
+import Head from 'next/head'
+import { CMS_NAME } from 'lib/constants'
export default function Post({ post, morePosts, preview }) {
- const router = useRouter();
+ const router = useRouter()
+
if (!router.isFallback && !post?.slug) {
- return ;
+ return
}
+
return (
@@ -46,29 +48,26 @@ export default function Post({ post, morePosts, preview }) {
)}
- );
+ )
}
export async function getStaticProps({ params, preview = false }) {
- const data = await getPostAndMorePosts(params.slug, preview);
+ const data = await getPostAndMorePosts(params.slug, preview)
return {
props: {
preview,
- post: data.post || null,
- morePosts: data.morePosts || null,
+ post: data.post,
+ morePosts: data.morePosts || [],
},
- };
+ }
}
export async function getStaticPaths() {
- const posts = await getAllPostsWithSlug();
+ const posts = await getAllPostsWithSlug()
return {
- paths:
- posts?.map((post) => ({
- params: {
- slug: post.slug,
- },
- })) || [],
+ paths: posts.map(({ slug }) => ({
+ params: { slug },
+ })),
fallback: true,
- };
+ }
}
From 87e0f05da03507e9575e7965b4a6a7afa63f53ac Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 15:41:12 -0500
Subject: [PATCH 06/13] Updated api endpoints
---
examples/cms-graphcms/pages/api/exit-preview.js | 2 +-
examples/cms-graphcms/pages/api/preview.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/examples/cms-graphcms/pages/api/exit-preview.js b/examples/cms-graphcms/pages/api/exit-preview.js
index d35f0ff3a71d6..03d954f4a7a99 100644
--- a/examples/cms-graphcms/pages/api/exit-preview.js
+++ b/examples/cms-graphcms/pages/api/exit-preview.js
@@ -1,4 +1,4 @@
-export default async (_, res) => {
+export default async function handler(_, res) {
// Exit the current user from "Preview Mode". This function accepts no args.
res.clearPreviewData()
diff --git a/examples/cms-graphcms/pages/api/preview.js b/examples/cms-graphcms/pages/api/preview.js
index a2fb1b5cf0868..cd749e8db1220 100644
--- a/examples/cms-graphcms/pages/api/preview.js
+++ b/examples/cms-graphcms/pages/api/preview.js
@@ -1,6 +1,6 @@
import { getPreviewPostBySlug } from '../../lib/graphcms'
-export default async (req, res) => {
+export default async function handler(req, res) {
// Check the secret and next parameters
// This secret should only be known to this API route and the CMS
if (
From 2415f7cf50d9ac23e0670044e2fb0d19552a7bb4 Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 15:56:40 -0500
Subject: [PATCH 07/13] lint fix
---
examples/cms-graphcms/components/cover-image.js | 12 ++++++------
examples/cms-graphcms/components/hero-post.js | 10 +++++-----
examples/cms-graphcms/components/more-stories.js | 2 +-
examples/cms-graphcms/components/post-body.js | 4 ++--
examples/cms-graphcms/components/post-header.js | 10 +++++-----
examples/cms-graphcms/components/post-preview.js | 10 +++++-----
examples/cms-graphcms/lib/constants.js | 8 ++++----
7 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/examples/cms-graphcms/components/cover-image.js b/examples/cms-graphcms/components/cover-image.js
index 28bbeaa563605..e1830c8286bc7 100644
--- a/examples/cms-graphcms/components/cover-image.js
+++ b/examples/cms-graphcms/components/cover-image.js
@@ -1,5 +1,5 @@
-import cn from "classnames";
-import Link from "next/link";
+import cn from 'classnames'
+import Link from 'next/link'
export default function CoverImage({ title, url, slug }) {
const image = (
@@ -7,12 +7,12 @@ export default function CoverImage({ title, url, slug }) {
width={2000}
height={1000}
alt={`Cover Image for ${title}`}
- className={cn("shadow-small", {
- "hover:shadow-medium transition-shadow duration-200": slug,
+ className={cn('shadow-small', {
+ 'hover:shadow-medium transition-shadow duration-200': slug,
})}
src={url}
/>
- );
+ )
return (
@@ -24,5 +24,5 @@ export default function CoverImage({ title, url, slug }) {
image
)}
- );
+ )
}
diff --git a/examples/cms-graphcms/components/hero-post.js b/examples/cms-graphcms/components/hero-post.js
index 115cdf8bb8130..fd2f17cb5b3d8 100644
--- a/examples/cms-graphcms/components/hero-post.js
+++ b/examples/cms-graphcms/components/hero-post.js
@@ -1,7 +1,7 @@
-import Avatar from "../components/avatar";
-import Date from "../components/date";
-import CoverImage from "../components/cover-image";
-import Link from "next/link";
+import Avatar from '../components/avatar'
+import Date from '../components/date'
+import CoverImage from '../components/cover-image'
+import Link from 'next/link'
export default function HeroPost({
title,
@@ -33,5 +33,5 @@ export default function HeroPost({
- );
+ )
}
diff --git a/examples/cms-graphcms/components/more-stories.js b/examples/cms-graphcms/components/more-stories.js
index c4c1bf7dfa503..dcdd9b4e6ae7b 100644
--- a/examples/cms-graphcms/components/more-stories.js
+++ b/examples/cms-graphcms/components/more-stories.js
@@ -7,7 +7,7 @@ export default function MoreStories({ posts }) {
More Stories
- {posts.map(post => (
+ {posts.map((post) => (
- );
+ )
}
diff --git a/examples/cms-graphcms/components/post-header.js b/examples/cms-graphcms/components/post-header.js
index 9ed89a86c7583..1b8b1b91f6506 100644
--- a/examples/cms-graphcms/components/post-header.js
+++ b/examples/cms-graphcms/components/post-header.js
@@ -1,7 +1,7 @@
-import Avatar from "../components/avatar";
-import Date from "../components/date";
-import CoverImage from "../components/cover-image";
-import PostTitle from "../components/post-title";
+import Avatar from '../components/avatar'
+import Date from '../components/date'
+import CoverImage from '../components/cover-image'
+import PostTitle from '../components/post-title'
export default function PostHeader({ title, coverImage, date, author }) {
return (
@@ -22,5 +22,5 @@ export default function PostHeader({ title, coverImage, date, author }) {
>
- );
+ )
}
diff --git a/examples/cms-graphcms/components/post-preview.js b/examples/cms-graphcms/components/post-preview.js
index 6da1acfb530b7..eed9789d4b100 100644
--- a/examples/cms-graphcms/components/post-preview.js
+++ b/examples/cms-graphcms/components/post-preview.js
@@ -1,7 +1,7 @@
-import Avatar from "../components/avatar";
-import Date from "../components/date";
-import CoverImage from "./cover-image";
-import Link from "next/link";
+import Avatar from '../components/avatar'
+import Date from '../components/date'
+import CoverImage from './cover-image'
+import Link from 'next/link'
export default function PostPreview({
title,
@@ -27,5 +27,5 @@ export default function PostPreview({
{excerpt}
- );
+ )
}
diff --git a/examples/cms-graphcms/lib/constants.js b/examples/cms-graphcms/lib/constants.js
index 1c06ba09dfc11..144db5ec24827 100644
--- a/examples/cms-graphcms/lib/constants.js
+++ b/examples/cms-graphcms/lib/constants.js
@@ -1,5 +1,5 @@
-export const EXAMPLE_PATH = "cms-graphcms";
-export const CMS_NAME = "GraphCMS";
-export const CMS_URL = "https://graphcms.com/";
+export const EXAMPLE_PATH = 'cms-graphcms'
+export const CMS_NAME = 'GraphCMS'
+export const CMS_URL = 'https://graphcms.com/'
export const HOME_OG_IMAGE_URL =
- "https://og-image.now.sh/Next.js%20Blog%20Example%20with%20**GraphCMS**.png?theme=light&md=1&fontSize=75px&images=https%3A%2F%2Fassets.vercel.com%2Fimage%2Fupload%2Ffront%2Fassets%2Fdesign%2Fnextjs-black-logo.svg&images=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyBmaWxsPSJjdXJyZW50Q29sb3IiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMzMCA3NSI%2BCiAgPHBhdGggZD0iTTM1LjI3IDEwbC04LjczIDUtOC43MyA1LTguNzMgNXYzMGw4LjczLTUgOC43My01VjM1bC04LjczIDVWMzBsOC43My01IDguNzMtNXYzMGwtOC43MyA1LTguNzMgNS04LjczIDUtOC43MyA1IDguNzMgNSA4LjczLTUgOC43My01IDguNzMtNUw0NCA1NVY1bC04LjczLTV6Ii8%2BCiAgPHBhdGggZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNODguNDUgMjAuOTFIOTZ2MzAuMDZjMCA0Ljg4LTEuNTMgOC42LTQuNTggMTEuMTdBMTYuNiAxNi42IDAgMDE4MC4zNyA2NmMtMi45NC4wNy01Ljg2LS42LTguNTEtMS45NWExMy4zIDEzLjMgMCAwMS01LjY1LTUuNzVsNi41Ni00YzEuNTIgMi45NiA0LjEzIDQuNDQgNy44NCA0LjQ0IDIuNDQgMCA0LjM1LS42NyA1Ljc1LTIuMDIgMS40LTEuMzUgMi4xLTMuMjcgMi4xLTUuNzZ2LTMuNDJjLTIuMjggMy4yLTUuNDcgNC44LTkuNTggNC44LTQuMDEuMS03Ljg3LTEuNjItMTAuNi00LjdBMTYuNDQgMTYuNDQgMCAwMTY0IDM2LjE1YTE2LjM5IDE2LjM5IDAgMDE0LjMtMTEuNDJBMTMuNzMgMTMuNzMgMCAwMTc4Ljg4IDIwYzQuMSAwIDcuMyAxLjYgOS41NyA0Ljh2LTMuODl6bS0xNC40IDIxLjQ3YTguNjYgOC42NiAwIDAwMTIuMDQgMCA4LjU2IDguNTYgMCAwMDIuMzYtNi4yMkE4LjQ4IDguNDggMCAwMDg2LjEgMzBhOC42NiA4LjY2IDAgMDAtMTIuMDMgMCA4LjQ4IDguNDggMCAwMC0yLjM3IDYuMTYgOC41NiA4LjU2IDAgMDAyLjM3IDYuMjJ6Ii8%2BCiAgPHBhdGggZD0iTTEwOC44IDI1LjgzYTguMTcgOC4xNyAwIDAxMy42LTQuMzdjMS43LS45OCAzLjY0LTEuNDggNS42LTEuNDZ2OC43M2E5LjE4IDkuMTggMCAwMC02LjM5IDEuNDdjLTEuODggMS4yNS0yLjgyIDMuMzQtMi44MiA2LjI2VjUxSDEwMVYyMC42M2g3Ljh2NS4yeiIvPgogIDxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTE0NC4zIDIwLjg3aDcuN3YzMC4yNmgtNy43di0zLjU2Yy0yLjMyIDIuOTUtNS41NyA0LjQzLTkuNzcgNC40M2ExMy40NyAxMy40NyAwIDAxLTEwLjI1LTQuNjNBMTYuMTQgMTYuMTQgMCAwMTEyMC4wMSAzNmMtLjExLTQuMiAxLjQyLTguMyA0LjI3LTExLjM3QTEzLjQ3IDEzLjQ3IDAgMDExMzQuNTMgMjBjNC4yIDAgNy40NSAxLjQ4IDkuNzcgNC40M3YtMy41NnptLTE0LjI2IDIxLjI5YTcuOTMgNy45MyAwIDAwNS45MyAyLjRjMi4yMy4wNiA0LjM5LS44IDUuOTYtMi40QTguNCA4LjQgMCAwMDE0NC4zIDM2YTguNCA4LjQgMCAwMC0yLjM3LTYuMTYgOC4wMyA4LjAzIDAgMDAtNS45Ni0yLjQgNy45MyA3LjkzIDAgMDAtNS45MyAyLjRBOC40NSA4LjQ1IDAgMDAxMjcuNyAzNmE4LjQ1IDguNDUgMCAwMDIuMzQgNi4xNnoiLz4KICA8cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xNzQuNCAyMGMzLjk0LS4wNCA3LjcgMS42OCAxMC4zMiA0LjcyYTE2LjYgMTYuNiAwIDAxNC4yNyAxMS41NyAxNi42IDE2LjYgMCAwMS00LjI3IDExLjU4IDEzLjQzIDEzLjQzIDAgMDEtMTAuMzEgNC43MWMtNC4yIDAtNy40My0xLjUtOS43MS00LjVWNjRIMTU3VjIwLjg5aDcuN3YzLjYyYzIuMjgtMyA1LjUxLTQuNSA5LjctNC41em0tNy4zNiAyMi41NmE3Ljg1IDcuODUgMCAwMDUuOTMgMi40NCA3Ljk1IDcuOTUgMCAwMDUuOTYtMi40NCA4LjY0IDguNjQgMCAwMDIuMzctNi4yNyA4LjY0IDguNjQgMCAwMC0yLjM3LTYuMjcgNy45NSA3Ljk1IDAgMDAtNS45Ni0yLjQ0IDcuODYgNy44NiAwIDAwLTUuOTMgMi40NCA4LjcgOC43IDAgMDAtMi4zNCA2LjI3IDguNyA4LjcgMCAwMDIuMzQgNi4yN3oiLz4KICA8cGF0aCBkPSJNMjExLjI3IDE5LjY1YzMuMTYtLjEgNi4yMSAxLjE2IDguNCAzLjQ2IDIuMjIgMi4zMSAzLjMzIDUuNSAzLjMzIDkuNTdWNTJoLThWMzMuNjdjMC0yLjEtLjU2LTMuNy0xLjY4LTQuODFhNi4wOCA2LjA4IDAgMDAtNC40OC0xLjY3IDYuNTcgNi41NyAwIDAwLTQuOTggMS45NWMtMS4yNCAxLjMtMS44NyAzLjI1LTEuODcgNS44NnYxN0gxOTRWOGg4djE2LjA1YzEuOTUtMi45MyA1LjA0LTQuNCA5LjI3LTQuNHoiLz4KICA8cGF0aCBkPSJNMjQzLjc1IDUyYy00LjQ2LjEtOC43Ny0xLjU2LTExLjkzLTQuNThBMTUuMzggMTUuMzggMCAwMTIyNyAzNmExNi4wMSAxNi4wMSAwIDAxOC40Ni0xMy44NyAxNy40MiAxNy40MiAwIDAxMTYuNzUuMDQgMTMuMDYgMTMuMDYgMCAwMTUuNDcgNS44M2wtMy40MyAxLjg5YTkuNjQgOS42NCAwIDAwLTQuMS00LjM3IDEyLjY1IDEyLjY1IDAgMDAtNi40LTEuNjIgMTIuMyAxMi4zIDAgMDAtOC45IDMuNTIgMTEuNSAxMS41IDAgMDAtMy42MyA4LjU4IDExLjUgMTEuNSAwIDAwMy42MyA4LjU4YzIuNzEgMi43IDYuNiA0IDEwLjQ3IDMuNSAzLjg4LS40OCA3LjI4LTIuNyA5LjE4LTUuOTdsMy41IDEuOTVhMTQuMzggMTQuMzggMCAwMS01Ljc5IDUuOCAxNy4wMyAxNy4wMyAwIDAxLTguNDYgMi4xNHoiLz4KICA8cGF0aCBkPSJNMjkzLjU3IDIwYzMuMS0uMTIgNi4xMSAxLjA3IDguMjggMy4yOCAyLjEgMi4xOCAzLjE1IDUuMTIgMy4xNSA4LjgzVjUxaC00LjA1VjMyLjExYzAtMi42Mi0uNjgtNC42NS0yLjA1LTYuMDhhNy4xIDcuMSAwIDAwLTUuNC0yLjE1IDggOCAwIDAwLTYuMTMgMi41MWMtMS41NiAxLjY4LTIuMzQgNC4yOS0yLjM0IDcuODRWNTFoLTQuMDZWMzIuMTFjMC0yLjY2LS42NC00LjctMS45Mi02LjExYTYuNjkgNi42OSAwIDAwLTUuMjEtMi4xMiA4LjUgOC41IDAgMDAtNi4yMyAyLjU0Yy0xLjcgMS43LTIuNTYgNC4zLTIuNTYgNy44VjUxSDI2MVYyMC43M2g0LjA1djQuNDJBMTAuNDcgMTAuNDcgMCAwMTI3NC40IDIwYzQuNCAwIDcuNSAxLjgzIDkuMjkgNS41IDIuMi0zLjY3IDUuNDktNS41IDkuODktNS41eiIvPgogIDxwYXRoIGQ9Ik0zMTEuMyAyOC42NWEzLjY3IDMuNjcgMCAwMDEuOTMgMy4yNWMxLjQ1Ljg4IDMuMDQgMS41NCA0LjcgMS45Nmw1LjUxIDEuNWMxLjc5LjQ4IDMuNCAxLjQyIDQuNjYgMi43MmE3LjA2IDcuMDYgMCAwMTEuOSA1LjE0IDcuNiA3LjYgMCAwMS0zLjI2IDYuMzRjLTIuMTYgMS42My00Ljk1IDIuNDQtOC4zOCAyLjQzLTIuNzYuMDgtNS40OC0uNi03Ljg1LTEuOTZhMTAuNiAxMC42IDAgMDEtNC41MS01LjA3bDMuNi0yYTcuMjQgNy4yNCAwIDAwMy4yMyAzLjc1YzEuNjcuOTUgMy42IDEuNDMgNS41NCAxLjM4IDEuODMuMDcgMy42NC0uMzQgNS4yNS0xLjE4YTMuOTUgMy45NSAwIDAwMi4xMS0zLjY5Yy4wMy0xLjM0LS43LTIuNi0xLjktMy4yOWExNyAxNyAwIDAwLTQuNjgtMS45N2wtNS41Mi0xLjVjLTEuNzgtLjQ4LTMuNC0xLjQtNC42OC0yLjY5YTYuODIgNi44MiAwIDAxLTEuOTItNS4wNSA3LjY5IDcuNjkgMCAwMTMuMTMtNi4yMiAxMi4xNiAxMi4xNiAwIDAxNy44Ni0yLjVjMi40LS4wNCA0Ljc4LjU0IDYuODYgMS43YTEwLjUgMTAuNSAwIDAxNC4zNiA0LjU0bC0zLjU1IDEuOTVjLTEuMjMtMi44NS0zLjgtNC4yOC03LjY3LTQuMjhhOC44IDguOCAwIDAwLTQuNzQgMS4yMyAzLjkyIDMuOTIgMCAwMC0xLjk5IDMuNTF6Ii8%2BCjwvc3ZnPgo%3D&widths=undefined&widths=auto&heights=250&heights=150";
+ 'https://og-image.now.sh/Next.js%20Blog%20Example%20with%20**GraphCMS**.png?theme=light&md=1&fontSize=75px&images=https%3A%2F%2Fassets.vercel.com%2Fimage%2Fupload%2Ffront%2Fassets%2Fdesign%2Fnextjs-black-logo.svg&images=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyBmaWxsPSJjdXJyZW50Q29sb3IiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMzMCA3NSI%2BCiAgPHBhdGggZD0iTTM1LjI3IDEwbC04LjczIDUtOC43MyA1LTguNzMgNXYzMGw4LjczLTUgOC43My01VjM1bC04LjczIDVWMzBsOC43My01IDguNzMtNXYzMGwtOC43MyA1LTguNzMgNS04LjczIDUtOC43MyA1IDguNzMgNSA4LjczLTUgOC43My01IDguNzMtNUw0NCA1NVY1bC04LjczLTV6Ii8%2BCiAgPHBhdGggZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNODguNDUgMjAuOTFIOTZ2MzAuMDZjMCA0Ljg4LTEuNTMgOC42LTQuNTggMTEuMTdBMTYuNiAxNi42IDAgMDE4MC4zNyA2NmMtMi45NC4wNy01Ljg2LS42LTguNTEtMS45NWExMy4zIDEzLjMgMCAwMS01LjY1LTUuNzVsNi41Ni00YzEuNTIgMi45NiA0LjEzIDQuNDQgNy44NCA0LjQ0IDIuNDQgMCA0LjM1LS42NyA1Ljc1LTIuMDIgMS40LTEuMzUgMi4xLTMuMjcgMi4xLTUuNzZ2LTMuNDJjLTIuMjggMy4yLTUuNDcgNC44LTkuNTggNC44LTQuMDEuMS03Ljg3LTEuNjItMTAuNi00LjdBMTYuNDQgMTYuNDQgMCAwMTY0IDM2LjE1YTE2LjM5IDE2LjM5IDAgMDE0LjMtMTEuNDJBMTMuNzMgMTMuNzMgMCAwMTc4Ljg4IDIwYzQuMSAwIDcuMyAxLjYgOS41NyA0Ljh2LTMuODl6bS0xNC40IDIxLjQ3YTguNjYgOC42NiAwIDAwMTIuMDQgMCA4LjU2IDguNTYgMCAwMDIuMzYtNi4yMkE4LjQ4IDguNDggMCAwMDg2LjEgMzBhOC42NiA4LjY2IDAgMDAtMTIuMDMgMCA4LjQ4IDguNDggMCAwMC0yLjM3IDYuMTYgOC41NiA4LjU2IDAgMDAyLjM3IDYuMjJ6Ii8%2BCiAgPHBhdGggZD0iTTEwOC44IDI1LjgzYTguMTcgOC4xNyAwIDAxMy42LTQuMzdjMS43LS45OCAzLjY0LTEuNDggNS42LTEuNDZ2OC43M2E5LjE4IDkuMTggMCAwMC02LjM5IDEuNDdjLTEuODggMS4yNS0yLjgyIDMuMzQtMi44MiA2LjI2VjUxSDEwMVYyMC42M2g3Ljh2NS4yeiIvPgogIDxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTE0NC4zIDIwLjg3aDcuN3YzMC4yNmgtNy43di0zLjU2Yy0yLjMyIDIuOTUtNS41NyA0LjQzLTkuNzcgNC40M2ExMy40NyAxMy40NyAwIDAxLTEwLjI1LTQuNjNBMTYuMTQgMTYuMTQgMCAwMTEyMC4wMSAzNmMtLjExLTQuMiAxLjQyLTguMyA0LjI3LTExLjM3QTEzLjQ3IDEzLjQ3IDAgMDExMzQuNTMgMjBjNC4yIDAgNy40NSAxLjQ4IDkuNzcgNC40M3YtMy41NnptLTE0LjI2IDIxLjI5YTcuOTMgNy45MyAwIDAwNS45MyAyLjRjMi4yMy4wNiA0LjM5LS44IDUuOTYtMi40QTguNCA4LjQgMCAwMDE0NC4zIDM2YTguNCA4LjQgMCAwMC0yLjM3LTYuMTYgOC4wMyA4LjAzIDAgMDAtNS45Ni0yLjQgNy45MyA3LjkzIDAgMDAtNS45MyAyLjRBOC40NSA4LjQ1IDAgMDAxMjcuNyAzNmE4LjQ1IDguNDUgMCAwMDIuMzQgNi4xNnoiLz4KICA8cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xNzQuNCAyMGMzLjk0LS4wNCA3LjcgMS42OCAxMC4zMiA0LjcyYTE2LjYgMTYuNiAwIDAxNC4yNyAxMS41NyAxNi42IDE2LjYgMCAwMS00LjI3IDExLjU4IDEzLjQzIDEzLjQzIDAgMDEtMTAuMzEgNC43MWMtNC4yIDAtNy40My0xLjUtOS43MS00LjVWNjRIMTU3VjIwLjg5aDcuN3YzLjYyYzIuMjgtMyA1LjUxLTQuNSA5LjctNC41em0tNy4zNiAyMi41NmE3Ljg1IDcuODUgMCAwMDUuOTMgMi40NCA3Ljk1IDcuOTUgMCAwMDUuOTYtMi40NCA4LjY0IDguNjQgMCAwMDIuMzctNi4yNyA4LjY0IDguNjQgMCAwMC0yLjM3LTYuMjcgNy45NSA3Ljk1IDAgMDAtNS45Ni0yLjQ0IDcuODYgNy44NiAwIDAwLTUuOTMgMi40NCA4LjcgOC43IDAgMDAtMi4zNCA2LjI3IDguNyA4LjcgMCAwMDIuMzQgNi4yN3oiLz4KICA8cGF0aCBkPSJNMjExLjI3IDE5LjY1YzMuMTYtLjEgNi4yMSAxLjE2IDguNCAzLjQ2IDIuMjIgMi4zMSAzLjMzIDUuNSAzLjMzIDkuNTdWNTJoLThWMzMuNjdjMC0yLjEtLjU2LTMuNy0xLjY4LTQuODFhNi4wOCA2LjA4IDAgMDAtNC40OC0xLjY3IDYuNTcgNi41NyAwIDAwLTQuOTggMS45NWMtMS4yNCAxLjMtMS44NyAzLjI1LTEuODcgNS44NnYxN0gxOTRWOGg4djE2LjA1YzEuOTUtMi45MyA1LjA0LTQuNCA5LjI3LTQuNHoiLz4KICA8cGF0aCBkPSJNMjQzLjc1IDUyYy00LjQ2LjEtOC43Ny0xLjU2LTExLjkzLTQuNThBMTUuMzggMTUuMzggMCAwMTIyNyAzNmExNi4wMSAxNi4wMSAwIDAxOC40Ni0xMy44NyAxNy40MiAxNy40MiAwIDAxMTYuNzUuMDQgMTMuMDYgMTMuMDYgMCAwMTUuNDcgNS44M2wtMy40MyAxLjg5YTkuNjQgOS42NCAwIDAwLTQuMS00LjM3IDEyLjY1IDEyLjY1IDAgMDAtNi40LTEuNjIgMTIuMyAxMi4zIDAgMDAtOC45IDMuNTIgMTEuNSAxMS41IDAgMDAtMy42MyA4LjU4IDExLjUgMTEuNSAwIDAwMy42MyA4LjU4YzIuNzEgMi43IDYuNiA0IDEwLjQ3IDMuNSAzLjg4LS40OCA3LjI4LTIuNyA5LjE4LTUuOTdsMy41IDEuOTVhMTQuMzggMTQuMzggMCAwMS01Ljc5IDUuOCAxNy4wMyAxNy4wMyAwIDAxLTguNDYgMi4xNHoiLz4KICA8cGF0aCBkPSJNMjkzLjU3IDIwYzMuMS0uMTIgNi4xMSAxLjA3IDguMjggMy4yOCAyLjEgMi4xOCAzLjE1IDUuMTIgMy4xNSA4LjgzVjUxaC00LjA1VjMyLjExYzAtMi42Mi0uNjgtNC42NS0yLjA1LTYuMDhhNy4xIDcuMSAwIDAwLTUuNC0yLjE1IDggOCAwIDAwLTYuMTMgMi41MWMtMS41NiAxLjY4LTIuMzQgNC4yOS0yLjM0IDcuODRWNTFoLTQuMDZWMzIuMTFjMC0yLjY2LS42NC00LjctMS45Mi02LjExYTYuNjkgNi42OSAwIDAwLTUuMjEtMi4xMiA4LjUgOC41IDAgMDAtNi4yMyAyLjU0Yy0xLjcgMS43LTIuNTYgNC4zLTIuNTYgNy44VjUxSDI2MVYyMC43M2g0LjA1djQuNDJBMTAuNDcgMTAuNDcgMCAwMTI3NC40IDIwYzQuNCAwIDcuNSAxLjgzIDkuMjkgNS41IDIuMi0zLjY3IDUuNDktNS41IDkuODktNS41eiIvPgogIDxwYXRoIGQ9Ik0zMTEuMyAyOC42NWEzLjY3IDMuNjcgMCAwMDEuOTMgMy4yNWMxLjQ1Ljg4IDMuMDQgMS41NCA0LjcgMS45Nmw1LjUxIDEuNWMxLjc5LjQ4IDMuNCAxLjQyIDQuNjYgMi43MmE3LjA2IDcuMDYgMCAwMTEuOSA1LjE0IDcuNiA3LjYgMCAwMS0zLjI2IDYuMzRjLTIuMTYgMS42My00Ljk1IDIuNDQtOC4zOCAyLjQzLTIuNzYuMDgtNS40OC0uNi03Ljg1LTEuOTZhMTAuNiAxMC42IDAgMDEtNC41MS01LjA3bDMuNi0yYTcuMjQgNy4yNCAwIDAwMy4yMyAzLjc1YzEuNjcuOTUgMy42IDEuNDMgNS41NCAxLjM4IDEuODMuMDcgMy42NC0uMzQgNS4yNS0xLjE4YTMuOTUgMy45NSAwIDAwMi4xMS0zLjY5Yy4wMy0xLjM0LS43LTIuNi0xLjktMy4yOWExNyAxNyAwIDAwLTQuNjgtMS45N2wtNS41Mi0xLjVjLTEuNzgtLjQ4LTMuNC0xLjQtNC42OC0yLjY5YTYuODIgNi44MiAwIDAxLTEuOTItNS4wNSA3LjY5IDcuNjkgMCAwMTMuMTMtNi4yMiAxMi4xNiAxMi4xNiAwIDAxNy44Ni0yLjVjMi40LS4wNCA0Ljc4LjU0IDYuODYgMS43YTEwLjUgMTAuNSAwIDAxNC4zNiA0LjU0bC0zLjU1IDEuOTVjLTEuMjMtMi44NS0zLjgtNC4yOC03LjY3LTQuMjhhOC44IDguOCAwIDAwLTQuNzQgMS4yMyAzLjkyIDMuOTIgMCAwMC0xLjk5IDMuNTF6Ii8%2BCjwvc3ZnPgo%3D&widths=undefined&widths=auto&heights=250&heights=150'
From 7d388df027c0f360732a82f93b79fc631b3f3140 Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 16:24:46 -0500
Subject: [PATCH 08/13] Updated readme
---
examples/cms-graphcms/README.md | 45 ++++++++++++++++-----------------
1 file changed, 22 insertions(+), 23 deletions(-)
diff --git a/examples/cms-graphcms/README.md b/examples/cms-graphcms/README.md
index 311e622ed36fc..1de51032b4a23 100644
--- a/examples/cms-graphcms/README.md
+++ b/examples/cms-graphcms/README.md
@@ -8,11 +8,24 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas
### Related examples
-- [Blog Starter](/examples/blog-starter)
+- [WordPress](/examples/cms-wordpress)
- [DatoCMS](/examples/cms-datocms)
+- [Sanity](/examples/cms-sanity)
- [TakeShape](/examples/cms-takeshape)
- [Prismic](/examples/cms-prismic)
- [Contentful](/examples/cms-contentful)
+- [Strapi](/examples/cms-strapi)
+- [Agility CMS](/examples/cms-agilitycms)
+- [Cosmic](/examples/cms-cosmic)
+- [ButterCMS](/examples/cms-buttercms)
+- [Storyblok](/examples/cms-storyblok)
+- [Blog Starter](/examples/blog-starter)
+
+## Deploy your own
+
+Once you have access to [the environment variables you'll need](#step-3-set-up-environment-variables), deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example):
+
+[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/import/git?s=https://github.com/vercel/next.js/tree/canary/examples/cms-graphcms&env=GRAPHCMS_PROJECT_API,GRAPHCMS_PROD_AUTH_TOKEN,GRAPHCMS_DEV_AUTH_TOKEN,GRAPHCMS_PREVIEW_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20GraphCMS&envLink=https://vercel.link/cms-graphcms-env)
## How to use
@@ -45,7 +58,7 @@ First, [create an account in GraphCMS](https://app.graphcms.com).
After creating an account, create a new project from the **Blog Starter template** - be sure to include the example content.
-### Step 3. Copy your environment variables
+### Step 3. Set up environment variables
Copy the `.env.local.example` file in this directory to `.env.local` (which will be ignored by Git):
@@ -100,30 +113,16 @@ You should now be able to see the updated title. To exit the preview mode, you c
### Step 6. Deploy on Vercel
-You can deploy this app to the cloud with [Vercel](https://vercel.com/import?filter=next.js&utm_source=github&utm_medium=readme&utm_campaign=next-example) ([Documentation](https://nextjs.org/docs/deployment)).
-
-To deploy on Vercel, you need to set the environment variables with **Vercel Secrets** using [Vercel CLI](https://vercel.com/download) ([Documentation](https://vercel.com/docs/cli#commands/secrets)).
+You can deploy this app to the cloud with [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example) ([Documentation](https://nextjs.org/docs/deployment)).
-Install [Vercel CLI](https://vercel.com/download), log in to your account from the CLI by running the following command.
+#### Deploy Your Local Project
-```bash
-vercel login
-```
+To deploy your local project to Vercel, push it to GitHub/GitLab/Bitbucket and [import to Vercel](https://vercel.com/import/git?utm_source=github&utm_medium=readme&utm_campaign=next-example).
-Now, link your project to a Vercel project by running `vercel` in the terminal and follow the command-line prompts. It is usually safe to accept all the defaults.
+**Important**: When you import your project on Vercel, make sure to click on **Environment Variables** and set them to match your `.env.local` file.
-Before we deploy, we need to add our secrets to the the Vercel run time. The commandline pattern for adding secrts to vercel looks like:
-
-```bash
-vercel secrets add my-secret "my value"
-```
-
-Run that command for each of the entries in our .env.local file. For example, adding the secret would look like
-
-```bash
-vercel secrets add GRAPHCMS_PREVIEW_SECRET "12345token"
-```
+#### Deploy from Our Template
-Once all th secrets hav been added, you can re-run the vercel deploy with `vercel`.
+Alternatively, you can deploy using our template by clicking on the Deploy button below.
-That's it! You now have a blog on Vercel, made with NextJS and powered by GraphCMS with preview's enabled!
+[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/import/git?s=https://github.com/vercel/next.js/tree/canary/examples/cms-graphcms&env=GRAPHCMS_PROJECT_API,GRAPHCMS_PROD_AUTH_TOKEN,GRAPHCMS_DEV_AUTH_TOKEN,GRAPHCMS_PREVIEW_SECRET&envDescription=Required%20to%20connect%20the%20app%20with%20GraphCMS&envLink=https://vercel.link/cms-graphcms-env)
From 3b812338146da4680f12f53c265205952a289c0c Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 16:36:07 -0500
Subject: [PATCH 09/13] Updated og image
---
examples/cms-graphcms/lib/constants.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/examples/cms-graphcms/lib/constants.js b/examples/cms-graphcms/lib/constants.js
index 144db5ec24827..72f78132b6d2d 100644
--- a/examples/cms-graphcms/lib/constants.js
+++ b/examples/cms-graphcms/lib/constants.js
@@ -2,4 +2,4 @@ export const EXAMPLE_PATH = 'cms-graphcms'
export const CMS_NAME = 'GraphCMS'
export const CMS_URL = 'https://graphcms.com/'
export const HOME_OG_IMAGE_URL =
- 'https://og-image.now.sh/Next.js%20Blog%20Example%20with%20**GraphCMS**.png?theme=light&md=1&fontSize=75px&images=https%3A%2F%2Fassets.vercel.com%2Fimage%2Fupload%2Ffront%2Fassets%2Fdesign%2Fnextjs-black-logo.svg&images=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyBmaWxsPSJjdXJyZW50Q29sb3IiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMzMCA3NSI%2BCiAgPHBhdGggZD0iTTM1LjI3IDEwbC04LjczIDUtOC43MyA1LTguNzMgNXYzMGw4LjczLTUgOC43My01VjM1bC04LjczIDVWMzBsOC43My01IDguNzMtNXYzMGwtOC43MyA1LTguNzMgNS04LjczIDUtOC43MyA1IDguNzMgNSA4LjczLTUgOC43My01IDguNzMtNUw0NCA1NVY1bC04LjczLTV6Ii8%2BCiAgPHBhdGggZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNODguNDUgMjAuOTFIOTZ2MzAuMDZjMCA0Ljg4LTEuNTMgOC42LTQuNTggMTEuMTdBMTYuNiAxNi42IDAgMDE4MC4zNyA2NmMtMi45NC4wNy01Ljg2LS42LTguNTEtMS45NWExMy4zIDEzLjMgMCAwMS01LjY1LTUuNzVsNi41Ni00YzEuNTIgMi45NiA0LjEzIDQuNDQgNy44NCA0LjQ0IDIuNDQgMCA0LjM1LS42NyA1Ljc1LTIuMDIgMS40LTEuMzUgMi4xLTMuMjcgMi4xLTUuNzZ2LTMuNDJjLTIuMjggMy4yLTUuNDcgNC44LTkuNTggNC44LTQuMDEuMS03Ljg3LTEuNjItMTAuNi00LjdBMTYuNDQgMTYuNDQgMCAwMTY0IDM2LjE1YTE2LjM5IDE2LjM5IDAgMDE0LjMtMTEuNDJBMTMuNzMgMTMuNzMgMCAwMTc4Ljg4IDIwYzQuMSAwIDcuMyAxLjYgOS41NyA0Ljh2LTMuODl6bS0xNC40IDIxLjQ3YTguNjYgOC42NiAwIDAwMTIuMDQgMCA4LjU2IDguNTYgMCAwMDIuMzYtNi4yMkE4LjQ4IDguNDggMCAwMDg2LjEgMzBhOC42NiA4LjY2IDAgMDAtMTIuMDMgMCA4LjQ4IDguNDggMCAwMC0yLjM3IDYuMTYgOC41NiA4LjU2IDAgMDAyLjM3IDYuMjJ6Ii8%2BCiAgPHBhdGggZD0iTTEwOC44IDI1LjgzYTguMTcgOC4xNyAwIDAxMy42LTQuMzdjMS43LS45OCAzLjY0LTEuNDggNS42LTEuNDZ2OC43M2E5LjE4IDkuMTggMCAwMC02LjM5IDEuNDdjLTEuODggMS4yNS0yLjgyIDMuMzQtMi44MiA2LjI2VjUxSDEwMVYyMC42M2g3Ljh2NS4yeiIvPgogIDxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTE0NC4zIDIwLjg3aDcuN3YzMC4yNmgtNy43di0zLjU2Yy0yLjMyIDIuOTUtNS41NyA0LjQzLTkuNzcgNC40M2ExMy40NyAxMy40NyAwIDAxLTEwLjI1LTQuNjNBMTYuMTQgMTYuMTQgMCAwMTEyMC4wMSAzNmMtLjExLTQuMiAxLjQyLTguMyA0LjI3LTExLjM3QTEzLjQ3IDEzLjQ3IDAgMDExMzQuNTMgMjBjNC4yIDAgNy40NSAxLjQ4IDkuNzcgNC40M3YtMy41NnptLTE0LjI2IDIxLjI5YTcuOTMgNy45MyAwIDAwNS45MyAyLjRjMi4yMy4wNiA0LjM5LS44IDUuOTYtMi40QTguNCA4LjQgMCAwMDE0NC4zIDM2YTguNCA4LjQgMCAwMC0yLjM3LTYuMTYgOC4wMyA4LjAzIDAgMDAtNS45Ni0yLjQgNy45MyA3LjkzIDAgMDAtNS45MyAyLjRBOC40NSA4LjQ1IDAgMDAxMjcuNyAzNmE4LjQ1IDguNDUgMCAwMDIuMzQgNi4xNnoiLz4KICA8cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xNzQuNCAyMGMzLjk0LS4wNCA3LjcgMS42OCAxMC4zMiA0LjcyYTE2LjYgMTYuNiAwIDAxNC4yNyAxMS41NyAxNi42IDE2LjYgMCAwMS00LjI3IDExLjU4IDEzLjQzIDEzLjQzIDAgMDEtMTAuMzEgNC43MWMtNC4yIDAtNy40My0xLjUtOS43MS00LjVWNjRIMTU3VjIwLjg5aDcuN3YzLjYyYzIuMjgtMyA1LjUxLTQuNSA5LjctNC41em0tNy4zNiAyMi41NmE3Ljg1IDcuODUgMCAwMDUuOTMgMi40NCA3Ljk1IDcuOTUgMCAwMDUuOTYtMi40NCA4LjY0IDguNjQgMCAwMDIuMzctNi4yNyA4LjY0IDguNjQgMCAwMC0yLjM3LTYuMjcgNy45NSA3Ljk1IDAgMDAtNS45Ni0yLjQ0IDcuODYgNy44NiAwIDAwLTUuOTMgMi40NCA4LjcgOC43IDAgMDAtMi4zNCA2LjI3IDguNyA4LjcgMCAwMDIuMzQgNi4yN3oiLz4KICA8cGF0aCBkPSJNMjExLjI3IDE5LjY1YzMuMTYtLjEgNi4yMSAxLjE2IDguNCAzLjQ2IDIuMjIgMi4zMSAzLjMzIDUuNSAzLjMzIDkuNTdWNTJoLThWMzMuNjdjMC0yLjEtLjU2LTMuNy0xLjY4LTQuODFhNi4wOCA2LjA4IDAgMDAtNC40OC0xLjY3IDYuNTcgNi41NyAwIDAwLTQuOTggMS45NWMtMS4yNCAxLjMtMS44NyAzLjI1LTEuODcgNS44NnYxN0gxOTRWOGg4djE2LjA1YzEuOTUtMi45MyA1LjA0LTQuNCA5LjI3LTQuNHoiLz4KICA8cGF0aCBkPSJNMjQzLjc1IDUyYy00LjQ2LjEtOC43Ny0xLjU2LTExLjkzLTQuNThBMTUuMzggMTUuMzggMCAwMTIyNyAzNmExNi4wMSAxNi4wMSAwIDAxOC40Ni0xMy44NyAxNy40MiAxNy40MiAwIDAxMTYuNzUuMDQgMTMuMDYgMTMuMDYgMCAwMTUuNDcgNS44M2wtMy40MyAxLjg5YTkuNjQgOS42NCAwIDAwLTQuMS00LjM3IDEyLjY1IDEyLjY1IDAgMDAtNi40LTEuNjIgMTIuMyAxMi4zIDAgMDAtOC45IDMuNTIgMTEuNSAxMS41IDAgMDAtMy42MyA4LjU4IDExLjUgMTEuNSAwIDAwMy42MyA4LjU4YzIuNzEgMi43IDYuNiA0IDEwLjQ3IDMuNSAzLjg4LS40OCA3LjI4LTIuNyA5LjE4LTUuOTdsMy41IDEuOTVhMTQuMzggMTQuMzggMCAwMS01Ljc5IDUuOCAxNy4wMyAxNy4wMyAwIDAxLTguNDYgMi4xNHoiLz4KICA8cGF0aCBkPSJNMjkzLjU3IDIwYzMuMS0uMTIgNi4xMSAxLjA3IDguMjggMy4yOCAyLjEgMi4xOCAzLjE1IDUuMTIgMy4xNSA4LjgzVjUxaC00LjA1VjMyLjExYzAtMi42Mi0uNjgtNC42NS0yLjA1LTYuMDhhNy4xIDcuMSAwIDAwLTUuNC0yLjE1IDggOCAwIDAwLTYuMTMgMi41MWMtMS41NiAxLjY4LTIuMzQgNC4yOS0yLjM0IDcuODRWNTFoLTQuMDZWMzIuMTFjMC0yLjY2LS42NC00LjctMS45Mi02LjExYTYuNjkgNi42OSAwIDAwLTUuMjEtMi4xMiA4LjUgOC41IDAgMDAtNi4yMyAyLjU0Yy0xLjcgMS43LTIuNTYgNC4zLTIuNTYgNy44VjUxSDI2MVYyMC43M2g0LjA1djQuNDJBMTAuNDcgMTAuNDcgMCAwMTI3NC40IDIwYzQuNCAwIDcuNSAxLjgzIDkuMjkgNS41IDIuMi0zLjY3IDUuNDktNS41IDkuODktNS41eiIvPgogIDxwYXRoIGQ9Ik0zMTEuMyAyOC42NWEzLjY3IDMuNjcgMCAwMDEuOTMgMy4yNWMxLjQ1Ljg4IDMuMDQgMS41NCA0LjcgMS45Nmw1LjUxIDEuNWMxLjc5LjQ4IDMuNCAxLjQyIDQuNjYgMi43MmE3LjA2IDcuMDYgMCAwMTEuOSA1LjE0IDcuNiA3LjYgMCAwMS0zLjI2IDYuMzRjLTIuMTYgMS42My00Ljk1IDIuNDQtOC4zOCAyLjQzLTIuNzYuMDgtNS40OC0uNi03Ljg1LTEuOTZhMTAuNiAxMC42IDAgMDEtNC41MS01LjA3bDMuNi0yYTcuMjQgNy4yNCAwIDAwMy4yMyAzLjc1YzEuNjcuOTUgMy42IDEuNDMgNS41NCAxLjM4IDEuODMuMDcgMy42NC0uMzQgNS4yNS0xLjE4YTMuOTUgMy45NSAwIDAwMi4xMS0zLjY5Yy4wMy0xLjM0LS43LTIuNi0xLjktMy4yOWExNyAxNyAwIDAwLTQuNjgtMS45N2wtNS41Mi0xLjVjLTEuNzgtLjQ4LTMuNC0xLjQtNC42OC0yLjY5YTYuODIgNi44MiAwIDAxLTEuOTItNS4wNSA3LjY5IDcuNjkgMCAwMTMuMTMtNi4yMiAxMi4xNiAxMi4xNiAwIDAxNy44Ni0yLjVjMi40LS4wNCA0Ljc4LjU0IDYuODYgMS43YTEwLjUgMTAuNSAwIDAxNC4zNiA0LjU0bC0zLjU1IDEuOTVjLTEuMjMtMi44NS0zLjgtNC4yOC03LjY3LTQuMjhhOC44IDguOCAwIDAwLTQuNzQgMS4yMyAzLjkyIDMuOTIgMCAwMC0xLjk5IDMuNTF6Ii8%2BCjwvc3ZnPgo%3D&widths=undefined&widths=auto&heights=250&heights=150'
+ 'https://og-image.now.sh/Next.js%20Blog%20Example%20with%20**GraphCMS**.png?theme=light&md=1&fontSize=75px&images=https%3A%2F%2Fassets.vercel.com%2Fimage%2Fupload%2Ffront%2Fassets%2Fdesign%2Fnextjs-black-logo.svg&images=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDMzMCA3NSIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMzUuMjcgMTBMOS4wOCAyNXYzMGwxNy40Ni0xMFYzNWwtOC43MyA1VjMwbDE3LjQ2LTEwdjMwTC4zNSA3MGw4LjczIDVMNDQgNTVWNWwtOC43My01eiIvPjxwYXRoIGQ9Ik04OC40NSAyMC45MUg5NnYzMC4wNmMwIDQuODgtMS41MyA4LjYtNC41OCAxMS4xN0ExNi42IDE2LjYgMCAwMTgwLjM3IDY2Yy0yLjk0LjA3LTUuODYtLjYtOC41MS0xLjk1YTEzLjMgMTMuMyAwIDAxLTUuNjUtNS43NWw2LjU2LTRjMS41MiAyLjk2IDQuMTMgNC40NCA3Ljg0IDQuNDQgMi40NCAwIDQuMzUtLjY3IDUuNzUtMi4wMiAxLjQtMS4zNSAyLjEtMy4yNyAyLjEtNS43NnYtMy40MmMtMi4yOCAzLjItNS40NyA0LjgtOS41OCA0LjgtNC4wMS4xLTcuODctMS42Mi0xMC42LTQuN0ExNi40NCAxNi40NCAwIDAxNjQgMzYuMTVhMTYuMzkgMTYuMzkgMCAwMTQuMy0xMS40MkExMy43MyAxMy43MyAwIDAxNzguODggMjBjNC4xIDAgNy4zIDEuNiA5LjU3IDQuOHYtMy44OXptLTE0LjQgMjEuNDdhOC42NiA4LjY2IDAgMDAxMi4wNCAwIDguNTYgOC41NiAwIDAwMi4zNi02LjIyQTguNDggOC40OCAwIDAwODYuMSAzMGE4LjY2IDguNjYgMCAwMC0xMi4wMyAwIDguNDggOC40OCAwIDAwLTIuMzcgNi4xNiA4LjU2IDguNTYgMCAwMDIuMzcgNi4yMnoiLz48cGF0aCBkPSJNMTA4LjggMjUuODNhOC4xNyA4LjE3IDAgMDEzLjYtNC4zN2MxLjctLjk4IDMuNjQtMS40OCA1LjYtMS40NnY4LjczYTkuMTggOS4xOCAwIDAwLTYuMzkgMS40N2MtMS44OCAxLjI1LTIuODIgMy4zNC0yLjgyIDYuMjZWNTFIMTAxVjIwLjYzaDcuOHY1LjJ6Ii8%2BPHBhdGggZD0iTTE0NC4zIDIwLjg3aDcuN3YzMC4yNmgtNy43di0zLjU2Yy0yLjMyIDIuOTUtNS41NyA0LjQzLTkuNzcgNC40M2ExMy40NyAxMy40NyAwIDAxLTEwLjI1LTQuNjNBMTYuMTQgMTYuMTQgMCAwMTEyMC4wMSAzNmMtLjExLTQuMiAxLjQyLTguMyA0LjI3LTExLjM3QTEzLjQ3IDEzLjQ3IDAgMDExMzQuNTMgMjBjNC4yIDAgNy40NSAxLjQ4IDkuNzcgNC40M3YtMy41NnptLTE0LjI2IDIxLjI5YTcuOTMgNy45MyAwIDAwNS45MyAyLjRjMi4yMy4wNiA0LjM5LS44IDUuOTYtMi40QTguNCA4LjQgMCAwMDE0NC4zIDM2YTguNCA4LjQgMCAwMC0yLjM3LTYuMTYgOC4wMyA4LjAzIDAgMDAtNS45Ni0yLjQgNy45MyA3LjkzIDAgMDAtNS45MyAyLjRBOC40NSA4LjQ1IDAgMDAxMjcuNyAzNmE4LjQ1IDguNDUgMCAwMDIuMzQgNi4xNnoiLz48cGF0aCBkPSJNMTc0LjQgMjBjMy45NC0uMDQgNy43IDEuNjggMTAuMzIgNC43MmExNi42IDE2LjYgMCAwMTQuMjcgMTEuNTcgMTYuNiAxNi42IDAgMDEtNC4yNyAxMS41OCAxMy40MyAxMy40MyAwIDAxLTEwLjMxIDQuNzFjLTQuMiAwLTcuNDMtMS41LTkuNzEtNC41VjY0SDE1N1YyMC44OWg3Ljd2My42MmMyLjI4LTMgNS41MS00LjUgOS43LTQuNXptLTcuMzYgMjIuNTZhNy44NSA3Ljg1IDAgMDA1LjkzIDIuNDQgNy45NSA3Ljk1IDAgMDA1Ljk2LTIuNDQgOC42NCA4LjY0IDAgMDAyLjM3LTYuMjcgOC42NCA4LjY0IDAgMDAtMi4zNy02LjI3IDcuOTUgNy45NSAwIDAwLTUuOTYtMi40NCA3Ljg2IDcuODYgMCAwMC01LjkzIDIuNDQgOC43IDguNyAwIDAwLTIuMzQgNi4yNyA4LjcgOC43IDAgMDAyLjM0IDYuMjd6Ii8%2BPHBhdGggZD0iTTIxMS4yNyAxOS42NWMzLjE2LS4xIDYuMjEgMS4xNiA4LjQgMy40NiAyLjIyIDIuMzEgMy4zMyA1LjUgMy4zMyA5LjU3VjUyaC04VjMzLjY3YzAtMi4xLS41Ni0zLjctMS42OC00LjgxYTYuMDggNi4wOCAwIDAwLTQuNDgtMS42NyA2LjU3IDYuNTcgMCAwMC00Ljk4IDEuOTVjLTEuMjQgMS4zLTEuODcgMy4yNS0xLjg3IDUuODZ2MTdIMTk0VjhoOHYxNi4wNWMxLjk1LTIuOTMgNS4wNC00LjQgOS4yNy00LjR6Ii8%2BPHBhdGggZD0iTTI0My43NSA1MmMtNC40Ni4xLTguNzctMS41Ni0xMS45My00LjU4QTE1LjM4IDE1LjM4IDAgMDEyMjcgMzZhMTYuMDEgMTYuMDEgMCAwMTguNDYtMTMuODcgMTcuNDIgMTcuNDIgMCAwMTE2Ljc1LjA0IDEzLjA2IDEzLjA2IDAgMDE1LjQ3IDUuODNsLTMuNDMgMS44OWE5LjY0IDkuNjQgMCAwMC00LjEtNC4zNyAxMi42NSAxMi42NSAwIDAwLTYuNC0xLjYyIDEyLjMgMTIuMyAwIDAwLTguOSAzLjUyIDExLjUgMTEuNSAwIDAwLTMuNjMgOC41OCAxMS41IDExLjUgMCAwMDMuNjMgOC41OGMyLjcxIDIuNyA2LjYgNCAxMC40NyAzLjUgMy44OC0uNDggNy4yOC0yLjcgOS4xOC01Ljk3bDMuNSAxLjk1YTE0LjM4IDE0LjM4IDAgMDEtNS43OSA1LjggMTcuMDMgMTcuMDMgMCAwMS04LjQ2IDIuMTR6Ii8%2BPHBhdGggZD0iTTI5My41NyAyMGMzLjEtLjEyIDYuMTEgMS4wNyA4LjI4IDMuMjggMi4xIDIuMTggMy4xNSA1LjEyIDMuMTUgOC44M1Y1MWgtNC4wNVYzMi4xMWMwLTIuNjItLjY4LTQuNjUtMi4wNS02LjA4YTcuMSA3LjEgMCAwMC01LjQtMi4xNSA4IDggMCAwMC02LjEzIDIuNTFjLTEuNTYgMS42OC0yLjM0IDQuMjktMi4zNCA3Ljg0VjUxaC00LjA2VjMyLjExYzAtMi42Ni0uNjQtNC43LTEuOTItNi4xMWE2LjY5IDYuNjkgMCAwMC01LjIxLTIuMTIgOC41IDguNSAwIDAwLTYuMjMgMi41NGMtMS43IDEuNy0yLjU2IDQuMy0yLjU2IDcuOFY1MUgyNjFWMjAuNzNoNC4wNXY0LjQyQTEwLjQ3IDEwLjQ3IDAgMDEyNzQuNCAyMGM0LjQgMCA3LjUgMS44MyA5LjI5IDUuNSAyLjItMy42NyA1LjQ5LTUuNSA5Ljg5LTUuNXoiLz48cGF0aCBkPSJNMzExLjMgMjguNjVhMy42NyAzLjY3IDAgMDAxLjkzIDMuMjVjMS40NS44OCAzLjA0IDEuNTQgNC43IDEuOTZsNS41MSAxLjVjMS43OS40OCAzLjQgMS40MiA0LjY2IDIuNzJhNy4wNiA3LjA2IDAgMDExLjkgNS4xNCA3LjYgNy42IDAgMDEtMy4yNiA2LjM0Yy0yLjE2IDEuNjMtNC45NSAyLjQ0LTguMzggMi40My0yLjc2LjA4LTUuNDgtLjYtNy44NS0xLjk2YTEwLjYgMTAuNiAwIDAxLTQuNTEtNS4wN2wzLjYtMmE3LjI0IDcuMjQgMCAwMDMuMjMgMy43NWMxLjY3Ljk1IDMuNiAxLjQzIDUuNTQgMS4zOCAxLjgzLjA3IDMuNjQtLjM0IDUuMjUtMS4xOGEzLjk1IDMuOTUgMCAwMDIuMTEtMy42OWMuMDMtMS4zNC0uNy0yLjYtMS45LTMuMjlhMTcgMTcgMCAwMC00LjY4LTEuOTdsLTUuNTItMS41Yy0xLjc4LS40OC0zLjQtMS40LTQuNjgtMi42OWE2LjgyIDYuODIgMCAwMS0xLjkyLTUuMDUgNy42OSA3LjY5IDAgMDEzLjEzLTYuMjIgMTIuMTYgMTIuMTYgMCAwMTcuODYtMi41YzIuNC0uMDQgNC43OC41NCA2Ljg2IDEuN2ExMC41IDEwLjUgMCAwMTQuMzYgNC41NGwtMy41NSAxLjk1Yy0xLjIzLTIuODUtMy44LTQuMjgtNy42Ny00LjI4YTguOCA4LjggMCAwMC00Ljc0IDEuMjMgMy45MiAzLjkyIDAgMDAtMS45OSAzLjUxeiIvPjwvc3ZnPg%3D%3D'
From 580d8f58ee44086cf27ce0129f9e52236884c063 Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 16:42:51 -0500
Subject: [PATCH 10/13] Updated cms examples to include this one
---
examples/blog-starter/README.md | 3 +++
examples/cms-agilitycms/README.md | 1 +
examples/cms-buttercms/README.md | 1 +
examples/cms-contentful/README.md | 1 +
examples/cms-cosmic/README.md | 2 ++
examples/cms-datocms/README.md | 1 +
examples/cms-prismic/README.md | 1 +
examples/cms-sanity/README.md | 1 +
examples/cms-storyblok/README.md | 1 +
examples/cms-strapi/README.md | 1 +
examples/cms-takeshape/README.md | 1 +
examples/cms-wordpress/README.md | 1 +
12 files changed, 15 insertions(+)
diff --git a/examples/blog-starter/README.md b/examples/blog-starter/README.md
index b6f6392fd2bbc..ae1f84a51473c 100644
--- a/examples/blog-starter/README.md
+++ b/examples/blog-starter/README.md
@@ -27,6 +27,9 @@ Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_mediu
- [Strapi](/examples/cms-strapi)
- [Agility CMS](/examples/cms-agilitycms)
- [Cosmic](/examples/cms-cosmic)
+- [ButterCMS](/examples/cms-buttercms)
+- [Storyblok](/examples/cms-storyblok)
+- [GraphCMS](/examples/cms-graphcms)
## How to use
diff --git a/examples/cms-agilitycms/README.md b/examples/cms-agilitycms/README.md
index 9a979957fc355..59a396ed97001 100644
--- a/examples/cms-agilitycms/README.md
+++ b/examples/cms-agilitycms/README.md
@@ -27,6 +27,7 @@ Once you have access to [the environment variables you'll need](#step-15-set-up-
- [Cosmic](/examples/cms-cosmic)
- [ButterCMS](/examples/cms-buttercms)
- [Storyblok](/examples/cms-storyblok)
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## How to use
diff --git a/examples/cms-buttercms/README.md b/examples/cms-buttercms/README.md
index 070a0b2bf08f3..f676cf91e96dd 100644
--- a/examples/cms-buttercms/README.md
+++ b/examples/cms-buttercms/README.md
@@ -24,6 +24,7 @@ Once you have access to [the environment variables you'll need](#step-2-set-up-e
- [Cosmic](/examples/cms-cosmic)
- [Strapi](/examples/cms-strapi)
- [Storyblok](/examples/cms-storyblok)
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## How to use
diff --git a/examples/cms-contentful/README.md b/examples/cms-contentful/README.md
index e02442baf30a4..52dfbd8eedee9 100644
--- a/examples/cms-contentful/README.md
+++ b/examples/cms-contentful/README.md
@@ -24,6 +24,7 @@ Once you have access to [the environment variables you'll need](#step-5-set-up-e
- [Cosmic](/examples/cms-cosmic)
- [ButterCMS](/examples/cms-buttercms)
- [Storyblok](/examples/cms-storyblok)
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## How to use
diff --git a/examples/cms-cosmic/README.md b/examples/cms-cosmic/README.md
index d7c68d82ca834..0d674b50072dd 100644
--- a/examples/cms-cosmic/README.md
+++ b/examples/cms-cosmic/README.md
@@ -23,6 +23,8 @@ Once you have access to [the environment variables you'll need](#step-3-set-up-e
- [Strapi](/examples/cms-strapi)
- [Agility CMS](/examples/cms-agilitycms)
- [ButterCMS](/examples/cms-buttercms)
+- [Storyblok](/examples/cms-storyblok)
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## How to use
diff --git a/examples/cms-datocms/README.md b/examples/cms-datocms/README.md
index e7cc1433e007d..cc430ae9122d7 100644
--- a/examples/cms-datocms/README.md
+++ b/examples/cms-datocms/README.md
@@ -18,6 +18,7 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas
- [Cosmic](/examples/cms-cosmic)
- [ButterCMS](/examples/cms-buttercms)
- [Storyblok](/examples/cms-storyblok)
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## Deploy your own
diff --git a/examples/cms-prismic/README.md b/examples/cms-prismic/README.md
index 52feb6002ce2a..429fb2aea7f5f 100644
--- a/examples/cms-prismic/README.md
+++ b/examples/cms-prismic/README.md
@@ -24,6 +24,7 @@ Once you have access to [the environment variables you'll need](#step-5-set-up-e
- [Cosmic](/examples/cms-cosmic)
- [ButterCMS](/examples/cms-buttercms)
- [Storyblok](/examples/cms-storyblok)
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## How to use
diff --git a/examples/cms-sanity/README.md b/examples/cms-sanity/README.md
index 066b5a3831a08..aa1edc417bfd6 100644
--- a/examples/cms-sanity/README.md
+++ b/examples/cms-sanity/README.md
@@ -24,6 +24,7 @@ Once you have access to [the environment variables you'll need](#step-4-set-up-e
- [Cosmic](/examples/cms-cosmic)
- [ButterCMS](/examples/cms-buttercms)
- [Storyblok](/examples/cms-storyblok)f
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## How to use
diff --git a/examples/cms-storyblok/README.md b/examples/cms-storyblok/README.md
index a1b56caff884e..ebb2c32b0c3b8 100644
--- a/examples/cms-storyblok/README.md
+++ b/examples/cms-storyblok/README.md
@@ -24,6 +24,7 @@ Once you have access to [the environment variables you'll need](#step-6-set-up-e
- [Cosmic](/examples/cms-cosmic)
- [Strapi](/examples/cms-strapi)
- [ButterCMS](/examples/cms-buttercms)
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## How to use
diff --git a/examples/cms-strapi/README.md b/examples/cms-strapi/README.md
index a8316ceaa1f86..99a3ae059655a 100644
--- a/examples/cms-strapi/README.md
+++ b/examples/cms-strapi/README.md
@@ -24,6 +24,7 @@ Once you have access to [the environment variables you'll need](#step-7-set-up-e
- [Cosmic](/examples/cms-cosmic)
- [ButterCMS](/examples/cms-buttercms)
- [Storyblok](/examples/cms-storyblok)
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## How to use
diff --git a/examples/cms-takeshape/README.md b/examples/cms-takeshape/README.md
index a10bd414a78e1..1bdf3923c9a44 100644
--- a/examples/cms-takeshape/README.md
+++ b/examples/cms-takeshape/README.md
@@ -24,6 +24,7 @@ Once you have access to [the environment variables you'll need](#step-5-set-up-e
- [Cosmic](/examples/cms-cosmic)
- [ButterCMS](/examples/cms-buttercms)
- [Storyblok](/examples/cms-storyblok)
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## How to use
diff --git a/examples/cms-wordpress/README.md b/examples/cms-wordpress/README.md
index 9bc49886a146e..332946e22954c 100644
--- a/examples/cms-wordpress/README.md
+++ b/examples/cms-wordpress/README.md
@@ -24,6 +24,7 @@ Once you have access to [the environment variables you'll need](#step-3-set-up-e
- [Cosmic](/examples/cms-cosmic)
- [ButterCMS](/examples/cms-buttercms)
- [Storyblok](/examples/cms-storyblok)
+- [GraphCMS](/examples/cms-graphcms)
- [Blog Starter](/examples/blog-starter)
## How to use
From d2761e4aa9593a362d129e162e793a3956cffb80 Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 16:44:19 -0500
Subject: [PATCH 11/13] Added example to docs
---
docs/advanced-features/preview-mode.md | 1 +
docs/basic-features/data-fetching.md | 1 +
docs/basic-features/pages.md | 1 +
3 files changed, 3 insertions(+)
diff --git a/docs/advanced-features/preview-mode.md b/docs/advanced-features/preview-mode.md
index 7c59b0a1bfafd..e187095401b47 100644
--- a/docs/advanced-features/preview-mode.md
+++ b/docs/advanced-features/preview-mode.md
@@ -20,6 +20,7 @@ description: Next.js has the preview mode for statically generated pages. You ca
Cosmic Example (Demo )
ButterCMS Example (Demo )
Storyblok Example (Demo )
+ GraphCMS Example (Demo )
diff --git a/docs/basic-features/data-fetching.md b/docs/basic-features/data-fetching.md
index 683a2af53cb77..887a3a1e94839 100644
--- a/docs/basic-features/data-fetching.md
+++ b/docs/basic-features/data-fetching.md
@@ -21,6 +21,7 @@ description: 'Next.js has 2 pre-rendering modes: Static Generation and Server-si
Cosmic Example (Demo )
ButterCMS Example (Demo )
Storyblok Example (Demo )
+ GraphCMS Example (Demo )
Static Tweet Demo
diff --git a/docs/basic-features/pages.md b/docs/basic-features/pages.md
index 349547872828b..49deaa376643a 100644
--- a/docs/basic-features/pages.md
+++ b/docs/basic-features/pages.md
@@ -60,6 +60,7 @@ Finally, you can always use **Client-side Rendering** along with Static Generati
Cosmic Example (Demo )
ButterCMS Example (Demo )
Storyblok Example (Demo )
+ GraphCMS Example (Demo )
Static Tweet Demo
From 5e9063002d183f05118467c8747efb459cdd2b9e Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 16:48:06 -0500
Subject: [PATCH 12/13] Added preview demo link
---
examples/cms-graphcms/README.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/examples/cms-graphcms/README.md b/examples/cms-graphcms/README.md
index 1de51032b4a23..0bfe27ca75e37 100644
--- a/examples/cms-graphcms/README.md
+++ b/examples/cms-graphcms/README.md
@@ -4,6 +4,9 @@ This example showcases Next.js's [Static Generation](https://nextjs.org/docs/bas
## Demo
+- **Live**: [https://next-blog-graphcms.now.sh/](https://next-blog-graphcms.now.sh/)
+- **Preview Mode**: [https://next-blog-graphcms.now.sh/api/preview...](https://next-blog-graphcms.now.sh/api/preview?secret=PHHsT9YmZjHxjxuzt8Jie2XkieME&slug=technical-seo-with-graphcms)
+
### [https://next-blog-graphcms.now.sh/](https://next-blog-graphcms.now.sh/)
### Related examples
From 0589c0ab2d0fc0498f05395caf1f0bf72b289259 Mon Sep 17 00:00:00 2001
From: Luis Alvarez
Date: Sun, 14 Jun 2020 16:53:31 -0500
Subject: [PATCH 13/13] Updated step
---
examples/cms-graphcms/README.md | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/examples/cms-graphcms/README.md b/examples/cms-graphcms/README.md
index 0bfe27ca75e37..c67f9247559e8 100644
--- a/examples/cms-graphcms/README.md
+++ b/examples/cms-graphcms/README.md
@@ -78,15 +78,6 @@ Then set each variable in `.env.local`:
- `GRAPHCMS_DEV_AUTH_TOKEN`: Copy the `NEXT_EXAMPLE_CMS_GCMS_DEV_AUTH_TOKEN` token under **Existing tokens**, at the bottom of the page. This will only query content that is in draft.
- `GRAPHCMS_PREVIEW_SECRET` can be any random string (but avoid spaces), like `MY_SECRET` - this is used for [Preview Mode](https://nextjs.org/docs/advanced-features/preview-mode).
-Your `.env.local` file should look like this:
-
-```bash
-GRAPHCMS_PREVIEW_SECRET=...
-GRAPHCMS_PROJECT_API=...
-GRAPHCMS_PROD_AUTH_TOKEN=...
-GRAPHCMS_DEV_AUTH_TOKEN=...
-```
-
### Step 4. Run Next.js in development mode
```bash