Commit 766f8b9
Eric Bower
·
2026-05-17 14:05:44 -0400 EDT
parent c2a54b5
docs: copy
1 files changed,
+166,
-43
+166,
-43
1@@ -3,10 +3,10 @@
2 <head>
3 <meta charset="UTF-8">
4 <meta name="viewport" content="width=device-width, initial-scale=1.0">
5-<title>pici — Your Build Isn't a Log. It's a Terminal.</title>
6+<title>pici – Your Build Isn't a Log. It's a Terminal.</title>
7 <style>
8 /* ============================================================
9- pici landing page — terminal aesthetic
10+ pici landing page – terminal aesthetic
11 Palette: Catppuccin Mocha + terminal green accents
12 ============================================================ */
13
14@@ -514,6 +514,57 @@ code {
15 color: var(--text-dim);
16 font-size: 1.2rem;
17 }
18+
19+/* ============================================================
20+ Details / FAQ
21+ ============================================================ */
22+
23+details {
24+ background: var(--bg-deep);
25+ border: 1px solid var(--surface);
26+ border-radius: 8px;
27+ margin-bottom: 1rem;
28+}
29+
30+details[open] {
31+ border-color: var(--green);
32+}
33+
34+details summary {
35+ padding: 1rem 1.25rem;
36+ cursor: pointer;
37+ font-weight: 600;
38+ color: var(--text);
39+ list-style: none;
40+ display: flex;
41+ align-items: center;
42+}
43+
44+details summary::-webkit-details-marker {
45+ display: none;
46+}
47+
48+details summary::before {
49+ content: "+";
50+ margin-right: 0.75rem;
51+ color: var(--green);
52+ font-weight: 700;
53+ font-size: 1.1rem;
54+}
55+
56+details[open] summary::before {
57+ content: "-";
58+}
59+
60+details summary:hover {
61+ color: var(--green);
62+}
63+
64+details .faq-answer {
65+ padding: 0 1.25rem 1.25rem;
66+ color: var(--text-dim);
67+ line-height: 1.7;
68+}
69 </style>
70 </head>
71 <body>
72@@ -528,6 +579,7 @@ code {
73 <li><a href="#how">How</a></li>
74 <li><a href="#infra">Infra</a></li>
75 <li><a href="#features">Features</a></li>
76+ <li><a href="#faq">FAQ</a></li>
77 <li><a href="#beta">Beta</a></li>
78 </ul>
79 </div>
80@@ -545,13 +597,12 @@ code {
81 </p>
82 <div class="cta-row">
83 <a href="#beta" class="btn btn-primary">Sign Up for Beta</a>
84- <a href="https://github.com/picosh/pici" class="btn btn-secondary">View on GitHub</a>
85 </div>
86 </div>
87 </section>
88
89 <!-- ============================================================
90- PROBLEM — The CI Pain
91+ PROBLEM – The CI Pain
92 ============================================================ -->
93 <section id="problem">
94 <div class="container">
95@@ -592,7 +643,7 @@ code {
96 </section>
97
98 <!-- ============================================================
99- SOLUTION — Attach
100+ SOLUTION – Attach
101 ============================================================ -->
102 <section id="how">
103 <div class="container">
104@@ -630,7 +681,7 @@ code {
105 <div class="output">$ go test ./...</div>
106 <div class="output">ok myapp/core 8.2s</div>
107 <div class="error">FAIL myapp/api 11.4s</div>
108- <div class="error">Error: dial tcp 10.0.1.5:5432 — connection refused</div>
109+ <div class="error">Error: dial tcp 10.0.1.5:5432: connection refused</div>
110 <div> </div>
111 <div><span class="comment"># ↑ you're in the live session</span></div>
112 <div><span class="comment"># ↑ press ↑ + Enter to rerun, or inspect freely</span></div>
113@@ -650,7 +701,7 @@ code {
114 </section>
115
116 <!-- ============================================================
117- JOB ENGINE — zmx as the parallel task runner
118+ JOB ENGINE – zmx as the parallel task runner
119 ============================================================ -->
120 <section id="engine">
121 <div class="container">
122@@ -741,30 +792,28 @@ code {
123 </section>
124
125 <!-- ============================================================
126- SELF-HOST OR MANAGED
127+ MANAGED SERVICE
128 ============================================================ -->
129 <section id="cd">
130 <div class="container">
131- <p class="section-label">Deployment</p>
132- <h2>Self-host or use our managed service.</h2>
133+ <p class="section-label">Managed Service</p>
134+ <h2>Managed CI at <a href="https://ci.pico.sh">ci.pico.sh</a>.</h2>
135 <div class="two-col">
136- <div class="terminal">
137- <div class="terminal-bar">
138- <span class="dot red"></span>
139- <span class="dot yellow"></span>
140- <span class="dot green"></span>
141- <span style="margin-left: 0.5rem;">self-hosted</span>
142- </div>
143- <div class="terminal-body">
144- <div><span class="prompt">$ </span><span class="cmd">go build -o pici .</span></div>
145- <div><span class="prompt">$ </span><span class="cmd">./pici runner --event '...'</span></div>
146- <div><span class="info">🚀 starting job ci.myrepo.a3f2b8c1</span></div>
147- <div><span class="info">📦 syncing workspace</span></div>
148- <div><span class="info">✅ workspace ready</span></div>
149- <div><span class="info">🔍 found pico.sh</span></div>
150- <div><span class="info">🏃 launching sessions...</span></div>
151- <div><span class="info">✅ job launched</span></div>
152- </div>
153+ <div>
154+ <p>
155+ Trigger builds by publishing events over SSH. Your pipeline runs as real terminal
156+ sessions you can attach to. No web console, no API keys, no OAuth.
157+ </p>
158+ <p>
159+ The managed service runs on our own hardware, not a cloud provider. Self-hosted
160+ is coming once the source is ready.
161+ </p>
162+ <ul class="check-list">
163+ <li>SSH keys are your auth</li>
164+ <li>SSH pubsub is your event bus</li>
165+ <li>Our hardware, not a hyperscaler</li>
166+ <li>Self-hosted coming soon</li>
167+ </ul>
168 </div>
169 <div class="terminal">
170 <div class="terminal-bar">
171@@ -774,7 +823,7 @@ code {
172 <span style="margin-left: 0.5rem;">ci.pico.sh</span>
173 </div>
174 <div class="terminal-body">
175- <div><span class="prompt">$ </span><span class="cmd">echo '{"type":"release"}' | ssh pipe.pico.sh pub build.event</span></div>
176+ <div><span class="prompt">$ </span><span class="cmd">echo '{"type":"push"}' | ssh pipe.pico.sh pub build.event</span></div>
177 <div><span class="output">subscribe to this channel: ssh pipe.pico.sh sub build.event</span></div>
178 <div> </div>
179 <div><span class="info">🚀 starting job ci.myrepo.a3f2b8c1</span></div>
180@@ -782,20 +831,9 @@ code {
181 <div><span class="info">✅ workspace ready</span></div>
182 <div><span class="info">🏃 launching sessions...</span></div>
183 <div><span class="info">✅ job launched</span></div>
184- <div> </div>
185- <div><span class="comment"># same pico.sh, same zmx sessions</span></div>
186- <div><span class="comment"># same attachable debugging</span></div>
187 </div>
188 </div>
189 </div>
190- <p style="text-align:center; margin-top: 1.5rem; color: var(--text-dim);">
191- Same <code>pico.sh</code>. Same <code>zmx attach</code>. Same experience. Your infra or ours.
192- </p>
193- <div style="text-align:center; margin-top: 1rem;">
194- <span style="background: var(--surface); padding: 0.3rem 0.8rem; border-radius: 4px; font-size: 0.85rem; color: var(--yellow);">
195- Bring your own isolation: docker, namespaces, bare metal. You choose.
196- </span>
197- </div>
198 </div>
199 </section>
200
201@@ -985,14 +1023,100 @@ code {
202 </section>
203
204 <!-- ============================================================
205- CTA — Sign up for beta
206+ FAQ
207+ ============================================================ -->
208+<section id="faq">
209+ <div class="container" style="max-width: 720px; margin: 0 auto;">
210+ <p class="section-label">FAQ</p>
211+ <h2>Frequently asked questions.</h2>
212+
213+ <details>
214+ <summary>Where's the source code?</summary>
215+ <div class="faq-answer">
216+ <p>
217+ It's coming. <code>pici</code> is still in early development and not yet ready for public
218+ review. We'll open-source everything when the API, runner, and tooling are stable enough
219+ to be useful. Sign up for the beta below to get notified.
220+ </p>
221+ </div>
222+ </details>
223+
224+ <details>
225+ <summary>Can I self-host?</summary>
226+ <div class="faq-answer">
227+ <p>
228+ Yes, self-hosting is a core goal. Once the source is released you'll be able to run
229+ <code>pici</code> on your own infra with your own isolation strategy: docker, namespaces,
230+ bare metal. You choose.
231+ </p>
232+ </div>
233+ </details>
234+
235+ <details>
236+ <summary>How is this different from GitHub Actions, Jenkins, etc.?</summary>
237+ <div class="faq-answer">
238+ <p>
239+ Every build step in <code>pici</code> runs as a real terminal session (PTY) you can attach to.
240+ No "re-run with SSH" button, no waiting for a tunnel. A test fails? Jump into the session,
241+ press <code>↑</code> + <code>Enter</code> to rerun the command, inspect the environment,
242+ fix the issue. Your pipeline is a bash script, same commands locally and in CI.
243+ </p>
244+ </div>
245+ </details>
246+
247+ <details>
248+ <summary>How much does it cost?</summary>
249+ <div class="faq-answer">
250+ <p>
251+ The managed service at <code>ci.pico.sh</code> requires <a href="https://cd.pico.sh">cd.pico.sh</a>
252+ hosting. Pricing is TBD and will be announced with the beta. Self-hosted is free.
253+ </p>
254+ </div>
255+ </details>
256+
257+ <details>
258+ <summary>How are secrets handled?</summary>
259+ <div class="faq-answer">
260+ <p>
261+ Secrets are managed through <a href="https://cd.pico.sh">cd.pico.sh</a>'s environment variable
262+ system. Inject them into your build sessions the same way you'd set any env var. No secret
263+ scanning, no vault, no extra tooling.
264+ </p>
265+ </div>
266+ </details>
267+
268+ <details>
269+ <summary>How do I trigger builds?</summary>
270+ <div class="faq-answer">
271+ <p>
272+ Publish an event to <code>pipe.pico.sh</code> on the <code>build.event</code> channel with a
273+ JSON payload containing the event type and workspace. Git post-receive hooks are the common
274+ pattern, but anything that can SSH can trigger a build: cron, webhooks, file watchers, a button press.
275+ </p>
276+ </div>
277+ </details>
278+
279+ <details>
280+ <summary>Can I use my own runners?</summary>
281+ <div class="faq-answer">
282+ <p>
283+ Yes, it's a first-class citizen. Bring your own hardware, your own isolation strategy: docker,
284+ namespaces, bare metal. The same <code>pico.sh</code> and <code>zmx</code> sessions work
285+ identically whether you run on your infra or ours.
286+ </p>
287+ </div>
288+ </details>
289+ </div>
290+</section>
291+
292+<!-- ============================================================
293+ CTA – Sign up for beta
294 ============================================================ -->
295 <section class="cta-section" id="beta">
296 <div class="container">
297 <h2>Get early access to <code>pici</code>.</h2>
298 <p class="subtitle">
299- We're opening the managed beta at <code>ci.pico.sh</code>.<br>
300- Self-hosted is available now on <a href="https://github.com/picosh/pici">GitHub</a>.
301+ We're opening the managed beta at <code>ci.pico.sh</code>.
302 </p>
303 <form class="signup-form" method="POST" action="/pgs/forms/pici-beta">
304 <input type="email" name="email" placeholder="you@example.com" required autocomplete="email">
305@@ -1008,7 +1132,6 @@ code {
306 <footer>
307 <div class="container">
308 <p>
309- <a href="https://github.com/picosh/pici">GitHub</a> ·
310 <a href="https://pico.sh">pico.sh</a> ·
311 <a href="mailto:hello@pico.sh">hello@pico.sh</a>
312 </p>