jeffgeiser
Wicklee fleet demo: rebuild from main d708ffa (fix demo 404s)
f2ec320
Raw History Blame Contribute Delete
6.94 kB
<!DOCTYPE html>
<html lang="en" class="dark">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- Defeats Safari Reader Mode auto-trigger on slow hard refreshes.
Reader's heuristic scans for article-like content (headings + body
text) during the pre-hydration paint window. format-detection
+ the role="application" on root below mark this as an app, not
prose β€” Safari skips the article scan entirely. -->
<meta name="format-detection" content="telephone=no, address=no, email=no, date=no" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://*.paddle.com https://*.profitwell.com https://clerk.wicklee.dev https://*.clerk.accounts.dev https://challenges.cloudflare.com https://static.cloudflareinsights.com; worker-src 'self' blob:; style-src 'self' https://fonts.googleapis.com https://*.paddle.com 'unsafe-inline'; font-src https://fonts.gstatic.com; connect-src 'self' ws://localhost:* ws://127.0.0.1:* http://localhost:* http://127.0.0.1:* https://*.up.railway.app https://wicklee.dev https://api.clerk.dev https://*.clerk.accounts.dev https://clerk.wicklee.dev https://challenges.cloudflare.com https://*.paddle.com https://static.cloudflareinsights.com; img-src 'self' data: https:; frame-src https://*.paddle.com https://*.clerk.accounts.dev https://clerk.wicklee.dev https://challenges.cloudflare.com;" />
<title>Wicklee β€” Private AI, finally observable.</title>
<meta name="description" content="Routing intelligence. True inference cost. Thermal state. Live, across every node. Built for Ollama and vLLM. Install in 60 seconds β€” nothing to configure." />
<meta property="og:title" content="Wicklee β€” Private AI, finally observable." />
<meta property="og:description" content="Routing intelligence. True inference cost. Thermal state. Live, across every node. Built for Ollama and vLLM. Install in 60 seconds β€” nothing to configure." />
<meta name="twitter:title" content="Wicklee β€” Private AI, finally observable." />
<meta name="twitter:description" content="Routing intelligence. True inference cost. Thermal state. Live, across every node. Built for Ollama and vLLM. Install in 60 seconds β€” nothing to configure." />
<meta name="twitter:card" content="summary_large_image" />
<meta property="og:image" content="https://wicklee.dev/og-image.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Wicklee β€” Private AI, finally observable. WES, the MPG for local AI. Ollama, vLLM, llama.cpp." />
<meta name="twitter:image" content="https://wicklee.dev/og-image.png" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Wicklee" />
<meta property="og:url" content="https://wicklee.dev/" />
<link rel="canonical" href="https://wicklee.dev/" />
<!-- Warm the origins on the cold-load critical path so DNS + TLS overlap the
HTML download instead of following it. Order matches first use. -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://clerk.wicklee.dev">
<!-- The font stylesheet is added by /fonts.js (async, same-origin β€” CSP has no
'unsafe-inline' so the usual onload="this.media='all'" trick is blocked).
Text paints in the system stack and swaps to Inter when it arrives, instead
of the whole page waiting on fonts.googleapis.com. -->
<script src="/fonts.js" async></script>
<noscript><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"></noscript>
<style>
body {
font-family: 'Inter', sans-serif;
background-color: #111827; /* gray-900 β€” lifted from gray-950 (#030712) for less oppressive dark */
color: #f9fafb;
}
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: #1f2937; }
::-webkit-scrollbar-thumb { background: #4b5563; border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: #6b7280; }
/* Blog post prose */
.blog-content { color: #d1d5db; line-height: 1.8; }
.blog-content h1, .blog-content h2, .blog-content h3,
.blog-content h4, .blog-content h5, .blog-content h6 {
color: #f9fafb; font-weight: 700; margin-top: 2em; margin-bottom: 0.6em; line-height: 1.3;
}
.blog-content h2 { font-size: 1.5rem; }
.blog-content h3 { font-size: 1.25rem; }
.blog-content p { margin-bottom: 1.25em; }
.blog-content a { color: #60a5fa; text-decoration: underline; text-underline-offset: 3px; }
.blog-content a:hover { color: #93c5fd; }
.blog-content strong { color: #f9fafb; font-weight: 600; }
.blog-content em { font-style: italic; }
.blog-content code {
background: #1f2937; color: #e5e7eb; padding: 0.15em 0.45em;
border-radius: 4px; font-size: 0.875em; font-family: 'JetBrains Mono', monospace;
}
.blog-content pre {
background: #111827; border: 1px solid #1f2937; border-radius: 12px;
padding: 1.25rem 1.5rem; overflow-x: auto; margin-bottom: 1.5em;
}
.blog-content pre code {
background: none; padding: 0; border-radius: 0; font-size: 0.875rem;
}
.blog-content blockquote {
border-left: 3px solid #3b82f6; padding-left: 1.25rem;
color: #9ca3af; margin: 1.5em 0; font-style: italic;
}
.blog-content ul { list-style: disc; padding-left: 1.5rem; margin-bottom: 1.25em; }
.blog-content ol { list-style: decimal; padding-left: 1.5rem; margin-bottom: 1.25em; }
.blog-content li { margin-bottom: 0.4em; }
.blog-content hr { border: none; border-top: 1px solid #1f2937; margin: 2em 0; }
.blog-content table { width: 100%; border-collapse: collapse; margin-bottom: 1.5em; font-size: 0.9rem; }
.blog-content th {
background: #1f2937; color: #f9fafb; font-weight: 600;
padding: 0.6rem 1rem; text-align: left; border-bottom: 1px solid #374151;
}
.blog-content td { padding: 0.6rem 1rem; border-bottom: 1px solid #1f2937; }
.blog-content tr:last-child td { border-bottom: none; }
</style>
<script type="module" crossorigin src="/assets/index-BNkSlwuG.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-C5mvYnXD.css">
</head>
<body>
<div id="root" role="application" aria-label="Wicklee dashboard"></div>
<!-- Paddle.js is not loaded here: it is only touched when a checkout opens,
so src/cloud/utils/loadPaddle.ts injects it on demand (CSP script-src already
allows https://*.paddle.com). -->
</body>
</html>