Booking Q3 2026 — 2 sprint slots open

We make slow sites measurably faster.

An engineering-led performance & UX consultancy. We pull field data from your real users, find the regressions Lighthouse misses, and ship the fixes against your repo — usually inside one two-week sprint.

Audited 40+ sites this year. Median LCP cut 58%, median INP cut 44%.
−58%
Median LCP improvement (p75 field data)
+22%
Median conversion lift, 30-day post-ship
40+
Production sites shipped since 2024
7-figure
Largest single-sprint annualized revenue win

Four ways to ship a faster site — all metric-bound.

Every engagement starts with field data and ends with a verified delta in your RUM dashboard. No vanity scores, no Lighthouse hero numbers, no theatrics.

PS

Performance Sprint

A focused two-week engagement targeting your three worst Core Web Vitals on the highest-traffic templates. Fixed scope, fixed price, PRs against your repo.

  • Field-data baseline pulled from CrUX + web-vitals.js beacon
  • Prioritized backlog of 8–14 perf fixes, ranked by impact ÷ effort
  • Implementation PRs (we write the code, you review & merge)
  • 30-day post-ship verification report with p75 delta
UX

UX Audit

Heuristic + session-replay audit of your conversion-critical flows. We benchmark friction points against your funnel data and hand you a sequenced fix list.

  • 50–80 page audit deck with annotated screenshots
  • Session-replay review (FullStory / Hotjar / LogRocket)
  • Funnel friction map keyed to GA4 / Amplitude events
  • Prioritized fix backlog, sized in eng-days
CW

Core Web Vitals Retainer

Ongoing monitoring + monthly fix cycles. We watch your p75 LCP, INP and CLS, catch regressions inside 48 hours, and ship a fix before the CrUX window closes.

  • 24/7 RUM monitoring with regression alerts
  • Monthly perf-budget review against your release branches
  • Up to 12 eng-hours/month of implementation work
  • Quarterly executive report with revenue attribution
FE

Full Optimization Engagement

End-to-end six-week program combining perf, UX and conversion work. For teams who want one accountable partner across the entire optimization surface.

  • Everything in Performance Sprint + UX Audit
  • A/B test design and instrumentation for top 3 hypotheses
  • Dedicated Slack channel + twice-weekly working sessions
  • Hand-off doc + 60-day post-engagement support window

A diagnostic process built by engineers, not marketers.

We treat your site like a system under load. Each step has explicit inputs, explicit outputs, and a tool stack we'll happily defend in a code review.

1

Measure

Pull 28 days of field data from CrUX, plus your existing RUM if you have one. Establish p75 baselines for LCP, INP, CLS, TTFB across device class and template.

CrUX API · web-vitals.js · BigQuery
2

Profile

Reproduce in a throttled Chrome profile (Slow 4G, 4× CPU). Capture long tasks, layout shifts, render-blocking chains. Cross-reference with synthetic Lighthouse runs.

DevTools · Lighthouse CI · WebPageTest
3

Hypothesize

Rank candidate fixes by estimated impact on p75 LCP/INP divided by eng-days. We size each one against a perf budget and pick the top 8–14 for the sprint.

Linear · Notion · Calibre budgets
4

Ship

Branch, code, PR. Each PR includes a Lighthouse CI gate, a bundle-size diff, and a written hypothesis. Your team reviews and merges on its normal cadence.

GitHub · Lighthouse CI · bundlewatch
5

Verify

Wait one CrUX window (28 days) and pull field data again. We report the delta against the original baseline, attribute revenue impact, and flag any regressions.

CrUX · GA4 · custom SQL

Real production sites, real field-data deltas.

No client logos here — most of our work is under NDA — but every metric below is verified in the client's RUM dashboard, not a Lighthouse run on a fresh laptop.

Shopify Plus · DTC Apparel

Cart-to-checkout LCP halved on mobile

p75 LCP
4.8s
2.1s
Conv. rate
2.1%
2.7%

Hydrogen storefront with a 480KB hero image, blocking Klaviyo script in <head>, and a font-loading strategy that swapped twice. We shipped responsive AVIF, deferred Klaviyo to interaction, and inlined the critical font subset. The 0.6pt conversion lift translates to meaningful six-figure annual revenue at their volume.

2-week sprint · shipped Feb 2026
B2B SaaS · Developer Docs

INP fixed across a 1,400-page docs site

p75 INP
412ms
148ms
Bounce
61%
48%

Docusaurus build with a heavyweight search index hydrating on every page. We replaced client-side Algolia hydration with a deferred web-worker load, code-split the syntax highlighter by language, and rebuilt the sidebar with CSS-only collapse. INP dropped below the 200ms "good" threshold across all geographies inside one CrUX window.

3-week sprint · shipped Nov 2025
Independent Media · Long-form Publication

Ad-loaded article pages cut CLS 84%

p75 CLS
0.38
0.06
Ad RPM lift
baseline
+28%

A 12-year-old Next.js publication with GAM ad slots that reflowed three times per article load. We reserved aspect-ratio boxes for every slot, moved the consent banner out of the critical render path, and rebuilt the related-articles widget as a server component. Reader session time up 18%, ad RPM up 28%.

4-week engagement · shipped Aug 2025

Every metric, every threshold, in writing.

We track the same fourteen signals on every engagement. Targets are field-data p75 unless noted — synthetic numbers are for debugging, not for grading the work.

Metric What it measures Good threshold Tool / source
LCP Largest Contentful Paint — time to hero element < 2.5s CrUX · web-vitals.js
INP Interaction to Next Paint — input responsiveness p98 < 200ms CrUX · web-vitals.js
CLS Cumulative Layout Shift — visual stability over session < 0.1 CrUX · LayoutShift API
TTFB Time to First Byte — server + edge response time < 800ms Navigation Timing API
FCP First Contentful Paint — first text/image render < 1.8s CrUX · Paint Timing
TBT Total Blocking Time — main-thread work during load < 200ms Lighthouse · DevTools
JS bundle (gz) First-party JavaScript shipped on initial route < 170KB bundlewatch · Calibre
Image weight Total image bytes on viewport-critical path < 500KB WebPageTest · DevTools
Long tasks Main-thread tasks blocking interaction > 50ms < 3 per page Long Tasks API
Bounce rate Single-page sessions, segmented by entry template site-relative GA4 · Amplitude
Conversion Primary goal completion rate, by device class site-relative GA4 · Shopify · Stripe
AOV Average order value — perf often correlates strongly site-relative Shopify · Stripe
Scroll depth % of users hitting 25/50/75/100% scroll on key pages site-relative GA4 events · custom
Rage clicks Repeated clicks on non-responsive elements per session < 1.5% FullStory · LogRocket

What clients actually say after the dust settles.

All quotes from people who reviewed and merged our PRs themselves. Names and companies on request — many engagements are under NDA.

Site Upgrade landed seventeen PRs against our monorepo in two weeks. Every one had a benchmark, a budget, and a Lighthouse CI gate. The team didn't need any handholding — they read our codebase faster than half our new hires.
Priya Raghavan VP Engineering, B2B SaaS (Series C)
Our p75 LCP had been stuck at 4.2s for eighteen months. Emma's team got us to 2.0s in a sprint, and more importantly explained which fix moved the number so we could keep the discipline ourselves. Best money I've spent on the site.
Marcus Lindqvist Head of Product, DTC Skincare
I've worked with three perf consultancies over the years. Site Upgrade is the first one that treated our codebase like a real engineering surface — not a slide deck. They opened PRs against the right branches and let our team review on our own clock.
Hannah Okonkwo Staff Platform Engineer, Media & Publishing

Technical questions, technical answers.

If yours isn't here, email team@siteupgrade.co — Emma replies herself, usually within a business day.

Will you slow down our dev velocity?

No. We ship in tight branches, raise PRs against your repo, and gate every change on a perf budget you control. Your team reviews and merges on its own cadence. We've never blocked a client release — and several clients have told us our PRs are cleaner than their average internal one because every change carries an explicit hypothesis and a measured delta.

Do you work with our existing stack?

Yes. We have shipped production work against Next.js, Remix, Astro, Nuxt, SvelteKit, Shopify Hydrogen, Shopify Liquid, WordPress (classic and headless), Webflow, and bespoke Rails / Django / Laravel front-ends. About 80% of the wins are stack-agnostic — image strategy, font loading, third-party deferral — so we rarely have to ask you to migrate anything.

How do you measure success?

Field data first. We pull 75th-percentile LCP, INP and CLS from CrUX and from our own web-vitals.js beacon (we'll instrument it on day one if you don't already have RUM). Business KPIs second: conversion rate, AOV, bounce, scroll depth, and any custom funnel events you already track in GA4 or Amplitude. We report the delta against a 28-day pre-engagement baseline.

Can you work alongside our existing agency?

Absolutely — about 30% of our engagements run in parallel to a design, brand or growth agency. We stay narrowly in the performance and UX optimization lane and document every change with a written hypothesis, so the other team can see exactly what shipped and why. We've co-existed with everyone from boutique brand studios to Big Four consultancies without stepping on toes.

What if our performance is already pretty good?

Then we shift the focus. Sites that already pass Core Web Vitals usually still leak 8–15% of potential revenue to interaction latency under real load, layout instability on logged-in pages, or unmeasured UX friction in the conversion funnel. We'll happily run a free 30-minute audit and tell you honestly whether there's enough headroom to be worth a sprint.

Do you handle the dev work or just write a report?

We do the work. Our small dev team writes the code, opens the PR, and stays on the engagement until field data confirms the fix landed — typically inside 14 days of merge. Reports are an output, never the deliverable. If you want a report-only engagement, we'll happily refer you to one of the larger audit shops that specialize in that.

Send us your URL.

We'll run a free 30-minute audit, pull your CrUX data, and tell you honestly whether a sprint is worth your money. No deck, no upsell — just a Loom walkthrough of what we'd ship and why.

Fixed price, no surprises — figured out on the intro call.