Services
Web Development→Mobile Development→Cloud & DevOps→AI & Automation→UI/UX Design→SEO & GEO→
Free tools
AI Crawler CheckerOpen sourceNext.js Tag LoaderOpen sourceProject Cost Estimator→Free Website Audit→
Company
Case StudiesAboutBlogContact
hello@codevibe.in+91 70677 09224
Case Study · Our Own Site

PageSpeed 54 to 99 on mobile. 100 on desktop.

In November 2026 we audited codevibe.in the way we audit client sites, and it failed. A 4K hero film and a stack of marketing tags had pushed the homepage to 22,563 KiB and 4.7 seconds of blocking time on mobile. Six days later every Lighthouse category was green, with the film and every tag still on the site.

Open the PageSpeed Insights report
pagespeed · codevibe.in
// BEFORE · 4 NOV · MOBILE
54Performance
96Accessibility
79Best Practices
100SEO
↓ audit to fixes in six days
// AFTER · 10 NOV · MOBILE
99Performance
100Accessibility
100Best Practices
100SEO
Desktop: 100 · 100 · 100 · 100Core Web Vitals assessment · passed
Site
codevibe.in (our own)
Stack
Next.js 15 · LiteSpeed
Window
Audit 4 Nov · live 10 Nov
Measured with
PageSpeed · Lighthouse
// EXECUTIVE SUMMARY

We sell fast websites, so our own had to pass the same test we put client sites through. On 4 November 2026 Lighthouse scored the codevibe.in homepage 54 for mobile performance, with 79 for Best Practices and 96 for Accessibility.

Most of the cost was not our own code but what loaded alongside it: a 21,528 KiB hero film and 470 KiB of tag scripts, all fighting for a phone's bandwidth and CPU in the first seconds. Codevibe, a web development agency in Gurugram, moved the film and the tags behind the visitor's first interaction, removed one widget, inlined the LCP element, routed images through a CDN and fixed contrast. On 10 November PageSpeed Insights scored the homepage 99 on mobile and 100 on desktop, with Accessibility, Best Practices and SEO at 100 on both.

54 to
99
Mobile performance
22,563 KiB to
530 KiB
Homepage weight
4,740 ms to
30 ms
Total Blocking Time
79 to
100
Best Practices
// SECTION 01 · THE REPORT

The result, as Google shows it.

Screenshots from the PageSpeed Insights report for https://codevibe.in/, run on 10 November 2026 at 7:57 PM IST on Lighthouse 13.6.0. The top half is a lab test on a simulated phone or desktop; the bottom half is 28 days of field data from real Chrome users.

PageSpeed Insights report header: Report from Nov 10, 2026, 7:57:14 PM for https://codevibe.in/
PageSpeed Insights mobile lab result for codevibe.in: Performance 99, Accessibility 100, Best Practices 100, SEO 100, Agentic Browsing 3 of 3; FCP 1.1 s, LCP 1.9 s, TBT 30 ms, CLS 0, Speed Index 2.5 s
Mobile · lab test. Performance 99, everything else 100, and 3 of 3 Agentic Browsing checks.
Core Web Vitals Assessment Passed, mobile field data: LCP 2.2 s, INP 44 ms, CLS 0, FCP 2 s, TTFB 1.4 s
Mobile · real users. Core Web Vitals passed for the codevibe.in origin over the latest 28 days (Chrome UX Report). LCP 2.2 s, INP 44 ms, CLS 0.
An honest note on the numbers. Lab scores move a few points from run to run. On the same day we saw the mobile homepage between 86 and 99, which is why section 06 also reports the median of three runs on six templates. The field data covers the 28 days before the report, so most of it predates the fixes; it will reflect them fully by early December. The live report is public, but shared report links are not guaranteed to stay up, so these screenshots are the permanent record.
// SECTION 02 · THE DIAGNOSIS

What the 4 November report actually said.

Six findings from the saved Lighthouse report for the mobile homepage. Most of the cost came from what loaded alongside our own code.

21,528 KiB

One file was 95% of the page

The 4K hero film started downloading as soon as the page loaded. Of the 22,563 KiB Lighthouse measured on mobile, 21,528 KiB was that one video, fighting the rest of the page for bandwidth.

4,172 ms

Tag Manager blocked the main thread

Google Tag Manager, with GA4 and Google Ads inside it, loaded 470 KiB of script during page load and accounted for 4.2 seconds of the 4.7 seconds of Total Blocking Time. LinkedIn Insight and Calendly added more.

11.9 s

Main-thread work on a mid-range phone

Scripts, style and layout work added up to 11.9 seconds of main-thread time across 62 requests. Taps during that window wait, which is exactly what Total Blocking Time measures.

79

Best Practices held down by third parties

Third-party cookies from the embedded scheduling widget and ad tags, plus issues logged in the browser's Issues panel, kept Best Practices at 79 on mobile and 78 on desktop.

28

Contrast failures

Small grey text on light backgrounds and faint labels on navy failed the 4.5:1 contrast ratio in 28 places on the homepage, holding Accessibility at 96 (91 on desktop, with small tap targets).

1 image

The LCP element waited in line

On mobile the largest paint was the header logo, a separate image request that waited 0.7 to 1.9 seconds behind other files before the browser could draw it.

// SECTION 03 · BEFORE AND AFTER

Same page, six days apart.

Left: the Lighthouse 12.8 report we saved on 4 November, rendered from its JSON. Right: PageSpeed Insights on 10 November. Both use Lighthouse's simulated mobile or desktop settings.

Before · 4 Nov 2026
Lighthouse report for codevibe.in on 4 November 2026, mobile: Performance 54, Accessibility 96, Best Practices 79, SEO 100; FCP 2.1 s, LCP 2.9 s, TBT 4,740 ms, CLS 0, Speed Index 9.0 s
After · 10 Nov 2026
PageSpeed Insights for codevibe.in on 10 November 2026, mobile: Performance 99, Accessibility 100, Best Practices 100, SEO 100
Homepage mobile metrics before and after
Homepage, mobile4 Nov10 Nov
Performance score5499
First Contentful Paint2.1 s1.1 s
Largest Contentful Paint2.9 s1.9 s
Total Blocking Time4,740 ms30 ms
Speed Index9.0 s2.5 s
Cumulative Layout Shift00
Accessibility · Best Practices · SEO96 · 79 · 100100 · 100 · 100
// SECTION 04 · THE FIXES

Seven changes. The film and every tag stayed.

Measurement first, then the biggest cost first. Tap a step to expand it.

We ran Lighthouse three times per page on six templates (home, blog index, a blog post, a service page, a case study and the Gurugram location page), on mobile and desktop, and kept every JSON report. The median is what we compare against, so one lucky run cannot flatter the result. Real-user Core Web Vitals from the Chrome UX Report went alongside.

Lighthouse x3 per page6 templatesCrUX field dataSaved reports

The hero now paints a small preloaded WebP poster. The original 4K film, unchanged and served through ImageKit with orig-true, starts on the visitor's first mouse move, touch, scroll, wheel or key press. Visitors who prefer reduced motion, or are on Data Saver or 2G, keep the poster. On upright phones and tablets the same film is shown whole, at full width, so its headline is never cropped. The film looks exactly as it did; it just stopped competing with everything else.

Poster firstFilm on interactionOriginal file, unchangedReduced motion respected

Google Tag Manager and the LinkedIn Insight Tag load on the first tap, key press or scroll, or 5 seconds after the page has loaded, whichever comes first. Every tag still fires for visitors who stay; roughly 480 KiB of script and about 4 seconds of blocking work left the loading window.

GTM deferredLinkedIn deferred5 s fallbackNo tag removed

Calendly's widget script and stylesheet were injected on every page by the inquiry popup and the floating buttons, and set third-party cookies that counted against Best Practices. We removed it completely; the contact page and call-to-action bands now offer a direct call link, and the floating buttons keep WhatsApp.

Calendly removedFewer third-party cookiesDirect call link

The header logo, the mobile LCP element, became an 8 KB data URI inside the render-blocking CSS, so it paints with the first frame instead of waiting for its own request. Same PNG, pixel for pixel. The hero headline also stopped animating in, so it paints at its final position.

Logo as data URINo extra requestNo entrance animation

Images now go through ImageKit, which picks AVIF or WebP per browser and resizes to the slot through srcset. Files LiteSpeed serves straight from /public got long cache lifetimes through an .htaccess in /public, and the www host redirects in one hop.

ImageKitAVIF / WebPsrcsetCache headers

One colour token moved from #64748B to #5F6E84 so small grey text passes 4.5:1. Faint labels on navy were lifted, decorative numbers moved into CSS, and the dot navigation got 24 px tap targets. Accessibility went to 100 on both form factors.

WCAG 4.5:128 → 0 failures24 px tap targets
// SECTION 05 · UNDER THE HOOD

The code behind the green circles.

Short excerpts from the codevibe.in repository, trimmed for reading. Select a change to see how it works.

The 4K film waits for the visitor

The poster is in the HTML and preloaded. The film element is only given its source once the visitor interacts, and never on reduced motion, Data Saver or 2G. The file itself is the original upload, served by ImageKit without re-encoding.

Preloaded WebP posterorig-trueReduced motionData Saver / 2G
components/sections/Hero.tsx
// start the film on the first interaction after load
const reduce = matchMedia('(prefers-reduced-motion: reduce)').matches;
const slow = net?.saveData || net?.effectiveType === '2g';
if (reduce || slow) return; // poster only
const events = ['pointermove', 'pointerdown', 'touchstart',
  'scroll', 'wheel', 'keydown'];
events.forEach(e => addEventListener(e, start, { once: true, passive: true }));

The deferred tag loader is now open source as next-deferred-tags, with cookie consent and Google Consent Mode v2 added. The write-up of the tag fix is in Does Google Tag Manager slow down your Next.js site?

// SECTION 06 · RESULTS

Not just the homepage, every template.

The fixes live in shared components, so they reached every page. Lighthouse medians of three mobile runs, 4 November against 10 November. The weight, request and main-thread rows are for the homepage.

Average, six templates (mobile)
58 to 92
Homepage weight (mobile)
22,563 KiB to 530 KiB
Homepage requests (mobile)
62 to 42
Main-thread work (mobile)
11.9 s to 2.6 s
Third-party blocking (homepage)
4,335 ms to 0 ms
Contrast failures (homepage)
28 to 0

Six templates: home, blog index, a blog post, a service page, a case study and the Gurugram location page. After the fixes each scores 89 to 95 in the median mobile run, with Accessibility, Best Practices and SEO at 100.

// SECTION 07 · WHAT THIS DEMONSTRATES

Key takeaways.

  1. Find the one file that matters. A single video was 95% of the homepage. No amount of minifying JavaScript would have moved the score while it loaded with the page.
  2. Defer, do not delete. The 4K film and every analytics and ad tag are still on the site. They just start when a person shows up, not when a test does.
  3. Third parties were the biggest cost. Third-party scripts caused 4,335 ms of the 4,740 ms of Total Blocking Time, most of it Tag Manager and the tags inside it. Loading them on intent took that out of the load.
  4. Report the median, show the receipts. Lab scores move between runs. We compare medians of three runs per template and link the PageSpeed report so anyone can check it.
// FAQ

Questions about this project.

In the PageSpeed Insights report captured on 10 November 2026, the codevibe.in homepage scored 99 for Performance and 100 for Accessibility, Best Practices and SEO on mobile, and 100 in all four categories on desktop. It also passed all three Agentic Browsing checks, and the Core Web Vitals Assessment from real Chrome users (28-day field data) passed on both mobile and desktop.

PageSpeed Insights runs Lighthouse on a simulated mid-range phone on a throttled connection, and small differences in server response, network and CPU timing move the score a few points. On the same day we saw the homepage score between 86 and 99 on mobile. That is why we report the median of three Lighthouse runs per page across six page templates (92 on average after the fixes, up from 58) as well as the single PageSpeed run shown here.

Yes, if the video is not part of the initial load. On codevibe.in the hero shows a small preloaded WebP poster, and the original 4K film starts only after the visitor's first interaction with the page. Lighthouse measures the load without interaction, so the 21,528 KiB of video it used to download is no longer counted, while real visitors still see the same film, unchanged.

No tags were removed. Google Tag Manager (with GA4 and Google Ads inside it) and the LinkedIn Insight Tag now load on the visitor's first tap, key press or scroll, or 5 seconds after the page has loaded, whichever comes first. The trade-off is that a visitor who leaves within 5 seconds without touching the page may not be recorded, which we accepted in exchange for taking about 4 seconds of blocking work out of the load.

Yes. A speed engagement starts with a measured audit (Lighthouse on every page template, real-user Core Web Vitals and a list of what each script and file costs), followed by fixes in priority order. Audits usually take 1 to 2 weeks and technical fixes 2 to 4 weeks, depending on how much third-party script, video and legacy code a site carries. Our own site took six days from audit to the report shown here.

// LET'S TALK

Is your site still orange?

We measure every template, find the files and scripts that cost the most, and fix them in order, without removing what your visitors or your marketing team rely on.

Call +91 70677 09224
hello@codevibe.in · +91 70677 09224 · Gurugram, India