A Blog Starter Template powered by Next.js & Contentful, pre-designed with optimized & adjustable pages, components, and data management.
$~$
Contentful provides content infrastructure for digital teams to power websites, apps, and devices. Unlike a CMS, Contentful was built to integrate with the modern software stack. It offers a central hub for structured content, powerful management, and delivery APIs, and a customizable web app that enables developers and content creators to ship their products faster.
$~$
The Starter Templates experience is currently only available to new users.
To benefit from this experience, please follow this link to create a new account and select the template to install: https://www.contentful.com/starter-templates/nextjs-blog/sign-up/?action=create_starter_template.
Alternatively, to immediately start the auto installation of this template after creating a new account, please follow this link: https://www.contentful.com/starter-templates/nextjs-blog/sign-up/?action=create_starter_template&template_name=blog.
$~$
Follow this guide to understand the relationship between Contentful and the Starter Template source code through guided steps:
$~$
$~$
To get started, read the following guidelines.
$~$
In order to authenticate the requests to the Contentful APIs, the following values are necessary:
Rename the .env.example
file to .env
and add the necessary values.
$~$
To install the necessary dependencies, run:
yarn
yarn dev
The Starter Template should be up and running on http://localhost:3000
.
All necessary dependencies are installed under node_modules
and any necessary tools can be accessed via npm scripts.
$~$
It is recommended to use the Node version listed in the .nvmrc
file, we recommend using nvm to easily switch between Node versions.
$~$
This repository makes use of Husky to enforce commit hooks.
The config for both the pre-commit
and pre-push
hooks can be found in the .husky
folder, located in the root of the project.
Before allowing a commit, we require a successful result from the TypeScript compiler (tsc
) and our lint-staged
script will be run.
This ensures all ESLint and Prettier rules are enforced on the files that are staged to be committed.
The tsc
command is run separately from the lint-staged
step because we require the Typescript compiler to sample all files.
This is important to ensure that no deviating types were introduced by the codegen for example.
The same two tasks are run for pre-push and for pre-commit.
In case of wanting to bypass the pre-commit
or pre-push
hooks, pass a --noVerify
flag to your Git commands.
⚠️ Make sure you only use this if you know why you're using it. ⚠️
$~$
This project makes use of Contentful's GraphQL API.
API calls made to the Contentful GraphQL endpoint are made through graphql-request
.
The types are generated from the .graphql
files located in the /lib/graphql/
directory:
lib/graphql/[fileName].graphql
is detected by the codegenlib/__generated/sdk.ts
is generatedgetSdk
function are generatedgetSdk
function can now be imported and used within the getStaticProps
in the pages files$~$
We use graphql-codegen
to generate a type-safe API client, utilizing GraphQLClient as the "client".
In order to (re-)generate the GraphQL schema, types and sdk, please use either of the following commands:
yarn graphql-codegen:generate
generates a schema, types and code to fetch data from the Contentful APIsyarn graphql-codegen:watch
similar to the generate
command, but it runs as a watch task which will rerun the steps when changes are made in the .graphql
filesThe first steps of the codegen generate files that contain the GraphQL schema and matching TypeScript types. All these files are located in the src/lib/graphql
folder.
They're generated to the src/lib/__generated
folder and ought to be committed once altered/added to the repository.
The TS types for these files are generated in the same location, in a __generated
folder and like the other files ought to be committed.
The configuration for the codegen can be found in codegen.ts
, located in the root of the project.
$~$
$~$
The Starter Template can be deployed to your hosting provider of choice.
We offer integrations with Vercel and Netlify to speed up the process by clicking one of the deploy buttons below. The GitHub repository and the necessary environment variables keys are pre-configured in the hosting provider space.
Vercel | Netlify |
---|---|
Environment variables docs | Environment variables docs |
Make sure to add the necessary environment variables values to the hosting provider environment variables.
Once you have the Starter Template deployed on your hosting provider, you can update the Content preview URL in your space settings.
You can follow our guide to learn how to do so: https://www.contentful.com/help/setup-content-preview.
For the live preview the basic field tagging for the inspector mode and live updates are already implemented. For custom components, you can find the instructions at our guide.
process.env.CONTENTFUL_PREVIEW_SECRET
in your environment variables. This value should be kept secret and only known to the API route and the CMS.pages/api/draft.page.tsx
. This route checks for a valid secret and slug before redirecting to the corresponding page*./api/disable-draft
route. This route already exists in the app and can be found in pages/api/disable-draft.page.tsx
.*The slug
field is optional; When not passed we redirect the page to the root of the domain.
📄 page -
.https://<your-site>/api/draft?secret=<token>&slug={entry.fields.slug}
. Make sure to replace <your-site>
with the URL of your Next.js site, and <token>
with the value of process.env.CONTENTFUL_PREVIEW_SECRET
. Optionally, a locale
parameter can be passed.To disable draft mode, navigate to the /api/disable-draft
route. This route already exists in the app and can be found in pages/api/disable-draft.page.tsx
.
$~$
$~$
If you have a problem with this Starter Template, post a message in our Contentful Community Slack.
Can't find your answer there? You can file a feedback issue through this template.
If you have other problems with Contentful not related to the Starter Template, you can contact the Customer Support.
$~$
See CONTRIBUTING.md.
$~$
MIT License, see LICENSE.
$~$
[^1]: Next.js docs [^2]: GraphQL docs
[^note]: React docs