This repo contains a business website that is built with Gatsby, and Netlify CMS.It follows the JAMstack architecture by using Git as a single source of truth, and Netlify for continuous deployment, and CDN distribution.
Really src/templates
and src/containers
could be merged, simply called
containers
, if following the container pattern from redux.
Currently the flow is. static/admin/config.yml
-> gatsby-node.js
->->
src/templates
(graphql page query has access to context params passed from
gatsby-node.js
) -> src/containers
(graphql static query) ->
src/components
(dumb component) and for the cms preview templates.
src/cms/preview-templates
(graphql netlify cms query) -> src/components
.
Netlify CMS has two collection types - Folder collections, for things that there
might be multiples of, for example blog posts and File Collections. Of which
there will only be one, like a 'Legal Page'. Folder collections require a
template to be defined in src/templates while file collections simply require an
page index.js
to be defined in pages, this will make netlify create a route
there. Finally, each collection, be it a folder or a file collection requires a
preview template to be defined in cms/preview-templates
Note: This starter uses Gatsby v2.
This repo contains an example business website that is built with Gatsby, and Netlify CMS: Demo Link.
It follows the JAMstack architecture by using Git as a single source of truth, and Netlify for continuous deployment, and CDN distribution.
- A simple landing page with blog functionality built with Netlify CMS
- Editabe Pages: Landing, About, Product, Blog-Collection and Contact page with Netlify Form support
- Create Blog posts from Netlify CMS
- Tags: Separate page for posts under each tag
- Basic directory organization
- Size is reduced by
purge-css-plugin
- Blazing fast loading times thanks to pre-rendered HTML and automatic chunk loading of JS files
- Uses
gatbsy-image
with Netlify-CMS preview support - Separate components for everything
- Netlify deploy configuration
- Netlify function support, see
src/lambda
folder - Perfect score on Lighthouse for SEO, Accessibility and Performance (wip:PWA)
- ..and more
- Node (I recommend using v8.2.0 or higher)
- Gatsby CLI
Netlify CMS can run in any frontend web environment, but the quickest way to try it out is by running it on a pre-configured starter site with Netlify. The example here is the Kaldi coffee company template (adapted from One Click Hugo CMS). Use the button below to build and deploy your own copy of the repository:
After clicking that button, you’ll authenticate with GitHub and choose a repository name. Netlify will then automatically create a repository in your GitHub account with a copy of the files from the template. Next, it will build and deploy the new site on Netlify, bringing you to the site dashboard when the build is complete. Next, you’ll need to set up Netlify’s Identity service to authorize users to log in to the CMS.
$ git clone https://github.com/[GITHUB_USERNAME]/[REPO_NAME].git
$ cd [REPO_NAME]
$ yarn
$ npm run start
To test the CMS locally, you'll need run a production build of the site:
$ npm run build
$ npm run serve
Media Libraries have been included in this starter as a default. If you are not
planning to use Uploadcare
or Cloudinary
in your project, you can remove
them from module import and registration in src/cms/cms.js
. Here is an example
of the lines to comment or remove them your project.
import CMS from 'netlify-cms-app';
import uploadcare from 'netlify-cms-media-library-uploadcare';
// import cloudinary from 'netlify-cms-media-library-cloudinary'
import AboutPagePreview from './preview-templates/AboutPagePreview';
import BlogPostPreview from './preview-templates/BlogPostPreview';
import ProductPagePreview from './preview-templates/ProductPagePreview';
import IndexPagePreview from './preview-templates/IndexPagePreview';
// CMS.registerMediaLibrary(uploadcare);
// CMS.registerMediaLibrary(cloudinary);
CMS.registerPreviewTemplate('index', IndexPagePreview);
CMS.registerPreviewTemplate('about', AboutPagePreview);
CMS.registerPreviewTemplate('products', ProductPagePreview);
CMS.registerPreviewTemplate('blog', BlogPostPreview);
$ gatsby new [SITE_DIRECTORY_NAME] https://github.com/netlify-templates/gatsby-starter-netlify-cms/
$ cd [SITE_DIRECTORY_NAME]
$ npm run build
$ npm run serve
Follow the Netlify CMS Quick Start Guide to set up authentication, and hosting.
Windows users might encounter node-gyp
errors when trying to npm install. To
resolve, make sure that you have both Python 2.7 and the Visual C++ build
environment installed.
npm config set python python2.7
npm install --global --production windows-build-tools
This plugin uses gatsby-plugin-purgecss and bulma. The bulma builds are usually ~170K but reduced 90% by purgecss.
Contributions are always welcome, no matter how large or small. Before contributing, please read the code of conduct.