It works.

Placeholder app deployed via GitHub Actions → GHCR → Caddy, running on an OCI Ampere A1 free-tier instance.

Replace app/ with the real application whenever it's ready — the pipeline stays the same.