About This Portfolio
This page exists to outline many interesting technical details about this website. I want to describe in detail the many design decisions I made while creating this website by talking about how it operates. The goal of this process is both to share how I think and operate, but also to re-evaluate these decisions as a part of formally writing about my design.
Notable Technologies
- Axum: A highly popular, configurable, pluggable, and performant http web server framework.
- Axum-Blueprints: A yet to be released library that allows registration of axum routes via a procedural macro system. This library is meant to couple route paths definitions to their handlers locally in code.
- Just: A command runner utility think of it as a simplified Makefile. It is used for project management and keeping important development commands handy as well as version controlled.
- Podman Essentially docker but for weirdos like me (also rootless mode is the default).
- PostgreSQL: One of the major SQL varieties and a personal favorite of mine to work with.
- Rust: The primary programming language used to create the website.
- SeaORM:
- SeaREST: Another yet to be released library that assists with creation of REST style APIs from SeaORM database models. The goal of this library is to reduce boilerplate code to a minimum, while allowing easy configuration of the API surface.
- Stilts: My own personal templating engine developed both for fun and because I felt like the existing options in the rust ecosystem didn't do what I wanted. It is now a completely open sourced library. While it has seen some traction and even a few contributions it has met my needs so far and no issues have been opened recently to require more active development.
Articles
All the articles written on this website (including this one) are written in one of two formats. Either markdown or typst. The articles are stored in a dependency injectable file storage system in their raw editable form. These formats are great for plain text editing purposes, but leave a lot to be desired in viewing. Thankfully these formats are designed to be compiled into formats that are for viewing.
Markdown Articles
Articles that have been written in markdown get rendered into HTML and then rendered into the template on the server side.
Typst Articles
Articles written in typst are compiled into both a PDF and HTML. The PDF is the primary viewing format supported by the typst compiler. However HTML support exists and is being actively improved. Right now the HTML output is used as a backup if the PDF is unable to be displayed for any reason.
Caching
The compilation process for these articles can actually take a few seconds especially typst articles. For this reason in order to increase responsiveness on the website the compiled article output is cached in server memory. This means that the server can skip compilation once it has been done once.
Infrastructure
This website takes advantage of the infrastructure I put together for my family. I won't go too in depth but it consists of a few key components:
- Gitlab Runner: This is setup to enable CI/CD pipelines to run and so that it is easy to deploy.
- HashiCorp Vault: This is a secure secrets management system that is used to rotate/manage secrets and passwords that need to be shared between services.
- Traefik: A reverse proxy that can automatically adapt to new services being added.
- Zitadel: This is the secure IAM platform that we can tap into for any apps we build.