After many years of pointing my domain at a now largely defunct photo blog I’ve decided it was time to refresh my online presence with a new site and a new blog. Over many years and many projects I’ve used a wide variety of approaches to web development, from some pretty crusty static pages hand-coded in Notepad, most of the popular LAMP CMSen, to monster many-layered bespoke J2EE and ASP.NET sites. I wanted to get something up quite quickly and my general hunch was that my requirements were quite simple, so I decided to engage in a good bit of reflective Goal-Oriented Requirements Engineering to clarify my thinking.
I hope this explanation of my choices and description of my process may help others (particularly academics) with similar requirements.
Hard sub-goals 1 and 3 implied the functional requirements were indeed pretty minimal - some sort of basic About Me page/CV and a rudimentary blog. The soft sub-goals 2,4,and 5 implied NFRs for a framework that was simple, modern, lightweight which produced a good-loooking, minimalist, and responsive site. Given my expected frequency of blogging, the solitary nature of my contributions, and soft sub-goal #5, I started looking at static site generators.
Put simply, static site generators differ from true dynamic web frameworks by generating the required resources (HTML, CSS, JS, etc.) for a web site at compile time which are only updated when the underlying source is; as opposed to building those resources upon every request. A much fuller explaination is in this excellent blog from Maria Antonietta Perna. Dipping in and out of a few blogs on dev.to and Medium, I became aware of a stack that looked appealing: Hugo and Netlify. To be more accurate, I only really became aware of these two via Stackbit, which I got to via this blog post. After deploying a test site via Stackbit, I rapidly realised that it didn’t actually add anything for my needs over and above Hugo and Netlify and actually got in the way of me understanding these two underlying tools so it was factored out of the equation.
Hugo is a static site generator written in Go (not that that particularly matters), which can generate web pages that suit my NFRs from basic markdown files. Initially a bit of a markdown sceptic/general luddite, through my use of RMarkdown and Jupyter Notebooks, (and, lets be honest, Reddit) I’ve found it an excellent succinct way of notating structed text. I am more than happy to write in Markdown rather than using any sort of WYSIWYG editor and it is certainly preferable to writing plain ol’ HTML from scratch. The specifics of how your markdown is turned into HTML is govered by a theme, and a quick peruse of the themes gallery showed there were options that suited my personal aesthetic choices and met the approval of my favourite graphic designer. On that basis, it certainly seemed like a good fit for my requirements.
Netlify is a site hosting, management, and continuous integration service that offers a free tier that was adequate for my needs:
In summary - such a continuous integration system allows for my site to be updated every time a push an update to the hugo site (e.g. adding a new blog post) to the master branch of the github repository backing this site. This allows me to keep works-in-progress on alternate branches and then use a Pull Request to the master to publish to the world.