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.
| Page | Score | LCP | CLS | TBT | Checked |
|---|---|---|---|---|---|
| ciunkos.com | 94 | 823 ms | 0 | 276 ms | Oct 21 |
| /ai-prompt-testing | 100 | 555 ms | 0 | 0 ms | Oct 21 |
| /ai-visibility | 100 | 539 ms | 0 | 0 ms | Oct 21 |
| /app-store-ready | 100 | 557 ms | 0 | 0 ms | Oct 21 |
| /bimi-checker | 100 | 543 ms | 0 | 0 ms | Oct 21 |
| /business-idea-validator | 100 | 549 ms | 0 | 0 ms | Oct 21 |
| /core-web-vitals-monitor | 100 | 648 ms | 0 | 0 ms | Oct 21 |
| /email-list-validator | 100 | 527 ms | 0 | 0 ms | Oct 21 |
| /email-signature-generator | 100 | 511 ms | 0 | 0 ms | Oct 21 |
| /email-spam-test | 100 | 582 ms | 0 | 0 ms | Oct 21 |
| /engagement-configurator | 100 | 545 ms | 0 | 2 ms | Oct 21 |
| /generator-dashboardu-posthog | 100 | 661 ms | 0 | 0 ms | Oct 21 |
| /generator-stopki-email | 100 | 468 ms | 0 | 0 ms | Oct 21 |
| /glossary | 100 | 592 ms | 0 | 0 ms | Oct 21 |
| /hire-me | 100 | 931 ms | 0 | 0 ms | Oct 21 |
| /kalkulator-b2b-vs-uop-2026 | 94 | 371 ms | 0 | 270 ms | Oct 21 |
| /korpo-tlumacz | 86 | 730 ms | 0 | 491 ms | Oct 21 |
| /ksef-invoice-validator | 100 | 538 ms | 0 | 0 ms | Oct 21 |
| /local-llm-calculator | 100 | 551 ms | 0 | 42 ms | Oct 21 |
| /mcp-tools-from-openapi | 100 | 478 ms | 0 | 0 ms | Oct 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
Add up to 10 pages
Paste a URL. It is private by default; switch on Public to get a results page and a badge.
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.
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
What it is not
- Lab data, not field data. Your real users (Chrome UX Report) can see different numbers, especially for INP.
- The score is an estimate in the style of Lighthouse: the same curves for FCP, LCP, TBT and CLS, without Speed Index, and throttling applied live rather than simulated. On my pages it lands within a few points of Lighthouse on a laptop; PageSpeed Insights can differ more.
- One location (a Cloudflare data center) and one device profile (a mid-range phone).
- It measures how fast a page loads. It does not look at your code, your security or your SEO.
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.
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-meWhat happens to your data
- Your email is used only to sign in and for slowdown emails. You can turn the emails off with one click.
- Monitors are private until you switch them to Public.
- Checks are kept 400 days, screenshots 90 days. Deleting a monitor or the account deletes its checks and screenshots.
- No password and no card. Analytics in PostHog (EU), with the text on the page masked.
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.
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.
