From 6605137198fd854131e906b57ae846df9cab17b9 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Thu, 12 Feb 2026 11:41:19 -0800 Subject: [PATCH] Add CV service reference card and update docs indexes Co-Authored-By: Claude Opus 4.6 --- docs/changelog.d/cv-docs.doc.md | 1 + docs/reference/kubernetes/apps.md | 3 +- docs/reference/reference.md | 3 +- docs/reference/services/caddy.md | 3 +- docs/reference/services/cv.md | 71 +++++++++++++++++++++++++++++++ 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 docs/changelog.d/cv-docs.doc.md create mode 100644 docs/reference/services/cv.md diff --git a/docs/changelog.d/cv-docs.doc.md b/docs/changelog.d/cv-docs.doc.md new file mode 100644 index 0000000..3657aeb --- /dev/null +++ b/docs/changelog.d/cv-docs.doc.md @@ -0,0 +1 @@ +Add CV service reference card and update apps registry, Caddy docs, and services index. diff --git a/docs/reference/kubernetes/apps.md b/docs/reference/kubernetes/apps.md index 695e35b..583dfc4 100644 --- a/docs/reference/kubernetes/apps.md +++ b/docs/reference/kubernetes/apps.md @@ -1,6 +1,6 @@ --- title: Apps -modified: 2026-02-07 +modified: 2026-02-12 tags: - kubernetes - argocd @@ -34,6 +34,7 @@ Registry of all applications deployed via [[argocd]]. | `torrent` | torrent | `argocd/manifests/torrent/` | [[transmission]] | | `navidrome` | navidrome | `argocd/manifests/navidrome/` | [[navidrome]] | | `teslamate` | teslamate | `argocd/manifests/teslamate/` | [[teslamate]] | +| `cv` | cv | `argocd/manifests/cv/` | [[cv]] | | `forgejo-runner` | forgejo-runner | `argocd/manifests/forgejo-runner/` | [[forgejo]] CI | ## Sync Policies diff --git a/docs/reference/reference.md b/docs/reference/reference.md index d5c6b57..cbbbc0d 100644 --- a/docs/reference/reference.md +++ b/docs/reference/reference.md @@ -1,6 +1,6 @@ --- title: Reference -modified: 2026-02-10 +modified: 2026-02-12 tags: - reference --- @@ -34,6 +34,7 @@ Individual service reference cards with URLs and configuration details. | [[transmission]] | BitTorrent daemon | k8s | | [[zot]] | Container registry | indri | | [[devpi]] | PyPI caching proxy | k8s | +| [[cv]] | Resume / CV site | k8s | | [[docs]] | Documentation site (Quartz) | k8s | | [[flyio-proxy]] | Public reverse proxy (Fly.io + Tailscale) | Fly.io | | [[automounter]] | SMB share automounter | indri | diff --git a/docs/reference/services/caddy.md b/docs/reference/services/caddy.md index de380dd..c6e5e4f 100644 --- a/docs/reference/services/caddy.md +++ b/docs/reference/services/caddy.md @@ -1,6 +1,6 @@ --- title: Caddy -modified: 2026-02-08 +modified: 2026-02-12 tags: - service - networking @@ -48,6 +48,7 @@ K8s services are proxied via their Tailscale Ingress endpoints: |-----------|---------|---------| | `grafana.ops.eblu.me` | `grafana.tail8d86e.ts.net` | [[grafana]] | | `argocd.ops.eblu.me` | `argocd.tail8d86e.ts.net` | [[argocd]] | +| `cv.ops.eblu.me` | `cv.tail8d86e.ts.net` | [[cv]] | | `docs.ops.eblu.me` | `docs.tail8d86e.ts.net` | [[docs]] (now publicly available at `docs.eblu.me` via [[flyio-proxy]]) | | `feed.ops.eblu.me` | `feed.tail8d86e.ts.net` | [[miniflux]] | | ... | ... | (see defaults/main.yml for full list) | diff --git a/docs/reference/services/cv.md b/docs/reference/services/cv.md new file mode 100644 index 0000000..0c546d9 --- /dev/null +++ b/docs/reference/services/cv.md @@ -0,0 +1,71 @@ +--- +title: CV +modified: 2026-02-12 +tags: + - service + - resume +--- + +# CV (Resume) + +Personal resume/CV served as a static HTML page with PDF download, built from YAML source via Jinja2 and WeasyPrint. + +## Quick Reference + +| Property | Value | +|----------|-------| +| **URL** | `cv.ops.eblu.me` (tailnet only, via [[caddy]]) | +| **Namespace** | `cv` | +| **Container** | `registry.ops.eblu.me/blumeops/cv:v1.0.0` | +| **Source repo** | `forge.ops.eblu.me/eblume/cv` (private, not mirrored to GitHub) | +| **Content packages** | `forge.ops.eblu.me/eblume/-/packages` (generic package `cv`) | +| **ArgoCD App** | `cv` | + +## Architecture + +1. **Source**: `resume.yaml` (content) + `template.html` (Jinja2) + `style.css` in the cv repo +2. **Build**: `render.py` (uv script runner) generates `index.html`; WeasyPrint generates `resume.pdf` +3. **Release**: Dagger `build` function packages `index.html`, `style.css`, `resume.pdf` into a tarball, uploaded to Forgejo generic packages +4. **Deploy**: nginx container downloads the tarball at startup via `CV_RELEASE_URL` env var + +## Endpoints + +| Path | Description | +|------|-------------| +| `/` | Resume HTML page | +| `/resume.pdf` | PDF download (Content-Disposition: attachment) | +| `/healthz` | Health check (200 OK) | + +## Configuration + +**Key files (blumeops):** + +- `containers/cv/Dockerfile` — nginx:alpine container +- `containers/cv/start.sh` — tarball download + extraction +- `containers/cv/default.conf` — nginx config (gzip, caching, PDF headers) +- `argocd/manifests/cv/deployment.yaml` — `CV_RELEASE_URL` env var +- `argocd/apps/cv.yaml` — ArgoCD Application + +**Key files (cv repo):** + +- `resume.yaml` — Resume content (YAML) +- `template.html` — Jinja2 HTML template +- `style.css` — CSS with screen/print media queries +- `render.py` — uv script runner (PEP 723) that renders YAML → HTML +- `src/cv_ci/main.py` — Dagger pipeline (alpine + uv + WeasyPrint) +- `.forgejo/workflows/cv-release.yaml` — Release workflow + +## Secrets + +| Secret | Repo | Source | Description | +|--------|------|--------|-------------| +| `FORGE_TOKEN` | cv | 1Password (via Ansible) | Forgejo API token for package uploads | + +Provisioned via `forgejo_actions_secrets` Ansible role. See [[create-release-artifact-workflow]]. + +## Related + +- [[docs]] — Similar architecture (nginx container + content tarball) +- [[caddy]] — Reverse proxy for `cv.ops.eblu.me` +- [[create-release-artifact-workflow]] — How to set up release artifact workflows +- [[deploy-k8s-service]] — General k8s deployment guide -- 2.50.1 (Apple Git-155)