Files
docs/deploy
jeffryandClaude Opus 5 972717e561 deploy: nginx and git-sync, no image built
Serves loom.hypertheory-labs.dev from the site branch, which holds dist/ and
nothing else. Two public images; git-sync polls the branch and nginx serves the
volume, so publishing a new version is a push and there is no rollout.

This sidesteps the cluster's open gap on publishing container images rather than
closing it. The first workload that genuinely needs an image we built still hits
it, and nothing here is evidence the gap is smaller than it looked.

The HTTPRoute carries no hostname of its own, per public-access.md: it pins to
the loom listener by sectionName and inherits. A route with its own hostnames
stops inheriting and stops being portable between staging and production.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 10:20:59 -04:00
..

Deploying this site

loom.hypertheory-labs.dev, on the home cluster.

No container image is built. Two public images — nginx and git-sync — and the site arrives over git. git-sync follows the site branch of this repository, which holds dist/ and nothing else, and nginx serves what lands in the shared volume.

This deliberately sidesteps the cluster's open gap on publishing container images. Sidestepping is not closing: the first workload here that genuinely needs an image we built will still hit it, and this repository is not evidence that the gap is smaller than it looked.

Publishing a new version

npm run build
npm run publish-site      # commits dist/ to the `site` branch and pushes

git-sync polls, and nginx serves the new files without a restart — there is no rollout, because there is no image.

What is here

namespace.yaml the loom namespace
deployment.yaml nginx + git-sync, sharing an emptyDir
service.yaml ClusterIP on 80
httproute.yaml pins to the loom listener and carries no hostname of its own

The Certificate and the Gateway listener are not herethey are cluster infrastructure and live in homelab-impl, beside the other four.

Why the route carries no hostname

Because public-access.md says so: a route that carries its own hostnames: stops inheriting from the listener and stops being portable between staging and production. It pins by sectionName and takes the hostname it is given.