Posts for: #Workflow

CI/CD resume publication

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.

[Read more]

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:

[Read more]

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.

[Read more]

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.

[Read more]