HTML
Copy
<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#9ca3af] uppercase">Glow-border icon grid</span>
<section class="relative overflow-hidden rounded-[28px] border border-[#1f2937] px-[clamp(20px,5vw,64px)] py-[clamp(40px,6vw,88px)] leading-[1.55] text-[#d1d5db] [background:radial-gradient(60%_50%_at_50%_0%,rgba(34,211,238,.14),transparent_70%),#0b0f17]" aria-labelledby="t-dk-grid">
<div class="mx-auto max-w-[720px] text-center">
<p class="font-mono text-[.82rem] leading-[1.4] font-semibold tracking-[.04em] text-[#22d3ee]">Lumen observability</p>
<h2 class="mt-3 text-[clamp(1.9rem,1.2rem+2.6vw,3rem)] leading-[1.08] font-extrabold tracking-[-.03em] text-[#f3f4f6]" id="t-dk-grid">See every request, <span class="block bg-linear-90 from-[#67e8f9] to-[#a3e635] bg-clip-text text-[#a3e635] [-webkit-text-fill-color:transparent]">from edge to database</span></h2>
<p class="mx-auto mt-4 max-w-[56ch] text-[1.08rem] text-[#9ca3af]">Traces, logs and query insights in one place, built for teams who run their own services.</p>
</div>
<ul class="mt-[52px] grid grid-cols-1 gap-[18px] sm:grid-cols-2 lg:grid-cols-3">
<li class="flex flex-col items-start rounded-[20px] border border-transparent p-[26px] [background:linear-gradient(#111827,#111827)_padding-box,linear-gradient(140deg,rgba(34,211,238,.55),rgba(163,230,53,.18)_38%,#1f2937_60%)_border-box] transition duration-250 hover:-translate-y-0.5 hover:shadow-[0_0_0_1px_rgba(34,211,238,.25),0_24px_60px_-24px_rgba(34,211,238,.35)] motion-reduce:transition-none motion-reduce:hover:translate-y-0"><span class="mb-[18px] grid size-11 place-items-center rounded-xl bg-[rgba(34,211,238,.12)] text-[#67e8f9] shadow-[inset_0_0_0_1px_rgba(34,211,238,.3)]"><svg class="size-[22px]" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg></span><h3 class="text-[1.08rem] leading-[1.3] font-bold text-[#f3f4f6]">Distributed tracing</h3><p class="mt-2 flex-1 text-[.96rem] text-[#9ca3af]">Follow one request across forty services, with timings for every hop and the query that slowed it down.</p><p class="mt-[18px] rounded-lg border border-[#1f2937] bg-[#0b1220] px-2.5 py-1 font-mono text-[.78rem] leading-[1.4] font-medium text-[#bef264]">OpenTelemetry native</p></li>
<li class="flex flex-col items-start rounded-[20px] border border-transparent p-[26px] [background:linear-gradient(#111827,#111827)_padding-box,linear-gradient(140deg,rgba(34,211,238,.55),rgba(163,230,53,.18)_38%,#1f2937_60%)_border-box] transition duration-250 hover:-translate-y-0.5 hover:shadow-[0_0_0_1px_rgba(34,211,238,.25),0_24px_60px_-24px_rgba(34,211,238,.35)] motion-reduce:transition-none motion-reduce:hover:translate-y-0"><span class="mb-[18px] grid size-11 place-items-center rounded-xl bg-[rgba(34,211,238,.12)] text-[#67e8f9] shadow-[inset_0_0_0_1px_rgba(34,211,238,.3)]"><svg class="size-[22px]" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="m4 17 6-6-6-6M12 19h8"/></svg></span><h3 class="text-[1.08rem] leading-[1.3] font-bold text-[#f3f4f6]">Logs linked to traces</h3><p class="mt-2 flex-1 text-[.96rem] text-[#9ca3af]">Jump from a slow span to the exact log lines it wrote, without copying an ID between tabs.</p><p class="mt-[18px] rounded-lg border border-[#1f2937] bg-[#0b1220] px-2.5 py-1 font-mono text-[.78rem] leading-[1.4] font-medium text-[#bef264]">Searches 2 TB in 1.4 s</p></li>
<li class="flex flex-col items-start rounded-[20px] border border-transparent p-[26px] [background:linear-gradient(#111827,#111827)_padding-box,linear-gradient(140deg,rgba(34,211,238,.55),rgba(163,230,53,.18)_38%,#1f2937_60%)_border-box] transition duration-250 hover:-translate-y-0.5 hover:shadow-[0_0_0_1px_rgba(34,211,238,.25),0_24px_60px_-24px_rgba(34,211,238,.35)] motion-reduce:transition-none motion-reduce:hover:translate-y-0"><span class="mb-[18px] grid size-11 place-items-center rounded-xl bg-[rgba(34,211,238,.12)] text-[#67e8f9] shadow-[inset_0_0_0_1px_rgba(34,211,238,.3)]"><svg class="size-[22px]" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg></span><h3 class="text-[1.08rem] leading-[1.3] font-bold text-[#f3f4f6]">Alerts that explain themselves</h3><p class="mt-2 flex-1 text-[.96rem] text-[#9ca3af]">Every alert arrives with the deploy, the error and the graph that triggered it.</p><p class="mt-[18px] rounded-lg border border-[#1f2937] bg-[#0b1220] px-2.5 py-1 font-mono text-[.78rem] leading-[1.4] font-medium text-[#bef264]">Chat, email, webhooks</p></li>
<li class="flex flex-col items-start rounded-[20px] border border-transparent p-[26px] [background:linear-gradient(#111827,#111827)_padding-box,linear-gradient(140deg,rgba(34,211,238,.55),rgba(163,230,53,.18)_38%,#1f2937_60%)_border-box] transition duration-250 hover:-translate-y-0.5 hover:shadow-[0_0_0_1px_rgba(34,211,238,.25),0_24px_60px_-24px_rgba(34,211,238,.35)] motion-reduce:transition-none motion-reduce:hover:translate-y-0"><span class="mb-[18px] grid size-11 place-items-center rounded-xl bg-[rgba(34,211,238,.12)] text-[#67e8f9] shadow-[inset_0_0_0_1px_rgba(34,211,238,.3)]"><svg class="size-[22px]" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"/><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"/></svg></span><h3 class="text-[1.08rem] leading-[1.3] font-bold text-[#f3f4f6]">Query insights</h3><p class="mt-2 flex-1 text-[.96rem] text-[#9ca3af]">Spot N+1 queries and missing indexes from production traffic, ranked by time wasted.</p><p class="mt-[18px] rounded-lg border border-[#1f2937] bg-[#0b1220] px-2.5 py-1 font-mono text-[.78rem] leading-[1.4] font-medium text-[#bef264]">Postgres and MySQL</p></li>
<li class="flex flex-col items-start rounded-[20px] border border-transparent p-[26px] [background:linear-gradient(#111827,#111827)_padding-box,linear-gradient(140deg,rgba(34,211,238,.55),rgba(163,230,53,.18)_38%,#1f2937_60%)_border-box] transition duration-250 hover:-translate-y-0.5 hover:shadow-[0_0_0_1px_rgba(34,211,238,.25),0_24px_60px_-24px_rgba(34,211,238,.35)] motion-reduce:transition-none motion-reduce:hover:translate-y-0"><span class="mb-[18px] grid size-11 place-items-center rounded-xl bg-[rgba(34,211,238,.12)] text-[#67e8f9] shadow-[inset_0_0_0_1px_rgba(34,211,238,.3)]"><svg class="size-[22px]" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="4" y="4" width="16" height="16" rx="2"/><rect x="9" y="9" width="6" height="6"/><path d="M9 1v3M15 1v3M9 20v3M15 20v3M20 9h3M20 14h3M1 9h3M1 14h3"/></svg></span><h3 class="text-[1.08rem] leading-[1.3] font-bold text-[#f3f4f6]">A light agent</h3><p class="mt-2 flex-1 text-[.96rem] text-[#9ca3af]">A 6 MB agent that samples sensibly, so tracing can stay on in production.</p><p class="mt-[18px] rounded-lg border border-[#1f2937] bg-[#0b1220] px-2.5 py-1 font-mono text-[.78rem] leading-[1.4] font-medium text-[#bef264]">p99 overhead under 2 ms</p></li>
<li class="flex flex-col items-start rounded-[20px] border border-transparent p-[26px] [background:linear-gradient(#111827,#111827)_padding-box,linear-gradient(140deg,rgba(34,211,238,.55),rgba(163,230,53,.18)_38%,#1f2937_60%)_border-box] transition duration-250 hover:-translate-y-0.5 hover:shadow-[0_0_0_1px_rgba(34,211,238,.25),0_24px_60px_-24px_rgba(34,211,238,.35)] motion-reduce:transition-none motion-reduce:hover:translate-y-0"><span class="mb-[18px] grid size-11 place-items-center rounded-xl bg-[rgba(34,211,238,.12)] text-[#67e8f9] shadow-[inset_0_0_0_1px_rgba(34,211,238,.3)]"><svg class="size-[22px]" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg></span><h3 class="text-[1.08rem] leading-[1.3] font-bold text-[#f3f4f6]">Your data, your region</h3><p class="mt-2 flex-1 text-[.96rem] text-[#9ca3af]">Self-host, or pick the EU or US cloud. Personal data is masked before it leaves your servers.</p><p class="mt-[18px] rounded-lg border border-[#1f2937] bg-[#0b1220] px-2.5 py-1 font-mono text-[.78rem] leading-[1.4] font-medium text-[#bef264]">SOC 2 Type II</p></li>
</ul>
</section></div>
<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#9ca3af] uppercase">Feature list beside a code panel</span>
<section class="relative overflow-hidden rounded-[28px] border border-[#1f2937] px-[clamp(20px,5vw,64px)] py-[clamp(40px,6vw,88px)] leading-[1.55] text-[#d1d5db] grid grid-cols-1 items-center gap-[clamp(36px,6vw,72px)] [background:radial-gradient(50%_60%_at_100%_100%,rgba(163,230,53,.1),transparent_70%),#0b0f17] lg:grid-cols-[5fr_7fr]" aria-labelledby="t-dk-sdk">
<div>
<p class="font-mono text-[.82rem] leading-[1.4] font-semibold tracking-[.04em] text-[#22d3ee]">Lumen SDK</p>
<h2 class="mt-3 text-[clamp(1.9rem,1.2rem+2.6vw,3rem)] leading-[1.08] font-extrabold tracking-[-.03em] text-[#f3f4f6]" id="t-dk-sdk">Instrument a service in four lines</h2>
<ul class="mt-[30px] grid gap-[22px]">
<li class="grid grid-cols-[auto_1fr] gap-x-3.5"><svg class="row-span-2 size-6 rounded-full bg-[rgba(163,230,53,.14)] p-1 text-[#a3e635]" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg><h3 class="text-[1.08rem] leading-[1.3] font-bold text-[#f3f4f6]">Automatic spans</h3><p class="mt-1 text-[.96rem] text-[#9ca3af]">HTTP, gRPC, queues and the common database drivers are traced as soon as the SDK loads.</p></li>
<li class="grid grid-cols-[auto_1fr] gap-x-3.5"><svg class="row-span-2 size-6 rounded-full bg-[rgba(163,230,53,.14)] p-1 text-[#a3e635]" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg><h3 class="text-[1.08rem] leading-[1.3] font-bold text-[#f3f4f6]">Sampling you control</h3><p class="mt-1 text-[.96rem] text-[#9ca3af]">Keep every error and slow request, and a fraction of the rest, set per service.</p></li>
<li class="grid grid-cols-[auto_1fr] gap-x-3.5"><svg class="row-span-2 size-6 rounded-full bg-[rgba(163,230,53,.14)] p-1 text-[#a3e635]" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg><h3 class="text-[1.08rem] leading-[1.3] font-bold text-[#f3f4f6]">No vendor lock-in</h3><p class="mt-1 text-[.96rem] text-[#9ca3af]">Data goes out as OpenTelemetry, so you can send it somewhere else tomorrow.</p></li>
</ul>
<a class="mt-8 inline-flex min-h-12 items-center gap-2 rounded-xl bg-[#a3e635] px-[22px] font-bold text-[#0b0f17] transition-colors duration-200 hover:bg-[#bef264] focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-[#a3e635] motion-reduce:transition-none" href="#">Read the quickstart <svg class="size-[18px]" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a>
</div>
<div class="overflow-hidden rounded-[18px] border border-[#1f2937] bg-[#0b1120] shadow-[0_40px_80px_-40px_rgba(0,0,0,.8)]">
<div class="flex items-center gap-[7px] border-b border-[#1f2937] px-4 py-3 font-mono text-[.8rem] leading-none font-medium text-[#9ca3af]" aria-hidden="true"><i class="size-2.5 rounded-full bg-[#374151]"></i><i class="size-2.5 rounded-full bg-[#374151]"></i><i class="size-2.5 rounded-full bg-[#374151]"></i><span class="ml-2">server.ts</span></div>
<pre class="p-4 whitespace-pre-wrap wrap-anywhere font-mono text-[.8rem] leading-[1.7] font-medium text-[#d1d5db] sm:p-5 sm:text-[.9rem]"><code><span class="text-[#c4b5fd]">import</span> { lumen } <span class="text-[#c4b5fd]">from</span> <span class="text-[#bef264]">"@lumen/node"</span>;
<span class="text-[#9ca3af]">// before your app starts</span>
lumen.<span class="text-[#67e8f9]">init</span>({
<span class="text-[#67e8f9]">service</span>: <span class="text-[#bef264]">"checkout-api"</span>,
<span class="text-[#67e8f9]">sampleRate</span>: <span class="text-[#fda4af]">0.2</span>,
});</code></pre>
<div class="border-t border-[#1f2937] px-5 pt-4 pb-5 font-mono text-[.8rem] leading-[1.4] font-medium" role="img" aria-label="Trace received: 4 spans, 182 ms in total, slowest span db.query orders at 96 ms">
<p class="mb-3 text-[#9ca3af]"><b class="font-semibold text-[#bef264]">●</b> Trace received · 4 spans · 182 ms</p>
<div class="grid grid-cols-[100px_1fr_48px] items-center gap-2 py-[5px] text-[#d1d5db] sm:grid-cols-[130px_1fr_52px] sm:gap-3"><span>GET /checkout</span><i class="h-2 rounded bg-linear-90 from-[#22d3ee] to-[#67e8f9]" style="margin-left:0%;width:100%"></i><span class="text-right text-[#9ca3af]">182 ms</span></div>
<div class="grid grid-cols-[100px_1fr_48px] items-center gap-2 py-[5px] text-[#d1d5db] sm:grid-cols-[130px_1fr_52px] sm:gap-3"><span>auth.verify</span><i class="h-2 rounded bg-linear-90 from-[#22d3ee] to-[#67e8f9]" style="margin-left:0%;width:7%"></i><span class="text-right text-[#9ca3af]">12 ms</span></div>
<div class="grid grid-cols-[100px_1fr_48px] items-center gap-2 py-[5px] text-[#d1d5db] sm:grid-cols-[130px_1fr_52px] sm:gap-3"><span>cart.load</span><i class="h-2 rounded bg-linear-90 from-[#22d3ee] to-[#67e8f9]" style="margin-left:7%;width:26%"></i><span class="text-right text-[#9ca3af]">48 ms</span></div>
<div class="grid grid-cols-[100px_1fr_48px] items-center gap-2 py-[5px] text-[#d1d5db] sm:grid-cols-[130px_1fr_52px] sm:gap-3"><span>db.query orders</span><i class="h-2 rounded bg-linear-90 from-[#f59e0b] to-[#fbbf24]" style="margin-left:33%;width:53%"></i><span class="text-right text-[#9ca3af]">96 ms</span></div>
</div>
</div>
</section></div>