9344a85 ←2db7cadantonApr 10, 2026 api

rename to popssh.com

M /anton/undefined
binary file or content unavailable
A /anton/undefined +38 -0
1---
2title: Privacy Policy — popssh
3description: popssh privacy policy.
4---
5
6# privacy policy
7
8### data we collect
9
101. SSH connection details you add (host, username, port)
112. SSH keys and passwords stored locally in macOS Keychain
123. App preferences stored locally on your device
13
14### where data is stored
15
16all data is stored locally on your device. SSH keys and passwords are stored in macOS Keychain. no data is sent to our servers.
17
18### network connections
19
20popssh connects directly from your device to SSH servers you configure. we do not proxy or inspect your SSH traffic.
21
22### data deletion
23
24you can delete all app data by removing popssh from your Mac. contact <a href="mailto:hi@popssh.com">hi@popssh.com</a> with any questions.
25
26### security
27
28report security vulnerabilities to <a href="mailto:hi@popssh.com">hi@popssh.com</a>.
29
30### changes
31
32we may update this policy. changes will be posted at this URL.
33
34### contact
35
36questions about privacy: <a href="mailto:hi@popssh.com">hi@popssh.com</a>.
37
38operated by: System Operator LLC, Delaware, USA.
A /anton/undefined +4 -0
1description: "source code popssh.com"
2website: "https://popssh.com"
3features:
4 email: true
A /anton/undefined +47 -0
1---
2title: popssh — SSH client for macOS
3description: SSH client for macOS. connect, browse files, chat with agents. your SSH key is your identity.
4---
5
6<section className="section-hero">
7 <h1 className="page-title">SSH client for macOS</h1>
8 <p className="page-subtitle">
9 connect to servers, browse remote files in Finder, chat with AI agents. your SSH key is your identity.
10 </p>
11 <div className="btn-row">
12 <a href="https://apps.apple.com/us/app/popssh/id6761133769?mt=12" className="btn btn-primary">download for mac</a>
13 </div>
14</section>
15
16<div className="rainbow-divider"></div>
17
18<section className="section">
19 <div className="grid-2">
20 <div>
21 <h3 className="section-title">terminal</h3>
22 <p className="small muted">ghostty-powered terminal. SSH into any server, drag files to upload, Cmd+O to edit remote files in Zed.</p>
23 </div>
24 <div>
25 <h3 className="section-title">files in Finder</h3>
26 <p className="small muted">remote server files appear in Finder sidebar. browse, drag, edit — like a local drive.</p>
27 </div>
28 <div>
29 <h3 className="section-title">explore</h3>
30 <p className="small muted">curated directory of public SSH servers. games, communities, chat rooms. connect with one click.</p>
31 </div>
32 <div>
33 <h3 className="section-title">proxy</h3>
34 <p className="small muted">browse through any server with one click. your traffic exits from the server's location.</p>
35 </div>
36 </div>
37</section>
38
39<div className="rainbow-divider"></div>
40
41<section className="section">
42 <h3 className="section-title">coming soon</h3>
43 <p className="small muted narrow">
44 popid (SSH key identity), popchat (encrypted chat with agents), popdrop (airdrop over SSH).
45 </p>
46 <pre><code>ssh join@popssh.com</code></pre>
47</section>
A /anton/undefined +48 -0
1---
2title: Terms of Service — popssh
3description: popssh terms of service.
4---
5
6# terms of service
7
8### what popssh is
9
10popssh is a native SSH client for macOS. it lets you connect to SSH servers, run commands, and transfer files.
11
12### who can use it
13
14you must be at least 18 years old.
15
16you must read and agree to our <a href="/anton/code/sites/popssh.com/privacy">privacy policy</a>.
17
18you're responsible for keeping your SSH keys and credentials secure.
19
20### acceptable use
21
22don't use popssh to:
23
24- access systems you don't have permission to access.
25- conduct illegal activities.
26- violate the laws of the State of Delaware in the USA.
27
28### service availability
29
30popssh is provided "as is" without warranties. we can modify or discontinue the app with reasonable notice.
31
32### liability
33
34we're not liable for data loss, service interruptions, or indirect damages. you agree to indemnify and hold harmless popssh and System Operator LLC from claims arising out of your use of the app.
35
36### changes to terms
37
38we may update these terms. changes will be posted at this URL. continued use means you accept the new terms.
39
40### governing law
41
42these terms are governed by Delaware law, USA. disputes will be resolved in Delaware courts.
43
44### contact
45
46questions about these terms: <a href="mailto:hi@popssh.com">hi@popssh.com</a>.
47
48operated by: System Operator LLC, Delaware, USA.
A /anton/undefined +254 -0
1/* popssh.com — ported from products/_prototypes/popssh/src/popssh.com/layouts/Layout.astro */
2/* Berkeley Mono font is not served yet — falling back to system monospace */
3
4:root {
5 --color-primary: #0084ff;
6 --color-text: #111;
7 --color-text-muted: #666;
8 --color-text-light: #999;
9 --color-bg: #fff;
10 --color-bg-muted: #f5f5f5;
11 --color-border: #ddd;
12 --color-border-light: #eee;
13 --color-link: #0084ff;
14 --color-success: #22c55e;
15 --color-warning: #f59e0b;
16 --color-error: #ef4444;
17 /* rainbow brand colors */
18 --color-pop-1: #FF5A2F;
19 --color-pop-2: #FF9E1F;
20 --color-pop-3: #FFC72A;
21 --color-pop-4: #4FC46B;
22 --color-pop-5: #00B8F0;
23 --color-pop-6: #197BFF;
24 --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
25 --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
26 --font-size-base: 14px;
27 --font-size-sm: 12px;
28 --font-size-xs: 11px;
29 --max-width: 600px;
30 --page-padding: 1rem;
31 --border-radius: 4px;
32 --gap: 16px;
33 --section-padding: 1rem;
34}
35
36* { margin: 0; padding: 0; box-sizing: border-box; }
37
38html {
39 font-size: var(--font-size-base);
40 font-family: var(--font-sans);
41 line-height: 1.5;
42 color: var(--color-text);
43 background: var(--color-bg);
44}
45
46body {
47 min-height: 100vh;
48 display: flex;
49 flex-direction: column;
50 overflow-y: scroll;
51}
52
53/* Header */
54header {
55 max-width: var(--max-width);
56 margin: 0 auto;
57 padding: 0.5rem var(--page-padding);
58 width: 100%;
59}
60
61.logo {
62 font-family: var(--font-mono);
63 font-size: 20px;
64 letter-spacing: -0.5px;
65 text-decoration: none;
66}
67.logo-p { color: var(--color-pop-1); }
68.logo-o { color: var(--color-pop-2); }
69.logo-ps { color: var(--color-pop-3); }
70.logo-s { color: var(--color-pop-4); }
71.logo-ss { color: var(--color-pop-5); }
72.logo-h { color: var(--color-pop-6); }
73
74nav {
75 display: flex;
76 align-items: center;
77 justify-content: space-between;
78}
79
80nav a {
81 font-family: var(--font-mono);
82 font-size: var(--font-size-sm);
83 color: var(--color-text-muted);
84 text-decoration: none;
85}
86nav a:hover { color: var(--color-text); }
87
88.nav-links {
89 display: flex;
90 gap: var(--gap);
91 align-items: center;
92}
93
94/* Main content */
95main {
96 max-width: var(--max-width);
97 margin: 0 auto;
98 padding: 0 var(--page-padding);
99 width: 100%;
100 flex: 1;
101}
102
103/* Prose article wrapper — MDX pages are wrapped in <article class="prose"> */
104.prose { width: 100%; }
105
106/* Footer */
107footer {
108 max-width: var(--max-width);
109 margin: 0 auto;
110 padding: 2rem var(--page-padding);
111 width: 100%;
112 font-family: var(--font-mono);
113 font-size: var(--font-size-xs);
114 color: var(--color-text-light);
115}
116
117footer a {
118 color: var(--color-text-muted);
119 text-decoration: none;
120}
121footer a:hover { color: var(--color-text); }
122
123.footer-content {
124 display: flex;
125 justify-content: space-between;
126 align-items: center;
127}
128
129.footer-links {
130 display: flex;
131 gap: var(--gap);
132}
133
134/* Utilities */
135.mono { font-family: var(--font-mono); }
136.muted { color: var(--color-text-muted); }
137.small { font-size: var(--font-size-sm); }
138.narrow { max-width: 480px; }
139
140a { color: var(--color-link); text-decoration: none; }
141a:hover { opacity: 0.8; }
142
143/* Rainbow divider */
144.rainbow-divider {
145 height: 2px;
146 margin: 1rem 0 0.5rem;
147 background: linear-gradient(
148 90deg,
149 var(--color-pop-1),
150 var(--color-pop-2),
151 var(--color-pop-3),
152 var(--color-pop-4),
153 var(--color-pop-5),
154 var(--color-pop-6)
155 );
156}
157
158/* Sections */
159.section { padding: var(--section-padding) 0; }
160.section-hero { padding: var(--section-padding) 0; }
161
162/* Headings */
163.page-title {
164 font-family: var(--font-mono);
165 font-size: 24px;
166 letter-spacing: -0.5px;
167 margin-bottom: 0.25rem;
168}
169
170.section-title {
171 font-family: var(--font-mono);
172 margin-bottom: 0.5rem;
173}
174
175.page-subtitle {
176 font-size: var(--font-size-sm);
177 line-height: 1.5;
178 color: var(--color-text-muted);
179 max-width: 480px;
180}
181
182/* Buttons */
183.btn-row {
184 display: flex;
185 gap: 12px;
186 margin-top: 1.25rem;
187}
188
189.btn {
190 font-family: var(--font-mono);
191 font-size: var(--font-size-sm);
192 padding: 10px 24px;
193 border: 1px solid transparent;
194 border-radius: var(--border-radius);
195 text-decoration: none;
196 display: inline-block;
197}
198
199.btn-primary {
200 background: var(--color-text);
201 color: white;
202 border-color: var(--color-text);
203}
204.btn-primary:hover { color: white; opacity: 0.9; }
205
206.btn-secondary {
207 border-color: var(--color-border);
208 color: var(--color-text);
209 background: none;
210}
211.btn-secondary:hover { color: var(--color-text); border-color: var(--color-text-muted); }
212
213/* Grid */
214.grid-2 {
215 display: grid;
216 grid-template-columns: 1fr 1fr;
217 gap: 2rem;
218}
219
220/* Code blocks */
221code {
222 font-family: var(--font-mono);
223 font-size: var(--font-size-sm);
224 background: var(--color-bg-muted);
225 padding: 2px 6px;
226 border-radius: 3px;
227}
228
229pre {
230 font-family: var(--font-mono);
231 font-size: var(--font-size-sm);
232 background: var(--color-bg-muted);
233 padding: 12px 16px;
234 border-radius: var(--border-radius);
235 overflow-x: auto;
236 line-height: 1.6;
237 margin-top: 1rem;
238}
239pre code {
240 background: none;
241 padding: 0;
242}
243
244/* Prose pages (privacy, terms) */
245.prose h1 {
246 font-family: var(--font-mono);
247 font-size: 24px;
248 letter-spacing: -0.5px;
249 margin: 1.5rem 0 1rem;
250}
251.prose h3 { font-family: var(--font-mono); margin: 1.25rem 0 0.4rem; font-size: 14px; }
252.prose p, .prose ol, .prose ul { font-size: 13px; color: var(--color-text-muted); margin-bottom: 0.5rem; line-height: 1.6; }
253.prose ol, .prose ul { padding-left: 1.25rem; }
254.prose li { margin-bottom: 0.25rem; }
A /anton/undefined +38 -0
1import type { ReactNode } from 'react';
2
3export default function Layout({ children }: { children: ReactNode }) {
4 return (
5 <>
6 <header>
7 <nav>
8 <a href="/anton/code/sites/popssh.com" className="logo">
9 <span className="logo-p">p</span>
10 <span className="logo-o">o</span>
11 <span className="logo-ps">p</span>
12 <span className="logo-s">s</span>
13 <span className="logo-ss">s</span>
14 <span className="logo-h">h</span>
15 </a>
16 <div className="nav-links">
17 <a href="https://apps.apple.com/us/app/popssh/id6761133769?mt=12">download</a>
18 </div>
19 </nav>
20 </header>
21
22 <main>
23 <div className="rainbow-divider"></div>
24 {children}
25 </main>
26
27 <footer>
28 <div className="footer-content">
29 <span>popssh by <a href="https://systemoperator.com">system operator</a></span>
30 <div className="footer-links">
31 <a href="/anton/code/sites/popssh.com/privacy">privacy</a>
32 <a href="/anton/code/sites/popssh.com/terms">terms</a>
33 </div>
34 </div>
35 </footer>
36 </>
37 );
38}