{children}
- );
-}
-
-// ── Prebuilt, reused snippets ────────────────────────────────────────────────
-
-export function InstallSnippet({ prompt = true }: { prompt?: boolean }) {
- return (
-
- Ship with confidence.
+
+
+
+ One line of middleware. Zero blind spots.
-
- Open source, self-hostable, and free to start. Find out about the incident
- before your customers do.
+
+ Self-host the whole stack, or sign in and start right here.
-
-
-
+
+
+
+
+
+
+ Start monitoring
+
+ Create a project, copy your API key, install the SDK.
+
+
+
+ Start monitoring
+
+
+
-
-
+
+
+
+
+
+ Self-host with Docker Compose
+
+ Docker Compose spins up Postgres, Redis, the API, and the worker in one command.
+
+
+
+ View on GitHub
+
+
+
-
-
+
+
);
}
diff --git a/components/landing/feature-grid.tsx b/components/landing/feature-grid.tsx
index 3d07015..65cc6aa 100644
--- a/components/landing/feature-grid.tsx
+++ b/components/landing/feature-grid.tsx
@@ -1,180 +1,72 @@
-import { Bell, Gauge, Sparkles, Users, Zap } from "lucide-react";
-import { Reveal } from "@/components/landing/reveal";
-import { SpotlightCard } from "@/components/landing/spotlight-card";
-import { InstallSnippet } from "@/components/landing/code-snippet";
-
-const UPTIME_DAYS = Array.from({ length: 44 }, (_, i) => (i === 29 ? "yellow" : i === 30 ? "red" : "green"));
-
-const TOP_USERS = [
- { id: "u_2291", reqs: "12.4k", color: "#3B82F6" },
- { id: "u_0144", reqs: "9.8k", color: "#A855F7" },
- { id: "u_3387", reqs: "7.1k", color: "#06B6D4" },
-];
-
-function Eyebrow({ children }: { children: React.ReactNode }) {
- return (
-
-
- {children}
-
- );
-}
-
-function cardShell(extra = "") {
- return `h-full rounded-2xl hairline hairline-hover p-6 ${extra}`;
-}
+import { RevealOnScroll } from "@/components/landing/reveal-on-scroll";
+import { ScreenshotFrame } from "@/components/landing/screenshot-frame";
+import { ALERT_CHANNELS, ChannelMarkIcon } from "@/components/landing/channel-marks";
+import { InstallSnippet } from "@/components/landing/install-snippet";
export function FeatureGrid() {
return (
-
-
- Platform
-
- Everything you need to know
-
what your API is doing
+
+
+
+ Every request, instrumented.
-
- Not another generic APM dashboard — built around the questions you actually ask at 2am.
+
+ Distributed traces, per-endpoint health scores, and alerts routed to the tools your team already uses.
-
+
-
- {/* Onboarding */}
-
-
-
-
- 60-second onboarding
-
- One line of middleware. No agents, no sidecars, no config files to maintain.
-
-
-
-
-
-
-
+
+
+
- {/* Endpoints / health */}
-
-
-
-
- Per-endpoint health
-
- p50 / p95 / p99, error rate and a rolling health score for every route you serve.
-
-
- {[
- { r: "/checkout", p: 92, c: "#22C55E" },
- { r: "/orders", p: 68, c: "#F59E0B" },
- { r: "/search", p: 34, c: "#EF4444" },
- ].map((e) => (
-
- {e.r}
-
-
-
- {e.p}
-
- ))}
-
-
-
-
+
+
+
+
+ Distributed tracing
+
+ Flame graphs and service maps for every request, down to the individual span. Trace IDs propagate across all five SDK adapters automatically.
+
+
+
- {/* AI incident summaries — featured, tall */}
-
-
-
-
-
-
- AI
-
-
- AI incident summaries
-
- When error rate or p99 latency breaks 3σ from baseline, an LLM reads the surrounding
- traffic and writes the postmortem before you do.
+
+
+
+
+ Endpoint health scores
+
+ Sort by error rate or p99 latency and catch a regression before it pages anyone.
-
-
-
-
- Critical
-
- 2m ago
-
-
- p99 latency spike on /api/checkout
-
-
- Latency jumped 6.4× starting 14:02 UTC, correlated with a downstream timeout from the
- payments provider. 312 requests affected. Recommend a circuit breaker around the
- payment client.
-
-
-
- Resolved in 4m
-
-
-
-
+
- {/* User-centric */}
-
-
-
-
- User-centric observability
-
- Every event carries a user ID. Know exactly who an incident hits, not just which route.
+
+
+ Alerts that reach your team
+
+ Threshold rules on error rate or latency, routed to the channel your on-call rotation actually watches.
-
- {TOP_USERS.map((u) => (
-
-
- {u.id}
- {u.reqs} req
-
- ))}
-
-
-
-
- {/* Alerts + status page combined-ish */}
-
-
-
-
- Alerts + status page
-
- Route anomalies to Slack, PagerDuty or a webhook — and ship a public status page for free.
-
-
-
- 99.97% uptime
- 44 days
-
-
- {UPTIME_DAYS.map((color, i) => (
-
- ))}
+
+ {ALERT_CHANNELS.map((channel) => (
+
+
+ {channel.label}
-
+ ))}
-
-
+
+
);
diff --git a/components/landing/footer.tsx b/components/landing/footer.tsx
index 6c33896..63e1c5a 100644
--- a/components/landing/footer.tsx
+++ b/components/landing/footer.tsx
@@ -1,6 +1,5 @@
import Link from "next/link";
import { LiveboardIcon } from "@/components/logo";
-import { GithubIcon } from "@/components/landing/github-icon";
interface FooterLink {
label: string;
@@ -13,45 +12,38 @@ const COLUMNS: { title: string; links: FooterLink[] }[] = [
title: "Product",
links: [
{ label: "Features", href: "#features" },
- { label: "How it works", href: "#how-it-works" },
- { label: "Status page", href: "/status" },
+ { label: "Anomaly detection", href: "#detection" },
+ { label: "Status page", href: "#status" },
],
},
{
title: "Developers",
links: [
{ label: "GitHub", href: "https://github.com/ryzrr/liveboard", external: true },
- { label: "JS SDK (npm)", href: "https://github.com/ryzrr/liveboard/tree/main/packages/sdk-js", external: true },
- { label: "Python SDK (PyPI)", href: "https://github.com/ryzrr/liveboard/tree/main/packages/sdk-python", external: true },
- ],
- },
- {
- title: "Account",
- links: [
- { label: "Sign in", href: "/auth/signin" },
- { label: "Dashboard", href: "/overview" },
+ { label: "JS SDK", href: "https://github.com/ryzrr/liveboard/tree/main/packages/sdk-js", external: true },
+ { label: "Python SDK", href: "https://github.com/ryzrr/liveboard/tree/main/packages/sdk-python", external: true },
],
},
];
-export function LandingFooter() {
+export function Footer() {
return (
-
+ One line of middleware. Zero blind spots.
-- Open source, self-hostable, and free to start. Find out about the incident - before your customers do. +
+ Self-host the whole stack, or sign in and start right here.
-Start monitoring
++ Create a project, copy your API key, install the SDK. +
+Self-host with Docker Compose
++ Docker Compose spins up Postgres, Redis, the API, and the worker in one command. +
+
- Everything you need to know
-
what your API is doing
+
+
+
+ Every request, instrumented.
-
- Not another generic APM dashboard — built around the questions you actually ask at 2am.
+
+ Distributed traces, per-endpoint health scores, and alerts routed to the tools your team already uses.
-
+ Every request, instrumented.
-- Not another generic APM dashboard — built around the questions you actually ask at 2am. +
+ Distributed traces, per-endpoint health scores, and alerts routed to the tools your team already uses.
-60-second onboarding
-- One line of middleware. No agents, no sidecars, no config files to maintain. -
-Per-endpoint health
-- p50 / p95 / p99, error rate and a rolling health score for every route you serve. -
-Distributed tracing
++ Flame graphs and service maps for every request, down to the individual span. Trace IDs propagate across all five SDK adapters automatically. +
+AI incident summaries
-- When error rate or p99 latency breaks 3σ from baseline, an LLM reads the surrounding - traffic and writes the postmortem before you do. +
Endpoint health scores
++ Sort by error rate or p99 latency and catch a regression before it pages anyone.
- -- p99 latency spike on /api/checkout -
-- Latency jumped 6.4× starting 14:02 UTC, correlated with a downstream timeout from the - payments provider. 312 requests affected. Recommend a circuit breaker around the - payment client. -
-User-centric observability
-
- Every event carries a user ID. Know exactly who an incident hits, not just which route.
+
+ Threshold rules on error rate or latency, routed to the channel your on-call rotation actually watches.
- Route anomalies to Slack, PagerDuty or a webhook — and ship a public status page for free.
- Alerts that reach your team
+ Alerts + status page
-