summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClawd <ai@clawd.bot>2026-02-16 12:51:53 -0800
committerClawd <ai@clawd.bot>2026-02-16 12:51:53 -0800
commit67efee3cb1b70a0696a5522609618e077cf8507d (patch)
tree40a614488f9598b65ca745e2add02d22bdb4b601
parent29ad8c336116c01b10cacdd72b36e31cd3aa08f7 (diff)
Add website/ directory with landing page
-rw-r--r--Makefile5
-rw-r--r--website/index.html215
2 files changed, 220 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index 13f2835..abab996 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,11 @@
1.PHONY: build install deploy-website
2
1build: 3build:
2 go build -o ./bin/ship ./cmd/ship 4 go build -o ./bin/ship ./cmd/ship
3 5
4install: 6install:
5 cp ./bin/ship /usr/local/bin/ 7 cp ./bin/ship /usr/local/bin/
6 8
9deploy-website:
10 ship website/ ship.northwest.io
11
diff --git a/website/index.html b/website/index.html
new file mode 100644
index 0000000..8fd1bb3
--- /dev/null
+++ b/website/index.html
@@ -0,0 +1,215 @@
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>ship — deploy to your VPS</title>
7 <style>
8 :root {
9 --bg: #f5f2eb;
10 --fg: #2c2c2c;
11 --muted: #6b6b6b;
12 --accent: #1a1a1a;
13 --border: #d4d0c8;
14 }
15
16 * { margin: 0; padding: 0; box-sizing: border-box; }
17
18 body {
19 font-family: 'JetBrains Mono', 'IBM Plex Mono', ui-monospace, monospace;
20 font-size: 16px;
21 line-height: 1.6;
22 background: var(--bg);
23 color: var(--fg);
24 }
25
26 main {
27 max-width: 640px;
28 margin: 0 auto;
29 padding: 4rem 1.5rem;
30 }
31
32 h1 {
33 font-size: 1.5rem;
34 font-weight: 600;
35 margin-bottom: 0.5rem;
36 }
37
38 .tagline {
39 color: var(--muted);
40 margin-bottom: 3rem;
41 }
42
43 section {
44 margin-bottom: 3rem;
45 }
46
47 h2 {
48 font-size: 0.875rem;
49 font-weight: 600;
50 text-transform: uppercase;
51 letter-spacing: 0.05em;
52 color: var(--muted);
53 margin-bottom: 1rem;
54 }
55
56 p {
57 margin-bottom: 1rem;
58 }
59
60 pre {
61 background: var(--accent);
62 color: var(--bg);
63 padding: 1rem 1.25rem;
64 overflow-x: auto;
65 font-size: 0.875rem;
66 line-height: 1.7;
67 margin-bottom: 1rem;
68 }
69
70 code {
71 font-family: inherit;
72 }
73
74 .comment { color: #888; }
75 .output { color: #a0a0a0; }
76
77 ul {
78 list-style: none;
79 margin-bottom: 1rem;
80 }
81
82 li {
83 padding-left: 1.25rem;
84 position: relative;
85 margin-bottom: 0.5rem;
86 }
87
88 li::before {
89 content: "—";
90 position: absolute;
91 left: 0;
92 color: var(--muted);
93 }
94
95 a {
96 color: var(--fg);
97 text-decoration: underline;
98 text-underline-offset: 2px;
99 }
100
101 a:hover {
102 color: var(--muted);
103 }
104
105 .features {
106 display: grid;
107 gap: 1.5rem;
108 margin-bottom: 1rem;
109 }
110
111 .feature {
112 border: 1px solid var(--border);
113 padding: 1rem 1.25rem;
114 }
115
116 .feature strong {
117 display: block;
118 margin-bottom: 0.25rem;
119 }
120
121 .feature span {
122 color: var(--muted);
123 font-size: 0.875rem;
124 }
125
126 footer {
127 border-top: 1px solid var(--border);
128 padding-top: 2rem;
129 color: var(--muted);
130 font-size: 0.875rem;
131 }
132 </style>
133</head>
134<body>
135 <main>
136 <header>
137 <h1>ship</h1>
138 <p class="tagline">Deploy code to your VPS. Get a URL back.</p>
139 </header>
140
141 <section>
142 <h2>What it does</h2>
143 <p>Point ship at a directory or binary. It figures out what you're deploying, uploads it, configures HTTPS, and gives you a URL. No containers required. No YAML. No config files.</p>
144 <p>Built for AI agents. JSON output by default, predictable behavior, and an <a href="https://github.com/bdw/ship/tree/main/skill">agent skill</a> so your assistant can deploy code without hand-holding.</p>
145 </section>
146
147 <section>
148 <h2>Usage</h2>
149 <pre><span class="comment"># static site</span>
150ship ./dist
151<span class="output">→ https://ship-a1b2c3.example.com</span>
152
153<span class="comment"># with a name</span>
154ship ./dist --name docs
155<span class="output">→ https://docs.example.com</span>
156
157<span class="comment"># binary with health check</span>
158ship ./myapp --name api --health /healthz
159<span class="output">→ https://api.example.com</span>
160
161<span class="comment"># temporary preview (auto-deletes)</span>
162ship ./preview --ttl 1h
163<span class="output">→ https://ship-x7y8z9.example.com (expires in 1h)</span>
164
165<span class="comment"># custom domain</span>
166ship ./site --domain myapp.com
167<span class="output">→ https://myapp.com</span></pre>
168 </section>
169
170 <section>
171 <h2>Features</h2>
172 <div class="features">
173 <div class="feature">
174 <strong>Auto-detection</strong>
175 <span>Static sites, Docker apps, binaries — ship figures it out.</span>
176 </div>
177 <div class="feature">
178 <strong>Automatic HTTPS</strong>
179 <span>Caddy handles certificates. You get HTTPS by default.</span>
180 </div>
181 <div class="feature">
182 <strong>TTL support</strong>
183 <span>Temporary deploys that clean themselves up.</span>
184 </div>
185 <div class="feature">
186 <strong>JSON output</strong>
187 <span>Built for scripts and automation. Parseable by default.</span>
188 </div>
189 </div>
190 </section>
191
192 <section>
193 <h2>One-time setup</h2>
194 <pre><span class="comment"># point ship at your VPS</span>
195ship host init user@your-server --domain example.com</pre>
196 <p>That's it. No manual VPS configuration. Init installs everything — Caddy, Docker, systemd services, SSH keys. Just bring a fresh VPS with SSH access (Ubuntu/Debian).</p>
197 </section>
198
199 <section>
200 <h2>Commands</h2>
201 <ul>
202 <li><code>ship &lt;path&gt;</code> — deploy</li>
203 <li><code>ship list</code> — show all deployments</li>
204 <li><code>ship status &lt;name&gt;</code> — check a deployment</li>
205 <li><code>ship logs &lt;name&gt;</code> — view logs</li>
206 <li><code>ship remove &lt;name&gt;</code> — take it down</li>
207 </ul>
208 </section>
209
210 <footer>
211 <p>Built for people who just want to put things on the internet.</p>
212 </footer>
213 </main>
214</body>
215</html>