Derived from what the lab actually does (2026-07 audit) — follow these for new builds.
| Thing | Convention | Examples |
|---|---|---|
| LXC hostname | Service name, PascalCase or as-branded | WikiJS, Authentik, Arr-Stack |
| VM name | lowercase-dashed role | jellyfin-server, amp-worker |
| Tailscale name | auto = hostname lowercased | wikijs, arr-stack, super-pc |
| VMID | next sequential (LXC 1xx, VM 4xx) | next LXC: 121 |
| Service IP | next free .2xx | next: .217 |
| Compose dir | /opt/<service>/ |
/opt/wikijs, /opt/authentik |
| cephfs data dir | /mnt/pve/cephfs/<service>/ |
wikijs/, monitoring/, frigate/ |
| Public name | <service>.codycodez.com |
wiki.codycodez.com (future) |
| Kuma monitor | <Service> - <Facet> |
"Wiki.js", "Frigate - Domain" |
| Wiki page | /services/<kebab-case> |
/services/uptime-kuma |
Known deviations (grandfathered): /opt/blog (Ghost), /opt/kitchen-ai (AI-Recipe-Book LXC), compose file named compose.yml/compose.yaml in Ghost/Storj vs docker-compose.yml elsewhere.