Compress the images harder, hold the cards still, drop duplicate requests

Performancekamo-marketing
Shipped
August 20, 2026 at 1:14 AM UTC
Author
Kamo
Commit
483ffe5

Images. Every quality setting on the page goes down a step, and the allow-list in next.config.ts goes to [30, 50] so nothing can quietly ask for more: hero background (LCP) 40 -> 30 21,959 -> 6,635 bytes at the 750px rung section backdrops 75 -> 50 hero video poster 50 -> 30 Cards. The feature cards and the pricing cards no longer move under the pointer. The feature cards were wrapped in three separate effects — MagneticCard tilting it, HoverMorph rounding its corners — on a card whose entire job is to be clicked. It read as the page backing away from the pointer. Pricing3DCard was doing the same tilt on the plan cards. All four wrappers are gone; the colour and border change on hover is enough to say a card is live. wrappers were its last consumers — the library is no longer downloaded by anything on this page, on any device. Requests. Three separate `rel="icon"` links were being emitted: Next already serves and links app/favicon.ico, so the second `/favicon/favicon.ico` in the metadata was a duplicate request for the same bytes under a different path. And the two preconnects to theme.kamocrm.com opened two sockets rather than one — a CORS-mode connection cannot serve a non-CORS request, so the anonymous one was never reused by the thing that actually matters, which is the theme stylesheet. One socket now, for the request that is on the critical path. The logo is rounded to whole units instead of one decimal: 22,902 -> 15,825 bytes gzip, on a file that is `<link rel="preload" as="image">` in the head. At the largest size it is ever drawn — 160px across a 3503-unit space — that is a worst-case error of 0.046 of a CSS pixel. Not fixed, and worth writing down so it is not chased again: Lighthouse's ~41 KiB of "unused JavaScript" is Next's own `polyfill-nomodule.js`, verified byte-identical to the copy in node_modules. It cannot be aliased away the way its `polyfill-module` twin was — nothing in Next's JavaScript imports it, only webpack-config.js names the file, and this build uses Turbopack, which injects it from the Rust side where no resolve alias reaches. It ships with a `noModule` attribute, so no browser capable of rendering a Tailwind v4 page ever fetches or executes it. The report is counting bytes nobody downloads.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing