Performance Budget and Core Web Vitals for Teams, Lighthouse CI in Practice (2026)

performance budget5 min readJuly 15, 2026

Author: DevStudio.it

TL;DR

A performance budget is a set of hard thresholds (LCP, INP, CLS, JS size) that CI blocks when a PR exceeds them, instead of discovering regression a week later in Search Console. Lighthouse CI runs an audit on the production build for every pull request and fails merge when mobile LCP > 2.5 s or CLS > 0.1. Dev, design, and marketing share one budget table: hero max 200 KB, third-party scripts only after review, GA4 afterInteractive, Ads lazyOnload. Hosting on DevStudioIT Cloud plus RUM after deploy closes the loop between CI synthetics and real users.

Who is this for

  • Next.js / React teams adding components every sprint until the homepage LCP hits 4 s
  • Product owners responsible for Google Ads conversions, slow landing pages raise CPC
  • Companies without a dedicated performance engineer, Lighthouse CI is an automatic gatekeeper
  • Designers adding animations and fonts, budget forces tradeoffs before merge
  • Projects after an SEO audit with "yellow" CWV that need to stay green, not just a one-time fix

Keyword

performance budget core web vitals, lighthouse ci team, lcp inp cls thresholds, performance budget ci, performance regression pull request, lighthouse github actions 2026

What a performance budget is in 2026

A performance budget is measurable limits in CI and project documentation:

Category Example budget (marketing page) Measurement
LCP ≤ 2.5 s (mobile) Lighthouse CI, CrUX
INP ≤ 200 ms Lighthouse, RUM
CLS ≤ 0.1 Lighthouse CI
Performance score ≥ 0.85 mobile Lighthouse CI
Total JS ≤ 300 KB (gzip) on landing webpack analyzer / CI
LCP image ≤ 150 KB WebP/AVIF build + review
Third-party max 2 blocking tags manual + LHCI

Budget does not replace optimization, it prevents regression. First optimization is manual work; budget maintains the result.

Core Web Vitals, targets for product teams

Google evaluates LCP, INP, and CLS in field data (CrUX). Lighthouse synthetics in CI correlate with CrUX but do not replace it, use both.

Metric Good Needs improvement Team action
LCP ≤ 2.5 s 2.5–4 s Hero image, font, SSR, hosting TTFB
INP ≤ 200 ms 200–500 ms Less main-thread JS, defer chatbot
CLS ≤ 0.1 0.1–0.25 width/height on images, banner reserve

Marketing should know: a new tracking pixel without lazyOnload is a dev ticket with expected +200 ms LCP in LHCI, not "just add the script quickly."

Lighthouse CI, repository configuration

lighthouserc.json at repo root:

{
  "ci": {
    "collect": {
      "numberOfRuns": 3,
      "startServerCommand": "npm run start",
      "startServerReadyPattern": "Ready",
      "url": ["http://localhost:3000/pl", "http://localhost:3000/en"]
    },
    "assert": {
      "assertions": {
        "categories:performance": ["error", { "minScore": 0.85 }],
        "largest-contentful-paint": ["error", { "maxNumericValue": 2500 }],
        "cumulative-layout-shift": ["error", { "maxNumericValue": 0.1 }],
        "interactive": ["warn", { "maxNumericValue": 3800 }]
      }
    },
    "upload": {
      "target": "temporary-public-storage"
    }
  }
}

GitHub Actions workflow (summary):

jobs:
  lighthouse:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - run: npm ci && npm run build
      - run: npx @lhci/cli@0.14.x autorun

Key: npm run build + npm run start, same chain as deploy on DevStudioIT Cloud. Auditing next dev falsifies results.

Extended details: Lighthouse CI, Next.js audit.

JS and third-party budget, PR review rules

Checklist in PR template:

  • New npm package, justification + bundle size
  • Hero image, AVIF/WebP, priority only on LCP
  • Marketing script, load strategy (lazyOnload / worker)
  • Font, subset, display: swap, max 2 weights
  • Client component, can it be a Server Component?

Responsibility table:

Role Responsibility
Dev Bundle, SSR, image pipeline, green LHCI
Design Asset size, animations without layout thrashing
Marketing Tags after consent, no new sync scripts
DevOps TTFB, cache, HTTP/2 on Cloud

INP in practice, what teams catch

INP replaced FID as the interaction metric. Typical culprits on corporate sites:

  • Chatbot loading afterInteractive on every page
  • Mobile menu with heavy JS re-rendering the whole tree
  • Scroll handlers without debounce
  • Radix/shadcn, fine, but dozens of client components on landing

INP budget in LHCI (optional assert) or RUM monitoring (web-vitals library → endpoint).

RUM after deploy, closing the loop

LHCI = CI synthetics. After deploy on DevStudioIT Cloud add RUM:

import { onLCP, onINP, onCLS } from 'web-vitals';

function sendToAnalytics(metric: Metric) {
  navigator.sendBeacon('/api/vitals', JSON.stringify(metric));
}

onLCP(sendToAnalytics);
onINP(sendToAnalytics);
onCLS(sendToAnalytics);

Compare p75 with CrUX weekly. Green CI but red RUM, regional TTFB, adblock on tags, or CDN path unlike CI localhost.

Escalation when budget blocks a feature

Process without permanently disabling LHCI:

  1. Feature flag, enable after optimization
  2. Temporary assert exception with ticket and removal date
  3. Split bundle, lazy load heavy module
  4. Scope cut, MVP without 3D animation

Permanently lowering minScore is technical debt in metrics, returns as conversion drop.

FAQ

Should desktop be tested in CI too?

Yes, but mobile assert is mandatory, Google CWV field data is mobile-first for most B2B sites. Desktop can be warn.

Performance 0.85 vs LCP 2.5 s, which matters more?

Assert LCP/CLS/INP directly, score is a synthetic aggregate. Score 0.9 with LCP 2.6 s still fails good CWV threshold.

Lighthouse CI on monorepo?

Separate lighthouserc.json per app or matrix url. Budget per product, marketing landing ≠ SaaS dashboard.

Who pays for performance regression?

Lower Ads Quality Score, lower organic CTR, fewer form leads. CI budget is insurance worth multiples of pipeline maintenance cost.

Want a performance budget in your repository?

Related posts

Core Web Vitals, Measuring UX and Page Performance in 2026
10 min read
Video Hero and LCP, When Autoplay Hurts Corporate Site Performance (2026)
6 min read
Typography and Web Fonts in Next.js, next/font, Subsetting, and CLS Without Regression (2026)
6 min read

About the author

We build fast websites, web/mobile apps, AI chatbots and hosting setups — with a focus on SEO and conversion.

Recommended links

From theory to production — Branchly, our hosting stack and shipped work.

Like how we think? Let's build something together.

Start project configuration