Commit 766f8b9

Eric Bower  ·  2026-05-17 14:05:44 -0400 EDT
parent c2a54b5
docs: copy
1 files changed,  +166, -43
+166, -43
......@@ -3,10 +3,10 @@
33 <head>
44 <meta charset="UTF-8">
55 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6-<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>
77 <style>
88 /* ============================================================
9- pici landing page — terminal aesthetic
9+ pici landing page – terminal aesthetic
1010 Palette: Catppuccin Mocha + terminal green accents
1111 ============================================================ */
1212
......@@ -514,6 +514,57 @@ code {
514514 color: var(--text-dim);
515515 font-size: 1.2rem;
516516 }
517+
518+/* ============================================================
519+ Details / FAQ
520+ ============================================================ */
521+
522+details {
523+ background: var(--bg-deep);
524+ border: 1px solid var(--surface);
525+ border-radius: 8px;
526+ margin-bottom: 1rem;
527+}
528+
529+details[open] {
530+ border-color: var(--green);
531+}
532+
533+details summary {
534+ padding: 1rem 1.25rem;
535+ cursor: pointer;
536+ font-weight: 600;
537+ color: var(--text);
538+ list-style: none;
539+ display: flex;
540+ align-items: center;
541+}
542+
543+details summary::-webkit-details-marker {
544+ display: none;
545+}
546+
547+details summary::before {
548+ content: "+";
549+ margin-right: 0.75rem;
550+ color: var(--green);
551+ font-weight: 700;
552+ font-size: 1.1rem;
553+}
554+
555+details[open] summary::before {
556+ content: "-";
557+}
558+
559+details summary:hover {
560+ color: var(--green);
561+}
562+
563+details .faq-answer {
564+ padding: 0 1.25rem 1.25rem;
565+ color: var(--text-dim);
566+ line-height: 1.7;
567+}
517568 </style>
518569 </head>
519570 <body>
......@@ -528,6 +579,7 @@ code {
528579 <li><a href="#how">How</a></li>
529580 <li><a href="#infra">Infra</a></li>
530581 <li><a href="#features">Features</a></li>
582+ <li><a href="#faq">FAQ</a></li>
531583 <li><a href="#beta">Beta</a></li>
532584 </ul>
533585 </div>
......@@ -545,13 +597,12 @@ code {
545597 </p>
546598 <div class="cta-row">
547599 <a href="#beta" class="btn btn-primary">Sign Up for Beta</a>
548- <a href="https://github.com/picosh/pici" class="btn btn-secondary">View on GitHub</a>
549600 </div>
550601 </div>
551602 </section>
552603
553604 <!-- ============================================================
554- PROBLEM — The CI Pain
605+ PROBLEM – The CI Pain
555606 ============================================================ -->
556607 <section id="problem">
557608 <div class="container">
......@@ -592,7 +643,7 @@ code {
592643 </section>
593644
594645 <!-- ============================================================
595- SOLUTION — Attach
646+ SOLUTION – Attach
596647 ============================================================ -->
597648 <section id="how">
598649 <div class="container">
......@@ -630,7 +681,7 @@ code {
630681 <div class="output">$ go test ./...</div>
631682 <div class="output">ok myapp/core 8.2s</div>
632683 <div class="error">FAIL myapp/api 11.4s</div>
633- <div class="error">Error: dial tcp 10.0.1.5:5432 — connection refused</div>
684+ <div class="error">Error: dial tcp 10.0.1.5:5432: connection refused</div>
634685 <div>&nbsp;</div>
635686 <div><span class="comment"># ↑ you're in the live session</span></div>
636687 <div><span class="comment"># ↑ press ↑ + Enter to rerun, or inspect freely</span></div>
......@@ -650,7 +701,7 @@ code {
650701 </section>
651702
652703 <!-- ============================================================
653- JOB ENGINE — zmx as the parallel task runner
704+ JOB ENGINE – zmx as the parallel task runner
654705 ============================================================ -->
655706 <section id="engine">
656707 <div class="container">
......@@ -741,30 +792,28 @@ code {
741792 </section>
742793
743794 <!-- ============================================================
744- SELF-HOST OR MANAGED
795+ MANAGED SERVICE
745796 ============================================================ -->
746797 <section id="cd">
747798 <div class="container">
748- <p class="section-label">Deployment</p>
749- <h2>Self-host or use our managed service.</h2>
799+ <p class="section-label">Managed Service</p>
800+ <h2>Managed CI at <a href="https://ci.pico.sh">ci.pico.sh</a>.</h2>
750801 <div class="two-col">
751- <div class="terminal">
752- <div class="terminal-bar">
753- <span class="dot red"></span>
754- <span class="dot yellow"></span>
755- <span class="dot green"></span>
756- <span style="margin-left: 0.5rem;">self-hosted</span>
757- </div>
758- <div class="terminal-body">
759- <div><span class="prompt">$ </span><span class="cmd">go build -o pici .</span></div>
760- <div><span class="prompt">$ </span><span class="cmd">./pici runner --event '...'</span></div>
761- <div><span class="info">🚀 starting job ci.myrepo.a3f2b8c1</span></div>
762- <div><span class="info">📦 syncing workspace</span></div>
763- <div><span class="info">✅ workspace ready</span></div>
764- <div><span class="info">🔍 found pico.sh</span></div>
765- <div><span class="info">🏃 launching sessions...</span></div>
766- <div><span class="info">✅ job launched</span></div>
767- </div>
802+ <div>
803+ <p>
804+ Trigger builds by publishing events over SSH. Your pipeline runs as real terminal
805+ sessions you can attach to. No web console, no API keys, no OAuth.
806+ </p>
807+ <p>
808+ The managed service runs on our own hardware, not a cloud provider. Self-hosted
809+ is coming once the source is ready.
810+ </p>
811+ <ul class="check-list">
812+ <li>SSH keys are your auth</li>
813+ <li>SSH pubsub is your event bus</li>
814+ <li>Our hardware, not a hyperscaler</li>
815+ <li>Self-hosted coming soon</li>
816+ </ul>
768817 </div>
769818 <div class="terminal">
770819 <div class="terminal-bar">
......@@ -774,7 +823,7 @@ code {
774823 <span style="margin-left: 0.5rem;">ci.pico.sh</span>
775824 </div>
776825 <div class="terminal-body">
777- <div><span class="prompt">$ </span><span class="cmd">echo '{"type":"release"}' | ssh pipe.pico.sh pub build.event</span></div>
826+ <div><span class="prompt">$ </span><span class="cmd">echo '{"type":"push"}' | ssh pipe.pico.sh pub build.event</span></div>
778827 <div><span class="output">subscribe to this channel: ssh pipe.pico.sh sub build.event</span></div>
779828 <div>&nbsp;</div>
780829 <div><span class="info">🚀 starting job ci.myrepo.a3f2b8c1</span></div>
......@@ -782,20 +831,9 @@ code {
782831 <div><span class="info">✅ workspace ready</span></div>
783832 <div><span class="info">🏃 launching sessions...</span></div>
784833 <div><span class="info">✅ job launched</span></div>
785- <div>&nbsp;</div>
786- <div><span class="comment"># same pico.sh, same zmx sessions</span></div>
787- <div><span class="comment"># same attachable debugging</span></div>
788834 </div>
789835 </div>
790836 </div>
791- <p style="text-align:center; margin-top: 1.5rem; color: var(--text-dim);">
792- Same <code>pico.sh</code>. Same <code>zmx attach</code>. Same experience. Your infra or ours.
793- </p>
794- <div style="text-align:center; margin-top: 1rem;">
795- <span style="background: var(--surface); padding: 0.3rem 0.8rem; border-radius: 4px; font-size: 0.85rem; color: var(--yellow);">
796- Bring your own isolation: docker, namespaces, bare metal. You choose.
797- </span>
798- </div>
799837 </div>
800838 </section>
801839
......@@ -985,14 +1023,100 @@ code {
9851023 </section>
9861024
9871025 <!-- ============================================================
988- CTA — Sign up for beta
1026+ FAQ
1027+ ============================================================ -->
1028+<section id="faq">
1029+ <div class="container" style="max-width: 720px; margin: 0 auto;">
1030+ <p class="section-label">FAQ</p>
1031+ <h2>Frequently asked questions.</h2>
1032+
1033+ <details>
1034+ <summary>Where's the source code?</summary>
1035+ <div class="faq-answer">
1036+ <p>
1037+ It's coming. <code>pici</code> is still in early development and not yet ready for public
1038+ review. We'll open-source everything when the API, runner, and tooling are stable enough
1039+ to be useful. Sign up for the beta below to get notified.
1040+ </p>
1041+ </div>
1042+ </details>
1043+
1044+ <details>
1045+ <summary>Can I self-host?</summary>
1046+ <div class="faq-answer">
1047+ <p>
1048+ Yes, self-hosting is a core goal. Once the source is released you'll be able to run
1049+ <code>pici</code> on your own infra with your own isolation strategy: docker, namespaces,
1050+ bare metal. You choose.
1051+ </p>
1052+ </div>
1053+ </details>
1054+
1055+ <details>
1056+ <summary>How is this different from GitHub Actions, Jenkins, etc.?</summary>
1057+ <div class="faq-answer">
1058+ <p>
1059+ Every build step in <code>pici</code> runs as a real terminal session (PTY) you can attach to.
1060+ No "re-run with SSH" button, no waiting for a tunnel. A test fails? Jump into the session,
1061+ press <code>↑</code> + <code>Enter</code> to rerun the command, inspect the environment,
1062+ fix the issue. Your pipeline is a bash script, same commands locally and in CI.
1063+ </p>
1064+ </div>
1065+ </details>
1066+
1067+ <details>
1068+ <summary>How much does it cost?</summary>
1069+ <div class="faq-answer">
1070+ <p>
1071+ The managed service at <code>ci.pico.sh</code> requires <a href="https://cd.pico.sh">cd.pico.sh</a>
1072+ hosting. Pricing is TBD and will be announced with the beta. Self-hosted is free.
1073+ </p>
1074+ </div>
1075+ </details>
1076+
1077+ <details>
1078+ <summary>How are secrets handled?</summary>
1079+ <div class="faq-answer">
1080+ <p>
1081+ Secrets are managed through <a href="https://cd.pico.sh">cd.pico.sh</a>'s environment variable
1082+ system. Inject them into your build sessions the same way you'd set any env var. No secret
1083+ scanning, no vault, no extra tooling.
1084+ </p>
1085+ </div>
1086+ </details>
1087+
1088+ <details>
1089+ <summary>How do I trigger builds?</summary>
1090+ <div class="faq-answer">
1091+ <p>
1092+ Publish an event to <code>pipe.pico.sh</code> on the <code>build.event</code> channel with a
1093+ JSON payload containing the event type and workspace. Git post-receive hooks are the common
1094+ pattern, but anything that can SSH can trigger a build: cron, webhooks, file watchers, a button press.
1095+ </p>
1096+ </div>
1097+ </details>
1098+
1099+ <details>
1100+ <summary>Can I use my own runners?</summary>
1101+ <div class="faq-answer">
1102+ <p>
1103+ Yes, it's a first-class citizen. Bring your own hardware, your own isolation strategy: docker,
1104+ namespaces, bare metal. The same <code>pico.sh</code> and <code>zmx</code> sessions work
1105+ identically whether you run on your infra or ours.
1106+ </p>
1107+ </div>
1108+ </details>
1109+ </div>
1110+</section>
1111+
1112+<!-- ============================================================
1113+ CTA – Sign up for beta
9891114 ============================================================ -->
9901115 <section class="cta-section" id="beta">
9911116 <div class="container">
9921117 <h2>Get early access to <code>pici</code>.</h2>
9931118 <p class="subtitle">
994- We're opening the managed beta at <code>ci.pico.sh</code>.<br>
995- Self-hosted is available now on <a href="https://github.com/picosh/pici">GitHub</a>.
1119+ We're opening the managed beta at <code>ci.pico.sh</code>.
9961120 </p>
9971121 <form class="signup-form" method="POST" action="/pgs/forms/pici-beta">
9981122 <input type="email" name="email" placeholder="you@example.com" required autocomplete="email">
......@@ -1008,7 +1132,6 @@ code {
10081132 <footer>
10091133 <div class="container">
10101134 <p>
1011- <a href="https://github.com/picosh/pici">GitHub</a> &middot;
10121135 <a href="https://pico.sh">pico.sh</a> &middot;
10131136 <a href="mailto:hello@pico.sh">hello@pico.sh</a>
10141137 </p>