I've tried to find a sane tutorial of creating a ghost theme, but failed.  Most of the tutorials missed the testing part. So you basically have to make your changes on a theme, then pack it, deploy it and check your changes. Looks like too much work.

So, I found more pragmatic way of playing with ghost themes. I just run local instance of ghost, which would be linked with the template I'm editing. While editing the template there is live reload, so basically the open browser would refresh each time I make a change. Sounds cool? Lets get started.

1. Local ghost instance

Clone ghost:

git clone git@github.com:TryGhost/Ghost.git
cd Ghost
git submodule update --init --recursive

Choose your own port:

./core/server/config/defaults.json
{
    "url": "http://localhost:1337",
    "server": {
        "host": "127.0.0.1",
        "port": 1337
    },
...
}

Start ghost:

nvm install 12.10
yarn
yarn dev

Check the browser:

http://localhost:1337

Woo-ho ghost is there! :3

2. Cloning template:

git clone git@github.com:TryGhost/Casper.git

3. Linking:

Remove the default casper template from ghost instance.

rm -rf ~/Ghost/public/casper

Replace it by symbolic link:

ln -s ~/Casper ~/Ghost/public/casper

4. Live reload:

cd ~/Casper/
nvm use 12.10
yarn
yarn dev

Now you can open Casper theme in your editor and play with it.

Happy Coding!