Sooo... I've decided that after owning openbloc.fr for some years it was time to start sharing some of my whereabouts.

Getting Started

When I started openbloc as my personal website, though I experimented with Flask and Angular, it was mostly a static website crafted by hand.
I've spent some time investigating static website generators, hosting on S3 or on Github Pages

static website generators

In the end it's still a lot of work to setup and understand those frameworks.

Comes Ghost

The Ghost Logo
And then I remembered the ghost platform, which is a little bit more with "batteries included". It seems to have come a long way since 2013 with a 1.0.0 release almost ready.

I used ghost-on-heroku to deploy it.

  1. Create a new S3 bucket
  2. Create a new IAM role with S3 permissions
  3. Use the provided ID and Key to fill the heroku form
  4. Deploy !

For some reason the deploy from github did not copy the source code in the heroku container so I had to fork and clone it for this as I wanted to update the dependencies.

Adding the custom blog.openbloc.com domain

At this point ghost was only running at openbloc-blog.herokuapp.com to add a custom domain several steps are required:
heroku domain interface

  1. Add a domain on the heroku interface
  2. Add a CNAME record at your DNS provider using the heroku-provided DNS target.
  3. Adding a Let's Encrypt certificate for a secure https connection: probably later as I would have to upgrade to a paid dyno for now.

Customizing the default theme: Casper

I've just added prism.js to do code highlighting. Also a Makefile to generate the theme zip file:

zip:
	zip -r openbloc.zip . -x .git\*

It should work with a lot of languages out of the box, here's some test with a Django model:

class BaseModel(models.Model):
    """ BaseModel
    An abstract base class with timestamps.
    Stores data with postgresql JSON field.
    """
    date_created = models.fields.DateTimeField(
        verbose_name=_("creation date"),
        auto_now_add=True,
    )
    date_modified = models.fields.DateTimeField(
        verbose_name=_("modification date"),
        auto_now=True,
    )
    data = JSONField(null=True, blank=True)

    class Meta:
        abstract = True

That's all !