Files
uncloud/website/index.html
T

691 lines
52 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Deploy and scale Docker apps on your infrastructure without Kubernetes | Uncloud</title>
<meta name="description"
content="Uncloud helps you deploy container applications on your infrastructure — from cloud VMs to bare metal. Replace Heroku and Render, no Kubernetes required.">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="./style.css" rel="stylesheet">
<link rel="apple-touch-icon" href="./images/apple-touch-icon.png" sizes="180x180"/>
<link rel="icon" type="image/svg+xml" href="./images/logo.svg"/>
<link rel="alternate icon" type="image/png" href="./images/favicon.png" sizes="96x96"/>
<!-- OpenGraph tags for social media -->
<meta property="og:title"
content="Deploy and scale Docker apps on your infrastructure without Kubernetes | Uncloud"/>
<meta property="og:description"
content="Uncloud helps you deploy container applications on your infrastructure — from cloud VMs to bare metal. Replace Heroku and Render, no Kubernetes required."/>
<meta property="og:image" content="https://uncloud.run/images/logo-wide.png"/>
<meta property="og:image:alt" content="Uncloud logo - Deploy container apps with ease"/>
<meta property="og:url" content="https://uncloud.run"/>
<meta property="og:type" content="website"/>
<meta property="og:site_name" content="Uncloud"/>
<!-- Twitter card tags -->
<meta property="twitter:domain" content="uncloud.run">
<meta property="twitter:url" content="https://uncloud.run">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title"
content="Deploy and scale Docker apps on your infrastructure without Kubernetes | Uncloud">
<meta name="twitter:description"
content="Uncloud helps you deploy container applications on your infrastructure — from cloud VMs to bare metal. Replace Heroku and Render, no Kubernetes required.">
<meta name="twitter:image" content="https://uncloud.run/images/logo-wide.png">
<meta name="twitter:image:alt" content="Uncloud logo - Deploy container apps with ease">
</head>
<body class="font-inter antialiased bg-white text-zinc-900 tracking-tight">
<!-- Page wrapper -->
<div class="flex flex-col min-h-screen overflow-hidden supports-[overflow:clip]:overflow-clip">
<!-- Site header -->
<header class="absolute top-2 md:top-6 w-full z-30">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="flex items-center justify-between h-14">
<!-- Site branding -->
<div class="shrink-0 mr-4">
<a class="flex items-center" href="index.html">
<img class="w-8 h-8 rounded shadow-sm shadow-zinc-950/20" src="./images/logo.svg" alt="Logo">
<span class="ml-2 font-semibold text-lg text-zinc-900">uncloud</span>
</a>
</div>
<!-- Navigation links -->
<nav class="flex grow">
<ul class="flex grow justify-end flex-wrap items-center">
<li>
<a class="text-sm font-medium text-zinc-500 hover:text-zinc-900 px-3 lg:px-5 py-2 flex items-center transition"
href="https://discord.gg/eR35KQJhPu">
<svg class="w-4 h-4 mr-1 fill-current" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24">
<path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/>
</svg>
<span class="ml-1 hidden sm:inline">Discord</span>
</a>
</li>
<li>
<a class="text-sm font-medium text-zinc-500 hover:text-zinc-900 px-3 lg:px-5 py-2 flex items-center transition"
href="https://github.com/psviderski/uncloud">
<svg class="w-4 h-4 mr-1 fill-current" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24">
<path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/>
</svg>
<span class="ml-1 hidden sm:inline">GitHub</span>
</a>
</li>
<li class="ml-1">
<a class="btn-sm text-zinc-100 bg-zinc-900 hover:bg-zinc-800 w-full shadow"
href="https://github.com/psviderski/uncloud/?tab=readme-ov-file#-quick-start">
Get Started
</a>
</li>
</ul>
</nav>
</div>
</div>
</header>
<!-- Page content -->
<main class="grow">
<!-- Hero -->
<section
class="relative before:absolute before:inset-0 before:h-80 before:pointer-events-none before:bg-gradient-to-b before:from-zinc-100 before:-z-10">
<div class="pt-32 pb-12 md:pt-40 md:pb-20">
<!-- Section content -->
<div class="px-4 sm:px-6">
<div class="max-w-3xl mx-auto">
<div class="text-center pb-12 md:pb-16">
<h1 class="font-inter-tight text-4xl md:text-5xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-zinc-500 via-zinc-900 to-zinc-900 pb-4">
Keep it simple<br>
Ship more
</h1>
<p class="text-lg text-zinc-500 mb-8">
Uncloud is a lightweight Docker clustering tool for running and scaling web apps on your
servers — from cloud VMs to bare metal. No Kubernetes required.
</p>
<div class="max-w-xs mx-auto sm:max-w-none sm:inline-flex sm:justify-center space-y-4 sm:space-y-0 sm:space-x-4">
<div>
<a class="btn text-zinc-100 bg-zinc-900 hover:bg-zinc-800 w-full shadow"
href="https://github.com/psviderski/uncloud/?tab=readme-ov-file#-quick-start">
Quick Start
</a>
</div>
<div>
<a class="btn text-zinc-600 bg-white hover:text-zinc-900 w-full shadow flex items-center justify-center"
href="https://github.com/psviderski/uncloud">
<svg class="w-5 h-5 mr-2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"/>
<path d="M9 18c-4.51 2-5-2-7-2"/>
</svg>
Star on GitHub
</a>
</div>
</div>
</div>
</div>
</div>
<div class="max-w-3xl mx-auto px-4 sm:px-6 flex justify-center pb-12 relative before:absolute before:-top-12 before:w-96 before:h-96 before:bg-zinc-900 before:opacity-[.15] before:rounded-full before:blur-3xl before:-z-10">
<div class="coding w-full bg-zinc-800 rounded-lg border border-zinc-700/50 shadow-2xl">
<!-- Title bar -->
<div class="pl-4 pt-4 flex items-center">
<div class="flex gap-2">
<div class="w-2.5 h-2.5 rounded-full bg-red-500"></div>
<div class="w-2.5 h-2.5 rounded-full bg-yellow-500"></div>
<div class="w-2.5 h-2.5 rounded-full bg-green-500"></div>
</div>
</div>
<!-- Terminal content -->
<div class="p-4 text-sm sm:p-6 sm:text-[0.9375rem] text-white overflow-x-auto">
<pre class="text-zinc-500 select-none"># Start with any cloud VM or your own server</pre>
<pre><span class="text-emerald-500 select-none">$ </span>uc machine init root@137.123.45.67</pre>
<pre> </pre>
<pre class="text-zinc-500 select-none"># Deploy your app with automatic HTTPS</pre>
<pre><span class="text-emerald-500 select-none">$ </span>uc run --name my-app -p app.example.com:8000/https app-image:latest</pre>
<pre class="text-zinc-200">✨ Your app is available at <span class="underline">https://app.example.com</span></pre>
<pre> </pre>
<pre class="text-zinc-500 select-none"># Achieve high availability by adding more machines and scaling the app</pre>
<pre><span
class="text-emerald-500 select-none">$ </span>uc machine add ubuntu@65.21.45.67</pre>
<pre><span class="text-emerald-500 select-none">$ </span>uc scale my-app 2</pre>
</div>
</div>
</div>
</div>
</section>
<!-- Value proposition -->
<section class="relative bg-zinc-50">
<div class="py-12 md:py-20">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="max-w-3xl mx-auto text-center pb-12 md:pb-20">
<h2 class="font-inter-tight text-3xl md:text-4xl font-bold text-zinc-900 mb-4">
Cloud-like experience you control
</h2>
<p class="text-lg text-zinc-500">
Keep the Docker workflows you love while optimising infrastructure costs
</p>
</div>
<div class="max-w-xs mx-auto sm:max-w-none grid sm:grid-cols-2 md:grid-cols-3 gap-8 sm:gap-4 lg:gap-8">
<!-- Mix and Match Infrastructure -->
<article
class="flex flex-col border border-transparent [background:linear-gradient(theme(colors.white),theme(colors.zinc.50))_padding-box,linear-gradient(120deg,theme(colors.zinc.300),theme(colors.zinc.100),theme(colors.zinc.300))_border-box] rounded-lg">
<div class="grow flex flex-col p-5 pt-6">
<div class="flex items-center space-x-3 mb-4">
<svg class="inline-flex stroke-zinc-400 shrink-0" xmlns="http://www.w3.org/2000/svg"
width="20" height="20" fill="none"
stroke-width="2" viewBox="0 0 24 24">
<rect width="8" height="8" x="2" y="2" rx="1"/>
<rect width="9" height="8" x="13" y="2" rx="1"/>
<rect width="11" height="9" x="2" y="13" rx="1"/>
<rect width="6" height="9" x="16" y="13" rx="1"/>
</svg>
<h3 class="font-inter-tight font-semibold text-zinc-900">
Mix and Match Infrastructure
</h3>
</div>
<div class="text-sm text-zinc-500">
<ul class="space-y-3">
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Mix and match cloud and on-premise across regions and providers
</li>
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Deploy customer-facing apps on reliable cloud VMs
</li>
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Run resource-hungry background jobs on budget-friendly bare metal servers
</li>
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Transform that dusty Mac mini into a powerful staging environment
</li>
</ul>
</div>
</div>
</article>
<!-- Effortless Operation -->
<article
class="flex flex-col border border-transparent [background:linear-gradient(theme(colors.white),theme(colors.zinc.50))_padding-box,linear-gradient(120deg,theme(colors.zinc.300),theme(colors.zinc.100),theme(colors.zinc.300))_border-box] rounded-lg">
<div class="grow flex flex-col p-5 pt-6">
<div class="flex items-center space-x-3 mb-4">
<svg class="inline-flex fill-zinc-400 shrink-0" xmlns="http://www.w3.org/2000/svg"
width="20"
height="20" viewBox="0 0 24 24">
<path d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>
</svg>
<h3 class="font-inter-tight font-semibold text-zinc-900">Effortless Operation</h3>
</div>
<div class="text-sm text-zinc-500">
<ul class="space-y-3">
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Zero-config distributed Docker cluster
</li>
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
No control plane to manage
</li>
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Keep apps running even when machines go offline
</li>
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Battle-tested WireGuard networking connects all your machines and workloads
right out of the box
</li>
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Automatic HTTPS for your domains using Let's Encrypt
</li>
</ul>
</div>
</div>
</article>
<!-- Developer Experience -->
<article
class="flex flex-col border border-transparent [background:linear-gradient(theme(colors.white),theme(colors.zinc.50))_padding-box,linear-gradient(120deg,theme(colors.zinc.300),theme(colors.zinc.100),theme(colors.zinc.300))_border-box] rounded-lg">
<div class="grow flex flex-col p-5 pt-6">
<div class="flex items-center space-x-3 mb-4">
<svg class="inline-flex fill-zinc-400 shrink-0" xmlns="http://www.w3.org/2000/svg"
width="20"
height="20" viewBox="0 0 24 24">
<path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/>
</svg>
<h3 class="font-inter-tight font-semibold text-zinc-900">Developer Experience You
Love</h3>
</div>
<div class="text-sm text-zinc-500">
<ul class="space-y-3">
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Deploy and manage across machines with familiar Docker-like commands
</li>
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Use the same Docker Compose from local dev to production
</li>
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Find your services instantly with built-in service discovery and DNS
</li>
<li class="flex gap-3 items-start">
<svg class="w-4 h-4 text-emerald-500 shrink-0 mt-0.5" fill="none"
stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M5 13l4 4L19 7"/>
</svg>
Communicate securely with services across machines without opening ports
</li>
</ul>
</div>
</div>
</article>
</div>
</div>
</div>
</section>
<!-- How it works + Features -->
<section
class="relative bg-zinc-800 text-zinc-400 after:absolute after:top-0 after:right-0 after:h-full after:w-96 after:pointer-events-none after:bg-gradient-to-l after:from-zinc-800 max-lg:after:hidden">
<div class="py-12 md:py-20">
<div class="max-w-xl lg:max-w-6xl mx-auto px-4 sm:px-6">
<div class="lg:flex space-y-12 lg:space-y-0 lg:space-x-12 2xl:space-x-24">
<!-- Content -->
<div class="lg:max-w-none lg:min-w-[524px]">
<div class="mb-8">
<div class="inline-flex text-sm font-medium text-zinc-400 px-4 py-0.5 border border-transparent [background:linear-gradient(theme(colors.zinc.800),theme(colors.zinc.800))_padding-box,linear-gradient(120deg,theme(colors.zinc.700),theme(colors.zinc.700/0),theme(colors.zinc.700))_border-box] rounded-full mb-4">
How it works
</div>
<h3 class="font-inter-tight text-3xl font-bold text-zinc-100 mb-4">
Simple by design,<br>
powerful in practice
</h3>
<p class="text-lg">
Uncloud replaces complex clusters with a simple network of machines working
seamlessly together — no maintenance overhead, just reliable infrastructure.
</p>
</div>
<!-- Items -->
<div class="mb-8 md:mb-0 space-y-2">
<!-- Secure private network -->
<div class="text-left flex items-center px-6 py-4 rounded border border-transparent">
<svg class="shrink-0 fill-zinc-400 mr-3" xmlns="http://www.w3.org/2000/svg"
width="24" height="24">
<path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z"/>
</svg>
<div>
<div class="font-inter-tight text-lg font-semibold text-zinc-200 mb-1">
Secure private network
</div>
<div>
Each machine joins a WireGuard mesh network with automatic peer discovery
and NAT traversal. Containers get unique IPs and can communicate directly
across machines.
</div>
</div>
</div>
<!-- Fully decentralised -->
<div class="text-left flex items-center px-6 py-4 rounded border border-transparent">
<svg class="shrink-0 fill-zinc-400 stroke-zinc-400 mr-3"
xmlns="http://www.w3.org/2000/svg"
width="24" height="24">
<path d="M4 4h16M4 4v16M4 4L20 20M20 4v16M20 4L4 20M4 20h16 M4 1.5a2.5 2.5 0 110 5 2.5 2.5 0 010-5M20 1.5a2.5 2.5 0 110 5 2.5 2.5 0 010-5M4 17.5a2.5 2.5 0 110 5 2.5 2.5 0 010-5M20 17.5a2.5 2.5 0 110 5 2.5 2.5 0 010-5"/>
</svg>
<div>
<div class="font-inter-tight text-lg font-semibold text-zinc-200 mb-1">
Fully decentralised
</div>
<div>
Unlike traditional orchestrators, there's no central control plane to
maintain. Each machine maintains a synchronised copy of the cluster
state
through peer-to-peer communication, keeping cluster operations
functional
even if some machines go offline.
</div>
</div>
</div>
<!-- Smart CLI -->
<div class="text-left flex items-center px-6 py-4 rounded border border-transparent">
<svg class="shrink-0 fill-zinc-400 mr-3" xmlns="http://www.w3.org/2000/svg"
width="24" height="24">
<path d="M20 4H4c-1.11 0-2 .89-2 2v12c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4V8h16v10zm-2-1h-6v-2h6v2zM7.5 17l-1.41-1.41L8.67 13l-2.58-2.59L7.5 9l4 4-4 4z"/>
</svg>
<div>
<div class="font-inter-tight text-lg font-semibold text-zinc-200 mb-1">
Smart CLI
</div>
<div>
Control your entire infrastructure using intuitive Docker-like commands from
anywhere. Deploy, monitor, and scale applications across all your machines
while the CLI only needs SSH access to a single machine.
</div>
</div>
</div>
</div>
</div>
<!-- Diagram -->
<div class="relative lg:max-w-none">
<div class="relative flex flex-col">
<figure class="w-full lg:mt-36">
<img class="lg:max-w-none mx-auto rounded-xl shadow-2xl"
src="./images/diagram.webp" width="700" alt="Uncloud cluster diagram"/>
<figcaption class="text-center text-sm mt-2">
Multi-provider cluster of 3 machines
</figcaption>
</figure>
</div>
</div>
</div>
</div>
<!-- Features blocks -->
<div class="max-w-6xl mx-auto px-4 sm:px-6 mt-12 lg:mt-24">
<div class="grid sm:grid-cols-2 lg:grid-cols-3 gap-8 lg:gap-16">
<!-- Deploy anywhere -->
<div>
<div class="flex items-center mb-1">
<svg class="fill-zinc-400 mr-2" xmlns="http://www.w3.org/2000/svg" width="16"
height="16">
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5.9 7H12c-.1-1.5-.4-2.9-.8-4.1 1.4.9 2.3 2.4 2.7 4.1zM8 14c-.6 0-1.8-1.9-2-5h4c-.2 3.1-1.4 5-2 5zM6 7c.2-3.1 1.3-5 2-5s1.8 1.9 2 5H6zM4.9 2.9C4.4 4.1 4.1 5.5 4 7H2.1c.4-1.7 1.3-3.2 2.8-4.1zM2.1 9H4c.1 1.5.4 2.9.8 4.1-1.4-.9-2.3-2.4-2.7-4.1zm9 4.1c.5-1.2.7-2.6.8-4.1h1.9c-.4 1.7-1.3 3.2-2.7 4.1z"/>
</svg>
<h3 class="font-inter-tight font-semibold text-zinc-200">Deploy anywhere</h3>
</div>
<p class="text-sm">Run your apps on any Linux machine — from cloud VMs and
dedicated servers to bare metal at your office or home.</p>
</div>
<!-- Automatic HTTPS -->
<div>
<div class="flex items-center mb-1">
<svg class="fill-zinc-400 mr-2" xmlns="http://www.w3.org/2000/svg" width="16"
height="16">
<path d="M13 7.5V6c0-2.76-2.24-5-5-5S3 3.24 3 6v1.5H2v7h12v-7h-1zM6 6c0-1.1.9-2 2-2s2 .9 2 2H6zm3 6H7v-2h2v2z"/>
</svg>
<h3 class="font-inter-tight font-semibold text-zinc-200">Automatic HTTPS</h3>
</div>
<p class="text-sm">Get free TLS certificates and automatic HTTPS for your
domains with zero configuration using built-in Caddy reverse proxy.</p>
</div>
<!-- Load balancing -->
<div>
<div class="flex items-center mb-1">
<svg class="fill-zinc-400 stroke-zinc-400 mr-2" xmlns="http://www.w3.org/2000/svg"
width="16"
height="16" stroke-linejoin="round" stroke-linecap="round" stroke-width="1.5"
fill="none">
<circle cy="4.334" cx="8.175" r="2.162"/>
<path d="M6.657 6.44l-4.268 7.108m.056.195l-1.189-3.498m1.245 3.484l3.736-1.273m3.442-6.072l3.932 7.22m.056.097l1.259-3.4m-1.287 3.414l-3.652-1.231"/>
</svg>
<h3 class="font-inter-tight font-semibold text-zinc-200">Load balancing</h3>
</div>
<p class="text-sm">Distribute traffic across container replicas running on
different machines for improved reliability and performance.</p>
</div>
<!-- Service discovery -->
<div>
<div class="flex items-center mb-1">
<svg class="fill-zinc-400 mr-2" xmlns="http://www.w3.org/2000/svg" width="16"
height="16">
<path d="M7 14c-3.86 0-7-3.14-7-7s3.14-7 7-7 7 3.14 7 7-3.14 7-7 7ZM7 2C4.243 2 2 4.243 2 7s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5Zm8.707 12.293a.999.999 0 1 1-1.414 1.414L11.9 13.314a8.019 8.019 0 0 0 1.414-1.414l2.393 2.393Z"/>
</svg>
<h3 class="font-inter-tight font-semibold text-zinc-200">Service discovery</h3>
</div>
<p class="text-sm">Access any service by its name from any container using the
built-in DNS that automatically tracks services across your network.</p>
</div>
<!-- Infrastructure as Code -->
<div>
<div class="flex items-center mb-1">
<svg class="fill-zinc-400 mr-2" xmlns="http://www.w3.org/2000/svg" width="16"
height="16">
<path d="M5 3L0 8l5 5 1.5-1.5L3 8l3.5-3.5L5 3zm6 0l-1.5 1.5L13 8l-3.5 3.5L11 13l5-5-5-5z"/>
</svg>
<h3 class="font-inter-tight font-semibold text-zinc-200">Infrastructure as Code</h3>
</div>
<p class="text-sm">Define your entire app stack in a familiar Docker Compose
file. No need to learn a new config format.</p>
</div>
<!-- No vendor lock-in -->
<div>
<div class="flex items-center mb-1">
<svg class="stroke-zinc-400 mr-2" xmlns="http://www.w3.org/2000/svg" width="16"
height="16" stroke-width="1.8" fill="none" stroke-linecap="round"
stroke-linejoin="round">
<path d="M4.5 11.5h-0.7a2.8 2.8 0 0 1 0-5.6 3.7 3.7 0 0 1 7.4 0 2.8 2.8 0 0 1 0 5.6h-6.7"/>
<path d="M2 2L14 13"/>
</svg>
<h3 class="font-inter-tight font-semibold text-zinc-200">No vendor lock-in</h3>
</div>
<p class="text-sm">Mix cloud providers and your own hardware freely to
optimise costs and performance, without changing how you deploy or manage apps.</p>
</div>
</div>
</div>
</div>
</section>
<!-- Demo Section -->
<section class="relative bg-white text-zinc-800">
<div class="py-12 md:py-20">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="max-w-3xl mx-auto text-center pb-12 md:pb-16">
<h2 class="font-inter-tight text-3xl md:text-4xl font-bold text-zinc-900 mb-4">
See in action
</h2>
<p class="text-lg text-zinc-500">
Deploy a highly available web app with automatic HTTPS across multiple regions and
on-premises in just a couple minutes.
</p>
</div>
<div class="max-w-3xl mx-auto px-4 sm:px-6 flex justify-center pb-12 relative before:absolute before:-top-12 before:w-96 before:h-96 before:bg-zinc-900 before:opacity-[.15] before:rounded-full before:blur-3xl before:-z-10">
<script src="https://fast.wistia.com/player.js" async></script>
<script src="https://fast.wistia.com/embed/k47uwt9uau.js" async type="module"></script>
<style>wistia-player[media-id='k47uwt9uau']:not(:defined) {
background: center / contain no-repeat url('https://fast.wistia.com/embed/medias/k47uwt9uau/swatch');
display: block;
filter: blur(5px);
padding-top: 58.33%;
}</style>
<wistia-player media-id="k47uwt9uau" aspect="1.7142857142857142"
class="w-full rounded-xl shadow-lg"></wistia-player>
</div>
</div>
</div>
</section>
<!-- CTA -->
<section id="subscribe">
<div class="py-12 md:py-20 border-t border-zinc-200">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="relative max-w-3xl mx-auto text-center">
<h2 class="font-inter-tight text-3xl md:text-4xl font-bold text-zinc-900 mb-4">
Be part of the development
<em class="relative not-italic inline-flex justify-center items-end">
journey
<svg class="absolute fill-zinc-300 w-[calc(100%+1rem)] -z-10"
xmlns="http://www.w3.org/2000/svg" width="120" height="10" viewBox="0 0 120 10"
aria-hidden="true" preserveAspectRatio="none">
<path d="M118.273 6.09C79.243 4.558 40.297 5.459 1.305 9.034c-1.507.13-1.742-1.521-.199-1.81C39.81-.228 79.647-1.568 118.443 4.2c1.63.233 1.377 1.943-.17 1.89Z"/>
</svg>
</em>
</h2>
<p class="text-lg text-zinc-500 mb-8">
Uncloud is an open source project I'm actively developing. I'd love to share this journey
with you. Subscribe to follow the progress, get early insights into new features, and be the
first to know when it's ready for production use. No marketing, ads or spam.
<p>
<!-- Subscribe form -->
<div class="flex flex-col sm:flex-row justify-center gap-4 items-stretch text-zinc-900">
<form action="https://app.kit.com/forms/7595321/subscriptions"
class="w-full max-w-sm mx-auto"
method="post" data-sv-form="7595321" data-uid="a6c3ce5004" data-format="inline"
data-version="5"
data-options="{&quot;settings&quot;:{&quot;after_subscribe&quot;:{&quot;action&quot;:&quot;message&quot;,&quot;success_message&quot;:&quot;Success! Please check your email to confirm your subscription.&quot;,&quot;redirect_url&quot;:&quot;&quot;},&quot;analytics&quot;:{&quot;google&quot;:null,&quot;fathom&quot;:null,&quot;facebook&quot;:null,&quot;segment&quot;:null,&quot;pinterest&quot;:null,&quot;sparkloop&quot;:null,&quot;googletagmanager&quot;:null},&quot;modal&quot;:{&quot;trigger&quot;:&quot;timer&quot;,&quot;scroll_percentage&quot;:null,&quot;timer&quot;:5,&quot;devices&quot;:&quot;all&quot;,&quot;show_once_every&quot;:15},&quot;powered_by&quot;:{&quot;show&quot;:true,&quot;url&quot;:&quot;https://kit.com/features/forms?utm_campaign=poweredby&amp;utm_content=form&amp;utm_medium=referral&amp;utm_source=dynamic&quot;},&quot;recaptcha&quot;:{&quot;enabled&quot;:false},&quot;return_visitor&quot;:{&quot;action&quot;:&quot;show&quot;,&quot;custom_content&quot;:&quot;&quot;},&quot;slide_in&quot;:{&quot;display_in&quot;:&quot;bottom_right&quot;,&quot;trigger&quot;:&quot;timer&quot;,&quot;scroll_percentage&quot;:null,&quot;timer&quot;:5,&quot;devices&quot;:&quot;all&quot;,&quot;show_once_every&quot;:15},&quot;sticky_bar&quot;:{&quot;display_in&quot;:&quot;top&quot;,&quot;trigger&quot;:&quot;timer&quot;,&quot;scroll_percentage&quot;:null,&quot;timer&quot;:5,&quot;devices&quot;:&quot;all&quot;,&quot;show_once_every&quot;:15}},&quot;version&quot;:&quot;5&quot;}"
>
<div data-element="fields" class="flex">
<input class="flex-1 min-w-0 form-input px-4 py-2 text-sm text-zinc-900 bg-white border border-zinc-200 rounded-l border-r-0 rounded-r-none shadow-sm focus:border-zinc-900"
name="email_address"
aria-label="Your email address"
placeholder="Your email address"
type="email"
required>
<button class="btn text-zinc-100 bg-zinc-900 hover:bg-zinc-800 rounded-l-none shadow"
data-element="submit">
Subscribe
</button>
</div>
<ul class="text-sm text-rose-700 mt-2" data-element="errors" data-group="alert"></ul>
</form>
</div>
<div class="mt-6 text-sm text-zinc-500">
<p>
Want to contribute? Check out the
<a href="https://github.com/psviderski/uncloud/issues"
class="text-zinc-900 hover:underline">GitHub issues</a>
or join the
<a href="https://github.com/psviderski/uncloud/discussions"
class="text-zinc-900 hover:underline">GitHub Discussions</a>.
</p>
</div>
</div>
</div>
</div>
</section>
</main>
<!-- Site footer -->
<footer>
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="flex flex-col items-center py-8 md:py-12 border-t border-zinc-200">
<div class="text-sm text-zinc-500">
Made with ❤️ by
<a class="underline hover:text-zinc-900" href="https://github.com/psviderski">Pasha Sviderski</a>
</div>
<!-- Social links -->
<ul class="flex space-x-4 mt-4 mb-1">
<li>
<a class="flex justify-center items-center text-zinc-700 hover:text-zinc-900 transition"
href="https://discord.gg/eR35KQJhPu" aria-label="Discord">
<svg class="fill-current" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20"
height="20">
<path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/>
</svg>
</a>
</li>
<li>
<a class="flex justify-center items-center text-zinc-700 hover:text-zinc-900 transition"
href="https://x.com/psviderski" aria-label="Twitter">
<svg class="fill-current" xmlns="http://www.w3.org/2000/svg" width="20" height="20">
<path d="m7.063 3 3.495 4.475L14.601 3h2.454l-5.359 5.931L18 17h-4.938l-3.866-4.893L4.771 17H2.316l5.735-6.342L2 3h5.063Zm-.74 1.347H4.866l8.875 11.232h1.36L6.323 4.347Z"/>
</svg>
</a>
</li>
<li>
<a class="flex justify-center items-center text-zinc-700 hover:text-zinc-900 transition"
href="https://t.me/spyyy" aria-label="Telegram">
<svg class="fill-current" xmlns="http://www.w3.org/2000/svg" width="20" height="20">
<path d="M17.968 3.276a.338.338 0 0 0-.232-.253 1.192 1.192 0 0 0-.63.045S3.087 8.106 2.286 8.664c-.172.121-.23.19-.259.272-.138.4.293.573.293.573l3.613 1.177a.388.388 0 0 0 .183-.011c.822-.519 8.27-5.222 8.7-5.38.068-.02.118 0 .1.049-.172.6-6.606 6.319-6.64 6.354a.138.138 0 0 0-.05.118l-.337 3.528s-.142 1.1.956 0a30.66 30.66 0 0 1 1.9-1.738c1.242.858 2.58 1.806 3.156 2.3a1 1 0 0 0 .732.283.825.825 0 0 0 .7-.622S17.894 5.292 17.98 3.909c.008-.135.021-.217.021-.317a1.177 1.177 0 0 0-.032-.316Z"/>
</svg>
</a>
</li>
<li>
<a class="flex justify-center items-center text-zinc-700 hover:text-zinc-900 transition"
href="https://github.com/psviderski/uncloud" aria-label="Telegram">
<svg class="fill-current" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20"
height="20">
<path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/>
</svg>
</a>
</li>
</ul>
</div>
</div>
</footer>
</div>
<script src="https://f.convertkit.com/ckjs/ck.5.js"></script>
</body>
</html>