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>&nbsp;</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>&nbsp;</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>&nbsp;</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> &middot;
310       <a href="https://pico.sh">pico.sh</a> &middot;
311       <a href="mailto:hello@pico.sh">hello@pico.sh</a>
312     </p>