PageSourceSearch

https://repeat.dev/

html repeat.dev collected 2026-09-24 17:41:54 UTC 27,657 bytes, 395 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>Repeat.dev | Deploy in Seconds</title>
7    <meta name="description" content="The fastest preview engine for the agentic era. Build. Ship. Repeat.">
8    <link rel="preconnect" href="https://fonts.googleapis.com">
9    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=Fira+Code:wght@400;500;600&display=swap" rel="stylesheet">
11    <link rel="stylesheet" href="style.css">
12    <link rel="icon" type="image/svg+xml" href="favicon.svg">
13    
13<script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.45.0/min/vs/loader.js"></script>
13
14</head>
15<body>
16    <svg style="display: none;">
17        <symbol id="icon-logo" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
18            <path d="M12 2L2 7L12 12L22 7L12 2Z"/>
19            <path d="M2 17L12 22L22 17"/>
20            <path d="M2 12L12 17L22 12"/>
21        </symbol>
22        <symbol id="icon-lock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
23            <rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>
24            <path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
25        </symbol>
26        <symbol id="icon-close" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
27            <line x1="18" y1="6" x2="6" y2="18"></line>
28            <line x1="6" y1="6" x2="18" y2="18"></line>
29        </symbol>
30        <symbol id="icon-file" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
31            <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path>
32            <polyline points="13 2 13 9 20 9"></polyline>
33        </symbol>
34        <symbol id="icon-settings" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
35            <path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.1a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path>
36            <circle cx="12" cy="12" r="3"></circle>
37        </symbol>
38    </svg>
39
40    <div class="background-system">
41        <div class="grid-system"></div>
42    </div>
43
44    <header class="navbar">
45        <div class="nav-container">
46            <div class="logo">
47                <svg width="24" height="24" style="color: var(--accent-primary)"><use href="#icon-logo"/></svg>
48                <span>Repeat.dev</span>
49            </div>
50            <nav class="nav-links">
51                <a href="#features">Features</a>
52                <a href="#playground">Playground</a>
53                <a href="#cli">CLI</a>
54                <a href="https://github.com/repeatdev" target="_blank" class="btn-secondary">GitHub</a>
55            </nav>
56        </div>
57    </header>
58
59    <main>
60        <section class="hero centered">
61            <div class="hero-content centered">
62                <h1 class="hero-title">Build. Ship. <span class="text-gradient">Repeat.</span></h1>
63                <p class="hero-subtitle">Static site hosting with a powerful edge serverless runtime.<br>Go from local code to a live URL instantly.</p>
64                
65                <div class="hero-features">
66                    <div class="feature-item"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--success)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> No Auth Required</div>
67                    <div class="feature-item"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--success)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Delta Uploads</div>
68                    <div class="feature-item"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--success)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Auto-Compression</div>
69                    <div class="feature-item"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--success)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
69 Edge Runtime</div>
70                    <div class="feature-item"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--success)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Instant Previews</div>
71                    <div class="feature-item"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--success)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> MCP Ready</div>
72                </div>
73
74                <div class="cta-container">
75                    <div class="cli-box large" id="npx-box" onclick="runNpxInBrowser()" style="cursor: pointer; position: relative;" title="Click to run in live sandbox">
76                        <code>
77                            <span class="prompt">~ %</span>
78                            <span class="cmd-text" style="display:flex; gap:0.6em;">
79                                <span style="color: rgba(255,255,255,0.5)">npx</span> 
80                                <span style="color: var(--accent-primary)">@repeatdev/cli</span> 
81                                <span style="color: #fff">deploy ./dist</span> 
82                                <span style="color: #fbbf24">--ephemeral</span>
83                            </span><span class="cursor-blink"></span>
84                        </code>
85                    </div>
86                </div>
87
88                <div class="hero-links">
89                    <a class="hero-link" onclick="document.getElementById('features').scrollIntoView({behavior: 'smooth'})">
90                        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
91                        Why Repeat?
92                    </a>
93                    <a class="hero-link" onclick="document.getElementById('playground').scrollIntoView({behavior: 'smooth'})">
94                        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
95                        Live Sandbox
96                    </a>
97                </div>            </div>
98        </section>
99
100        <!-- Features Carousel -->
101        <section id="features" class="capability-section scroll-reveal" style="padding-bottom: 4rem;">
102            <div class="section-header" style="text-align: center; margin-bottom: 4rem;">
103                <h2 style="font-size: 3rem; font-weight: 900; letter-spacing: -0.05em;">Built for scale.</h2>
104                <p style="font-size: 1.2rem; color: var(--text-muted);">Designed for human teams and autonomous AI workflows. Everything you need to ship instantly.</p>
105            </div>
106            
107            <div class="features-stacked">
108    <div class="feature-row scroll-reveal">
109        <div class="feature-text-block">
110            <div class="badge" style="background: rgba(16, 185, 129, 0.1); border-color: rgba(16, 185, 129, 0.2); color: #10b981; align-self: flex-start; margin-bottom: 1rem; display: inline-block;">Performance</div>
111            <h2 style="font-size: 2.5rem; margin-bottom: 1rem; font-weight: 800; letter-spacing: -0.04em; line-height: 1.1;">Delta Uploads</h2>
112            <p style="font-size: 1.15rem; color: var(--text-muted); line-height: 1.6;">We hash your files locally and only upload what changed. Subsequent deployments are nearly instant.</p>
113        </div>
114        <div class="feature-visual-block">
115            <div class="code-card">
116
117                <div class="dim" style="margin-bottom: 0.5rem;"><span style="color: var(--accent-primary)">❯</span> npx @repeatdev/cli deploy</div>
118                <div><span style="color:var(--success)">✔</span> <span class="dim">Hashing directory</span></div>
119                <div><span style="color:var(--success)">✔</span> <span class="dim">Checking changed files</span></div>
120                <div><span style="color:var(--success)">✔</span> <span style="color:#fff">Uploaded 45KB</span> <span class="dim">(2 files)</span></div>
121                <div style="margin-top: 0.5rem;"><span style="color:var(--success)">✔</span> <span style="color:var(--accent-primary)">Deployed to production</span></div>
122        
123            </div>
124        </div>
125    </div>
126    <div class="feature-row reverse scroll-reveal">
127        <div class="feature-text-block">
128            <div class="badge" style="background: rgba(14, 165, 233, 0.1); border-color: rgba(14, 165, 233, 0.2); color: #0ea5e9; align-self: flex-start; margin-bottom: 1rem; display: inline-block;">Efficiency</div>
129            <h2 style="font-size: 2.5rem; margin-bottom: 1rem; font-weight: 800; letter-spacing: -0.04em; line-height: 1.1;">Auto-Compression</h2>
130            <p style="font-size: 1.15rem; color: var(--text-muted); line-height: 1.6;">Assets are automatically compressed during upload to drastically cut bandwidth and storage costs.</p>
131        </div>
132        <div class="feature-visual-block">
133            <div class="code-card">
134
135                <div style="display: flex; justify-content: space-between; border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 0.5rem; margin-bottom: 0.5rem;" class="dim">
136                    <span>Asset</span>
137                    <span>Size</span>
138                </div>
139                <div style="display: flex; justify-content: space-between; margin-bottom: 0.2rem;">
140                    <span>bundle.js</span>
141                    <span><span style="text-decoration: line-through; margin-right: 0.5rem;" class="dim">1.2 MB</span> <span style="color:var(--success)">245 KB</span></span>
142                </div>
143                <div style="display: flex; justify-content: space-between; margin-bottom: 0.2rem;">
144                    <span>style.css</span>
145                    <span><span style="text-decoration: line-through; margin-right: 0.5rem;" class="dim">340 KB</span> <span style="color:var(--success)">42 KB</span></span>
146                </div>
147                <div style="display: flex; justify-content: space-between; margin-bottom: 0.2rem;">
148                    <span>index.html</span>
149                    <span><span style="text-decoration: line-through; margin-right: 0.5rem;" class="dim">24 KB</span> <span style="color:var(--success)">8 KB</span></span>
150                </div>
151                <div style="display: flex; justify-content: space-between; border-top: 1px dashed rgba(255,255,255,0.1); padding-top: 0.5rem; margin-top: 0.3rem;">
152                    <span class="accent">Avg Savings</span>
153                    <span style="color:var(--success); font-weight: bold;">~81%</span>
154                </div>
155        
156            </div>
157        </div>
158    </div>
159    <div class="feature-row scroll-reveal">
160        <div class="feature-text-block">
161            <div class="badge" style="background: rgba(234, 179, 8, 0.1); border-color: rgba(234, 179, 8, 0.2); color: #eab308; align-self: flex-start; margin-bottom: 1rem; display: inline-block;">Edge Runtime</div>
162            <h2 style="font-size: 2.5rem; margin-bottom: 1rem; font-weight: 800; letter-spacing: -0.04em; line-height: 1.1;">WinterCG Compatible</h2>
163            <p style="font-size: 1.15rem; color: var(--text-muted); line-height: 1.6;">Write middleware using standard Web APIs (fetch, Request, Response). No vendor lock-in, runs instantly at the edge.</p>
164        </div>
165        <div class="feature-visual-block">
166            <div class="code-card">
167
168                <div class="dim" style="margin-bottom: 0.5rem;">// _middleware.js</div>
169                <div style="color: #c678dd;">export default function <span style="color: #61afef;">middleware</span>(request) {</div>
170                <div style="padding-left: 1rem;"><span style="color: #c678dd;">const</span> url = <span style="color: #c678dd;">new</span> URL(request.url);</div>
171                <div style="padding-left: 1rem; margin-top: 0.5rem;"><span style="color: #c678dd;">if</span> (url.pathname === <span style="color: #98c379;">'/old'</span>) {</div>
172                <div style="padding-left: 2rem;"><span style="color: #c678dd;">return</span> Response.<span style="color: #61afef;">redirect</span>(<span style="color: #98c379;">'/new'</span>, <span style="color: #d19a66;">301</span>);</div>
173                <div style="padding-left: 1rem;">}</div>
174                <div style="padding-left: 1rem; margin-top: 0.5rem;"><span style="color: #c678dd;">return</span> <span style="color: #61afef;">fetch</span>(request); <span class="dim">// Standard Fetch API</span></div>
175                <div>}</div>
176        
177            </div>
178        </div>
179    </div>
180    <div class="feature-row reverse scroll-reveal">
181        <div class="feature-text-block">
182            <div class="badge" style="background: rgba(236, 72, 153, 0.1); border-color: rgba(236, 72, 153, 0.2); color: #ec4899; align-self: flex-start; margin-bottom: 1rem; display: inline-block;">Configuration</div>
183            <h2 style="font-size: 2.5rem; margin-bottom: 1rem; font-weight: 800; letter-spacing: -0.04em; line-height: 1.1;">_headers & _redirects</h2>
184            <p style="font-size: 1.15rem; color: var(--text-muted); line-height: 1.6;">Gain fine-grained control over caching, proxies, and routing using simple, declarative text files. Zero complex configs.</p>
185        </div>
186        <div class="feature-visual-block">
187            <div class="code-card">
188
189                <div class="dim" style="margin-bottom: 0.5rem; border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 0.5rem;"># _headers</div>
190                <div><span style="color: #98c379;">/*</span></div>
191                <div style="padding-left: 1rem;"><span style="color: #61afef;">X-Frame-Options:</span> DENY</div>
192                <div style="padding-left: 1rem;"><span style="color: #61afef;">X-Content-Type-Options:</span> nosniff</div>
193                
194                <div class="dim" style="margin-top: 1rem; margin-bottom: 0.5rem; border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 0.5rem;"># _redirects (Proxying & Rewrites)</div>
195                <div style="display: flex; gap: 1rem;">
196                    <span style="color: #98c379; min-width: 80px;">/api/*</span>
197                    <span style="color: #e5c07b;">https://api.backend.com/:splat</span>
198                    <span style="color: #d19a66;">200</span>
199                </div>
200                <div style="display: flex; gap: 1rem;">
201                    <span style="color: #98c379; min-width: 80px;">/blog/*</span>
202                    <span style="color: #e5c07b;">https://my-blog.com/:splat</span>
203                    <span style="color: #d19a66;">301</span>
204                </div>
205        
206            </div>
207        </div>
208    </div>
209    <div class="feature-row scroll-reveal">
210        <div class="feature-text-block">
211            <div class="badge" style="background: rgba(249, 115, 22, 0.1); border-color: rgba(249, 115, 22, 0.2); color: #f97316; align-self: flex-start; margin-bottom: 1rem; display: inline-block;">Environments</div>
212            <h2 style="font-size: 2.5rem; margin-bottom: 1rem; font-weight: 800; letter-spacing: -0.04em; line-height: 1.1;">Deployment Tags</h2>
213            <p style="font-size: 1.15rem; color: var(--text-muted); line-height: 1.6;">Tag deployments to create isolated environments. Perfect for automated branch previews and pull requests.</p>
214        </div>
215        <div class="feature-visual-block">
216            <div class="code-card">
217
218                <div class="dim" style="margin-bottom: 0.5rem;"><span style="color: var(--accent-primary)">❯</span> repeatdev deploy ./dist --tag=pr-123</div>
219                <div><span style="color:var(--success)">✔</span> <span class="dim">Delta uploaded 12KB</span></div>
220                <div style="margin-top: 0.5rem;"><span style="color:var(--success)">✔</span> <span style="color:var(--accent-primary)">Deployed to pr-123</span></div>
221                <div class="dim" style="margin-top: 0.5rem;">🔗 https://pr-123---my-app.rpt.dev</div>
222        
223            </div>
224        </div>
225    </div>
226    <div class="feature-row reverse scroll-reveal">
227        <div class="feature-text-block">
228            <div class="badge" style="background: rgba(139, 92, 246, 0.1); border-color: rgba(139, 92, 246, 0.2); color: #8b5cf6; align-self: flex-start; margin-bottom: 1rem; display: inline-block;">Reliability</div>
229            <h2 style="font-size: 2.5rem; margin-bottom: 1rem; font-weight: 800; letter-spacing: -0.04em; line-height: 1.1;">History & Rollbacks</h2>
230            <p style="font-size: 1.15rem; color: var(--text-muted); line-height: 1.6;">Every deployment is immutable. View your entire release history and instantly rollback to any previous state.</p>
231        </div>
232        <div class="feature-visual-block">
233            <div class="code-card">
234
235                <div class="dim" style="margin-bottom: 0.5rem;"><span style="color: var(--accent-primary)">❯</span> repeatdev rollback v42</div>
236                <div><span style="color:var(--success)">✔</span> <span class="dim">Located deployment v42</span></div>
237                <div><span style="color:var(--success)">✔</span> <span class="dim">Updated production pointer</span></div>
238                <div style="margin-top: 0.5rem;"><span style="color:var(--success)">✔</span> <span style="color:var(--accent-primary)">Rolled back successfully in 45ms</span></div>
239        
240            </div>
241        </div>
242    </div>
243    <div class="feature-row scroll-reveal">
244        <div class="feature-text-block">
245            <div class="badge" style="background: rgba(244, 63, 94, 0.1); border-color: rgba(244, 63, 94, 0.2); color: #f43f5e; align-self: flex-start; margin-bottom: 1rem; display: inline-block;">AI Infrastructure</div>
246            <h2 style="font-size: 2.5rem; margin-bottom: 1rem; font-weight: 800; letter-spacing: -0.04em; line-height: 1.1;">MCP Ready</h2>
247            <p style="font-size: 1.15rem; color: var(--text-muted); line-height: 1.6;">Fully integrated with the Model Context Protocol. Autonomous agents can deploy, rollback, and manage your projects.</p>
248        </div>
249        <div class="feature-visual-block">
250            <div class="code-card">
251
252                <div class="dim" style="margin-bottom: 0.5rem;">[Claude 3.5 Sonnet]</div>
253                <div style="margin-bottom: 0.5rem;">"I've fixed the bug in the header. I will deploy a preview for you."</div>
254                <div class="dim" style="margin-top: 1rem; border-left: 2px solid var(--accent-primary); padding-left: 1rem;">
255                    <div><span style="color:var(--accent-primary)">Tool Used:</span> mcp_repeatdev_deploy</div>
256                    <div><span style="color:#fff">Target:</span> ./dist</div>
257                    <div><span style="color:#fff">Tag:</span> bugfix-header</div>
258                    <div style="color:var(--success); margin-top: 0.2rem;">Result: https://bugfix-header---my-app.rpt.dev</div>
259                </div>
260        
261            </div>
262        </div>
263    </div>
264</div>
265        </section>
266
267        <section id="playground" class="playground-section scroll-reveal">
268            <div class="section-header" style="margin-bottom: 3rem;">
269                <h2>Edit. Ship. Repeat.</h2>
270                <p>Repeat.dev is a CLI-first platform, but we built this sandbox to prove our deployment speeds.<br>Edit a file and hit <kbd class="shortcut-key">Cmd+S</kbd> to see how fast we ship.</p>
271            </div>
272
273            <div class="playground-container ide-container collapsed" id="main-ide-container">
274                <div class="ide-sidebar">
275                    <div class="sidebar-header">EXPLORER</div>
276                    <div class="file-list" id="file-list"></div>
277                </div>
278
279                <div class="pane ide-editor">
280                    <div class="editor-header" id="editor-header-tabs">
281                        <!-- Tabs will be rendered here via JS -->
282                    </div>
283                    <div class="empty-editor-state" id="empty-editor-state">
284                        <svg class="hero-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
285                            <path d="M12 2L2 7L12 12L22 7L12 2Z"/>
286                            <path d="M2 17L12 22L22 17"/>
287                            <path d="M2 12L12 17L22 12"/>
288                        </svg>
289                        <div style="text-align: center;">
290                            <h3 style="margin: 0 0 0.5rem 0; font-size: 1.4rem;">Sandbox Ready</h3>
291                            <p style="margin: 0; color: var(--text-muted); font-size: 0.95rem; line-height: 1.5;">Select a file from the explorer to open the editor and start building.</p>
292                        </div>
293                    </div>
294                    <div class="editor-container" id="monaco-container" style="width: 100%; height: 100%; background: #000;">
295                        <!-- Monaco Editor will be injected here -->
296                    </div>
297                    
298                    <div class="ide-bottom-bar" id="ide-bottom-bar" tabindex="0" onclick="deployProject()" onkeydown="if(event.key==='Enter') deployProject()">
299                        <div class="bottom-bar-prompt">
300                            <span class="prompt" style="color: var(--accent-primary); opacity: 0.8;">❯</span>
301                            <span class="command" style="display:flex; gap:0.6em;">
302                                <span style="color: rgba(255,255,255,0.5)">npx</span> 
303                                <span style="color: var(--accent-primary)">@repeatdev/cli</span> 
304                                <span style="color: #fff">deploy .</span> 
305                                <span style="color: #fbbf24" id="terminal-deploy-id">--ephemeral</span>
306                            </span>
307                        </div>
308                        <div class="bottom-bar-action">
309                            <span>Execute</span>
310                            <kbd>Enter ↵</kbd>
311                        </div>
312                    </div>
313
314                    <div class="loading-overlay" id="ide-loading">
315                        <div class="ide-terminal-view">
316                            <div class="terminal-header">
317                                <div style="display: flex; align-items: center; gap: 0.75rem;">
318                                    <span class="status-dot"></span>
319                                    <span style="color: #fff; font-weight: 600;">TERMINAL</span>
320                                </div>
321                                <button class="terminal-close" onclick="closeTerminal()">
322                                    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 6L6 18M6 6l12 12"/></svg>
323                                </button>
324                            </div>
325                            <div class="window-body" id="ide-terminal-body"></div>
326                        </div>
327                    </div>
328                </div>
329            </div>
330        </section>
331        <section id="cli" class="cli-section scroll-reveal">
332            <div class="cli-sticky-wrapper">
333                <div class="section-header">
334                    <h2>The Repeat CLI.</h2>
335                    <p>Command your projects and deployments without leaving the terminal.</p>
336                </div>
337
338                <div class="cli-container">
339                    <div class="cli-sidebar">
340                        <button class="cli-tab active" data-scenario="install" onclick="playCliScenario('install')">
341                            <div class="tab-title">Installation</div>
342                            <div class="tab-desc">Install the CLI toolset.</div>
343                        </button>
344                        <button class="cli-tab" data-scenario="login" onclick="playCliScenario('login')">
345                            <div class="tab-title">Login</div>
346                            <div class="tab-desc">Authenticate securely via browser.</div>
347                        </button>
348                        <button class="cli-tab" data-scenario="init" onclick="playCliScenario('init')">
349                            <div class="tab-title">Project Management</div>
350                            <div class="tab-desc">Bootstrap edge projects fast.</div>
351                        </button>
352                        <button class="cli-tab" data-scenario="deploy" onclick="playCliScenario('deploy')">
353                            <div class="tab-title">Deployments</div>
354                            <div class="tab-desc">Ship to production instantly.</div>
355                        </button>
356                        <button class="cli-tab" data-scenario="domains" onclick="playCliScenario('domains')">
357                            <div class="tab-title">Custom Domains</div>
358                            <div class="tab-desc">Attach domains with auto-SSL.</div>
359                        </button>
360                    </div>
361                    
362                    <div class="cli-terminal-wrapper">
363                        <div class="window-top">
364                            <div class="traffic-lights">
365                                <div class="dot red"></div>
366                                <div class="dot yellow"></div>
367                                <div class="dot green"></div>
368                            </div>
369                            <div class="window-title">bash — 80x24</div>
370                        </div>
371                        <div class="cli-terminal-content" id="cli-output">
372                            <!-- JS injected content -->
373                        </div>
374                    </div>
375                </div>
376            </div>
377        </section>
378
379    </main>
380
381    <footer>
382        <div class="footer-content">
383            <div class="footer-logo">Repeat.dev</div>
384            <div class="footer-links">
385                <a href="https://github.com/repeatdev" target="_blank">GitHub</a>
386                <a href="https://twitter.com/repeatdev" target="_blank">Twitter</a>
387                <a href="#">Privacy</a>
388            </div>
389        </div>
390        <p class="copyright">© 2026 Repeat.dev. Build. Ship. Repeat.</p>
391    </footer>
392
393    
393<script src="script.js"></script>
393
394</body>
395</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.