Adding an application
Every application on the server is an isolated compose stack that joins the shared network and announces itself to the proxy with two labels. Adding one is a three-command procedure; removing one is two.
Rule of thumb: the spine (proxy and tunnel) changes
rarely and carefully; applications change freely and often. Anything expressible
as a compose file is cheap to try and cheap to delete.
§Scaffold
hdc new immich img # creates apps/immich → img.heavenlydemon.consulting
vim apps/immich/docker-compose.yml # real image, port, volumes
The scaffold arrives routed and labeled. Persistent state belongs under
/srv/hdc/data/<app>; internal services (databases, workers)
stay off the shared network entirely.
§Ship
hdc up immich # live — wildcard DNS means no other step
There is no step three. The wildcard record points at the tunnel; the tunnel points at the proxy; the proxy reads the labels. A new subdomain resolves the moment its container stands.
§Verify
hdc ls # every app and its state
hdc logs immich # follow the newcomer
Next guide: The hdc command →