# Podcast Checklist Episode production tracker for *Verse by Verse with Nate*. ## Deploy ### 1. Build and push to GHCR ```bash docker build -t ghcr.io/nmemmert/podcast-checklist:latest . docker push ghcr.io/nmemmert/podcast-checklist:latest ``` ### 2. On the Oracle Cloud VM ```bash docker pull ghcr.io/nmemmert/podcast-checklist:latest docker rm -f podcast-checklist 2>/dev/null || true docker run -d \ --name podcast-checklist \ --restart unless-stopped \ -p 3001:3000 \ -v podcast-checklist-data:/data \ ghcr.io/nmemmert/podcast-checklist:latest ``` > Uses port **3001** on the host so it doesn't clash with your existing site on 3000. > Progress is saved to a named Docker volume (`podcast-checklist-data`) so it survives container restarts and re-deploys. ### 3. Cloudflare DNS Add a CNAME record in Cloudflare: - **Name:** `checklist` (or whatever subdomain you want) - **Target:** `versebyversewithnate.us` - **Proxy:** Enabled (orange cloud) ### 4. Cloudflare Tunnel or Nginx proxy If you're using Nginx Proxy Manager or a Cloudflare Tunnel on the VM, add a rule to forward `checklist.versebyversewithnate.us` → `localhost:3001`. --- ## Update workflow Same as your site: ```bash # Local docker build -t ghcr.io/nmemmert/podcast-checklist:latest . docker push ghcr.io/nmemmert/podcast-checklist:latest # SSH into VM docker pull ghcr.io/nmemmert/podcast-checklist:latest docker rm -f podcast-checklist docker run -d \ --name podcast-checklist \ --restart unless-stopped \ -p 3001:3000 \ -v podcast-checklist-data:/data \ ghcr.io/nmemmert/podcast-checklist:latest ``` Progress data is in the named volume and is **not affected** by pulling a new image.