What we do

Capability 01 of 10Built for day 90

Fast on the phone in your customer’s hand, not just on launch day.

Web, mobile, and product apps built for real usage, not just launch day. Performance budgets, accessibility and real-user monitoring are built in from the first sprint, so what is fast in the demo stays fast on a mid-range phone ninety days later.

Illustration: the same “Your platform” product page shown on a desktop browser, a tablet and a phone, each laid out for its screen. Field data at the 75th percentile is good on all three: desktop LCP 1.2 seconds, INP 60 milliseconds, CLS 0.01; tablet LCP 1.7 seconds, INP 110 milliseconds, CLS 0.02; phone on a mid-range Android over 4G LCP 1.9 seconds, INP 140 milliseconds, CLS 0.04. Values are illustrative.

Typical first release
8–16 weeks to first release
Platforms
Web · iOS · Android
Standard
Core Web Vitals in CI

01 · Lab vs fieldp75 LCP · mobile · 90 days after launch

Launch day is a lab score. Day 90 is the truth.

A site can score 98 on a fast laptop and still be poor for the people who use it. Tags, video and scripts arrive one reasonable request at a time. We judge the work by field data at the 75th percentile, and budgets in CI stop the drift before customers feel it.

RUM · Your platform · /product/* · mobile Illustrative

p75 LCPLargest Contentful Paint, seconds, per day

Line chart, illustrative. Over the 90 days after launch, an unmanaged site’s p75 LCP on mobile rises from 2.2 to 5.1 seconds, stepping up at each event listed below and ending in the poor band. A site with performance budgets in CI stays between 2.1 and 2.5 seconds, inside the good band.

Unmanaged5.1 sPoor

Budgeted in CI2.1 sGood

  1. 1Day 12

    Marketing tags added

    Unmanaged +0.5 s

    Loaded after consent · +0.1 s

  2. 2Day 34

    Autoplay hero video

    Unmanaged +0.9 s

    Budget failed the PR · poster image shipped

  3. 3Day 58

    Client-side A/B test script

    Unmanaged +0.5 s

    Moved to the edge · no client script

  4. 4Day 77

    Chat widget on every page

    Unmanaged +0.5 s

    Loads on first interaction

A woman outdoors among trees, reading something on her phone
Real deviceMid-range Android · 4G, two bars
A man walking a dog along a wet cobbled street while checking his phone
Real conditionsOne hand, rain, the network switching

Field data

Judged at the 75th percentile

Core Web Vitals are assessed on real page loads: a page is good when at least 75% of visits are good. The Chrome UX Report publishes that field data over a rolling 28 days; our own real-user monitoring adds every template, device class and release.

Responsiveness

INP replaced FID in March 2024

Interaction to Next Paint became a Core Web Vital on 12 March 2024. It measures the latency of interactions across the whole visit, not only the first, so heavy JavaScript that looked fine at launch now shows. Good is 200 ms or less.

Budgets

Budgets fail the build, not the launch

Lighthouse CI assertions and bundle-size limits run on every pull request. A new tag, video or script that breaks the budget cannot merge until it is deferred, compressed or removed, and real-user alerts watch p75 after each release.

02 · What we buildSix surfaces · one release train

Six things we build. Every one measured after launch.

Each starts from the same foundations: a design system in code, budgets in CI, accessibility checks and real-user monitoring from the first release. The surface changes; the standard does not.

  • 01

    Marketing & corporate websites

    Server-rendered or static sites on a headless CMS, with structured content, preview links for editors and edge caching that holds as pages multiply.

    Next.js · Astro · headless CMS
  • 02

    Web applications & portals

    Customer portals, dashboards and SaaS products with typed APIs, role-based access and state that survives unreliable networks.

    React · Vue · TypeScript
  • 03

    Native & cross-platform mobile apps

    Native iOS and Android, or one codebase with Flutter or React Native, chosen on evidence: device APIs, offline needs and team skills.

    Flutter · React Native · Swift · Kotlin
  • 04

    Commerce storefronts

    Shopify or headless storefronts where search, product pages and checkout are tuned for the slowest phone in the market, not the fastest.

    Shopify · headless · payments
  • 05

    Progressive web apps & offline-first

    Installable web apps with service workers, background sync and a local queue, so field teams keep working when the signal drops.

    Service workers · IndexedDB
  • 06

    Design systems in code

    Tokens and components shared by web and mobile, documented in Storybook and tested for accessibility on every change.

    Storybook · tokens · Figma

03 · Field testInteractive · illustrative model

Turn the optimisations on. Watch the page arrive sooner.

Pick a device and a network, then switch on the work that goes into every build. The filmstrip shows when the page paints, the gauges score it against the Core Web Vitals thresholds, and the log records what each change bought.

field-test · Your platform · /shop/stoneware Your settings Illustrative model

Device class

Network

Optimisations6 of 6 on

Filmstrip · one frame every 0.6 s

LCPLargest Contentful Paint

2.1 sGood

INPInteraction to Next Paint

160 msGood

CLSCumulative Layout Shift

0.03Good

Page weight0.93 MB

  • Images 430 KB
  • JavaScript 250 KB
  • Third-party 0 KB
  • Fonts 70 KB
  • CSS 120 KB
  • HTML 60 KB

Server wait (TTFB)590 ms

First Contentful Paint1.2 s

Est. gCO2e per view0.33 g

What changednewest first

  1. Defer third-party scripts onLCP 2.2 → 2.1 s · INP 240 → 160 ms · CLS 0.08 → 0.03 · 1.23 → 0.93 MB
  2. Edge caching (CDN) onLCP 2.7 → 2.2 s
  3. Code-splitting & island hydration onLCP 3.9 → 2.7 s · INP 400 → 240 ms · 2.08 → 1.23 MB
  4. Server rendering + streaming onLCP 4.9 → 3.9 s · INP 420 → 400 ms · CLS 0.09 → 0.08
  5. Font subsetting + font-display onLCP 5.2 → 4.9 s · CLS 0.14 → 0.09 · 2.33 → 2.08 MB
  6. Responsive AVIF images + srcset onLCP 5.8 → 5.2 s · CLS 0.27 → 0.14 · 4.10 → 2.33 MB
  7. Baseline · Low-end Android · Slow 4GLCP 5.8 s · INP 420 ms · CLS 0.27 · 4.10 MB

An illustrative model, not a measurement of any site. Thresholds are Google’s Core Web Vitals, judged at p75: good is LCP ≤ 2.5 s, INP ≤ 200 ms and CLS ≤ 0.1; poor is above 4 s, 500 ms and 0.25. Emissions use the Sustainable Web Design model’s v3 coefficients (0.81 kWh per GB, 442 gCO2e per kWh global average grid) for a first view with no caching.

Let’s build what happens next.

Tell us what you’re building. We’ll answer straight.

Book a discovery call