Source for jockeyholler.net — a Hugo-based personal site and technical writing portfolio deployed to GitHub Pages.
The live site is built and deployed via a Hugo + vintage computing pipeline (VAX/PDP-11 via SIMH). The vintage pipeline generates rendered artifacts that Hugo includes in the final build.
Content lives in hugo/content/. The site builds with Hugo extended ≥ 0.156.0 (ARM64 binary available from Hugo releases).
hugo server --source hugoOpen http://localhost:1313/.
hugo --source hugo --destination ../siteNote: --destination is relative to the source directory, so ../site writes to site/ at the repo root.
Publish: push to main → GitHub Actions runs the vintage pipeline and deploys to GitHub Pages automatically. To skip a deploy, include [nopublish] anywhere in the commit message. workflow_dispatch is available for manual re-runs without a new commit.
Generates four Hugo input artifacts and drops them into place before the Hugo build:
hugo/static/brad.man.txt— resume rendered bynroff -manon PDP-11 (2.11BSD)hugo/static/brad.bio.txt— plain-text bio block emitted bybradman.c -mode bioon VAXhugo/static/build.log.html— machine-boundary build log with VAX and PDP-11 console sectionshugo/data/bio.yaml— parsed frombrad.bio.txt;label,principal_headline,impact_highlights, andsummaryare vintage-pipeline generated;aboutis read fromresume.yamltop-level field on each build. (principal_headlinerendered on landing page;impact_highlightsgenerated but reserved for resume page)
The pipeline uses pexpect to drive SIMH emulators via stdin/stdout (no telnet ports, no sleep-based timing):
- Stage A: PDP-11 (2.11BSD) runs
nroff -manto renderbrad.1→brad.man.txt(scripts/pdp11_pexpect.py) - Stage B: VAX (4.3BSD) compiles and runs
bradman.cto generatebrad.1fromresume.vintage.yaml(scripts/vax_pexpect.py) - Stage A+B: VAX generates, host couriers the file, PDP-11 renders
Both stages are implemented and validated on main. See CHANGELOG.md for validation details.
See docs/integration/INDEX.md for design details.
python3 -m venv .venv
.venv/bin/python -m pip install -e '.[dev]'.venv/bin/python -m pytest -q
.venv/bin/python -m mypy resume_generator tests
.venv/bin/python -m ruff check resume_generator
.venv/bin/python -m pylint resume_generator -snPublish: push to main → CI does a minimal bootstrap:
- authenticates to AWS via static credentials (
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY), - starts the edcloud instance (if needed),
- invokes a single SSM command that runs
scripts/edcloud-vintage-runner.shon edcloud, - extracts
brad.man.txtfrom runner output intohugo/static/brad.man.txt, - parses
brad.bio.txtintohugo/data/bio.yaml(including principal homepage fields), - builds Hugo and deploys Pages,
- best-effort stops edcloud if the workflow started it.
Single orchestration entrypoint: scripts/edcloud-vintage-runner.sh.
Set KEEP_IMAGES=1 to preserve Docker images between runs (avoids rebuild on retry).
Infrastructure lifecycle managed separately: brfid/edcloud.
- edcloud EC2 instance must be SSM-managed (SSM Agent + IAM permissions).
- GitHub repo secrets:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_REGION- optional
EDCLOUD_INSTANCE_ID(otherwise instance resolves byedcloudtags).
.venv/bin/python scripts/edcloud_lifecycle.py start
.venv/bin/python scripts/edcloud_lifecycle.py status
.venv/bin/python scripts/edcloud_lifecycle.py stop| Doc | Role |
|---|---|
CHANGELOG.md ([Unreleased]) |
Current project state, active priorities, blockers, decisions |
CHANGELOG.md (dated entries) |
Chronological change history and milestone evidence |
docs/integration/INDEX.md |
Vintage pipeline design, stages, artifacts, constraints |
- This file
CHANGELOG.md([Unreleased]first, then latest dated entries)hugo/(Hugo site root — theme, content, config)
Then apply AGENTS.md constraints.