# Ship Site

> Website shipping discipline — how every static site gets packaged, versioned, and deployed without overwriting live work. Use whenever finishing, packaging, zipping, or deploying any website or microsite; whenever the user says "ship it", "deploy", "push it live", "give me a zip", or "put it on Netlify". Prevents deploy-sync disasters that wipe live sites.

- Skill: `danielonpurpose/ship-site` (Agent Skill)
- Install (CLI): `npx skillmds@latest add danielonpurpose/ship-site`
- Raw SKILL.md: https://api.skillmd.com/api/skills/danielonpurpose/ship-site/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: DanielOnPurpose (https://skillmd.com/u/danielonpurpose)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/danielonpurpose/ship-site

---


# Ship Site

Deploy accidents happen when there's no single source of truth between the local folder, git, and the host. These rules exist so a stale build never overwrites a live site.

## The standing rules (never re-litigate)

1. **Git is the source of truth.** Every site lives in a git repo. Commit and push after every meaningful change — it costs nothing and is always safe.
2. **Deploy ONLY on explicit command.** Never auto-deploy. Until the user says "push it" / "deploy it", build and commit only.
3. **Before ANY deploy, verify you're shipping the current version:**
   - `git status` must be clean and pushed.
   - Confirm the folder being deployed is the one just worked on (echo the absolute path and last-modified time of `index.html`).
   - If a live site already exists, fetch it and diff a key page against local before overwriting. If they've diverged unexpectedly, STOP and show the difference.
4. **Manual host drops: drag the FOLDER, not the zip** (zips often 404). Say this every time a manual drop is involved.
5. **After deploy, verify live** — fetch the live URL and confirm it matches the local build (title, hero copy, a changed element). Never report "deployed" without checking.

## Packaging for handoff

1. Zip the site folder to a clear path (e.g. `~/Desktop/<site-name>.zip`).
2. Keep the unzipped folder available too (for a manual host drop).
3. Reveal it in the file manager and state the absolute path in the final message.

## Connecting a domain (the #1 time sink — do it this way)

- **One step at a time.** Give exactly ONE instruction, then ask "tell me what you see" before the next. Never dump a 10-step list.
- Identify the registrar first (whois or ask), then follow the right DNS path (A record + CNAME for www).
- On the host side: add the custom domain → verify → **wait for the SSL certificate** before declaring done.
- Forms: confirm form detection post-deploy, set notification emails, then **send a test submission** and confirm receipt before closing out.

## Wrap-up

Every finished site gets docs saved to the repo (`PRD.md`, `BRAND-GUIDE.md`, `DEV-NOTES.md`), then invoke the `wrap-session` skill.

