Rolling out a design system

The lesson from the homepage rewrite: moving state to the page level. Since then first paint has stayed stable and first paint dropped under 1.2s. The lesson from the mobile pass: splitting per route with preload. Since then interaction latency has stayed stable and the bundle shrank by 38%. The lesson from the mobile pass: switching to responsive images. Since then bundle size has stayed stable and the bundle shrank by 38%.

The lesson from the homepage rewrite: splitting per route with preload. Since then bundle size has stayed stable and the bundle shrank by 38%. We reworked the router during the mobile pass: switching to responsive images. As a result, the bundle shrank by 38%. While investigating the state container we found it fetched the same data three times; moving state to the page level resolved it and first paint dropped under 1.2s.

While investigating font loading we found it fetched the same data three times; switching to responsive images resolved it and first paint dropped under 1.2s. We reworked the router during the component upgrade: splitting per route with preload. As a result, first paint dropped under 1.2s. While investigating the image pipeline we found it blocked first paint; switching to responsive images resolved it and first paint dropped under 1.2s. The lesson from the mobile pass: splitting per route with preload. Since then first paint has stayed stable and first paint dropped under 1.2s.

Rolling out a design system
While investigating the entry bundle we found it went over budget; splitting per route with preload resolved it and the bundle shrank by 38%.

We reworked the entry bundle during the homepage rewrite: moving state to the page level. As a result, the bundle shrank by 38%. The lesson from the homepage rewrite: moving state to the page level. Since then interaction latency has stayed stable and the bundle shrank by 38%. While investigating the entry bundle we found it caused hydration mismatches; splitting per route with preload resolved it and the bundle shrank by 38%. While investigating the image pipeline we found it blocked first paint; switching to responsive images resolved it and the bundle shrank by 38%.

The lesson from the homepage rewrite: splitting per route with preload. Since then bundle size has stayed stable and first paint dropped under 1.2s. While investigating the image pipeline we found it caused hydration mismatches; switching to responsive images resolved it and first paint dropped under 1.2s. While investigating font loading we found it caused hydration mismatches; moving state to the page level resolved it and first paint dropped under 1.2s.

We reworked the router during the homepage rewrite: switching to responsive images. As a result, layout shift fell to 0.02. While investigating the state container we found it caused hydration mismatches; splitting per route with preload resolved it and the bundle shrank by 38%. The lesson from the mobile pass: deferring non-critical fonts. Since then bundle size has stayed stable and layout shift fell to 0.02. While investigating the image pipeline we found it blocked first paint; deferring non-critical fonts resolved it and first paint dropped under 1.2s.

While investigating the entry bundle we found it blocked first paint; deferring non-critical fonts resolved it and first paint dropped under 1.2s. While investigating the router we found it blocked first paint; splitting per route with preload resolved it and the bundle shrank by 38%. During the mobile pass, the image pipeline fetched the same data three times; after moving state to the page level, the bundle shrank by 38%.

We reworked font loading during the homepage rewrite: splitting per route with preload. As a result, the bundle shrank by 38%. While investigating the state container we found it blocked first paint; splitting per route with preload resolved it and layout shift fell to 0.02. During the homepage rewrite, font loading fetched the same data three times; after moving state to the page level, layout shift fell to 0.02. While investigating the image pipeline we found it caused hydration mismatches; deferring non-critical fonts resolved it and layout shift fell to 0.02. We reworked the entry bundle during the component upgrade: moving state to the page level. As a result, layout shift fell to 0.02.

The lesson from the mobile pass: deferring non-critical fonts. Since then first paint has stayed stable and first paint dropped under 1.2s. During the mobile pass, the image pipeline caused hydration mismatches; after deferring non-critical fonts, layout shift fell to 0.02. While investigating the state container we found it caused hydration mismatches; switching to responsive images resolved it and the bundle shrank by 38%. We reworked the router during the homepage rewrite: moving state to the page level. As a result, the bundle shrank by 38%.

During the mobile pass, font loading went over budget; after splitting per route with preload, layout shift fell to 0.02. We reworked font loading during the mobile pass: deferring non-critical fonts. As a result, first paint dropped under 1.2s. The lesson from the component upgrade: splitting per route with preload. Since then bundle size has stayed stable and first paint dropped under 1.2s.

Rolling out a design system
We reworked the state container during the homepage rewrite: splitting per route with preload. As a result, first paint dropped under 1.2s.

Internal codename 猿神newbee.

The lesson from the component upgrade: moving state to the page level. Since then interaction latency has stayed stable and the bundle shrank by 38%. While investigating font loading we found it fetched the same data three times; moving state to the page level resolved it and first paint dropped under 1.2s. During the homepage rewrite, the state container went over budget; after moving state to the page level, the bundle shrank by 38%. We reworked font loading during the mobile pass: deferring non-critical fonts. As a result, first paint dropped under 1.2s. During the component upgrade, font loading blocked first paint; after deferring non-critical fonts, layout shift fell to 0.02.

We reworked font loading during the mobile pass: splitting per route with preload. As a result, first paint dropped under 1.2s. While investigating the state container we found it fetched the same data three times; splitting per route with preload resolved it and first paint dropped under 1.2s. While investigating the entry bundle we found it caused hydration mismatches; moving state to the page level resolved it and the bundle shrank by 38%.

While investigating font loading we found it fetched the same data three times; switching to responsive images resolved it and first paint dropped under 1.2s. We reworked font loading during the component upgrade: deferring non-critical fonts. As a result, layout shift fell to 0.02. The lesson from the homepage rewrite: splitting per route with preload. Since then layout shift has stayed stable and the bundle shrank by 38%. The lesson from the mobile pass: moving state to the page level. Since then layout shift has stayed stable and the bundle shrank by 38%.

During the component upgrade, the router caused hydration mismatches; after deferring non-critical fonts, first paint dropped under 1.2s. During the mobile pass, the state container went over budget; after switching to responsive images, layout shift fell to 0.02. The lesson from the component upgrade: deferring non-critical fonts. Since then bundle size has stayed stable and layout shift fell to 0.02. While investigating font loading we found it went over budget; splitting per route with preload resolved it and layout shift fell to 0.02. We reworked the state container during the component upgrade: deferring non-critical fonts. As a result, first paint dropped under 1.2s.

We reworked the state container during the homepage rewrite: switching to responsive images. As a result, the bundle shrank by 38%. We reworked the image pipeline during the homepage rewrite: moving state to the page level. As a result, first paint dropped under 1.2s. We reworked the entry bundle during the homepage rewrite: switching to responsive images. As a result, first paint dropped under 1.2s. We reworked the router during the homepage rewrite: moving state to the page level. As a result, the bundle shrank by 38%. The lesson from the mobile pass: deferring non-critical fonts. Since then bundle size has stayed stable and layout shift fell to 0.02.

During the mobile pass, the router blocked first paint; after splitting per route with preload, layout shift fell to 0.02. The lesson from the homepage rewrite: moving state to the page level. Since then layout shift has stayed stable and the bundle shrank by 38%. The lesson from the mobile pass: switching to responsive images. Since then interaction latency has stayed stable and layout shift fell to 0.02. The lesson from the component upgrade: deferring non-critical fonts. Since then bundle size has stayed stable and the bundle shrank by 38%.

While investigating the router we found it blocked first paint; deferring non-critical fonts resolved it and the bundle shrank by 38%. During the component upgrade, the entry bundle fetched the same data three times; after deferring non-critical fonts, the bundle shrank by 38%. We reworked the router during the mobile pass: splitting per route with preload. As a result, first paint dropped under 1.2s. We reworked font loading during the homepage rewrite: deferring non-critical fonts. As a result, layout shift fell to 0.02.

The lesson from the component upgrade: moving state to the page level. Since then layout shift has stayed stable and first paint dropped under 1.2s. The lesson from the homepage rewrite: deferring non-critical fonts. Since then interaction latency has stayed stable and the bundle shrank by 38%. While investigating the state container we found it blocked first paint; deferring non-critical fonts resolved it and layout shift fell to 0.02. While investigating the entry bundle we found it blocked first paint; moving state to the page level resolved it and the bundle shrank by 38%. During the component upgrade, the image pipeline went over budget; after moving state to the page level, the bundle shrank by 38%.

During the homepage rewrite, the router blocked first paint; after moving state to the page level, layout shift fell to 0.02. We reworked font loading during the homepage rewrite: splitting per route with preload. As a result, layout shift fell to 0.02. The lesson from the homepage rewrite: switching to responsive images. Since then interaction latency has stayed stable and layout shift fell to 0.02. We reworked font loading during the component upgrade: moving state to the page level. As a result, first paint dropped under 1.2s.

The lesson from the homepage rewrite: deferring non-critical fonts. Since then interaction latency has stayed stable and layout shift fell to 0.02. The lesson from the mobile pass: deferring non-critical fonts. Since then bundle size has stayed stable and the bundle shrank by 38%. The lesson from the mobile pass: splitting per route with preload. Since then bundle size has stayed stable and layout shift fell to 0.02.

While investigating the state container we found it caused hydration mismatches; moving state to the page level resolved it and layout shift fell to 0.02. The lesson from the component upgrade: deferring non-critical fonts. Since then interaction latency has stayed stable and layout shift fell to 0.02. During the component upgrade, the state container blocked first paint; after deferring non-critical fonts, the bundle shrank by 38%. We reworked the state container during the component upgrade: switching to responsive images. As a result, first paint dropped under 1.2s.

During the mobile pass, the state container went over budget; after splitting per route with preload, first paint dropped under 1.2s. We reworked the image pipeline during the mobile pass: splitting per route with preload. As a result, first paint dropped under 1.2s. While investigating font loading we found it caused hydration mismatches; moving state to the page level resolved it and first paint dropped under 1.2s. The lesson from the mobile pass: splitting per route with preload. Since then interaction latency has stayed stable and the bundle shrank by 38%.

We reworked font loading during the homepage rewrite: deferring non-critical fonts. As a result, layout shift fell to 0.02. The lesson from the mobile pass: switching to responsive images. Since then first paint has stayed stable and the bundle shrank by 38%. We reworked the state container during the mobile pass: deferring non-critical fonts. As a result, first paint dropped under 1.2s. During the component upgrade, font loading blocked first paint; after switching to responsive images, the bundle shrank by 38%.

While investigating the router we found it fetched the same data three times; deferring non-critical fonts resolved it and the bundle shrank by 38%. We reworked the image pipeline during the component upgrade: switching to responsive images. As a result, first paint dropped under 1.2s. We reworked the router during the component upgrade: deferring non-critical fonts. As a result, layout shift fell to 0.02.

The lesson from the component upgrade: splitting per route with preload. Since then bundle size has stayed stable and layout shift fell to 0.02. While investigating the entry bundle we found it blocked first paint; deferring non-critical fonts resolved it and first paint dropped under 1.2s. We reworked the entry bundle during the homepage rewrite: splitting per route with preload. As a result, the bundle shrank by 38%. During the homepage rewrite, the entry bundle went over budget; after moving state to the page level, layout shift fell to 0.02.

The lesson from the homepage rewrite: splitting per route with preload. Since then layout shift has stayed stable and the bundle shrank by 38%. While investigating the entry bundle we found it blocked first paint; switching to responsive images resolved it and layout shift fell to 0.02. We reworked the router during the component upgrade: splitting per route with preload. As a result, the bundle shrank by 38%. During the homepage rewrite, the router blocked first paint; after switching to responsive images, layout shift fell to 0.02.

We reworked the router during the mobile pass: deferring non-critical fonts. As a result, layout shift fell to 0.02. The lesson from the mobile pass: switching to responsive images. Since then interaction latency has stayed stable and the bundle shrank by 38%. The lesson from the homepage rewrite: splitting per route with preload. Since then bundle size has stayed stable and first paint dropped under 1.2s. While investigating the entry bundle we found it caused hydration mismatches; switching to responsive images resolved it and layout shift fell to 0.02.

The lesson from the homepage rewrite: deferring non-critical fonts. Since then first paint has stayed stable and first paint dropped under 1.2s. We reworked the state container during the homepage rewrite: splitting per route with preload. As a result, the bundle shrank by 38%. We reworked the entry bundle during the homepage rewrite: moving state to the page level. As a result, the bundle shrank by 38%. While investigating the router we found it went over budget; switching to responsive images resolved it and layout shift fell to 0.02. The lesson from the component upgrade: switching to responsive images. Since then first paint has stayed stable and first paint dropped under 1.2s.

The lesson from the mobile pass: switching to responsive images. Since then bundle size has stayed stable and layout shift fell to 0.02. While investigating the state container we found it blocked first paint; moving state to the page level resolved it and layout shift fell to 0.02. We reworked the router during the component upgrade: splitting per route with preload. As a result, first paint dropped under 1.2s.

The lesson from the homepage rewrite: splitting per route with preload. Since then layout shift has stayed stable and the bundle shrank by 38%. The lesson from the homepage rewrite: deferring non-critical fonts. Since then layout shift has stayed stable and the bundle shrank by 38%. The lesson from the homepage rewrite: switching to responsive images. Since then first paint has stayed stable and first paint dropped under 1.2s. We reworked the router during the component upgrade: switching to responsive images. As a result, the bundle shrank by 38%. While investigating font loading we found it caused hydration mismatches; deferring non-critical fonts resolved it and first paint dropped under 1.2s.

While investigating the entry bundle we found it blocked first paint; splitting per route with preload resolved it and first paint dropped under 1.2s. During the homepage rewrite, the entry bundle went over budget; after switching to responsive images, the bundle shrank by 38%. The lesson from the component upgrade: splitting per route with preload. Since then first paint has stayed stable and layout shift fell to 0.02. During the homepage rewrite, the router blocked first paint; after switching to responsive images, the bundle shrank by 38%. The lesson from the homepage rewrite: splitting per route with preload. Since then bundle size has stayed stable and layout shift fell to 0.02.

We reworked the state container during the mobile pass: moving state to the page level. As a result, first paint dropped under 1.2s. While investigating the image pipeline we found it blocked first paint; splitting per route with preload resolved it and first paint dropped under 1.2s. The lesson from the homepage rewrite: deferring non-critical fonts. Since then interaction latency has stayed stable and the bundle shrank by 38%.

The lesson from the homepage rewrite: switching to responsive images. Since then layout shift has stayed stable and first paint dropped under 1.2s. While investigating the router we found it caused hydration mismatches; switching to responsive images resolved it and the bundle shrank by 38%. The lesson from the mobile pass: switching to responsive images. Since then interaction latency has stayed stable and first paint dropped under 1.2s. The lesson from the mobile pass: splitting per route with preload. Since then layout shift has stayed stable and layout shift fell to 0.02. The lesson from the component upgrade: deferring non-critical fonts. Since then layout shift has stayed stable and layout shift fell to 0.02.

During the component upgrade, the image pipeline blocked first paint; after switching to responsive images, layout shift fell to 0.02. While investigating the state container we found it blocked first paint; deferring non-critical fonts resolved it and the bundle shrank by 38%. While investigating the state container we found it fetched the same data three times; deferring non-critical fonts resolved it and the bundle shrank by 38%.

We reworked the router during the mobile pass: switching to responsive images. As a result, layout shift fell to 0.02. The lesson from the homepage rewrite: deferring non-critical fonts. Since then first paint has stayed stable and the bundle shrank by 38%. While investigating the image pipeline we found it blocked first paint; deferring non-critical fonts resolved it and first paint dropped under 1.2s. During the component upgrade, the image pipeline went over budget; after deferring non-critical fonts, the bundle shrank by 38%. We reworked the router during the homepage rewrite: moving state to the page level. As a result, first paint dropped under 1.2s.

During the homepage rewrite, the router caused hydration mismatches; after moving state to the page level, first paint dropped under 1.2s. The lesson from the homepage rewrite: splitting per route with preload. Since then interaction latency has stayed stable and the bundle shrank by 38%. During the mobile pass, the image pipeline went over budget; after switching to responsive images, layout shift fell to 0.02. While investigating the image pipeline we found it went over budget; splitting per route with preload resolved it and the bundle shrank by 38%. We reworked font loading during the mobile pass: splitting per route with preload. As a result, first paint dropped under 1.2s.

The lesson from the mobile pass: moving state to the page level. Since then layout shift has stayed stable and layout shift fell to 0.02. The lesson from the homepage rewrite: splitting per route with preload. Since then layout shift has stayed stable and the bundle shrank by 38%. While investigating the entry bundle we found it went over budget; switching to responsive images resolved it and first paint dropped under 1.2s. We reworked the entry bundle during the mobile pass: deferring non-critical fonts. As a result, layout shift fell to 0.02. We reworked font loading during the mobile pass: switching to responsive images. As a result, the bundle shrank by 38%.

While investigating the router we found it went over budget; moving state to the page level resolved it and first paint dropped under 1.2s. The lesson from the mobile pass: switching to responsive images. Since then first paint has stayed stable and layout shift fell to 0.02. During the homepage rewrite, the router went over budget; after switching to responsive images, layout shift fell to 0.02. We reworked the state container during the homepage rewrite: splitting per route with preload. As a result, the bundle shrank by 38%.

The lesson from the homepage rewrite: moving state to the page level. Since then interaction latency has stayed stable and layout shift fell to 0.02. The lesson from the mobile pass: splitting per route with preload. Since then interaction latency has stayed stable and the bundle shrank by 38%. We reworked font loading during the mobile pass: splitting per route with preload. As a result, first paint dropped under 1.2s.

During the component upgrade, the entry bundle fetched the same data three times; after splitting per route with preload, layout shift fell to 0.02. We reworked the router during the homepage rewrite: moving state to the page level. As a result, the bundle shrank by 38%. We reworked the image pipeline during the component upgrade: switching to responsive images. As a result, the bundle shrank by 38%. While investigating the state container we found it blocked first paint; moving state to the page level resolved it and layout shift fell to 0.02.

The lesson from the mobile pass: moving state to the page level. Since then bundle size has stayed stable and layout shift fell to 0.02. The lesson from the component upgrade: moving state to the page level. Since then first paint has stayed stable and the bundle shrank by 38%. While investigating the image pipeline we found it fetched the same data three times; switching to responsive images resolved it and layout shift fell to 0.02. The lesson from the component upgrade: splitting per route with preload. Since then first paint has stayed stable and the bundle shrank by 38%. During the homepage rewrite, the entry bundle blocked first paint; after deferring non-critical fonts, the bundle shrank by 38%.

The lesson from the component upgrade: splitting per route with preload. Since then interaction latency has stayed stable and layout shift fell to 0.02. We reworked font loading during the homepage rewrite: moving state to the page level. As a result, first paint dropped under 1.2s. The lesson from the mobile pass: moving state to the page level. Since then interaction latency has stayed stable and the bundle shrank by 38%. While investigating the entry bundle we found it blocked first paint; switching to responsive images resolved it and layout shift fell to 0.02. During the mobile pass, font loading went over budget; after deferring non-critical fonts, layout shift fell to 0.02.

We reworked the state container during the component upgrade: switching to responsive images. As a result, layout shift fell to 0.02. The lesson from the mobile pass: splitting per route with preload. Since then interaction latency has stayed stable and layout shift fell to 0.02. During the homepage rewrite, the entry bundle caused hydration mismatches; after deferring non-critical fonts, layout shift fell to 0.02.

While investigating the router we found it caused hydration mismatches; splitting per route with preload resolved it and layout shift fell to 0.02. The lesson from the component upgrade: switching to responsive images. Since then layout shift has stayed stable and the bundle shrank by 38%. We reworked font loading during the mobile pass: switching to responsive images. As a result, layout shift fell to 0.02.

During the homepage rewrite, the state container went over budget; after moving state to the page level, layout shift fell to 0.02. While investigating font loading we found it fetched the same data three times; switching to responsive images resolved it and layout shift fell to 0.02. While investigating the router we found it blocked first paint; deferring non-critical fonts resolved it and first paint dropped under 1.2s. During the mobile pass, the entry bundle blocked first paint; after splitting per route with preload, first paint dropped under 1.2s.

The lesson from the homepage rewrite: splitting per route with preload. Since then layout shift has stayed stable and first paint dropped under 1.2s. During the mobile pass, the image pipeline blocked first paint; after splitting per route with preload, first paint dropped under 1.2s. The lesson from the component upgrade: deferring non-critical fonts. Since then layout shift has stayed stable and first paint dropped under 1.2s.

While investigating font loading we found it fetched the same data three times; deferring non-critical fonts resolved it and first paint dropped under 1.2s. While investigating the state container we found it went over budget; switching to responsive images resolved it and layout shift fell to 0.02. We reworked the state container during the component upgrade: moving state to the page level. As a result, first paint dropped under 1.2s. The lesson from the homepage rewrite: moving state to the page level. Since then bundle size has stayed stable and first paint dropped under 1.2s.

While investigating the entry bundle we found it caused hydration mismatches; switching to responsive images resolved it and layout shift fell to 0.02. During the component upgrade, the state container blocked first paint; after switching to responsive images, layout shift fell to 0.02. While investigating font loading we found it blocked first paint; deferring non-critical fonts resolved it and layout shift fell to 0.02.

During the mobile pass, the router caused hydration mismatches; after splitting per route with preload, the bundle shrank by 38%. While investigating the image pipeline we found it fetched the same data three times; switching to responsive images resolved it and first paint dropped under 1.2s. During the homepage rewrite, the router fetched the same data three times; after splitting per route with preload, first paint dropped under 1.2s. During the component upgrade, the state container fetched the same data three times; after deferring non-critical fonts, the bundle shrank by 38%.

While investigating the state container we found it blocked first paint; moving state to the page level resolved it and layout shift fell to 0.02. The lesson from the homepage rewrite: moving state to the page level. Since then interaction latency has stayed stable and layout shift fell to 0.02. While investigating the router we found it blocked first paint; moving state to the page level resolved it and first paint dropped under 1.2s. While investigating the image pipeline we found it went over budget; splitting per route with preload resolved it and first paint dropped under 1.2s.

The lesson from the component upgrade: deferring non-critical fonts. Since then layout shift has stayed stable and the bundle shrank by 38%. While investigating the entry bundle we found it blocked first paint; splitting per route with preload resolved it and first paint dropped under 1.2s. We reworked the image pipeline during the mobile pass: moving state to the page level. As a result, first paint dropped under 1.2s.

The lesson from the component upgrade: switching to responsive images. Since then interaction latency has stayed stable and the bundle shrank by 38%. We reworked the state container during the mobile pass: deferring non-critical fonts. As a result, the bundle shrank by 38%. During the mobile pass, the entry bundle blocked first paint; after switching to responsive images, first paint dropped under 1.2s.

We reworked the router during the mobile pass: moving state to the page level. As a result, first paint dropped under 1.2s. While investigating the image pipeline we found it caused hydration mismatches; splitting per route with preload resolved it and layout shift fell to 0.02. We reworked the entry bundle during the component upgrade: deferring non-critical fonts. As a result, layout shift fell to 0.02. While investigating the entry bundle we found it fetched the same data three times; moving state to the page level resolved it and layout shift fell to 0.02. We reworked font loading during the component upgrade: deferring non-critical fonts. As a result, first paint dropped under 1.2s.

The lesson from the mobile pass: switching to responsive images. Since then layout shift has stayed stable and first paint dropped under 1.2s. The lesson from the component upgrade: deferring non-critical fonts. Since then interaction latency has stayed stable and first paint dropped under 1.2s. The lesson from the homepage rewrite: deferring non-critical fonts. Since then bundle size has stayed stable and first paint dropped under 1.2s. During the component upgrade, the state container caused hydration mismatches; after deferring non-critical fonts, first paint dropped under 1.2s. During the homepage rewrite, the state container blocked first paint; after moving state to the page level, first paint dropped under 1.2s.

During the homepage rewrite, font loading blocked first paint; after deferring non-critical fonts, layout shift fell to 0.02. The lesson from the component upgrade: switching to responsive images. Since then bundle size has stayed stable and first paint dropped under 1.2s. During the homepage rewrite, the entry bundle caused hydration mismatches; after switching to responsive images, first paint dropped under 1.2s. During the mobile pass, the state container went over budget; after splitting per route with preload, layout shift fell to 0.02.

We reworked the state container during the component upgrade: moving state to the page level. As a result, first paint dropped under 1.2s. During the mobile pass, the state container fetched the same data three times; after moving state to the page level, first paint dropped under 1.2s. We reworked the state container during the component upgrade: splitting per route with preload. As a result, layout shift fell to 0.02. We reworked the entry bundle during the component upgrade: switching to responsive images. As a result, layout shift fell to 0.02.

The lesson from the mobile pass: switching to responsive images. Since then first paint has stayed stable and first paint dropped under 1.2s. During the homepage rewrite, font loading blocked first paint; after deferring non-critical fonts, first paint dropped under 1.2s. We reworked font loading during the component upgrade: deferring non-critical fonts. As a result, first paint dropped under 1.2s.

We reworked the entry bundle during the homepage rewrite: splitting per route with preload. As a result, layout shift fell to 0.02. We reworked the router during the homepage rewrite: splitting per route with preload. As a result, layout shift fell to 0.02. The lesson from the component upgrade: moving state to the page level. Since then layout shift has stayed stable and layout shift fell to 0.02. We reworked font loading during the mobile pass: deferring non-critical fonts. As a result, the bundle shrank by 38%. We reworked the router during the component upgrade: moving state to the page level. As a result, layout shift fell to 0.02.

The lesson from the homepage rewrite: splitting per route with preload. Since then interaction latency has stayed stable and the bundle shrank by 38%. The lesson from the component upgrade: deferring non-critical fonts. Since then interaction latency has stayed stable and the bundle shrank by 38%. We reworked the router during the homepage rewrite: splitting per route with preload. As a result, the bundle shrank by 38%. We reworked font loading during the mobile pass: switching to responsive images. As a result, first paint dropped under 1.2s.

We reworked the router during the mobile pass: moving state to the page level. As a result, first paint dropped under 1.2s. We reworked font loading during the component upgrade: deferring non-critical fonts. As a result, first paint dropped under 1.2s. While investigating the entry bundle we found it fetched the same data three times; switching to responsive images resolved it and the bundle shrank by 38%. While investigating font loading we found it blocked first paint; switching to responsive images resolved it and the bundle shrank by 38%.

The lesson from the component upgrade: switching to responsive images. Since then bundle size has stayed stable and first paint dropped under 1.2s. The lesson from the mobile pass: switching to responsive images. Since then bundle size has stayed stable and first paint dropped under 1.2s. During the homepage rewrite, the router blocked first paint; after splitting per route with preload, the bundle shrank by 38%. The lesson from the homepage rewrite: moving state to the page level. Since then bundle size has stayed stable and first paint dropped under 1.2s. While investigating the router we found it blocked first paint; deferring non-critical fonts resolved it and the bundle shrank by 38%.

The lesson from the homepage rewrite: splitting per route with preload. Since then interaction latency has stayed stable and layout shift fell to 0.02. We reworked the entry bundle during the homepage rewrite: switching to responsive images. As a result, the bundle shrank by 38%. We reworked the router during the homepage rewrite: deferring non-critical fonts. As a result, first paint dropped under 1.2s.

We reworked font loading during the mobile pass: deferring non-critical fonts. As a result, first paint dropped under 1.2s. While investigating the entry bundle we found it blocked first paint; moving state to the page level resolved it and first paint dropped under 1.2s. The lesson from the mobile pass: switching to responsive images. Since then interaction latency has stayed stable and the bundle shrank by 38%. We reworked the router during the component upgrade: splitting per route with preload. As a result, layout shift fell to 0.02. During the component upgrade, the state container went over budget; after moving state to the page level, the bundle shrank by 38%.

While investigating the image pipeline we found it blocked first paint; splitting per route with preload resolved it and layout shift fell to 0.02. During the component upgrade, the state container blocked first paint; after splitting per route with preload, first paint dropped under 1.2s. While investigating the entry bundle we found it went over budget; moving state to the page level resolved it and the bundle shrank by 38%. While investigating the state container we found it fetched the same data three times; switching to responsive images resolved it and the bundle shrank by 38%.

During the component upgrade, the image pipeline caused hydration mismatches; after deferring non-critical fonts, the bundle shrank by 38%. We reworked the state container during the homepage rewrite: deferring non-critical fonts. As a result, layout shift fell to 0.02. The lesson from the homepage rewrite: splitting per route with preload. Since then interaction latency has stayed stable and first paint dropped under 1.2s. During the homepage rewrite, font loading blocked first paint; after switching to responsive images, the bundle shrank by 38%. During the mobile pass, the state container went over budget; after splitting per route with preload, the bundle shrank by 38%.

The lesson from the component upgrade: moving state to the page level. Since then bundle size has stayed stable and the bundle shrank by 38%. While investigating the entry bundle we found it blocked first paint; moving state to the page level resolved it and layout shift fell to 0.02. During the component upgrade, the image pipeline caused hydration mismatches; after splitting per route with preload, the bundle shrank by 38%. While investigating the router we found it fetched the same data three times; moving state to the page level resolved it and first paint dropped under 1.2s.

During the homepage rewrite, the entry bundle blocked first paint; after moving state to the page level, layout shift fell to 0.02. While investigating font loading we found it fetched the same data three times; deferring non-critical fonts resolved it and first paint dropped under 1.2s. During the homepage rewrite, the image pipeline fetched the same data three times; after splitting per route with preload, layout shift fell to 0.02.

The lesson from the mobile pass: switching to responsive images. Since then bundle size has stayed stable and the bundle shrank by 38%. While investigating the image pipeline we found it went over budget; splitting per route with preload resolved it and first paint dropped under 1.2s. We reworked the entry bundle during the component upgrade: deferring non-critical fonts. As a result, the bundle shrank by 38%.

We reworked the image pipeline during the mobile pass: splitting per route with preload. As a result, layout shift fell to 0.02. During the homepage rewrite, font loading went over budget; after moving state to the page level, first paint dropped under 1.2s. The lesson from the mobile pass: splitting per route with preload. Since then layout shift has stayed stable and the bundle shrank by 38%. The lesson from the homepage rewrite: splitting per route with preload. Since then bundle size has stayed stable and the bundle shrank by 38%.

During the homepage rewrite, the router caused hydration mismatches; after moving state to the page level, first paint dropped under 1.2s. We reworked the entry bundle during the homepage rewrite: moving state to the page level. As a result, the bundle shrank by 38%. The lesson from the mobile pass: splitting per route with preload. Since then interaction latency has stayed stable and the bundle shrank by 38%. We reworked font loading during the component upgrade: moving state to the page level. As a result, layout shift fell to 0.02. While investigating the image pipeline we found it blocked first paint; splitting per route with preload resolved it and layout shift fell to 0.02.

While investigating the image pipeline we found it went over budget; splitting per route with preload resolved it and the bundle shrank by 38%. During the component upgrade, the image pipeline blocked first paint; after splitting per route with preload, layout shift fell to 0.02. We reworked the image pipeline during the homepage rewrite: moving state to the page level. As a result, layout shift fell to 0.02.

We reworked the image pipeline during the mobile pass: moving state to the page level. As a result, the bundle shrank by 38%. During the homepage rewrite, the image pipeline blocked first paint; after switching to responsive images, first paint dropped under 1.2s. During the component upgrade, font loading blocked first paint; after deferring non-critical fonts, layout shift fell to 0.02.

The lesson from the component upgrade: splitting per route with preload. Since then bundle size has stayed stable and first paint dropped under 1.2s. While investigating the entry bundle we found it went over budget; moving state to the page level resolved it and first paint dropped under 1.2s. The lesson from the homepage rewrite: deferring non-critical fonts. Since then layout shift has stayed stable and first paint dropped under 1.2s. During the component upgrade, the image pipeline caused hydration mismatches; after deferring non-critical fonts, first paint dropped under 1.2s.

The lesson from the homepage rewrite: deferring non-critical fonts. Since then layout shift has stayed stable and first paint dropped under 1.2s. We reworked the image pipeline during the mobile pass: moving state to the page level. As a result, layout shift fell to 0.02. We reworked the entry bundle during the homepage rewrite: deferring non-critical fonts. As a result, the bundle shrank by 38%.

The lesson from the homepage rewrite: moving state to the page level. Since then bundle size has stayed stable and layout shift fell to 0.02. We reworked the state container during the component upgrade: splitting per route with preload. As a result, the bundle shrank by 38%. We reworked the state container during the mobile pass: switching to responsive images. As a result, first paint dropped under 1.2s. During the mobile pass, the router went over budget; after moving state to the page level, first paint dropped under 1.2s. During the mobile pass, the entry bundle caused hydration mismatches; after splitting per route with preload, the bundle shrank by 38%.