It is faster than WordPress, and way simpler. I published and maintain a Ghost theme. In the process I learned a lot. My web sites will soon ook so much better.
Here are the limitations of Ghost.
Ghost makes a nice and simple web site for end users. But it has:
Ghost is open source, which is great, but they practice surveillance capitalism. I live in Europe, I need a platform which is GDPR compliant. All it takes is a little checkbox, saying "Your data will only be used for the purposes of sending you a newsletter. " Is that so much to ask? Worse yet, in order to make it GDPR compliant, you need to make massive changes to the configuration. The default Casper theme's home page background image is served from their website and tracks you. The Gravatars track you. The CDN serving the Javascrpt JQuery library tracks you. A lot of their integrations track you (At least Discuss, Google Analytics, Matomo and Piwik),
I live in Europe. We are polyglots, but ghost provides no native support for multi-lingual content. You have to pay more for a commercial service.
Well a blog and a web site. And a newsletter. It does not do anything else. A strength of Ghost is that it is quite simple. Only six content types. Post, Page, Tag, User, Menu Item and Site. (Actually page and Post appear to be the same content type, but stored in two different tables). What if I want a new content type. Organization, Politician, or volunteer come to mind. Well you are out of luck.
The Ghost database can store my Twitter and Facebook Ids, and that is all. What about Instagram, Twitch, WhatsApp, Discord, Mastadon, YouTube Channels, and all of the other alternative social media platforms? Any other Social Media links have to be separately managed. Really? Worse yet, if my friend likes some of my content, it would be nice if I could export all the articles for a particular tag, and give them to my friend, for him to upload to his Ghost server. You can't do this.
The Admin is the person responsible for configuring and managing Ghost. Here are the problems they face.
Trying out Ghost was like visiting Bombay or San Francisco. Every page has its hand out asking for money. The first thing I wanted was a different theme. When you go to configure the themes, there are no preinstalled themes waiting to be selected. Instead there is a theme store. $$$ When I wanted to install Paypal for subscriptions, they do not support Paypal callbacks. Instead I need to use Zapier. Don't get me wrong, Zapier is great, but I would like to be hosting a large number of Ghost servers, and to configure Zapier for all of them is a huge amount of additional work. I can understand why Ghost Inc did this. They are based in very expensive Singapore, they have to make money however they can. In general I find that the companies based in less expensive countries offer better value propositions.
There are a lot of themes for Ghost, but I could not find one that did what I wanted. And my needs were not that complex. A photo on the left hand side and a single editable article on the home page. To develop my own theme, I had to be a developer. Download a theme edit it on the file system, and then install node tools to validate. Better yet install all of node, and your own local Ghost server.
Say you want to just edit your page footer. There are so many WYSIWYG browser-based editors, it should be really trivial to edit the footer in the Browser.
Ghost just supports a flat list of menu options. The admin cannot configure drop down menus. You need a developer to add drop down menus, but then you cannot edit them.
The template I built requires a default home page. If your website does not have that page, then the landing page yields a cryptic error message. Maybe someone smarter than me can fix this bug. But at a deeper level, the page should reference the template, not the template reference the page.
Then multiple pages can share the same template. Another conceptual limitation.
It is all caused by the relational database. They do not have a tree of objects, so they need to specify routes to pages. And then if the page does not exist, there is trouble. Much better to have a tree of content objects, each of which specifies its template. If the page is missing, no one refers to it. And of course the root page, the home page, always exists by default.
I think that Ghost is way better than Substack, or Revue . You can create and manage your whole website. Revue is better at importing content, but Revue does not let you build a web site. And do you trust Twitter? If you want a blogging platform without all of these problems, please check out the Forest Wiki.
I ws so stressed out developing for Ghost, I had to take a day off work to recover.
Python's, Pyramid and Django give a model of views on objects. So if you have a page or posting called my-article then you can view he article at:
and you can edit the article at
In contrast, well I really do not know what model Ghost supports, but to edit an article I have to type in the following url.
Quite impossible to remember and type that url into the browser directly.
The lack of alternative social media links in the database could be easily fixed if we could extend the schema. Imagine a MongoDb which allows you to dynamically add fieds. The user interface could be the same way. But that is not possible. Not for social media, nor for any other record type. Sad.
Pug is a great way to generate HTML templates. Like Python, it uses indentation to define structure, which allows it to throw out the closing HTML tags, and opening brackets. To syntax check, or compress Ghost templates we have to install Node development tools. Really it is best to install a full local server, meaning we are almost doing Node development. If we are dong Node development, it would be nice to use Pug to generate the HTML templates, but that is not clear how to do it. It was only after writing this paragraph that I realized I might be able to do it.
Large organizations have strictly defined job descriptions. But in reality many traditionally literate writers are also HTML literate. When I was writing this post, I had two problems. It way too long. And I realized that it would work better in 3 column layout So I broke it up into 4 parts. A brief introduction, and the three columns. Then I put each column in a separate blog article and linked them together with the following Bootstrap Chameleon Page Tempalte fragment.
<div class = "container" style ="width: 100vw; clear:left;">
<div class = "row">
<div class = "col col-sm-12 col-md-6 col-lg-4"
And that gave me this very nice web page, and 3 search friendly child pages.
Built using the Forest Map Wiki
GreenMaps is a volunteer effort, separate from The Green Party of United States.