# 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](https://git.hypertheory-labs.dev/jeffry/homelab-cluster/src/branch/main/.loom/gaps/publishing-container-images.md).** > *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 ```sh 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 here** — *they 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.*