Colophon

About this site

This site is my digital presence and digital garden in the interwebs.

The blog section contains mainly long-form articles. As I tinker with different technologies, I write down the steps and process I went through to get something working. Therefore they mostly serve the purpose of helping me remember how I did something in case I want to do it again in the future. I also post these in hopes that they may be of help to others trying to solve similar problems.

The knowledge-base contains a collection of wiki articles, snippets, and library. Wiki articles are documents on certain topics. They intend to connect information and knowledge I encounter as part of personal investigations or randomly stumble upon. Snippets are random scripts and code snippets. The library is a list of books I'm currently reading or have read.

The main feed is like a microblog with content ordered in reverse chronological order. It collects in a single place snippets containing notes, photos, videos, and other types of content. The replies feed contains replies and interactions with other pages and supports Webmentions. The feeds take inspiration from IndieWeb posts.

In addition to the feeds, there's also the linkblog which acts as my bookmark / read-it-later service as I find interesting websites. The blogroll contains a collection of blogs I follow and the podroll is a collection of podcasts I listen to.

How this site is built

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:

Tooling

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.

Publishing

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.

Hosting

Code

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.

Application

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.

Syndication

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.

Webmentions

This website accepts Webmentions on all pages. It also sends Webmentions form the Responses feed (replies,reshares,stars,bookmarks).

Sending Webmentions

Webmentions are send as part of the site build and publish process. To help with sending Webmentions, the WebmentionFs library is used.

Accepting Webmentions

To accept Webmentions, I have an Azure Functions endpoint which accepts POST requests and stores them in an Azure Tables database. To help with validation and accepting Webmentions, I use the WebmentionFs library. For more details, see Accept Webmentions using F#, Azure Functions, and RSS.