I am terrible at word processors / editing so I build my resume with LaTeX templates. I gain a pretty, highly configurable resume, but it can be a pain to modify, build, share, etc. A couple weeks ago someone pointed out to me that I forgot to update my most recent role to reflect a promotion (staff software engineer, yeahh!!). I was not at home and I had to work quite a bit to only change a word in my resume. This has always been a pain to me so I figured, why not set up a CI/CD pipeline to build and publish my resume. These are the steps I took.
Posts for: #Workflow
How Dates Work on This Site
Every page on this site has two dates: Created and Updated. Neither one is maintained by hand. Here’s the full flow.
Creating a new page
New content is created with the new.sh script:
./scripts/new.sh content/thissite/my-page.md
This sources .env for HUGO_IMAGE and SITE_DIR, then runs
hugo new inside the Docker container.
Hugo reads the archetype template at archetypes/default.md:
+++
date = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
tags = []
+++
At creation time, Hugo substitutes {{ .Date }} with the current
timestamp and writes it into the new file’s front matter. The result
looks like:
Organizing This Site
A reference for how this Hugo site is organized and what configuration options are available.
Sections
Sections are created automatically from the directory tree under content/.
Any directory with an _index.md file becomes a section with its own list
page.
content/
├── _index.md ← home page
├── about/
│ ├── _index.md ← /about/ list page
│ ├── whoami.md
│ └── now.md
├── software/
│ ├── _index.md ← /software/ list page
│ ├── ollama.md
│ └── hugo-setup/ ← page bundle (leaf)
│ ├── index.md
│ └── architecture.svg
└── config/
├── _index.md ← /config/ list page
└── this-file.md
No config changes are needed — Hugo derives sections from the filesystem.
Python Packaging with uv
uv is a fast Python package manager and project tool written in Rust.
Why uv over pip/poetry/pipenv?
- 10–100x faster dependency resolution.
- Single tool: replaces pip, pip-tools, virtualenv, and pyenv.
- Lockfile support via
uv.lock.
Common commands
uv init myproject # scaffold a new project
uv add requests # add a dependency
uv sync # install from lockfile
uv run pytest # run inside the managed venv
Project convention
All Python projects in this workspace use uv exclusively — no raw
pip install or python -m pytest.
What I’m Doing Now
A /now page. Update this periodically with what you’re currently focused on.
- Building a Hugo site
- Experimenting with local LLMs via Ollama
- Indexing documentation with ChromaDB