| 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"> |
| 6 | <title>Carloku — the uncompromising app platform</title> |
| 7 | <meta name="description" content="🤖 Carloku is an app hosting platform that accepts no tradeoffs. Deploy in seconds. Scale to billions. Simple commands, massive power. Cloud, hybrid, and on-prem: all first-class. Welcome to the new standard. Get ready to ship."> |
| 8 | <meta property="og:title" content="Carloku"> |
| 9 | <meta property="og:description" content="Carloku is an app hosting platform that accepts no tradeoffs. Deploy in seconds. Scale to billions. Simple commands, massive power. Cloud, hybrid, and on-prem: all first-class. Welcome to the new standard. Get ready to ship."> |
| 10 | <meta property="og:type" content="website"> |
| 11 | <meta property="og:url" content="https://carloku.com/"> |
| 12 | <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)"> |
| 13 | <meta name="theme-color" content="#0e0c13" media="(prefers-color-scheme: dark)"> |
| 14 | <link rel="icon" href="/favicon.svg" type="image/svg+xml"> |
| 15 | <link rel="preload" href="/fonts/Geist-Variable.woff2" as="font" type="font/woff2" crossorigin> |
| 16 | <link rel="preload" href="/fonts/GeistMono-Variable.woff2" as="font" type="font/woff2" crossorigin> |
| 17 | <link rel="stylesheet" href="/site.css"> |
| 18 | </head> |
| 19 | <body> |
| 20 | <!-- |
| 21 | THESIS: The category-standard app-platform page, played straight at Heroku/Fly/Render/Railway |
| 22 | craft — chosen by the user as the standing exit over the assigned direction. It refuses |
| 23 | nothing structurally; it must out-finish, not out-weird. |
| 24 | OWN-WORLD: Near-black-with-purple dark scheme / white-with-purple light scheme, one accent |
| 25 | (Carloku purple), Geist + Geist Mono, hairline borders, one dark terminal that stays dark in |
| 26 | both schemes, one deep-purple full-bleed band. |
| 27 | STORY: A developer sees the three-command workflow proven in a real terminal, believes |
| 28 | hosting can be held in one head, and clicks Get started. |
| 29 | FIRST VIEWPORT: Sticky nav; left, "Ship it. Promote it. Sleep." + lede + Get started primary; |
| 30 | right, a terminal typing the real ship→promote→rollback session. |
| 31 | FORM: Canon standing exit, user-chosen over grounded candidate 5; seed key 5f64f4cf. |
| 32 | FINISH: unreviewed and undocumented is unfinished; this build ends with the finish review, |
| 33 | the verdict, and DESIGN.md. |
| 34 | --> |
| 35 | <a class="skip" href="#main">Skip to content</a> |
| 36 | <header class="site-head"> |
| 37 | <div class="wrap"> |
| 38 | <a class="brand" href="/"><svg class="mark" viewBox="0 0 64 64" aria-hidden="true"><rect width="64" height="64" rx="14" fill="#5b3e96"/><path fill="#b9a1ea" d="M11.65 37.15H50.65A2.5 2.5 0 0 1 52.42 37.88L54.19 39.65A2.5 2.5 0 0 1 54.92 41.42V48.42A2.5 2.5 0 0 1 52.42 50.92H13.42A2.5 2.5 0 0 1 11.65 50.19L9.88 48.42A2.5 2.5 0 0 1 9.15 46.65V39.65A2.5 2.5 0 0 1 11.65 37.15ZM10.65 26.15H28.15A1.5 1.5 0 0 1 29.21 26.59L30.63 28.01A1.5 1.5 0 0 1 31.07 29.07V33.07A1.5 1.5 0 0 1 29.57 34.57H12.07A1.5 1.5 0 0 1 11.01 34.13L9.59 32.71A1.5 1.5 0 0 1 9.15 31.65V27.65A1.5 1.5 0 0 1 10.65 26.15ZM34.15 26.15H51.65A1.5 1.5 0 0 1 52.71 26.59L54.13 28.01A1.5 1.5 0 0 1 54.57 29.07V33.07A1.5 1.5 0 0 1 53.07 34.57H35.57A1.5 1.5 0 0 1 34.51 34.13L33.09 32.71A1.5 1.5 0 0 1 32.65 31.65V27.65A1.5 1.5 0 0 1 34.15 26.15ZM10.65 15.15H16.4A1.5 1.5 0 0 1 17.46 15.59L18.88 17.01A1.5 1.5 0 0 1 19.32 18.07V22.07A1.5 1.5 0 0 1 17.82 23.57H12.07A1.5 1.5 0 0 1 11.01 23.13L9.59 21.71A1.5 1.5 0 0 1 9.15 20.65V16.65A1.5 1.5 0 0 1 10.65 15.15ZM22.4 15.15H28.15A1.5 1.5 0 0 1 29.21 15.59L30.63 17.01A1.5 1.5 0 0 1 31.07 18.07V22.07A1.5 1.5 0 0 1 29.57 23.57H23.82A1.5 1.5 0 0 1 22.76 23.13L21.34 21.71A1.5 1.5 0 0 1 20.9 20.65V16.65A1.5 1.5 0 0 1 22.4 15.15ZM34.15 15.15H39.9A1.5 1.5 0 0 1 40.96 15.59L42.38 17.01A1.5 1.5 0 0 1 42.82 18.07V22.07A1.5 1.5 0 0 1 41.32 23.57H35.57A1.5 1.5 0 0 1 34.51 23.13L33.09 21.71A1.5 1.5 0 0 1 32.65 20.65V16.65A1.5 1.5 0 0 1 34.15 15.15Z"/><path fill="#9a7bd6" d="M45.9 15.15H51.65A1.5 1.5 0 0 1 52.71 15.59L54.13 17.01A1.5 1.5 0 0 1 54.57 18.07V22.07A1.5 1.5 0 0 1 53.07 23.57H47.32A1.5 1.5 0 0 1 46.26 23.13L44.84 21.71A1.5 1.5 0 0 1 44.4 20.65V16.65A1.5 1.5 0 0 1 45.9 15.15Z"/><g fill="#ffffff"><rect x="9.15" y="37.15" width="44" height="12" rx="2.5"/><rect x="9.15" y="26.15" width="20.5" height="7" rx="1.5"/><rect x="32.65" y="26.15" width="20.5" height="7" rx="1.5"/><rect x="9.15" y="15.15" width="8.75" height="7" rx="1.5"/><rect x="20.9" y="15.15" width="8.75" height="7" rx="1.5"/><rect x="32.65" y="15.15" width="8.75" height="7" rx="1.5"/><rect x="44.4" y="15.15" width="8.75" height="7" rx="1.5" fill="#c9b2f7"/></g><g fill="#5b3e96"><circle cx="13.15" cy="43.15" r="1.6"/><circle cx="49.15" cy="43.15" r="1.6"/></g><circle cx="43.15" cy="43.15" r="1.6" fill="#c9b2f7"/></svg>Carloku</a> |
| 39 | <nav aria-label="Site"> |
| 40 | <a href="#workflow">How it works</a> |
| 41 | <a href="#open">Open source</a> |
| 42 | <a href="/get-started/">Get started</a> |
| 43 | </nav> |
| 44 | <a class="head-cta" href="https://console.carloku.com">Dashboard</a> |
| 45 | </div> |
| 46 | </header> |
| 47 | <main id="main"> |
| 48 | <section class="hero"> |
| 49 | <div class="wrap"> |
| 50 | <div> |
| 51 | <h1>The uncompromising app platform<span class="dot">.</span></h1> |
| 52 | <p class="lede">Carloku is an app hosting platform that accepts no tradeoffs. |
| 53 | Deploy in seconds. Scale to billions. Simple commands, massive power. Cloud, |
| 54 | hybrid, and on-prem: all first-class. Welcome to the new standard. Get ready |
| 55 | to ship.</p> |
| 56 | <div class="cta"> |
| 57 | <a class="btn btn-primary" href="/get-started/">Get started</a> |
| 58 | <a class="btn btn-quiet" href="https://console.carloku.com">Open the dashboard</a> |
| 59 | </div> |
| 60 | <p class="hero-note">Open source underneath — hosted here, never locked here.</p> |
| 61 | </div> |
| 62 | <div> |
| 63 | <div class="term"> |
| 64 | <div class="term-bar" aria-hidden="true"><i></i><i></i><i></i><span>you@laptop — carlos</span></div> |
| 65 | <div class="term-body"> |
| 66 | <span class="line cmd" data-type>carlos deploy -app hello ./hello-linux-arm64</span> |
| 67 | <span class="line" data-out>using https://console.carloku.com as you@keymail.dev</span> |
| 68 | <span class="line" data-out>deploying https://hello.bdf.oncarlos.com</span> |
| 69 | <span class="line ok" data-out>shipped hello 6c88010</span> |
| 70 | <span class="line ok" data-out>promoted hello 6c88010 -> edge</span> |
| 71 | <span class="line ok" data-out>live <a href="https://hello.bdf.oncarlos.com">https://hello.bdf.oncarlos.com</a></span> |
| 72 | <span class="line" aria-hidden="true"><span class="term-caret"></span></span> |
| 73 | </div> |
| 74 | </div> |
| 75 | <p class="hero-note">That session is real, and so is the app — the last |
| 76 | URL opens it, and its |
| 77 | <a href="https://github.com/carlosframework/hello">source is public</a>.</p> |
| 78 | </div> |
| 79 | </div> |
| 80 | </section> |
| 81 | <section id="workflow"> |
| 82 | <div class="wrap"> |
| 83 | <h2>The whole workflow</h2> |
| 84 | <p class="section-lede">One command — or three small motions. No pipelines to |
| 85 | babysit, no containers to wrap your app in — you ship the thing itself.</p> |
| 86 | <ol class="steps"> |
| 87 | <li> |
| 88 | <h3><code>carlos deploy</code></h3> |
| 89 | <p>One command: it ships your app, promotes it, and waits until the URL |
| 90 | serves the new build. When it prints <code>live</code>, it is — seconds, |
| 91 | not pipelines.</p> |
| 92 | </li> |
| 93 | <li> |
| 94 | <h3>Want to look first?</h3> |
| 95 | <p>Take it in two motions: <code>carlos ship</code> gives you a private |
| 96 | link to the real, running thing; <code>carlos promote</code> makes the |
| 97 | exact thing you approved the public thing. Nothing is rebuilt behind |
| 98 | your back.</p> |
| 99 | </li> |
| 100 | <li> |
| 101 | <h3>Changed your mind?</h3> |
| 102 | <p>Point at yesterday's version and promote that instead. Going back is |
| 103 | the same small motion as going forward.</p> |
| 104 | </li> |
| 105 | </ol> |
| 106 | </div> |
| 107 | </section> |
| 108 | <section class="tint"> |
| 109 | <div class="wrap"> |
| 110 | <h2>What you stop thinking about</h2> |
| 111 | <div class="quiet-grid"> |
| 112 | <ul class="features"> |
| 113 | <li> |
| 114 | <div class="icon" aria-hidden="true"> |
| 115 | <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg> |
| 116 | </div> |
| 117 | <div> |
| 118 | <h3>Certificates</h3> |
| 119 | <p>Point your domain at Carloku and the padlock appears. Renewals happen |
| 120 | without you.</p> |
| 121 | </div> |
| 122 | </li> |
| 123 | <li> |
| 124 | <div class="icon" aria-hidden="true"> |
| 125 | <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="7.5" cy="15.5" r="5.5"/><path d="m21 2-9.6 9.6"/><path d="m15.5 7.5 3 3L22 7l-3-3"/></svg> |
| 126 | </div> |
| 127 | <div> |
| 128 | <h3>Passwords</h3> |
| 129 | <p>Sign in with a passkey, on the dashboard and in the terminal. There's |
| 130 | nothing to invent, reuse, or leak.</p> |
| 131 | </div> |
| 132 | </li> |
| 133 | <li> |
| 134 | <div class="icon" aria-hidden="true"> |
| 135 | <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></svg> |
| 136 | </div> |
| 137 | <div> |
| 138 | <h3>Idle servers</h3> |
| 139 | <p>Apps doze when nobody's around and wake the instant someone shows up. |
| 140 | A quiet app is just quiet.</p> |
| 141 | </div> |
| 142 | </li> |
| 143 | <li> |
| 144 | <div class="icon" aria-hidden="true"> |
| 145 | <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="16" x="2" y="4" rx="2"/><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/></svg> |
| 146 | </div> |
| 147 | <div> |
| 148 | <h3>Sending email</h3> |
| 149 | <p>One command and your app has SMTP credentials, on a domain that |
| 150 | signs and aligns. No mail service to sign up for, nothing to run.</p> |
| 151 | </div> |
| 152 | </li> |
| 153 | </ul> |
| 154 | <figure class="dash"> |
| 155 | <div class="dash-frame"> |
| 156 | <div class="term-bar" aria-hidden="true"><i></i><i></i><i></i><span>console.carloku.com</span></div> |
| 157 | <picture> |
| 158 | <source srcset="/img/dashboard-dark.png" media="(prefers-color-scheme: dark)"> |
| 159 | <img src="/img/dashboard-light.png" width="736" height="336" alt="The Carloku dashboard: an account's apps listed with their hosts, running instances, status, and the version each one serves."> |
| 160 | </picture> |
| 161 | </div> |
| 162 | <figcaption>The dashboard, as it really looks — demo data.</figcaption> |
| 163 | </figure> |
| 164 | </div> |
| 165 | </div> |
| 166 | </section> |
| 167 | <section class="band" id="open"> |
| 168 | <div class="wrap"> |
| 169 | <h2>Hosted here, never locked here.</h2> |
| 170 | <p>The platform under Carloku is open source: CARLOS. You can read every moving |
| 171 | part — or run the whole thing yourself, on your own machines, and your apps |
| 172 | wouldn't know the difference.</p> |
| 173 | <p>And what you ship is your app as itself — a folder of files, a single binary — |
| 174 | not a container wrapped around it.</p> |
| 175 | <div class="cta"> |
| 176 | <a class="btn btn-primary" href="https://carlosframework.com">Read the design</a> |
| 177 | <a class="btn btn-quiet" href="https://github.com/carlosframework">CARLOS on GitHub</a> |
| 178 | </div> |
| 179 | <p class="proof">Proof it works: this site is itself a CARLOS app, shipped and |
| 180 | promoted the same way you just read about. <a href="https://github.com/carlosframework/carloku">Here's its source.</a></p> |
| 181 | </div> |
| 182 | </section> |
| 183 | <section class="close-cta"> |
| 184 | <div class="wrap"> |
| 185 | <h2>Be live before it feels like work<span class="dot">.</span></h2> |
| 186 | <p>One small tool, four steps, and your app is on the internet.</p> |
| 187 | <div class="cta"> |
| 188 | <a class="btn btn-primary" href="/get-started/">Get started</a> |
| 189 | <a class="btn btn-quiet" href="https://console.carloku.com">Open the dashboard</a> |
| 190 | </div> |
| 191 | </div> |
| 192 | </section> |
| 193 | </main> |
| 194 | <footer> |
| 195 | <div class="wrap"> |
| 196 | <p>🤖 Written by an LLM (Claude), on the ideas, instruction, and editing of humans. |
| 197 | AI-written text here is always marked and always disclosed; see |
| 198 | <a href="https://11factor.org/#x">factor X</a>.</p> |
| 199 | <p>Carloku runs on <a href="https://carlosframework.com">CARLOS</a>: the framework |
| 200 | is open, and this site is itself a CARLOS app, shipped with <code>carlos ship</code>.</p> |
| 201 | <p>To report abuse on an app Carloku hosts (anything at oncarlos.com), email <a href="mailto:abuse@carloku.com">abuse@carloku.com</a>.</p> |
| 202 | <p><a href="https://github.com/carlosframework/carloku">Source for this site on GitHub</a>.</p> |
| 203 | </div> |
| 204 | </footer> |
| 205 | <script src="/site.js" defer></script> |
| 206 | </body> |
| 207 | </html> |
| 208 | |