<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ship.git/cmd, branch main</title>
<subtitle>Deploy to your VPS in one command</subtitle>
<id>https://code.northwest.io/ship.git/atom?h=main</id>
<link rel='self' href='https://code.northwest.io/ship.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/'/>
<updated>2026-04-18T21:40:17+00:00</updated>
<entry>
<title>Remove Go implementation — ship is skills-only now</title>
<updated>2026-04-18T21:40:17+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-04-18T21:40:17+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=778bef5ee6941056e06326d1eaaa6956d7307a85'/>
<id>urn:sha1:778bef5ee6941056e06326d1eaaa6956d7307a85</id>
<content type='text'>
The skills/ directory fully replaces the old Go CLI. Drop all Go
source, build files, planning docs, and the stale SECURITY.md
(which described the old git-user push-deploy model that no longer
exists). Trim .gitignore to match the new tree.
</content>
</entry>
<entry>
<title>Clean up: drop v2 suffix, remove webui</title>
<updated>2026-02-19T16:10:45+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-19T16:10:45+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=5548b36e0953c17dbe30f6b63c892b7c83196b20'/>
<id>urn:sha1:5548b36e0953c17dbe30f6b63c892b7c83196b20</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: pass container port (not host port) as PORT env var</title>
<updated>2026-02-19T05:11:48+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-19T05:11:48+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=6d4ffd6e2176e82e81033adf878cba959817336f'/>
<id>urn:sha1:6d4ffd6e2176e82e81033adf878cba959817336f</id>
<content type='text'>
Docker deployments were passing the host port as PORT to the container,
but the port mapping routes traffic to container port. This caused apps
that read PORT from env to listen on the wrong port inside the container.
</content>
</entry>
<entry>
<title>fix: port allocator scans existing ports to avoid collisions</title>
<updated>2026-02-19T04:46:53+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-19T04:46:53+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=7b05505db7e964e400b779f76e8a2023bda93fe1'/>
<id>urn:sha1:7b05505db7e964e400b779f76e8a2023bda93fe1</id>
<content type='text'>
- Collapse multi-line allocScript to single line (fixes SSH+sudo mangling)
- Scan /etc/ship/ports/* to find highest port in use
- Use max(next_port, highest_used + 1) to prevent collisions
- Fixes issue where stale/missing next_port caused port conflicts
</content>
</entry>
<entry>
<title>Preserve existing Caddyfiles on redeploy</title>
<updated>2026-02-17T16:09:34+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T16:09:34+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=b976b147e2e5e34b940c69fee7d7c121e12cd9a8'/>
<id>urn:sha1:b976b147e2e5e34b940c69fee7d7c121e12cd9a8</id>
<content type='text'>
Don't overwrite Caddyfile if it already exists. This preserves
manual customizations (NIP-05 routes, custom headers, etc.).

First deploy generates Caddyfile, subsequent deploys leave it alone.
</content>
</entry>
<entry>
<title>Show custom domains in ship list and status</title>
<updated>2026-02-17T16:06:00+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T16:06:00+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=c1b0bb8b149a251a5802557a8d8ab649170a83ad'/>
<id>urn:sha1:c1b0bb8b149a251a5802557a8d8ab649170a83ad</id>
<content type='text'>
Read actual domain from Caddyfile instead of assuming subdomain.
Works for both apps and static sites.
</content>
</entry>
<entry>
<title>Fix port collision bug, add --container-port flag</title>
<updated>2026-02-17T15:59:50+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T15:59:50+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=d97bb6f53eefd2139115d39bca7e17d565222472'/>
<id>urn:sha1:d97bb6f53eefd2139115d39bca7e17d565222472</id>
<content type='text'>
Port allocation:
- Use atomic flock-based allocation via /etc/ship/next_port
- Prevents race conditions when multiple deploys run concurrently
- Each app still gets its port stored in /etc/ship/ports/&lt;name&gt;

Docker container port:
- Add --container-port flag (default 80)
- Template now uses {{.ContainerPort}} instead of hardcoded 80
- Supports containers that listen on 8080, 3000, etc.
</content>
</entry>
<entry>
<title>Remove v1 code, simplify state to just base_domain</title>
<updated>2026-02-17T15:54:26+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T15:54:26+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=6b2c04728cd914f27ae62c1df0bf5df24ac9a628'/>
<id>urn:sha1:6b2c04728cd914f27ae62c1df0bf5df24ac9a628</id>
<content type='text'>
- Delete all v1 commands (deploy, init, list, status, remove, etc.)
- Delete v1 env/ and host/ subcommand directories
- Simplify state.go: remove NextPort, Apps, AllocatePort, etc.
- Local state now only tracks default_host + base_domain per host
- Ports and deploys are tracked on the server (/etc/ship/ports/)
- host init now creates minimal state.json
</content>
</entry>
<entry>
<title>Add --domain flag to v2 CLI flags</title>
<updated>2026-02-17T01:03:35+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T01:03:35+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=1abcef3197371c47c67c9238ab8ba9b185355d94'/>
<id>urn:sha1:1abcef3197371c47c67c9238ab8ba9b185355d94</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add --domain flag support to v2 deploy</title>
<updated>2026-02-17T01:02:36+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T01:02:36+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=a48a911cc29ec7571ac07008bea3801745d5c00d'/>
<id>urn:sha1:a48a911cc29ec7571ac07008bea3801745d5c00d</id>
<content type='text'>
Allows specifying a custom domain instead of using the auto-generated
subdomain pattern. Usage: ship . --domain bdw.to
</content>
</entry>
</feed>
