Many of my side projects take the shape of over-engineered. They serve as a fun sandbox to go wild, put my mind on a treadmill, try new things, and take maximum control of the outcome. 🏰
This tends to mean every project, no matter how small, has GitHub Actions CI, lint passes, prettier
-formatted READMEs, dependabot, a locked trunk branch and PR-oriented merge workflow. There is always some sort of build system; sometimes Vite, sometimes Bazel, sometimes Cargo, sometimes an amalgamation of make
and docker
. 🏗️
Nowhere is this energy more apparent than the repository that houses my résumé. 🙋
I built my LaTeX résumé from scratch. I did not use a template; I started with an empty buffer in vim
. There are currently 102 lines of prelude before \begin{document}
. The résumé uses the scrartcl
document class and content entries within each \section*{}
are defined using custom environments. Early versions of the source were built with pdfLaTeX, then later with XeLaTeX. The current revision is built with LuaLaTeX. 📇
My résumé's git respository has a build system. make all
invokes make
recursively in a Docker container to invoke latexmk
(which itself invokes make
for some dynamic \inputA
includes). The PDFs and PNGs generated by this build process are reproducible. 🪞
The Dockerfile
installs a curated and minimal set of packages required to pull in a lightweight TeX install. Line 40 regenerates the font cache as part of the image baking process to speed up the PDF rendering step. 📚
# pregenerate font caches
RUN set -eux; \
luatools --generate; \
mtxrun --script fonts --reload; \
luaotfload-tool --update
The sources run through several layers of linters: check-style
runs on every commit; custom scripts reject commits which contain non-ASCII characters (preferring the LaTeX equivalent macros); hadolint
ensures the Dockerfile
follows all of the best practices (except for DL3008
, I don't have the patience to pin apt
package versions). ⏳
@dependabot keeps Docker base images current with automatic dependency upgrade PRs. GitHub Actions CI ensures the TeX source builds without warnings on every commit. 🪜
I use GitHub releases with PDF artifacts to track which things end up getting pushed to the web. Releases are tagged by date. 🏷️
The most recent hurdle I overcame was how to create blue underlined hyperlinks. The sources are easy to work with. 😅
When I work on a side project, I am choosing to enter a box. Being able to exercise this level of control lets me indulge into some escapism, exploration, and for the sake of it engineering. 📦