One Gradle project per directory; settings.gradle.kts includes every services/<name>/build.gradle.kts as
:<name>. app is the service the template ships and the one deploy/compose.prod.yml, the Caddyfile and CI
build.
cp -r services/app services/<name>; changegroupin itsbuild.gradle.ktsto<base package>.<name>and move the sources to that package; delete what the new service does not need.compose.yml: a secondapp-like service withdockerfile: services/<name>/Dockerfileand its ownSERVER_PORT.deploy/compose.prod.yml: same, imageghcr.io/<owner>/<repo>/<name>, onedge+data.deploy/Caddyfile: ahandle_path /<name>/*block with its ownreverse_proxy+dynamic a { name <name> }..github/workflows/ci.yml: a second entry in theimagejob (or a matrix) withfile: services/<name>/Dockerfileand imageghcr.io/<owner>/<repo>/<name>; the Dockerfile's COPY path.make lock SERVICE=<name>;make run SERVICE=<name>.