Just how exactly is this site built?
In a gist, it's static web site built with .NET and hosted on Azure.
Static Site Generator
I built the generator for this website myself. It's a .NET 6 console application built with F#. The application depends on a few libraries:
- Markdig - Parse markdown content.
- Giraffe.ViewEngine - Develop statically typed HTML using F#.
- YamlDotNet - Parse markdown file front-matter formatted in YAML. The front matter provides details such as the publishing date, page title, and post type.
The main tool for developing the static site generator as well as to author posts is Visual Studio Code. It gives me the flexibility of a lightweight text editor for authoring with rich features like built-in markdown preview. At the same time, I can use the debugger and the Ionide extension for writing and debugging F# code.
In cases when I want to quickly make updates, mainly to articles, I use github.dev. I get the same Visual Studio Code editing environment in the browser. Therefore I can author and update content from anywhere.
Although I can manually run the console application to generate the site, I have automated the publishing process using GitHub actions.
The GitHub action performs the following steps.
- Logs in to Azure
- Installs .NET on the build agent
- Builds .NET console application
- Runs .NET console application
- Uploads generated site (mostly HTML files) up to Azure Blob Storage.
- Clears CDN cache and propagates the latest changes.
The code for this website is hosted on GitHub. You can find the source code in the lqdev/luisquintanilla.me repository. Having version control for both authored content as well as the static site generator makes it easy to safely apply new changes as well as roll back changes in case something breaks.
The code is hosted on Azure. Specifically I use Azure Static Web Apps. That service is built on Azure Blob Storage which hosts the static files generated by the static site generator. In addition, I use Azure CDN to distribute my site.
The main form of syndication for content on this site is RSS. I have several feeds that are generally organized based on the type of content. The RSS files are generated as part of the build process by the static site generator.
An additional syndication practice I follow for this site is Publish (on your) Own Site, Syndicate Everywhere (POSSE). I try to have my site be the single source of truth and home for my content. From there, I can share with other applications and services. I use Azure Logic Apps for my main feed to automate syndication to Twitter and Mastodon. The Azure Logic App constantly polls the main feed's RSS for new changes. Then, it posts them on Twitter and Mastodon.