Designing for a Ghost blog?

What I wish designers knew about Ghost CMS' capabilities.

A ghost working at a desk, planning an awesome new website theme for Ghost CMS.

Helloooo designers!

I've been hired a few times to convert a design produced by someone else into a Ghost theme. Here's what I've wished the folks doing the designing had known:

We can build any layout in Ghost, somehow. I've got access to raw HTML, CSS, and JavaScript, so if you think it up, we can build it. However, just because it can be built in Ghost doesn't mean it'll be easy to maintain and edit in Ghost. Most of the clients I work with say that they want to be able to edit all their content later. In most cases, they don't mean busting out a code editor and dealing with theme files, I'm pretty sure.

What we can (and cannot) build with Ghost

There are no custom fields in Ghost. Ghost has basically one data type, and it's a post. [OK, there are tags also, and authors.] If our mutual client needs something really different from a blog post structure, we will integrate a source for that data.

Ghost doesn't have a drag and drop page builder. I can sort of do your side by side layouts and your many little tiled boxes in Ghost's editor, but it won't be perfectly WYSIWYG for the client.

Posts have: Title, featured image (zero or one, with caption), any number of tags, any number of authors, body content*, "published at" and "updated at" dates, authors (one or more). There are also a few fields for meta data, but mostly that's what I'm working with, when I try to figure out how to convert your design into Ghost's structure.

What goes into the post body?

This is a giant free-form section that our mutual client can put pretty much anything into. In addition to paragraphs of text, there are:

The Ghost defaults for these items are pretty reasonable. If you don't provide styling, we can just use what's built-in.

What are the options for images in a blog post?

Ghost has featured images, which are typically used at the top of the post and sometimes in the list of posts (index page). Blog body content can also contain any number of images. The Ghost editor supports three image sizes: "normal", "wide", and "full width". Exactly how wide those are can vary from design to design, but those are the three buttons the client has available.

Image settings (left three buttons) for images within a blog post.

Layouts Ghost needs (so you're hopefully going to provide):

Theme requirements:

  • Blog post (single post)
  • "Index" page - showing a collection of posts
  • Author page - can include a collection of author's posts, but also name, a website URL, Facebook, and X links. (If you want additional content, that's fine, but those are the 'structured' items I have available.) This could just be the 'index' page layout, if you don't want something different for authors.
  • Tag page - a collection of posts with a common tag. Tags can have an image, a description (without links), and a special color. If there's no specific layout provided, it could just match the index page.

Optional additions:

  • "Tags" page - a page that collects all the tags. (See above for properties of each tag.)
  • "Authors" page - a page that shows all the authors
  • Log in / sign up pages
  • Additional layout variations for posts, pages, or index pages.
  • "Page" layout(s), if not the same as a post.


Can Ghost do infinite scroll?

Sure. But please remember that infinite scroll isn't compatible with a footer. Pick one or the other. (Or skip infinite scroll and have a "load more posts" link instead.)
Also please remember that Google won't scroll. So it'd be great if your design included a "next page" button that the Google block could follow to get to the rest of the posts.

Can we have filtering of posts by tag?

Yes, although it'll take a little custom code on my end, if you want the client to click buttons and see any combination of tags selected.

What should the sign-in page look like?

If our mutual client is going to use Ghost's built in sign up system, it should collect only name and email address, a checkbox for any agreement to terms, and checkboxes for newsletter selection. Those are the only fields Ghost will store. Additional fields require external data storage of some sort. We can build that, but it'd be nice if you didn't mock it up that way unless the client actually wants it.

What's the best design for a Ghost blog post?

The Ghost editor is set up to make a single column of blog content. We can decorate the sides (table of contents, related posts, sign up forms, etc), but you're going to get the most WYSIWYG setup for blog posts if the content is basically a column.

What else is available in terms of layouts?

Header cards offer some opportunities for modest side-by-side layouts that can be accomplished entirely in the editor. Read more