Portfolio · PageSpeed Scores · 16 engagements · 2015 to today
The red circle, gone.
The PageSpeed score is the number clients screenshot, forward upward, and open every kickoff call with. It is also one of the most fixable numbers in web performance. In the 16 engagements below, the work ran from a score of 3 to a four-country bank site, and the deliverable was always the same shape: a before anyone could see, and an after the client could re-run.
Why scores drop, and what a rescue changes.
- 01
The score fails for known reasons.
PageSpeed Insights loads your page in a controlled lab and grades how fast the main content paints, how much the layout jumps, and how blocked the main thread stays. Render-blocking CSS and JavaScript, images shipped at desktop sizes to phones, fonts that swap in late, no page cache: each knocks points off in predictable ways. A low score is a symptom list, not a mystery.
- 02
Most of the loss is configuration, not the platform.
WordPress, Elementor, WooCommerce, and Shopify can all score well, and the wider portfolio covers all of them. What separates a red score from a green one is rarely the theme or builder on its own. It is which plugins enqueue what, whether images are sized and lazy-loaded correctly, and whether the cache actually reaches your visitors. That is why the usual fix is work on the existing site, not a rebuild.
- 03
A rescue changes the loading order, then the score follows.
Size and compress images, defer what the browser does not need for first paint, subset the fonts, put a real page cache in front. The number moves because the underlying defects moved. Verification is the same test you already ran: load PageSpeed after the work, on the same URL, and watch the new score hold. Every pair on this page was captured that way.
Flagship · featured engagement
tbi bank: four country sites, held in the 90s for fourteen months.
What score work looks like at corporate scale: four production WordPress sites (Bulgaria, Romania, Greece, and the international .com) taken from the 50s into the 90s and kept there through fourteen months of releases, delivered through the client's development partner.

The record includes the parts most case studies skip: a production rollout that came back at 50 on mobile and climbed to around 90 within two weeks once the cache and unused-CSS jobs caught up, and a December config wipe restored from an exported settings file in hours rather than days. The full change list, with dates, is in the case study.
The change set behind the scores was deliberately unexotic: WP Rocket as the cache and asset layer with unused-CSS removal given time to finish, Contact Form 7 loaded only on pages that render a form, Inter fonts self-hosted and subset, images converted and served as WebP, and the Zendesk widget decoupled from Google Tag Manager so it could be deferred on its own.
"Milan did a fantastic job optimizing our live website for LCP, FCP, and TTFB. He quickly identified the performance bottlenecks and delivered measurable improvements."
Scores that stayed.
A score is easy to raise for a week; these numbers are about staying power. They cover 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, the hardest Core Web Vitals environment there is. Every domain was re-scanned July 2026 and the top entries re-verified September 2026. One scope note, stated plainly: this roster is the white-label program's ledger, a different population from the 16 direct engagements on this page, and it has its own page. One honest drift note, same as the one on the portfolio hub: lab PSI scores on ad-supported sites slide as ad scripts grow over the years. CrUX field data is what Google ranks by, and field data is what still passes on these domains.
Receipts
The before and after captures.
Seven of the engagements on this page ship with the client's own PageSpeed capture (the flagship's report sits in its block above). Click any plate for the full-size image.
The score ledger: all 16 engagements.
| Engagement | What was done | When | Before | After | Evidence |
|---|---|---|---|---|---|
| tbi bankConsumer finance, 4 country sites | Four production WordPress sites taken from the 50s into the 90s and held there through 14 months of releases. | 14-month engagement | 50s | 90s | public feedback 5.0 · PSI capture · case study |
| MasalaBodyHealth coaching | Full WordPress speed overhaul in under 48 hours. | 48-hour rescue | <50 | 90+ | public feedback 5.0 · site live |
| Bergen MaidsCleaning services | Two rounds of optimization; render-blocking assets fixed. | two rounds | 42 | 95 | public feedback 5.0 |
| Assessment SystemsTesting and assessment | A 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 relaunch | 49 | 90s | public feedback 5.0 · site live |
| UK site ownerAnonymized individual | Five-day rescue of a catastrophically scored site. | five-day rescue | 3 | 95 | public feedback 5.0 |
| IPSU VenturesVentures group | Roughly one day of work, mobile and desktop. | about one day | 30s | 90s | public feedback 5.0 |
| Lucid Creative GroupWeb and SEO agency | Agency's own site, weekend turnaround, twice. | weekend turnaround, twice | 58 | 94 | public feedback 5.0 |
| beautifuldestruction.caAuthor and photography | Render-blocking JS and CSS on a photo-heavy book site. | feedback dated 2015 | ~30 | 90s | site live |
| loveoveraddiction.comAddiction-recovery blog | Full stack optimization: caching, assets, images. | on record | 51 | 93 | PSI capture |
| saltandflour.comRecipes and baking blog | From red to green on mobile PageSpeed. | on record | 27 | 91 | PSI capture |
| re-fabbed.comHome decor and DIY blog | Total 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 record | 5 | 80 | PSI capture |
| jcooks.netFood blog | Mobile score more than doubled. | on record | 39 | 85 | PSI capture |
| izolacija.rsConstruction and insulation, Serbia | Local business site, mobile to desktop sweep. | on record | 39 | 96 | PSI capture |
| thisblogisatreasure.comFood blog | Ad-heavy publisher optimized without losing revenue tags. | on record | 40 | 89 | PSI capture |
| FIXD AutomotiveOBD2 e-commerce | Four 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 passes | n/a | n/a | public feedback 5.0 · site live |
| thehauntghosttours.comGhost tours and experiences | Ghost-tour operator running Google Ads: flat-fee engagement to pass Core Web Vitals validation in Search Console, quoted explicitly as a way to cut the "landing page experience" penalty on their ad clicks. CWV green April 2026, plus a hidden malware infection found and removed along the way. | CWV green April 2026 | n/a | CWV green | public feedback 5.0 · site live |
Every cell comes from the case records in src/data/portfolio.ts: scores from the PageSpeed runs the client could see at the time, quoted feedback from public Upwork reviews, captures from the project archive. Where no measurement date survives in the records, the When column says so: "on record" means the engagement is documented and the date is not, and no year is guessed. Dated exceptions are recorded where they exist: the February 2022 relaunch in the Assessment Systems record, April 2026 in thehauntghosttours.com's, the fourteen-month span in tbi bank's, and the 2015-dated public feedback for beautifuldestruction.ca. The durability aggregate above is the July 2026 CrUX and PSI re-scan of the white-label ledger, re-verified September 2026.
The score is the lab. Your rankings listen to the field.
Every number above is a lab score, captured the way your client would capture it: one URL, one run of PageSpeed Insights, mobile first. That is exactly why the score is such a good sales object, and also why it deserves one caveat. Google's ranking systems do not grade your site with a lab run; they grade it with the Core Web Vitals your real visitors generate, collected in CrUX over a rolling 28-day window. A site can score 95 in the lab and still fail field data if its slowest templates never got touched, and a site can score 80 in the lab while every real visitor passes.
So treat the score rescue as the front door, not the whole house. The same sessions that move the score, sized images, deferred scripts, a cache that actually catches, are the sessions that move the field data; the flagship engagement above shows both, with a 98 in the lab on a staging URL and a passed Core Web Vitals assessment in the field on the production domain. When you want the field side of this practice laid out on its own, that is the Core Web Vitals page. And when a score has already been "fixed" once and slid back, the rescues that held, tbi bank's fourteen months, the publishers above still passing years later, came from the boring half: re-measuring after launch, exporting working configs, and watching the 28-day windows instead of the screenshot.
Keep reading.
Core Web Vitals
The lab score is the trailer; field data is what Google ranks on. The same practice measured by what real visitors experience: LCP, CLS, and INP.
case studytbi bank, 50 to 90+
The complete flagship story: dates, the full change list, and the staging-to-production traps that briefly sent a 90s site back to 50.
reviewWP Rocket review
The caching plugin most of this work starts from, reviewed honestly: what it does well, where it needs a hand, and when free is not enough.
guideImage optimization plugins
Images are usually the heaviest thing on a slow page. Six plugins that fix that, free and paid, and how to choose between them.
Your score is the next receipt.
Free audit: what is costing points, what it takes to fix, and an honest read on whether the number you were promised is realistic.
Get a free audit




