# Ship TODO ## Open ### ~~Support custom Caddyfile~~ ✅ FIXED **Fixed in:** commit b976b14 - Caddyfile is only generated on first deploy - Redeploys preserve existing Caddyfile (manual edits survive) - SSH in and customize as needed, future deploys won't overwrite --- ### ~~ship list should show custom domains~~ ✅ FIXED **Fixed in:** commit c1b0bb8 - Reads actual domain from Caddyfile instead of assuming subdomain - Works for both apps and static sites --- ## Fixed ### ~~Port allocation collision bug~~ ✅ FIXED **Fixed in:** commit d97bb6f - Port allocation now uses atomic flock on `/etc/ship/next_port` - Prevents race conditions when multiple deploys run concurrently - Each app still gets its port stored in `/etc/ship/ports/` ### ~~Docker container port assumption~~ ✅ FIXED **Fixed in:** commit d97bb6f - Added `--container-port` flag (default 80) - Template now uses `{{.ContainerPort}}` instead of hardcoded 80 - Supports containers that listen on 8080, 3000, etc. ### ~~ship host init doesn't create local state.json~~ ✅ FIXED **Fixed in:** commit 6b2c047 - Removed all v1 code (-2837 lines) - Simplified `internal/state/state.go` to just `default_host` + `base_domain` - `host init` now creates minimal state.json - Ports/deploys tracked on server at `/etc/ship/ports/`