Templates in .woodpecker/templates/ use __REGISTRY__, __ORG__, __IMAGE_PREFIX__ placeholders. gen_config.py reads stack.toml [platform] section and renders: - .woodpecker/deploy.yml, harden.yml, rebuild-all.yml - coredns/hosts, coredns/Corefile Change the domain in stack.toml, run gen_config.py, done. `--check` mode verifies files are up-to-date (CI-friendly). Replaces gen_coredns.py with unified gen_config.py.