Every time I set up a stack from scratch I'd end up touching at least four files: docker-compose.yml , nginx.conf , a .env file, maybe a Makefile . Change the port in one place and forget to update the others and something silently breaks. I wanted to fix that. Stage 4A was the fix. Stage 4B was the moment I realised the fix was incomplete. This post covers the whole journey: how I built swiftdeploy , why I wired in Prometheus metrics and an OPA policy sidecar, and what actually happened when I deliberately tried to break my own canary deployment. Stage 4A: One file, everything else is generated The idea was simple. One file — manifest.yaml — owns every setting. The CLI reads it and writes nginx.conf and docker-compose.yml . You never touch the generated files. If you need to change something, you change the manifest and run ./swiftdeploy init again.…