Free for site owners, agencies and developers

Know the day your pages get slower

Vitals Desk is a free Core Web Vitals monitor by Przemysław Zalewski, an independent engineer.

Every day it loads each page three times in a real Chrome on Cloudflare, as a mid-range phone on a slow mobile connection, and keeps LCP, CLS and TBT with a screenshot. When a page gets slower, you get one email with what changed.

Live: my own pages, checked today

These are public monitors of ciunkos.com. Each row links to the latest check with its screenshot.

PageScoreLCPCLSTBTChecked
ciunkos.com94823 ms0276 msOct 21
/ai-prompt-testing100555 ms00 msOct 21
/ai-visibility100539 ms00 msOct 21
/app-store-ready100557 ms00 msOct 21
/bimi-checker100543 ms00 msOct 21
/business-idea-validator100549 ms00 msOct 21
/core-web-vitals-monitor100648 ms00 msOct 21
/email-list-validator100527 ms00 msOct 21
/email-signature-generator100511 ms00 msOct 21
/email-spam-test100582 ms00 msOct 21
/engagement-configurator100545 ms02 msOct 21
/generator-dashboardu-posthog100661 ms00 msOct 21
/generator-stopki-email100468 ms00 msOct 21
/glossary100592 ms00 msOct 21
/hire-me100931 ms00 msOct 21
/kalkulator-b2b-vs-uop-202694371 ms0270 msOct 21
/korpo-tlumacz86730 ms0491 msOct 21
/ksef-invoice-validator100538 ms00 msOct 21
/local-llm-calculator100551 ms042 msOct 21
/mcp-tools-from-openapi100478 ms00 msOct 21

What it measures

LCP, Largest Contentful Paint
When the biggest image or text block shows up. Google calls it good under 2.5 s. Each check names the element, so you know what to make faster.
CLS, Cumulative Layout Shift
How much the page jumps while it loads. Good is under 0.1. The check scrolls to the bottom, so late banners and lazy images count too.
TBT, Total Blocking Time
How long JavaScript blocks the page after the first paint. INP needs real taps and clicks, which a lab check cannot make, so TBT is the lab stand-in for INP. Good is under 200 ms.
FCP and TTFB
First paint and the server response time, to tell a slow server from a slow page.

How it works

  1. Add up to 10 pages

    Paste a URL. It is private by default; switch on Public to get a results page and a badge.

  2. A check every day

    Three loads in a fresh browser, no cache, CPU slowed 2× (calibrated against Lighthouse), 1.6 Mbps down with 150 ms latency. The median goes on record with a screenshot.

  3. One email when it gets slower

    Compared with the previous check and the 7-day median. LCP up 20% and 250 ms, TBT up 100 ms, CLS up 0.05 or the score down 10 points. At most one email a day per page.

In numbers

3loads per check, the median counts
10pages per account, checked daily
400 daysof history on the chart

What it is not

Public results, a badge and JSON

A monitor switched to Public gets its own page with the history and every check. Put the badge on your site, or read the JSON on your server and show the numbers in your footer. Results pages are not indexed by search engines.

Badge: ciunkos.com/hire-me

Paste into your HTML:

<a href="https://ciunkos.com/checks/ciunkos.com"><img src="https://ciunkos.com/checks/ciunkos.com/badge.svg?path=/hire-me" width="360" height="20" alt="Core Web Vitals" loading="lazy"></a>

JSON for a server-side strip:

https://ciunkos.com/checks/ciunkos.com/latest.json?path=/hire-me

What happens to your data

Want the numbers green?

The monitor tells you when a page gets slower. Making it fast is work: the LCP image and fonts, JavaScript that blocks the main thread, layout that jumps, caching and the server. I do it as a short fixed-scope job, starting from your checks, with a re-check of every page after each change. I reply within 24 hours on working days, personally. If I am late, the first hour of work is free.

Speed fixes: price and start date →

Questions

Why does my score differ from PageSpeed Insights?

PageSpeed Insights runs Lighthouse on Google servers and simulates a slow network; Vitals Desk slows the network and the CPU live in Chrome on Cloudflare and leaves out Speed Index. Absolute numbers can differ by a few points; the trend from day to day is what this tool is for.

Where is INP?

Interaction to Next Paint needs real taps and clicks. A lab check has none, so it reports Total Blocking Time, the lab metric that tracks INP best. For INP from real users, look at the Chrome UX Report or your analytics.

Can anyone make my site public here?

Anyone can add any public URL to their own account and switch it to Public, the same way anyone can run PageSpeed Insights on it. Results pages are not indexed. If a page here should not exist, use the report link in its footer and I will remove it.

Which pages can it check?

Public http and https pages on ports 80 and 443. Addresses on private networks, localhost and IP addresses are blocked, and the name is resolved before every check.

How much does it cost?

Nothing. It runs on my Cloudflare account; the limits keep it that way: 10 pages per account, a check a day, and up to 3 extra checks a day per page.

Przemysław Zalewski

How I work

Przemysław Zalewski · 15+ years shipping software

“a true bias for action” client CTO, public LinkedIn recommendation

My pledge

All principles and risk levels →

Core Web Vitals of this page, measured daily by Vitals Desk