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.