The site platform

This site is a static site built using Hugo, the popular static site generator built using the Go programming language.

I was part of the Grav core team for 2 years in the past. Grav is a flat-file CMS, which means it does not need a database, and stores data into files instead. Why not use that, which I know inside-out?

The reason I chose Hugo are:

  • a static site generates plain HTML files, which make it faster than having to process every request server-side
  • a static site is more flexible in terms of deployment and hosting
  • I was learning Go, and trying Hugo seemed a good thing for my learning process
  • it’s really fast, my local live reloading is instant and I don’t have to wait 10 seconds to recompile (not every platform can do this on my 2010 Mac)

The theme

I used the Ghostwriter theme, slightly optimized and tweaked to serve my needs. I might detail those changes soon.

Where do I host the site

I use Netlify. I used to run on Firebase Hosting, but I moved to Netlify during an outage of Firebase and I never looked back - it’s made exclusively for static sites, and it’s really awesome. I wrote a blog post about Netlify, check it out. I also wrote a post where I describe how I automatically deploy my posts and schedule them.

The posts

I write the posts using Markdown, which make it a great format because it’s very portable - I could move to Gatsby, Vuepress or any other static site generator in a minute if I want.

I’m still happy with Hugo, although I’d like to try out those other modern JavaScript platforms that everyone talks about.

My workflow for posting an article

When I write a blog post, I set the published date in the future.

I have a bad memory, so I write down everything. I have a list of scheduled posts in Notion and I try to keep one or two weeks of content in front of me, so I don’t have anxiety about not knowing what I am going to publish or write about.

Schedule

I push all my content to a private GitHub repository, which is synchronized to Netlify thanks to their integrations.

Every time I push to GitHub, Netlify deploys an updated copy of the site.

I just run an IFTTT webhook every morning at 08:00 CET to automatically trigger a new deploy on Netlify, which will publish the blog post of the day (I date every post at 7:00 AM, just to be sure).

I might be sleeping at 8 AM (hint: I’m usually not, as I wake up at 6 AM usually).

More often I’m out walking the dog, and it’s nice to have this piece of the infrastructure out of my mind. I just know a post is going to be published.

It’s also going to be posted on Twitter automatically, thanks to another IFTTT applet which is linked to my RSS feed.

Tweet new posts

Post images

I make sure all the post images are optimized using ImageOptim, to avoid useless bandwidth usage and a faster page speed.

Sometimes I use an app to generate a banner image for the post, which is also used in the Twitter card.

I used to create an ASCII-text image, using TAAG.

More recently I started adding images I draw using the new iPad (not the Pro, too pricey) and an Apple Pencil. After trying many apps to draw, I now use the Sketches app, it’s great. I am not gifted at all for drawing, I just like doing something kind of funny.

The newsletters

I have 2 newsletters.

One is the weekly newsletter. I send an email every week, with the list of the posts I wrote.

The second is the course newsletter. I’m building a course. Creating a course takes me 2 months. During those 2 months I’ll create content that I’ll send to anyone that joins my course newsletter, and they will also have an exclusive discount when the course opens.

Both run on ConvertKit.

The books

I currently sell two ebooks. One about Go, one about Web Development.

I tried several platforms for digital products in the last few years. I started using Gumroad just for these ebooks, and I found out it’s great.

My only requirement is that the service I use must act as a reseller, and I just bill the platform, not every individual user, as that would be unsustainable.

The nice thing about Gumroad is that it pays weekly instead of monthly, so you get immediate “feedback”.

My ebooks are basically a giant collection of all the posts I wrote around a macro-topic.

Almost 90% of my visitors only reads one page, as that what’s (s)he’s interested in.

And although some do explore other topics I internally link, there is absolutely no way one could read all the posts.

So by packaging all I write, well organized into categories and with a specific order, I’m creating a useful resource that one can download and put on his iPad or even browse offline as a singe-page HTML file (very nice for searching).

Also, I issue regular updates that include all the new content I create, and send them for free to who already purchased the ebook.

How do I create the books? I have an unpublished Hugo page that has a special template that imports every post I want to include in a book, plus a page that acts as an index.

Some special CSS and JavaScript makes sure the page displays nicely in the PDF version, with the proper page margins and page breaks, as well as indexable with the correct links in the one-page HTML version.

I also hide from the PDF some things that are not good for that format, like Glitch links.

Once I have the page ready, I simply save it to generate the HTML and folder with all the images, and I print it as PDF.

The course

I’m creating an online course about Vue.js, a popular frontend framework.

It’s mostly text based, with a clear structure and exercises.

I will host the course on a simple Hugo site. I will describe the “platform” in another post.

I built 2 courses in the past. One in 2009, self hosted on a platform I built on top of a CMS, and another one in 2015 on Udemy.

Twitter

Twitter is a great platform for me. I have more than 2000 followers, although I don’t really know how that works and I think lots of those never see what I post.

Even though I joined Twitter in 2007, I never really used it effectively. I only started a few months ago to get any kind of interaction with the people out there 🙃

It’s pretty cool. I also follow some hashtags where newbies hang out, and I try to help sometimes with their questions.

I also have a cool script that runs on Glitch and it’s triggered 2 times a day by IFTTT. I explain it here. Basically I have a list of posts on Airtable that I posted in the past and I want to repurpose on Twitter.

It’s sad to write a post, share it once and never post it again, but doing it manually it’s 1) tedious 2) not something I can do consistently 3) had to track which posts I shared already.

Perfect for a machine, that posts them while I am sleeping, 2 per day.

Medium

Medium is big for me. When I write a post that I think it’s good for Medium (i.e., very well done), I import it on Medium.

Important, I say import because using that Medium functionality, they set the canonical meta tag, which indicates to search engines that the original content is on my site, not on Medium.

I think this gives some nice SEO improvements, but I can’t be sure.

Anyway, I have 3k+ followers on Medium, but the only thing that works is to post for a publication. I post on FreeCodeCamp and HackerNoon, and those platforms are amazing for exposing to new audiences.

I try to post there 4-5 times every month. Sometimes a post fails, and gets 100 views. My most popular went over 70k and was an introduction to GitHub.