···
7
-
} from '@public/components/ui/card'
8
-
import { Badge } from '@public/components/ui/badge'
9
-
import { ExternalLink } from 'lucide-react'
10
-
import { CodeBlock } from '@public/components/ui/code-block'
7
+
} from "@public/components/ui/card";
8
+
import { Badge } from "@public/components/ui/badge";
9
+
import { ExternalLink } from "lucide-react";
10
+
import { CodeBlock } from "@public/components/ui/code-block";
export function CLITab() {
14
-
<div className="space-y-4 min-h-[400px]">
17
-
<div className="flex items-center gap-2 mb-2">
18
-
<CardTitle>Wisp CLI Tool</CardTitle>
19
-
<Badge variant="secondary" className="text-xs">v0.2.0</Badge>
20
-
<Badge variant="outline" className="text-xs">Alpha</Badge>
23
-
Deploy static sites directly from your terminal
26
-
<CardContent className="space-y-6">
27
-
<div className="prose prose-sm max-w-none dark:prose-invert">
28
-
<p className="text-sm text-muted-foreground">
29
-
The Wisp CLI is a command-line tool for deploying static websites directly to your AT Protocol account.
30
-
Authenticate with app password or OAuth and deploy from CI/CD pipelines.
14
+
<div className="space-y-4 min-h-[400px]">
17
+
<div className="flex items-center gap-2 mb-2">
18
+
<CardTitle>Wisp CLI Tool</CardTitle>
19
+
<Badge variant="secondary" className="text-xs">
22
+
<Badge variant="outline" className="text-xs">
27
+
Deploy static sites directly from your terminal
30
+
<CardContent className="space-y-6">
31
+
<div className="prose prose-sm max-w-none dark:prose-invert">
32
+
<p className="text-sm text-muted-foreground">
33
+
The Wisp CLI is a command-line tool for deploying static websites
34
+
directly to your AT Protocol account. Authenticate with app
35
+
password or OAuth and deploy from CI/CD pipelines.
34
-
<div className="space-y-3">
35
-
<h3 className="text-sm font-semibold">Features</h3>
36
-
<ul className="text-sm text-muted-foreground space-y-2 list-disc list-inside">
37
-
<li><strong>Deploy:</strong> Push static sites directly from your terminal</li>
38
-
<li><strong>Pull:</strong> Download sites from the PDS for development or backup</li>
39
-
<li><strong>Serve:</strong> Run a local server with real-time firehose updates</li>
39
+
<div className="space-y-3">
40
+
<h3 className="text-sm font-semibold">Features</h3>
41
+
<ul className="text-sm text-muted-foreground space-y-2 list-disc list-inside">
43
+
<strong>Deploy:</strong> Push static sites directly from your
47
+
<strong>Pull:</strong> Download sites from the PDS for
48
+
development or backup
51
+
<strong>Serve:</strong> Run a local server with real-time
43
-
<div className="space-y-3">
44
-
<h3 className="text-sm font-semibold">Download v0.2.0</h3>
45
-
<div className="grid gap-2">
46
-
<div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border">
48
-
href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-aarch64-darwin"
50
-
rel="noopener noreferrer"
51
-
className="flex items-center justify-between mb-2"
53
-
<span className="font-mono text-sm">macOS (Apple Silicon)</span>
54
-
<ExternalLink className="w-4 h-4 text-muted-foreground" />
56
-
<div className="text-xs text-muted-foreground">
57
-
<span className="font-mono">SHA-1: a8c27ea41c5e2672bfecb3476ece1c801741d759</span>
60
-
<div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border">
62
-
href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-aarch64-linux"
64
-
rel="noopener noreferrer"
65
-
className="flex items-center justify-between mb-2"
67
-
<span className="font-mono text-sm">Linux (ARM64)</span>
68
-
<ExternalLink className="w-4 h-4 text-muted-foreground" />
70
-
<div className="text-xs text-muted-foreground">
71
-
<span className="font-mono">SHA-1: fd7ee689c7600fc953179ea755b0357c8481a622</span>
74
-
<div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border">
76
-
href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-x86_64-linux"
78
-
rel="noopener noreferrer"
79
-
className="flex items-center justify-between mb-2"
81
-
<span className="font-mono text-sm">Linux (x86_64)</span>
82
-
<ExternalLink className="w-4 h-4 text-muted-foreground" />
84
-
<div className="text-xs text-muted-foreground">
85
-
<span className="font-mono">SHA-1: 8bca6992559e19e1d29ab3d2fcc6d09b28e5a485</span>
88
-
<div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border">
90
-
href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-x86_64-windows.exe"
92
-
rel="noopener noreferrer"
93
-
className="flex items-center justify-between mb-2"
95
-
<span className="font-mono text-sm">Windows (x86_64)</span>
96
-
<ExternalLink className="w-4 h-4 text-muted-foreground" />
98
-
<div className="text-xs text-muted-foreground">
99
-
<span className="font-mono">SHA-1: 90ea3987a06597fa6c42e1df9009e9758e92dd54</span>
57
+
<div className="space-y-3">
58
+
<h3 className="text-sm font-semibold">Download v0.2.0</h3>
59
+
<div className="grid gap-2">
60
+
<div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border">
62
+
href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-aarch64-darwin"
64
+
rel="noopener noreferrer"
65
+
className="flex items-center justify-between mb-2"
67
+
<span className="font-mono text-sm">
68
+
macOS (Apple Silicon)
70
+
<ExternalLink className="w-4 h-4 text-muted-foreground" />
72
+
<div className="text-xs text-muted-foreground">
73
+
<span className="font-mono">
74
+
SHA-1: 9281454860f2eb07b39b80f7a9cc8e9bdcff491b
78
+
<div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border">
80
+
href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-aarch64-linux"
82
+
rel="noopener noreferrer"
83
+
className="flex items-center justify-between mb-2"
85
+
<span className="font-mono text-sm">Linux (ARM64)</span>
86
+
<ExternalLink className="w-4 h-4 text-muted-foreground" />
88
+
<div className="text-xs text-muted-foreground">
89
+
<span className="font-mono">
90
+
SHA-1: d460863150c4c162b7e7e3801a67746da3aaf9d9
94
+
<div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border">
96
+
href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-x86_64-linux"
98
+
rel="noopener noreferrer"
99
+
className="flex items-center justify-between mb-2"
101
+
<span className="font-mono text-sm">Linux (x86_64)</span>
102
+
<ExternalLink className="w-4 h-4 text-muted-foreground" />
104
+
<div className="text-xs text-muted-foreground">
105
+
<span className="font-mono">
106
+
SHA-1: 94968abed20422df826b78c38cb506dd4b1b5885
110
+
<div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border">
112
+
href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-x86_64-windows.exe"
114
+
rel="noopener noreferrer"
115
+
className="flex items-center justify-between mb-2"
117
+
<span className="font-mono text-sm">Windows (x86_64)</span>
118
+
<ExternalLink className="w-4 h-4 text-muted-foreground" />
120
+
<div className="text-xs text-muted-foreground">
121
+
<span className="font-mono">
122
+
SHA-1: 45293e47da38b97ef35258a08cb2682eee64a659
105
-
<div className="space-y-3">
106
-
<h3 className="text-sm font-semibold">Deploy a Site</h3>
108
-
code={`# Download and make executable
129
+
<div className="space-y-3">
130
+
<h3 className="text-sm font-semibold">Deploy a Site</h3>
132
+
code={`# Download and make executable
curl -O https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-aarch64-darwin
chmod +x wisp-cli-aarch64-darwin
···
# Your site will be available at:
# https://sites.wisp.place/your-handle/my-site`}
124
-
<div className="space-y-3">
125
-
<h3 className="text-sm font-semibold">Pull a Site from PDS</h3>
126
-
<p className="text-xs text-muted-foreground">
127
-
Download a site from the PDS to your local machine (uses OAuth authentication):
130
-
code={`# Pull a site to a specific directory
148
+
<div className="space-y-3">
149
+
<h3 className="text-sm font-semibold">Pull a Site from PDS</h3>
150
+
<p className="text-xs text-muted-foreground">
151
+
Download a site from the PDS to your local machine (uses OAuth
155
+
code={`# Pull a site to a specific directory
wisp-cli pull your-handle.bsky.social \\
···
# Opens browser for OAuth authentication on first run`}
144
-
<div className="space-y-3">
145
-
<h3 className="text-sm font-semibold">Serve a Site Locally with Real-Time Updates</h3>
146
-
<p className="text-xs text-muted-foreground">
147
-
Run a local server that monitors the firehose for real-time updates (uses OAuth authentication):
150
-
code={`# Serve on http://localhost:8080 (default)
169
+
<div className="space-y-3">
170
+
<h3 className="text-sm font-semibold">
171
+
Serve a Site Locally with Real-Time Updates
173
+
<p className="text-xs text-muted-foreground">
174
+
Run a local server that monitors the firehose for real-time
175
+
updates (uses OAuth authentication):
178
+
code={`# Serve on http://localhost:8080 (default)
wisp-cli serve your-handle.bsky.social \\
···
# Downloads site, serves it, and watches firehose for live updates!`}
164
-
<div className="space-y-3">
165
-
<h3 className="text-sm font-semibold">CI/CD with Tangled Spindle</h3>
166
-
<p className="text-xs text-muted-foreground">
167
-
Deploy automatically on every push using{' '}
169
-
href="https://blog.tangled.org/ci"
171
-
rel="noopener noreferrer"
172
-
className="text-accent hover:underline"
192
+
<div className="space-y-3">
193
+
<h3 className="text-sm font-semibold">
194
+
CI/CD with Tangled Spindle
196
+
<p className="text-xs text-muted-foreground">
197
+
Deploy automatically on every push using{" "}
199
+
href="https://blog.tangled.org/ci"
201
+
rel="noopener noreferrer"
202
+
className="text-accent hover:underline"
178
-
<div className="space-y-4">
180
-
<h4 className="text-xs font-semibold mb-2 flex items-center gap-2">
181
-
<span>Example 1: Simple Asset Publishing</span>
182
-
<Badge variant="secondary" className="text-xs">Copy Files</Badge>
208
+
<div className="space-y-4">
210
+
<h4 className="text-xs font-semibold mb-2 flex items-center gap-2">
211
+
<span>Example 1: Simple Asset Publishing</span>
212
+
<Badge variant="secondary" className="text-xs">
···
#Deployed site 'myWebbedSite': at://did:plc:ttdrpj45ibqunmfhdsb4zdwq/place.wisp.fs/myWebbedSite
#Available at: https://sites.wisp.place/did:plc:ttdrpj45ibqunmfhdsb4zdwq/myWebbedSite
229
-
<h4 className="text-xs font-semibold mb-2 flex items-center gap-2">
230
-
<span>Example 2: React/Vite Build & Deploy</span>
231
-
<Badge variant="secondary" className="text-xs">Full Build</Badge>
261
+
<h4 className="text-xs font-semibold mb-2 flex items-center gap-2">
262
+
<span>Example 2: React/Vite Build & Deploy</span>
263
+
<Badge variant="secondary" className="text-xs">
···
--password "$WISP_APP_PASSWORD"`}
287
-
<div className="p-3 bg-muted/30 rounded-lg border-l-4 border-accent">
288
-
<p className="text-xs text-muted-foreground">
289
-
<strong className="text-foreground">Note:</strong> Set <code className="px-1.5 py-0.5 bg-background rounded text-xs">WISP_APP_PASSWORD</code> as a secret in your Tangled Spindle repository settings.
290
-
Generate an app password from your AT Protocol account settings.
321
+
<div className="p-3 bg-muted/30 rounded-lg border-l-4 border-accent">
322
+
<p className="text-xs text-muted-foreground">
323
+
<strong className="text-foreground">Note:</strong> Set{" "}
324
+
<code className="px-1.5 py-0.5 bg-background rounded text-xs">
327
+
as a secret in your Tangled Spindle repository settings.
328
+
Generate an app password from your AT Protocol account settings.
295
-
<div className="space-y-3">
296
-
<h3 className="text-sm font-semibold">Learn More</h3>
297
-
<div className="grid gap-2">
299
-
href="https://docs.wisp.place/cli"
301
-
rel="noopener noreferrer"
302
-
className="flex items-center justify-between p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border"
304
-
<span className="text-sm">CLI Documentation</span>
305
-
<ExternalLink className="w-4 h-4 text-muted-foreground" />
308
-
href="https://tangled.org/@nekomimi.pet/wisp.place-monorepo/tree/main/cli"
310
-
rel="noopener noreferrer"
311
-
className="flex items-center justify-between p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border"
313
-
<span className="text-sm">Source Code</span>
314
-
<ExternalLink className="w-4 h-4 text-muted-foreground" />
317
-
href="https://blog.tangled.org/ci"
319
-
rel="noopener noreferrer"
320
-
className="flex items-center justify-between p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border"
322
-
<span className="text-sm">Tangled Spindle CI/CD</span>
323
-
<ExternalLink className="w-4 h-4 text-muted-foreground" />
333
+
<div className="space-y-3">
334
+
<h3 className="text-sm font-semibold">Learn More</h3>
335
+
<div className="grid gap-2">
337
+
href="https://docs.wisp.place/cli"
339
+
rel="noopener noreferrer"
340
+
className="flex items-center justify-between p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border"
342
+
<span className="text-sm">CLI Documentation</span>
343
+
<ExternalLink className="w-4 h-4 text-muted-foreground" />
346
+
href="https://tangled.org/@nekomimi.pet/wisp.place-monorepo/tree/main/cli"
348
+
rel="noopener noreferrer"
349
+
className="flex items-center justify-between p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border"
351
+
<span className="text-sm">Source Code</span>
352
+
<ExternalLink className="w-4 h-4 text-muted-foreground" />
355
+
href="https://blog.tangled.org/ci"
357
+
rel="noopener noreferrer"
358
+
className="flex items-center justify-between p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border"
360
+
<span className="text-sm">Tangled Spindle CI/CD</span>
361
+
<ExternalLink className="w-4 h-4 text-muted-foreground" />