Create a Static Website Blog with Gatsby, CosmicJS, and React

Carson Gibbons
Level Up Coding
Published in
5 min readJun 26, 2018

--

Originally published in Cosmic JS Developer Articles.

In this tutorial, we will learn how to create a simple and blazing fast static website blog using React, Gatsby JS, and Cosmic JS. Gatsby is a tool that allows you you to generate static HTML pages (server side rendering) which a huge performance boost for your web applications

TL;DR

Gatsby Blog
Gatsby Blog Codebase
Gatsby QuickStart
Check out the demo.

Prerequisites

You will need NodeJS, npm, and Gastby CLI before starting. Please ensure you already have these installed.

What is Gatsby?

Gatsby is a blazing-fast website framework for React. It allows developers to rapidly build React based websites within minutes. Whether you want to develop a blog or a business website, Gatsby will be a good option.

Since Gatsby utilizes React and React Router, the client-side becomes a single page application after the initial render. It will also generate a static HTML page for route, make sure your initial load feels almost instantaneous.

Blog Development

We have to set up the environment in order to start working on the blog.

Install Gatsby

First, install Gatsby CLI:

npm install --global gatsby-cli

Scaffold a Gatsby Template

gatsby new gatsby-blog-cosmicjs

Enter in your project’s folder:

cd gatsby-blog-cosmicjs

Start the server:

gatsby develop

At this point, you should already be able to get access to your Gatsby JS blog website at this address: http://localhost:8000.

Install the Cosmic JS Source Plugin

In Static Blog, your data can be consumed from different sources: Markdown files, HTML files, External API (WordPress, Cosmic JS, etc).

Therefore, Gatsby implemented independent layer: the data layer. Which is powered by GraphQL. Very exciting stuff!

GraphQL is a modern query language for APIs created at Facebook. It allows the client to define the query they want using a key/value pair object. The user sends the keys to the server, and the server responds with the corresponding values.

To connect this Data Layer with different Data Providers, you need to integrate Source Plugin. Fortunately, there are many Source Plugins available to fulfil most of the needs.

In our case, we are using Cosmic JS. Obviously, we need to integrate Source Plugin for Cosmic JS. Good news: Cosmic JS has implemented their Source Plugin!

Let’s install:

npm install --save gatsby-source-cosmicjs

We need to install some other plugins also. Let’s do that also

npm install --save gatsby-plugin-offline gatsby-source-filesystem

These plugins need some configurations. So, replace the content of gatsby-config.jswith:

Path: gatsby-config.js

Then, restart the server to let Gatsby consider these updates.

Posts List & Settings

First, we want to display the list of posts on the homepage. To do so, add the following content to the existing homepage file:

Path: src/pages/index.js

Explanation:

At the end of index.jsfile, we exported pageQuery. These are GraphQl queries which are used to fetch important information about settings and list of posts.

Then, we pass the { data } destructed object as parameter of IndexPage and loop on its allCosmicjsPosts & cosmicjsSettings object to display the data.

Single Post Layout

Till now we have integrated Cosmic JS source plugin with Gatsby and it’s look like a Blog. Now we will work on blog post’s details page.

Let’s create the template:

Path: src/templates/blog-post.js

That looks fine, but at this point, Gatsby does not know when this template should be displayed. Each post needs a specific URL. So, we are going to inform Gatsby about the new URLs we need thanks to the createPage function.

Path: gatsby-node.js

Restart the Gatsby server.

From now on, you should be able to visit the detail page by clicking on URLs displayed on the homepage.

Extra Stuff!

In addition to this, We also implemented src/components/Bio.js to display Author information & src/layouts/index.js to create a generic layout for the blog.

The source code is available on GitHub. To see it live, clone the repository, and run (cd gatsby-blog-cosmicjs && npm i && npm run develop).

Finally, restart the server and visit the website. It will look awesome!

The static website generated by Gatsby can easily be published on storage providers: Netlify, S3/Cloudfront, GitHub pages, GitLab pages, Heroku, etc.

Note: Our demo is deployed on Netlify.

Conclusion

Congrats! You’ve successfully built a super fast and easy-to-maintain blog! Feel free to continue this project to discover both Gatsby and Cosmic JS advantages.

You can add the power of Cosmic JS to any new or existing codebase, regardless of programming language. See more app integration tips in our knowledge base.

Cosmic JS enables content managers and developers to work better together. By providing an intuitive Admin Dashboard, powerful APIs, and flexible user roles, applications are built faster, more light-weight, and your whole team saves time in the process.

Cosmic JS is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the Cosmic JS API, please reach out to the founders on Twitter or Slack.

--

--