Colophon

Posted:

pesky.moe

This website acts as the central location on the web for all things PeskyPotato including external links to my presence on other websites like Mastodon. The website also generates and links to feeds that update based on various activities.

Build

Code pushed to GitHub which triggers an action that builds and copies files to an VM on linode.

Pesky.moe is built using a custom Python script that generates HTML files within directories from markdown files, RSS feeds, and SQLite databases with templating done using Jinja. In essence, a static website.

The home page pulls in recent blog posts via blog.pesky.moe's RSS feed, recent toots via Mastodon's API, recent beer check-ins via the Untappd RSS feed and recent Anilist activity through the Anilist API.

The rail and collections page get built from individual SQLite databases. The HTML templates are defined in Jinja like the rest of the site.

The rail page currently features a map using the tinyworldmap layer, to display where each rail-related video I've filmed is located, this is followed below by the list of videos separate by country and city. Videos are manually copied into the SQLite database after being uploaded to YouTube along with the location details.

The collections page lists all the die-cast cars I have in my collection by manufacturer on the main page. Each car also has its specific page with details on the year of release, series and other notes.

The links page, used to share links I find on the internet, is rendered from markdown files. The main links page displays all tags used to categorise links, along with a list of all links shared along with their tags, date of sharing and description. Each shared link also has its own page which is generated to help with direct linking if required. Each tag also has a page generated to help navigate shared links by tag. Finally, an RSS feed is also generated to subscribe to any links that are shared.

Git is used as version control with the source code hosted privately on GitHub.

Hosting

Website is served from a VM in Linode by NGINX.

GitHub actions are used to trigger a build on the entire site on any push to main. The static files are generated and then copied to a virtual machine on Linode. The Linode host runs NGINX which serves the static files.

blog.pesky.moe

Blog.pesky.moe is my blog where I publish medium and long-form posts on technology, trains and occasionally other topics.

Build

Changes are pushed to a repository that triggers a GitHub action which builds and copies files to an S3 bucket.

The blog is built using Hugo an open-source static site generator. To style the blog I built a Hugo theme called vexinglyminimal based on top of a skeleton theme aptly named blank. Vexinglyminimal is still very much a work in progress and new features get added as I need them.

The source code for the blog itself is on a private repository on GitHub.

Hosting

Files are hosted from an S3 bucket via CloudFront.

The blog is hosted on an Amazon S3 bucket behind CloudFront. It's built using a GitHub Action on every push to main and copied to S3. Authentication is set up between GitHub and my AWS environment using OIDC preventing the need to share any long-lived credentials. Everything including the blog costs about 0.2 USD per month to host.