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 @@ | |
| 3 | 3 | <head> | |
| 4 | 4 | <meta charset="UTF-8"> | |
| 5 | 5 | <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> | |
| 7 | 7 | <style> | |
| 8 | 8 | /* ============================================================ | |
| 9 | - | pici landing page — terminal aesthetic | |
| 9 | + | pici landing page – terminal aesthetic | |
| 10 | 10 | Palette: Catppuccin Mocha + terminal green accents | |
| 11 | 11 | ============================================================ */ | |
| 12 | 12 |
| ... | ... | @@ -514,6 +514,57 @@ code { | |
| 514 | 514 | color: var(--text-dim); | |
| 515 | 515 | font-size: 1.2rem; | |
| 516 | 516 | } | |
| 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 | + | } | |
| 517 | 568 | </style> | |
| 518 | 569 | </head> | |
| 519 | 570 | <body> |
| ... | ... | @@ -528,6 +579,7 @@ code { | |
| 528 | 579 | <li><a href="#how">How</a></li> | |
| 529 | 580 | <li><a href="#infra">Infra</a></li> | |
| 530 | 581 | <li><a href="#features">Features</a></li> | |
| 582 | + | <li><a href="#faq">FAQ</a></li> | |
| 531 | 583 | <li><a href="#beta">Beta</a></li> | |
| 532 | 584 | </ul> | |
| 533 | 585 | </div> |
| ... | ... | @@ -545,13 +597,12 @@ code { | |
| 545 | 597 | </p> | |
| 546 | 598 | <div class="cta-row"> | |
| 547 | 599 | <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> | |
| 549 | 600 | </div> | |
| 550 | 601 | </div> | |
| 551 | 602 | </section> | |
| 552 | 603 | ||
| 553 | 604 | <!-- ============================================================ | |
| 554 | - | PROBLEM — The CI Pain | |
| 605 | + | PROBLEM – The CI Pain | |
| 555 | 606 | ============================================================ --> | |
| 556 | 607 | <section id="problem"> | |
| 557 | 608 | <div class="container"> |
| ... | ... | @@ -592,7 +643,7 @@ code { | |
| 592 | 643 | </section> | |
| 593 | 644 | ||
| 594 | 645 | <!-- ============================================================ | |
| 595 | - | SOLUTION — Attach | |
| 646 | + | SOLUTION – Attach | |
| 596 | 647 | ============================================================ --> | |
| 597 | 648 | <section id="how"> | |
| 598 | 649 | <div class="container"> |
| ... | ... | @@ -630,7 +681,7 @@ code { | |
| 630 | 681 | <div class="output">$ go test ./...</div> | |
| 631 | 682 | <div class="output">ok myapp/core 8.2s</div> | |
| 632 | 683 | <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> | |
| 634 | 685 | <div> </div> | |
| 635 | 686 | <div><span class="comment"># ↑ you're in the live session</span></div> | |
| 636 | 687 | <div><span class="comment"># ↑ press ↑ + Enter to rerun, or inspect freely</span></div> |
| ... | ... | @@ -650,7 +701,7 @@ code { | |
| 650 | 701 | </section> | |
| 651 | 702 | ||
| 652 | 703 | <!-- ============================================================ | |
| 653 | - | JOB ENGINE — zmx as the parallel task runner | |
| 704 | + | JOB ENGINE – zmx as the parallel task runner | |
| 654 | 705 | ============================================================ --> | |
| 655 | 706 | <section id="engine"> | |
| 656 | 707 | <div class="container"> |
| ... | ... | @@ -741,30 +792,28 @@ code { | |
| 741 | 792 | </section> | |
| 742 | 793 | ||
| 743 | 794 | <!-- ============================================================ | |
| 744 | - | SELF-HOST OR MANAGED | |
| 795 | + | MANAGED SERVICE | |
| 745 | 796 | ============================================================ --> | |
| 746 | 797 | <section id="cd"> | |
| 747 | 798 | <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> | |
| 750 | 801 | <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> | |
| 768 | 817 | </div> | |
| 769 | 818 | <div class="terminal"> | |
| 770 | 819 | <div class="terminal-bar"> |
| ... | ... | @@ -774,7 +823,7 @@ code { | |
| 774 | 823 | <span style="margin-left: 0.5rem;">ci.pico.sh</span> | |
| 775 | 824 | </div> | |
| 776 | 825 | <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> | |
| 778 | 827 | <div><span class="output">subscribe to this channel: ssh pipe.pico.sh sub build.event</span></div> | |
| 779 | 828 | <div> </div> | |
| 780 | 829 | <div><span class="info">🚀 starting job ci.myrepo.a3f2b8c1</span></div> |
| ... | ... | @@ -782,20 +831,9 @@ code { | |
| 782 | 831 | <div><span class="info">✅ workspace ready</span></div> | |
| 783 | 832 | <div><span class="info">🏃 launching sessions...</span></div> | |
| 784 | 833 | <div><span class="info">✅ job launched</span></div> | |
| 785 | - | <div> </div> | |
| 786 | - | <div><span class="comment"># same pico.sh, same zmx sessions</span></div> | |
| 787 | - | <div><span class="comment"># same attachable debugging</span></div> | |
| 788 | 834 | </div> | |
| 789 | 835 | </div> | |
| 790 | 836 | </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> | |
| 799 | 837 | </div> | |
| 800 | 838 | </section> | |
| 801 | 839 |
| ... | ... | @@ -985,14 +1023,100 @@ code { | |
| 985 | 1023 | </section> | |
| 986 | 1024 | ||
| 987 | 1025 | <!-- ============================================================ | |
| 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 | |
| 989 | 1114 | ============================================================ --> | |
| 990 | 1115 | <section class="cta-section" id="beta"> | |
| 991 | 1116 | <div class="container"> | |
| 992 | 1117 | <h2>Get early access to <code>pici</code>.</h2> | |
| 993 | 1118 | <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>. | |
| 996 | 1120 | </p> | |
| 997 | 1121 | <form class="signup-form" method="POST" action="/pgs/forms/pici-beta"> | |
| 998 | 1122 | <input type="email" name="email" placeholder="you@example.com" required autocomplete="email"> |