Portfolio · Core Web Vitals · 25 engagements

The three numbers Google grades you on.

Not the PageSpeed screenshot: the field data behind it. Largest Contentful Paint, Cumulative Layout Shift, Interaction to Next Paint, measured on real visitors. The 25 engagements here are where those three numbers were the job: one flagship told in full, 5 as story arcs, the other 19 in a ledger, every number the client could re-run.

The three Core Web Vitals and the green threshold of each: LCP 2.5 seconds, CLS 0.1, INP 200 milliseconds.THE THREE LINES · SCHEMATIC, NOT TO SCALE75TH PERCENTILE OF REAL VISITSLCPCLSINP2.5 s0.1200 msFAILINGFAILINGFAILINGGREENGREENGREEN
The three lines Google's field data grades, and the threshold of each. Below: engagements that crossed one in the wrong direction, then pulled it back.

The three vitals, in plain language.

  1. 01 · LCP

    How fast the main thing shows up.

    Largest Contentful Paint clocks the element a visitor came for: the hero image, the headline, the product photo. Green is under 2.5 seconds at the 75th percentile of real visits. Culprits: oversized images, a lazy-loaded hero, late-swapping fonts, a cache that misses.

  2. 02 · CLS

    How much the page moves while they read.

    Cumulative Layout Shift measures the promises a page breaks after it paints: ads that shove the article down, fonts that reflow text, images without reserved space. Green is under 0.1. It is the vital visitors feel as betrayal, and the one ad-supported sites fight hardest.

  3. 03 · INP

    How fast the page answers a tap.

    Interaction to Next Paint replaced FID in March 2024 and grades real taps, not just the first one. Green is under 200 milliseconds. Culprits: tag-manager containers and chat widgets holding the main thread. It has its own deep page.

For the Discover-dependent publishers below, passing these metrics preceded the traffic coming back, a pattern the Google Discover page documents across six engagements.

Flagship · featured engagement

tbi bank: four country sites, held in the 90s for fourteen months.

Bulgaria, Romania, Greece, and the international .com, delivered through the client's development partner.

PageSpeed Insights field data for tbibank.com: Core Web Vitals passed, LCP 1.7 s, INP 178 ms, CLS 0.03
The tbibank.com field report: Core Web Vitals Passed, LCP 1.7 s, INP 178 ms, CLS 0.03, captured August 2024.
1.7 s · 178 ms · 0.03tbibank.com field data: LCP, INP, CLS, with Core Web Vitals passed
98mobile PSI on staging, 28 June 2024
297 → 75 KBInter fonts, all character subsets to Latin-only woff2

The field report is the receipt that matters here: Core Web Vitals assessed as Passed on the production .com, LCP 1.7 seconds, INP 178 milliseconds, CLS 0.03. Getting there included a production rollout that came back at 50 on mobile and climbed to around 90 within roughly two weeks once the cache and unused-CSS jobs caught up. The change set was deliberately unexotic; the full list, with dates, is in the case study.

"Milan did a fantastic job optimizing our live website for LCP, FCP, and TTFB. He quickly identified the performance bottlenecks and delivered measurable improvements."
WSE SRL (dev partner) · Upwork 5.0

Read the full tbi bank case study →

Story arcs

Five arcs: the drop, the fix, the recovery.

The strongest shapes in the category; where a story has a deeper page of its own, the arc links to it.

gfcnieuws.com

1k+/day lostRecovered

A four-figure daily Discover stream went to zero in August 2023.

Google Discover traffic recovered after a core update: 1k+ clicks/day fell to zero in Aug 2023; LCP image preload, icon-font diet (78 KB to 1 KB), and ad-shift CLS fixes brought mobile CWV green on Nov 1: Discover clicks returned within days.

"Solved all the CWV issues I had and passed CWV."
Publisher, gfcnieuws.com · Upwork 4.85

Sweetn (Bolde.com)

257ms INPINP green

Six weeks from failing INP to GSC-validated green.

Google Discover CWV program (contract: "Optimizing WP Site Speed for Google Discover"): failing INP 257 ms and CLS 0.15 to GSC-validated green in six weeks. A tag-manager container was blocking the main thread for 440 ms at load and ad-refresh scripts re-freezing the page every few seconds; INP green March 1, 2026, with an ongoing Discover technical-SEO retainer.

"Excellent work! We hired Milan to improve our core web vitals. He was super efficient and did an amazing job!"
Sweetn · Upwork 5.0

Snap Editing

>1.0 CLS<0.4 CLS

A CLS job with the threshold written into the brief.

CLS specialist engagement. The client set the threshold, then verified the result in the public feedback below.

"I asked for my CLS to be reduced to below 1.0. My CLS is now less than .4."
Snap Editing · Upwork 5.0

EmbassyPages

400-700 ms150-200 ms

Interaction latency cut by roughly two thirds before INP was even a ranking signal.

JavaScript dependency reduction and INP fixes ahead of the March 2024 INP rollout: interaction latency on affected elements cut from 400-700 ms to 150-200 ms, and Cloudflare Rocket Loader caught adding ~306 ms of interaction latency (a template re-measured 264 ms over 7 days until it was removed).

"Excellent reduction of JavaScript dependency on website, effectively reducing our INP drastically. Milan is highly recommended!"
CPH, EmbassyPages · Upwork 5.0

vapevine.ca + clinic store family

984 URLs failingCWV green

984 product URLs failing mobile CrUX, across a four-store retail family.

984 product URLs failing mobile CrUX recovered: WAF-blocked checkout AJAX fixed, dynamic caching restored for cart/checkout, EWWW and PHP 8 plugin conflicts resolved. Three-year ongoing relationship.

Vitals that stayed green.

433/635publisher domains still passing mobile field Core Web Vitals
43of the passers also at 90+ mobile PSI lab
25at 95+ mobile PSI and still passing

Vitals work is judged years later, not the week of launch. These are the July 2026 CrUX and PSI re-scan of the 635 publisher domains optimized as white-label contractor for a US agency (2019 to 2022), a food-blog-heavy roster running heavy ad scripts, re-verified September 2026. A different population from the 25 direct engagements here, with its own page. Lab PSI slides as ad scripts grow; CrUX field data is what Google ranks by, and field data is what still passes.

The vitals ledger: the other 19 engagements.

EngagementWhat was doneWhenBeforeAfterEvidence
Dalton Luka (daltonluka.com)SEO consultant, own custom-built WP siteTwo contracts literally titled "Core Web Vitals Audit & Fixes" (Jan 2024): the first pass audited and fixed his own hand-built WordPress site in a day, tracing the blog template's LCP to the post image (already fetchpriority-tagged, missing preload) and moving fonts and images to modern formats. The second contract is still the working relationship in 2026, and extended to an Avada client site of his. Facts paraphrased from project records.first contract Jan 2024n/an/apublic feedback 5.0 · site live
Aerotime (aerotime.aero)Aviation news publisher, LithuaniaContract titled "Speed audit for news site" (Jul 2024): the deliverable was a findings document structured as issue-to-solution rows their developers could turn directly into tickets. With staging locked behind corporate IT, the audit ran against production and Chrome DevTools coverage profiling, splitting a single merged-and-minified theme/plugin CSS+JS bundle into per-plugin attribution. The engagement then ran four more months as implementation support: WOFF2 conversion, icon-font subsetting, LCP image preloading, and a DebugBear RUM rollout to chase a mobile INP sitting at 217 ms toward the sub-200 ms green threshold. Facts paraphrased from project records.Jul 2024, four months after217ms INPn/asite live
boogzelclothing.comAlternative-fashion e-commerceContract titled "WordPress Performance Audit Needed" (Sep 2024): the same-day first read pulled real-user averages (LCP 2.6 s mobile), the Search Console warning behind them, a main product image being lazy-loaded right out of LCP contention, and a CLS picture that had been degrading since May. One audit turned into an hourly working relationship that ran a full year to Sep 2025. Facts paraphrased from project records.Sep 2024, hourly year after2.6s LCPn/asite live
planergy.comProcurement SaaS (via Awesome Creative)Contract literally titled "Fix Google Core Web Vitals - INP", won the week the INP rollout landed in March 2024: interaction latency on menu and search taps reworked, mobile INP from 206-209 ms down through 199 ms to a sub-200 ms average by May 2024. The build is Elementor, so the fix meant choosing real INP over a prettier score (Elementor's JS kept loading un-delayed so the first menu tap stays fast) plus a Font Awesome subset of 19 icons where the builder default ships 300+.Mar to May 2024209ms INP<200ms INPpublic feedback 5.0 · site live
wonderstory.esPhoto studio, Barcelona (WP + Elementor)Interaction-latency debugging with lab scores already green: CrUX INP at a 213 ms average while marketing/event-tracking scripts, a chat widget, and an Elfsight reviews widget (worst pages over 500 ms) fought for the main thread. Monitoring scripts pruned, chat delayed, reviews-widget replacement scoped for the studio's developer. Same engagement: DebugBear pair tests showed Google Ads URLs (query strings) missing the page cache while clean URLs hit it.on record213ms INPn/asite live
Assessment SystemsTesting and assessmentA February 2022 Elementor relaunch (custom fonts, widget add-ons) left mobile PageSpeed at 49 with Search Console flagging LCP across pages; the client had already clawed back into the 70s deleting plugins before hiring. A few hours of targeted work took mobile into the 90s.after the Feb 2022 relaunch4990spublic feedback 5.0 · site live
re-fabbed.comHome decor and DIY blogTotal blocking time cut from 4,090 ms to 60 ms. Lab TBT is the INP-adjacent metric: the same main-thread long tasks that block rendering also freeze the first tap.on record580PSI capture
Signature MediaUS agency, 6+ site CWV programTwo-year ongoing retainer bringing a home-services agency roster to passing Core Web Vitals, with Search Console triage per site.on recordn/an/aon record
FIXD AutomotiveOBD2 e-commerceFour engagements across two years on an Elementor build. The 2023 pass untangled what earlier developers could not: an outdated hello-elementor parent theme flagged by the CDN audit, main-thread-blocking widget CSS/JS, Elementor reporting the wrong LCP element to the tooling, and an Elementor Ajax loop grid whose pagination stopped loading images under a script manager. The 2024-2025 pass: real-user data showed paid-traffic pageviews missing the host page cache on Pressable, so ad landing pages were the ones re-tuned.2023 and 2024 to 2025 passesn/an/apublic feedback 5.0 · site live
Windsor.aiMarketing attribution SaaSFive engagements over four years: CLS quick-fix, sitewide LCP pass (~371 pages improved in Search Console), ongoing speed work. The 2025 retainer: Cloudflare cache rules so visitors arriving from Google Ads links (query strings) stopped bypassing the edge cache and got the same fast HTML as everyone else.five engagements over four yearsn/an/apublic feedback 5.0 · site live
Z-Dog MediaThrive Themes publisherCWV on Thrive Themes builds where other developers had given up. Returned for a second site.on recordn/an/apublic feedback 5.0
AtariGames and mediaMobile CLS remediation program.on recordn/an/apublic feedback 5.0
Resolute LegalLaw firm, CanadaGenesis-framework CWV remediation.on recordn/a100% CWVpublic feedback 5.0 · site live
demagieexpert.nlMagic-tricks webshops, NL/DEGSC-reported CLS program on an Elementor + WooCommerce build: Elementor font subsetting saved ~500 KB, new dedicated server, prebuilt static HTML delivery for 99% of visitors, popup-caused layout shifts stabilized.on record0.45 CLS~0 CLSsite live
australiangrants.orgGrant-finding service, AustraliaA service that relies heavily on Google Ads (the client's words): ad-click query strings were bypassing the page cache, and DebugBear RUM measured TTFB at 2.1s on the main site and 3.1s on the /access funnel, with desktop LCP at 4.1s. Cache and front-end work over three weeks; all pages Core Web Vitals green in Search Console by Sep 17, 2025, LCP settling around 2s.green by Sep 17, 20252.1-3.1s TTFBGSC greensite live
thefelthub.comCraft-education publisher, Mediavine + MemberPressOne WordPress performance audit turned into three linked projects (Dec 2025 to Mar 2026): DebugBear RUM installed to see real-visitor CWV under Mediavine ads, LCP render-delay work on the ad-laden article template, host-side mod_pagespeed removal (average TTFB about 0.3 s better within 24 hours), then a full hosting and domain migration with Cloudflare APO enabled and logged-in members excluded from cache.Dec 2025 to Mar 2026volatile TTFB3 projects from 1 auditpublic feedback 5.0 · site live
airlinegeeks.comAviation news publisher, Mediavine, multilingualCore Web Vitals on an aviation news site running Mediavine in several languages: CLS from a translation banner that changes height per language and a cookie-prompt wrapper that grows after load; INP split roughly evenly between input delay and presentation delay, fixed with containment and lazy rendering around article content, nav, and footer. CLS and INP visibly improving in Search Console by July 2026; a six-page technical writeup handed to the in-house team at close.improving by July 2026CLS + INP failingimproving in GSCpublic feedback 5.0 · site live
The Deli Magazine (delicious-audio.com)Music-gear publisher, EzoicContract titled "Fixing Search Console high CLS times": the PSI lab test showed passing CLS while Search Console field validation kept failing, the exact lab-vs-field gap ad scripts create. The prior NitroPack setup had bought lab wins with aggressive settings that made real-visitor shifts worse; Ezoic wrappers and ad-dependent galleries added load-order movement. Field-first remediation over a two-year relationship (Nov 2022 to Nov 2024).Nov 2022 to Nov 2024GSC CLS failingfield-first rebuildsite live
Creative EscapesHoliday and photography tours, WordPress/UncodeContract titled "Diagnose & Resolve Persistent Google Lighthouse LCP Issue on WordPress Site" (Aug 2026): another performance engineer had already tried and could not isolate the root cause of a persistent 5-second LCP on a 29 KB image. Independent second opinion diagnosed an architectural LCP render-delay in the Uncode theme: two plugins and two code snippets shipped, homepage LCP from 4.4s to 3.4s, privacy-policy page from 3.4s to 2.4s, cambodia page from 4.0s to 2.3s. Closed in one week.Aug 2026n/an/apublic feedback 5.0 · site live

Every cell comes from the case records in src/data/portfolio.ts: paired metrics the client could re-run, public Upwork feedback, project-archive captures. An "n/a" means no paired number is on record for that side. 7 of these rows carry none at all: Dalton Luka, Signature Media, FIXD Automotive, Windsor.ai, Z-Dog Media, Atari, and Creative Escapes. Two keep their numbers in the work text itself (Windsor.ai's roughly 371 pages improved in Search Console; Creative Escapes' per-page LCP readings); the other 5 are documented by scope, contract titles, and public feedback. The When column prints a date only where one survives in the record text; elsewhere it says "on record", and no year is guessed. The flagship and the 5 arcs cover the remaining 6 engagements.

Your field data is the next receipt.

Free audit: which vital is failing, and what it takes to turn it green in Search Console.

Get a free audit