The speed your visitors actually get.
One npm package reports LCP, INP, CLS, FCP and TTFB from real visits. The report names the slow pages, components and visitors, and the deploy that made it worse.
- Measured from real visitors
- Web Vitals at p75 from the visits your site actually got, each rated Good, Needs work or Poor.
- One npm package
- For any site, for React, or for Next.js. The install steps arrive with your environment’s key filled in.
- Bots out, IP never stored
- Bots, headless browsers and Lighthouse runs are dropped before anything is counted.
- Deploys marked
- Each deploy is compared with the 24 hours before it, so the one that made things worse is named.
From the number to the cause
Pick a capability to see it drawn from a sample project.
LCP, INP, CLS, FCP and TTFB, each Good, Needs work or Poor. Every metric carries an ⓘ: what it is, where good and poor start, and what usually makes it slow.
Where real visits disagree with the lab
After a release, for one group of visitors, on one page.
Find the deploy that made LCP worse
Every deploy is compared with the 24 hours before it on LCP, INP, CLS and error rate. In the sample project, v2.4.1 made LCP 18 % worse, and v2.4.2 took it back.
Visitors in one country have it worst
An overall p75 can look fine while one group waits. In the sample project LCP is 2.1 s overall and 4.3 s in Brazil — pick that row and every chart on the report follows it.
From a slow page to people using it
“Watch people use this page” opens a new usability study on that URL. The page the numbers point at is the one testers try next.
Measured, then explained
- p75of real visits, not a lab run
What visitors measured
Three visits in four were this fast or faster — the figure the Good, Needs work and Poor thresholds are set against.
- +18 %Got worsev2.4.1 · sample project
A deploy named, not suspected
Better or worse only past a 10 % change with at least 5 samples on each side. Anything less says no change, or not enough data.
- Measured itemsAI order — optional
AI that cannot invent
“Order and explain with AI” can only reorder the measured items it is given. It never adds a page, and its answer is saved.
Three packages and your CI
Already published on npm. Pick the one that matches the site.
@nacew/performance-web
For any website. Web Vitals, pages and frontend errors.
@nacew/performance-react
Adds page and component render timings for React apps.
@nacew/performance-next
The wrapper for Next.js apps.
Your CI
Marks each deploy with one POST and a deploy token — or mark it by hand.
The rest of the pillar, and beside it
- Performance testingAPI suites, load tests, PageSpeed and monitors against your verified domain.Synthetic · on a schedule
- JourneysThe paths real visitors take through your live site, and where they struggle.Real visitors · real paths
- AI testingA cohort of AI testers tries the slow page’s task, thinking aloud.Simulation · Live
What a front-end lead asks first
What does the SDK collect?
LCP, INP, CLS, FCP and TTFB from each visit, the page it happened on, frontend errors, and the visitor’s device, browser and country — plus page and component render timings with the React package. Ids in URLs are grouped, so /orders/123 counts as /orders/:id. Events are kept for 1 to 90 days, 30 by default.
Do you store visitors’ IP addresses?
No. The IP is never stored. Bots, headless browsers and Lighthouse — including our own PageSpeed runs — are dropped before anything is counted.
What counts as a regression?
Each deploy is compared with the 24 hours before it on LCP, INP, CLS and error rate. It is called better or worse only past a 10 % change with at least 5 samples on each side.
Can the AI make up a fix?
No. It is given the measured items and can only reorder and explain them; anything it returns that was not on the list is dropped. It is optional, and its answer is saved.
Test from your pocket
The uTestMe tester app runs a study on a phone. Taps and screens recorded, consent first, results in the same view.
- Tap tracking
- Screen recording
- Consent first