Geeking Out

Not your run-of-the-mill photo gear geeking out. Not your artsy-fartsy philosophical geeking out. Something entirely different but since one lone sole out there meandered around to find my email address here on the site and asked something along the lines of "what's Ghost and how does it work" I'll take a break from the photo stuff and give a brief answer…

Way way down at the very bottom of any page you can find the teeny tiny proudly published with ghost label. It's part of the default Casper theme that comes with any Ghost install. I left it there because I like Ghost. That brings us around to what is Ghost — part #1 of the question.


Short answer: A super simple blogging platform that's open-source and a hosting service that it's creators will gladly sell you. It's far better for most tasks and far more manageable than WordPress for most people's needs. It's clean, simple, has very few options, and best of all it's not PHP

Longer answer: It's a Node.js app that is pretty much a dead simple Express.js app that you can host anywhere that will run Node.js which is just about anywhere that you can run Google's V8 Javascript engine.

How This Site Works

Part #2 of the question. Warning, this is the really geeky part so exit now if that kind of thing doesn't amuse you.

First up is the theme. The default theme that comes with Ghost is Casper. It's simple it's clean, has decent typography, reasonable and simple responsiveness, etc. This is an extremely customized hacked at version of the Casper theme. Theming Ghost is simple because Ghost is simple. There are very few things you must, must have or do and the most complicated part is any CSS or Javascript stuff that you choose to do vs the API which is dead simple.

I hacked up the theme mostly so I can get featured images to show up in post lists for the main blog section, tag lists, etc. While I was at it I made a few other things behave the way I wanted them to and chucked in a few JQuery/Javascript wiz-bang things I may or may not use like this…


Ooooo, look ma — on-demand full browser width images that escape the other margins, etc without crappy embedded HTML in the markdown sorta like

The other part is a bit more complicated but it doesn't have to be if you're not familiar with the rest of what I am about to describe. I just happen to do a bunch of web-design crap and other techno-stuff here and there for other people so it's not a big deal and as a bonus it's pretty much free.

The actual Ghost Node.js stuff runs on Heroku. Specifically the free app tier. To make it work there you'll need a few Heroku add-ons configured. The one absolutely required is the Postgresql database — also free unless you need way more data than a typical personal blog needs.

I also chuck in a few of other heroku add-ons like PaperTrail for log viewing and management, free unless you need crap-tons of data retention and other nifty features a real business would want. For application monitoring, performance analysis, availability reporting, and alerting I use NewRelic, also free with data retention and features that far more than adequate for most small businesses let alone personal pet projects. The main reason I jam New Relic in there is to use the http ping feature they have so that Heroku doesn't put the app engine to sleep when the site is not actually serving visitors (which causes a long load time to re-instantiate for the next visitor). It's also fun to dig into all the Node.js app stats every once in a while too if you like graphs.

That's about it except for image upload storage. This is the part that cost a few pennies a month, literally a few pennies. Heroku is typical of cloud platforms, in fact it's an infrastructure that runs on AWS:EC2 that doesn't provide persistent data storage for the compute engines, for all the blog content like this text, and other stuff that's what the PostgreSQL does. For images Ghost needs a file system like thing for storage.

Bing an Express.js app and having a sorta-kinda plug-in architecture (this will expand down the road) it's not to hard to make Ghost do things like use Amazon S3 for image storage. There are a few hunks of code over on GitHub that do this but they aren't maintained, well I think one sorta is, but no big deal. So since I use AWS for other stuff and already have a ton of stuff up on S3, EC2, etc creating a storage bucket for images wasn't a big deal. So the particular Ghost site works exactly the way it's supposed to with drag-and-drop image upload etc. This would probably be the part that would be highly inconvenient to do if you don't get into techno-crap much.

Strictly speaking it's not required, you can just stick image url's in the markdown from anywhere on the public web and everything else will work fine but then you loose the fancy, and convenient, and slick WSIWYG Ghost editor etc. Well you also loose featured images for posts, blog covers unless you hard-code them into the them, and other niceties.

So, there you have it. Now back to our regularly scheduled crap.