Analysis

Web Vitals & errors

Core Web Vitals

Collected from real visits via PerformanceObserver — no extra library, which is why the whole tracker is still 2.4 KB.

MetricWhat it measures
LCPLargest Contentful Paint — when the main content appeared.
INPInteraction to Next Paint — how sluggish interactions feel.
CLSCumulative Layout Shift — how much the page jumps around.
FCPFirst Contentful Paint — first pixel of content.
TTFBTime to First Byte — server response time.

Values are reported once per page, on exit: LCP and CLS keep changing during a visit, so sending early would record the wrong number.

We report p75, not the average. A handful of slow visits drags an average and produces a "nothing is wrong" illusion. Google's own thresholds are defined on p75.

Error tracking

Uncaught errors and unhandled promise rejections are captured with message, file and line. The same error is reported once per page, and at most ten distinct errors per page.

Stack traces are never collected. They routinely carry user data — URLs, and form values captured in closures. Message, file and line are enough to locate a bug without shipping that.