Product pages

Web Vitals

Performance Score donut, per-vital p75 tiles, score distribution, worst pages by metric, ranges, and empty copy.

Web Vitals shows real-user Core Web Vitals and a blended Performance Score (0–100) for the selected window. The Insights tab self-fetches the dedicated web-vitals API and pairs a donut with the shared WebVitalsCard breakdown used on the Dashboard.

Tab: Insights → Web Vitals
Subtitle in UI: describes Core Web Vitals (LCP, INP, CLS, FCP, TTFB) scored into a blended Performance Score.

Insights Web Vitals
Screenshots use a synthetic Docs Demo project, not customer data.

Range

Pills: 24h · 7d · 14d · 30d
(No 1h on this tab.)

Default: 14d.

Request: GET /api/projects/:id/web-vitals?startDate=&endDate= (ISO window computed from the pill).

Layout

Left — Performance Score donut

Card title: Performance Score

  • Weighted arcs for TTFB · LCP · FCP · INP · CLS
  • Center: overall score number + rating label
  • Ratings from score: Good (≥90) · Meh (≥50) · Poor (<50) · No data (null)

Tooltip per segment: p75, Score, Weight %.

Empty: No Web Vitals recorded in this window.
Loading: Loading…

Right — Web Vitals card

Card title / subtitle: Web Vitals / Performance Score & Core Web Vitals (p75)

Help popover explains the 0–100 blend across LCP, INP, CLS, FCP, TTFB; green 90+, yellow 50–89, red under 50.

When samples exist:

  1. Overall score (large) + rating + score distribution stacked bar (Good / Meh / Poor % of page loads, total page loads count)
  2. Per-metric tiles (order from API summary): metric code, weight %, p75 value, score · sample count, full name
    • LCP — Largest Contentful Paint
    • INP — Interaction to Next Paint
    • CLS — Cumulative Layout Shift (unitless; others in ms/s)
    • FCP — First Contentful Paint
    • TTFB — Time to First Byte
  3. Worst pages by score — metric tabs LCP · INP · CLS · FCP · TTFB (default LCP). Up to 8 paths sorted by lowest score. Each row: path, rating dot, p75, score, samples.

Empty (card body): No Web Vitals captured in this window.
Per-metric pages empty: Not enough per-page samples for {metric}.

How to use after a deploy

  1. Stamp a release in the SDK.
  2. Open Web Vitals on 7d or 14d so enough page loads accumulate.
  3. Watch overall score and the Good/Meh/Poor distribution shift.
  4. Use Worst pages for the vital that regressed; open Replays / Traces on those routes.

Data requirements

Needs Web Vitals samples from the SDK — not pageviews alone. See SDK web vitals & tracing.

Beginner gotchas

  1. Insights Frontend Overview does not embed this donut; use this tab (or Dashboard’s Web Vitals card) for vitals.
  2. Short windows on low traffic show No Web Vitals recorded / captured in this window.
  3. CLS is unitless; do not compare its p75 to LCP milliseconds.
  4. Tab selection is not in the URL — refresh returns to Frontend Overview.