nginx sat on two Docker networks (Coolify's shared per-app network,
where coolify-proxy lives, plus our custom "mandant" bridge). With
no explicit traefik.docker.network label, Traefik's Docker provider
picked one non-deterministically across deploys — when it picked
"mandant", its backend connection went to an unreachable network and
silently hung after completing the TLS/HTTP handshake with clients.
All services already share Coolify's injected network, so the custom
network was redundant. Removing it leaves each container on exactly
one network, eliminating the ambiguity.
Coolify builds with --project-directory set to the repo root, which broke
the dev compose file's relative paths. Adds a dedicated prod compose stack
(baked-in code, no bind mounts, no hardcoded secrets, static Nuxt build
served by nginx) so local dev and Coolify no longer share fragile path
assumptions.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>