Portfolio · INP & interaction latency · 10 engagements
A quarter-second of nothing.
INP is the latency of the slowest taps your real visitors make, at the 75th percentile of pages. Good is 200 ms or less.
BeforeAfterFailing, above 200 ms
Outcomes recorded as "green" are Search Console-validated under the threshold and drawn just inside it.
On March 12, 2024, Interaction to Next Paint replaced First Input Delay as the Core Web Vitals responsiveness metric. Every engagement on this ruler is field data: CrUX, Search Console, or RUM the client could re-run.
Where a tap goes to die.
INP is one number covering three separate stalls. Every fix on this page is an attack on one of them.
- 01
Input delay
The browser is busy when the tap lands, so it queues the event. Tag-manager containers and event-tracking scripts are the usual suspects: one publisher's GTM held the main thread for 440 ms at load.
- 02
Processing delay
The event handlers themselves run slowly. Cloudflare Rocket Loader's document-level handlers cost ~130 ms of a 189 ms frame on termly.io, on every click and tap, while making the lab score look better.
- 03
Presentation delay
The handler finished, but the next frame waits on style, layout, or paint. Long tasks and render-heavy widgets (a reviews widget pushed some pages past 500 ms) show up here.
6 opened cases · freeze cause on the left, shipped fix on the right
6 cases: what froze, what fixed it.
No before-and-after screenshots here. Interaction latency does not screenshot well: it is measured in real visitors' browsers, so each case below is the measurement, the cause it pointed to, and the fix that moved it.
CASE 01
bolde.com (Sweetn)
Relationship and lifestyle media · WordPress
Feb 2026 · green in six weeks
INP green Mar 1, 2026
GSC-validated · CLS followed nine days earlier
CASE 01
bolde.com (Sweetn)
Relationship and lifestyle media · WordPress
Feb 2026 · green in six weeks
INP green Mar 1, 2026
GSC-validated · CLS followed nine days earlier
Freeze cause · measured
Tag-manager container blocking the main thread for 440 ms at load. Every headline tap queued behind marketing scripts.
Fix · shipped
GTM diet: stale marketing scripts pulled out of the critical path; DebugBear RUM installed so regressions surface in hours.
Freeze cause · measured
Ad-refresh scripts re-freezing the page mid-read, a 118 ms stall every few seconds while people read.
Fix · shipped
Raptive/AdThrive ads moved to delayed loading; the recurring freezes ended with the refresh timing.
“Excellent work! We hired Milan to improve our core web vitals. He was super efficient and did an amazing job!”
CASE 02
EmbassyPages
Embassy-info directory · WordPress
Aug 2023 – Mar 2024 · ahead of the INP rollout
Elements 400-700 → 150-200 ms
Rocket Loader caught adding ~306 ms
CASE 02
EmbassyPages
Embassy-info directory · WordPress
Aug 2023 – Mar 2024 · ahead of the INP rollout
Elements 400-700 → 150-200 ms
Rocket Loader caught adding ~306 ms
Freeze cause · measured
Cloudflare Rocket Loader, a tool that exists to speed sites up, was adding ~306 ms of interaction latency on its own.
Fix · shipped
Removed. A redesigned template re-measured 264 ms over 7 days while the follow-up work landed.
Freeze cause · measured
Country-page interactions (menu, expanders) taking 400-700 ms on real visits, tracked in the client's own RUM data.
Fix · shipped
JavaScript dependency reduction across templates; the same elements measured 150-200 ms after.
“Excellent reduction of JavaScript dependency on website, effectively reducing our INP drastically. Milan is highly recommended!”
CASE 03
termly.io
Cookie-consent SaaS · own WordPress site
Apr – Jul 2026
CLS and INP green, GSC-validated
July 2026 · 20 French template URLs
CASE 03
termly.io
Cookie-consent SaaS · own WordPress site
Apr – Jul 2026
CLS and INP green, GSC-validated
July 2026 · 20 French template URLs
Freeze cause · measured
Rocket Loader again: DebugBear LoAF attribution showed its document-level handlers costing ~130 ms of a 189 ms slow frame, on every click and tap.
Fix · shipped
Rocket Loader dropped site-wide; the client advised to keep it off despite the friendlier lab score it produces.
Freeze cause · measured
A 208 ms GSC INP group, split between input delay and presentation delay, concentrated on translated template URLs.
Fix · shipped
Input-delay fixes in the tag-manager path plus CSS presentation-delay work; the whole group validated green.
CASE 04
farmhousefreshgoods.com
Skincare and bath e-commerce · Shopify
Oct – Dec 2024
497 → ~180 ms site average
No page left in the red by Dec 5
CASE 04
farmhousefreshgoods.com
Skincare and bath e-commerce · Shopify
Oct – Dec 2024
497 → ~180 ms site average
No page left in the red by Dec 5
Freeze cause · measured
Site-wide mobile INP of 497 ms: app and theme JavaScript fighting for the main thread on every collection and product page.
Fix · shipped
Shopify theme/app JavaScript diet with per-template triage; stragglers around 250 ms chased individually.
CASE 05
biospherenutrition.co.nz
Supplements DTC · Shopify
May 2024 – 2026 · recurring checkups
Under 200 → 165 ms, held for years
169 ms within three weeks of starting
CASE 05
biospherenutrition.co.nz
Supplements DTC · Shopify
May 2024 – 2026 · recurring checkups
Under 200 → 165 ms, held for years
169 ms within three weeks of starting
Freeze cause · measured
Third-party JavaScript overhead pushing interaction latency past the 200 ms threshold on mobile.
Fix · shipped
Third-party diet, then scheduled checkups; when product pages drifted back over 200 ms in 2025, the remaining contributors were already mapped.
CASE 06
planergy.com
Procurement SaaS · WordPress (via Awesome Creative)
Mar – Jun 2024 · contract titled "Fix Google Core Web Vitals - INP"
206-209 → 199 ms, then sub-200 average
Field data, May 2024
CASE 06
planergy.com
Procurement SaaS · WordPress (via Awesome Creative)
Mar – Jun 2024 · contract titled "Fix Google Core Web Vitals - INP"
206-209 → 199 ms, then sub-200 average
Field data, May 2024
Freeze cause · measured
The slowest interactions on the site were its own navigation: menu and search taps, with page INP idling at 206-209 ms.
Fix · shipped
Tap-path rework and a JavaScript diet aimed at interaction latency rather than the 0-100 score; 199 ms by May 3, under 200 as the rolling average settled.
“Milan was phenomenal! He was always fast, prompt, and took the time to explain everything he did, ensuring we understood how his changes would influence our page speed. I couldn't recommend him more!”
From the field log.
NOTE 01
euvelle.com / tillybare.com
A recurring Shopify client on a contract titled, simply, "INP fix". Nearly all euvelle.com traffic lands on one product page; tap-latency spikes cleared (28-day mobile average 168 ms, 152 ms within hours of the first fix), then the same treatment ported to sister brand tillybare.com.
NOTE 02
wonderstory.es
Lab scores green, field INP 213 ms. Event-tracking marketing scripts, a chat widget, and an Elfsight reviews widget (worst pages over 500 ms) fought for the main thread. Scripts pruned, chat delayed, widget replacement scoped for the studio's developer.
NOTE 03
The 99-score paradox
A site owner with a 99-100 PageSpeed score and failing INP, weeks before the 2024 rollout. The cause: every script delayed past load, which aces the lab test and freezes the first real tap. Delay is not optimization; it is procrastination with extra steps.
NOTE 04
re-fabbed.com (lab cousin)
Total blocking time 4,090 → 60 ms on a WordPress blog. TBT is the lab sibling of INP: the same long tasks that block rendering also freeze the first interaction. Cleared years before INP became a Core Web Vital.
The latency ledger.
| Engagement | Stack | INP before | INP after | Window | Evidence |
|---|---|---|---|---|---|
| bolde.com | WordPress | 257 ms | green, GSC-validated | Feb – Mar 2026 | CrUX + GSC · public feedback 5.0 |
| embassypages.com | WordPress | 400-700 ms elements | 150-200 ms elements | 2023 – Mar 2024 | Client RUM · public feedback 5.0 |
| termly.io | WordPress | 208 ms group | green, GSC-validated | Apr – Jul 2026 | GSC + DebugBear LoAF |
| farmhousefreshgoods.com | Shopify | 497 ms | ~180 ms average | Oct – Dec 2024 | CrUX mobile |
| biospherenutrition.co.nz | Shopify | >200 ms | 165 ms, held | 2024 – 2026 | CrUX · public feedback 5.0 |
| planergy.com | WordPress | 209 ms | 199 ms → sub-200 avg | Mar – Jun 2024 | Field data · public feedback 5.0 |
| euvelle.com / tillybare.com | Shopify | 200 ms+ page spikes | 152 ms average | Nov 2025 – 2026 | CrUX · contract active |
| wonderstory.es | WordPress | 213 ms average | fixes shipped, re-check pending | Jul 2025 | CrUX · project records |
| re-fabbed.com | WordPress | 4,090 ms TBT | 60 ms TBT | 2020 | PageSpeed report |
| menlau.com | Shopify | 257 URLs failing | 12 pending | 2024 | GSC · project records |
Show every rowShow fewer rows
All numbers mobile field data (CrUX, Search Console, or client RUM) except re-fabbed.com, a 2020 PageSpeed lab report. Dates from the engagements themselves; quotes from public Upwork feedback; case narratives paraphrased from project records, never pasted from private correspondence.
What clients said.
Verbatim from public Upwork feedback, unedited.
“Brilliant. Milan fixed issues with "render-blocking JavaScript and CSS in above-the-fold content" making beautifuldestruction.ca much faster. He took Google PageSpeed Insights for mobile and desktop from as low as 30 or worse to running into the 90s on most pages.”
“Milan is an exceptional WordPress Performance Expert and Bug Fixing Specialist. We hired him to fix several complex technical issues on our travel agency website, including Google Maps API integrations, CSS layout problems, and Contact Form 7 international phone validation. His deep knowledge of JavaScript and PHP troubleshooting allowed him to solve complex problems precisely and cleanly. Communication was excellent, delivery was fast, and the code quality was top-notch. Highly recommended for any advanced WordPress development or theme customization projects.”
Your freeze belongs on this ruler.
Free audit: I will tap what your visitors tap, measure what blocks it, and tell you honestly whether it is fixable.
Get a free audit